2022/01/31

The Business of Expertise: Pattern Matching

今、David C. Baker著、The Business of Expertiseという本を読んでいて、その中でPattern Matchingという概念について書かれている。それがなかなか良い話だった。

Pattern Matching is 何

開発者的にはPattern Matchingと言われたらまぁこういうやつでしょうよというところかと思う。

/.+\.png/.test("my-dog.png") // true

正規表現だったりシェルコマンドでワイルドカードを使ったりなんなりで、文字列を書いたルールにマッチさせる仕組みみたいな。

で、この本で書いてあるのは、The Business of Expertise、無理やり日本語に直すと「専門家のビジネス」には、このPattern Matchingが必要であるとのこと。当然、正規表現を覚えろという話ではなく、もっと広い概念の話をしている。

例えば赤ん坊に、

  • A: アヒルの写真
  • B: アヒルの写真
  • C: ガチョウの写真

を見せたら、Cを指差したりする。これがPattern Matchingであると。与えられた情報にルールを見つけ出し、それを認識するみたいな、そういうことをするぞと。そして、知性というのは本質的にPattern Matchingなんだということも書いてある。

音楽を聞くこと

まぁそれ以降も色々とこの本には書いてあるのだけれど、まずここまでで自分は、あーそうだよなーと思うことがたくさんあった。この例はほぼ無限にある。

例えば音楽を聴くという行為について。誰しも、あらゆる音楽を楽しめるというわけではないんじゃないだろうか。色々聴いていたら、自分がの好みというのが出てくる。それは人それぞれで、例えばなんとなく好きな曲をより選んでいたら、そこにはいつもピアノが使われていた。そうか自分はピアノの音色が好きなんだみたいな。そして、より突っ込んで聴いていたら、どうやらピアノだけでは響かないらしい。ピアノの曲でかつ、同じフレーズが何度も繰り返されるような曲が好きであることに気づいた……みたいな。

結果的にそうか自分はこういう音楽が好きで、これはジャズというジャンルで呼ばれているのだとか、そういう発見というか、探求というか。そういうのって音楽を好きで聞いている人であればみんなやってると思うのだけれど。あーそうか、これもこの人のいうPattern Matchingだな?と。

ラーメン

自分はラーメンが好きである。そういうラーメンが好きみたいな人は、ラーメンなら何でも良いんだろと言われれば全然そういうことでは無かったりする。自分なりに好きなラーメンにはルールがあって、それは例えばトンコツ系が苦手であるとか、魚介ダシが使われているのが好きだとか、麺はこういう食感のものが好きだとか。

そういうのを続けていると、いろんなラーメンを食べていると、このラーメンは家系を意識しているが味が薄く、ベースとしては中華屋のあっさりしたラーメンであり、家系の味とはかなり違う。家系が好きな自分としては、好みかと言われるとだいぶ違う…… みたいなことを感じたりするようになる。ところがそういうラーメンをあんまり食べないうちの母親みたいな人間から言わせると、みんな同じラーメンで大した違いは無いとか。

まぁそんなこんなで、ラーメンを好きでたくさん食べてる人も、ラーメンでPattern Matchingしてるよな?

写真

写真を撮ることもPattern Matchingかと思った。これは自分にとってなのだが、自分はなんか写真を撮ってinstagramにアップするというのを繰り返していたら、なんだか電線ばかり撮っていたことに気づいた。そういうのを続けていたら、好きな感じの電線……それは角度だとか切り取り方だとかなのだけれど、そういうのがあることを認識できてきた。

別にPattern Matchingという概念を知らなくとも、自分はPattern Matchingを繰り返していた。そして、これを続ければ続けるほど、そのPattern Matchingが洗練されてくる感覚というのが、この本を読んで示された気がした。

仕事

仕事についてもそうで、例えばデザインであったら、何かアプリのUIを作るみたいな話があったとして。そのためにはどういうUIがそのプロジェクトに適しているのかみたいな決定は、過去の経験だったり見てきたものからPattern Matchingして、得られた答えが形になるみたいな感じかと思う。

プログラムであれば、ああ、こういうことをしたいんであれば、なんちゃらパターンで書くのが適しているとかどうとか。当然1回だけそれをやっただけでは分かりっこ無いが、これも経験や知識から最適な解が導けるという意味でPattern Matchingっぽい。CSS設計みたいな話もそういう要素はかなりある。

もっと広い話で、こういうプロジェクトの要件の場合、こういうクライアントの場合は、こういう進め方が適しているとか、こういう見積もりの仕方が合っているとか、そのあたりにもPattern Matchingを感じる。

Be a Pattern Matcher

みたいなのを考えていたら、デザインをするみたいなことは基本的に自分のPattern Matchingの能力を行使する行為であり、好きな要素を寄せ集めて作るというので良いのだというのが腑に落ちた感じがした。しかし、その行為は誰かしらのまるっきりコピーにはならず、そこについても自分がこれが良い!と感じたこと、自分の完成でフィルタした要素の集まりになるなーみたいな。

この takazudo.me というWebサイトのデザインは、大して時間をかけずに終えることができた。だいたいこういう自分が勝手に好きにするみたいな場合において、自分は無限に悩んで進まないみたいな事が多い。でも今回は、あーこれは自分の好きそうなやつでPattern Matchingして、それを集めて形にすれば良いんだなという感覚になっていた。

結果、何か参考になりそうなWebサイトをDribbleでササっと眺めつつ、タグとかつけたいけどどーしようかなーと、適当にそういう機能が実装されているサービスなんかを見て、余白の設計みたいなところは今まで仕事でやってきたやり方で実装するみたいな、なんかそういうので終えることができた感じがする。

洗練されている人は意識せずにPattern Matchingしているんではないかと思う。たぶん。自分もそうありたい。