プログラミングとレシピの関係

数日前に、ウェブのどこかで「プログラム(コンピュータの)というのはレシピのようなものだ」というようなくだりを読んだのですが、ああ、そうだ、と思ったので書き留めておこうと思いました。
私はプログラマーじゃないのでエラそうなことはかけないのですが、例えるなら、私はチキンを育てたりすることはできないけれど売ってあるのを買ってくることはできる。チキンに塩こしょうするのは別に誰のオリジナルでもないけど、しなくてもいいことを考えると、「塩こしょうする」というステップは私のレシピの中では独自のものともいえなくもない。


何かのレシピでチキンとトマトとバジルの組み合わせがおいしいって書いてあったけど、バジルがないのでパセリにしてにんにくを入れることにする、これはオリジナルかしら?チキンとガーリックなんて誰でもやってるけど、やらなくてもいいことを考えるとオリジナルじゃないこともない。しかもトマトも入れるしね。
焼いているうちにちょっと乾きすぎてきた気がするのでワインを入れよう、シェリー酒の方がいいかな、ああ、シェリー酒の方が甘くてよかった、今度からはシェリー酒だけにしよう。
などなど試行錯誤をしたあとに、自分の「オリジナル」レシピができるわけです。そして他を探してみると、わりとそっくりなレシピがある。でもちょっとしたところで違うのでやっぱり自分のはオリジナルだと思う。でもちょっとしたところを気にしない人が見ると、そんなのはどうでもいい、どっちも同じに見える。美味しければいいし。
割と自由度の高いプログラミング言語は、それなりにたくさんのバリエーションがあってアイディア次第でびっくりするほど楽しいものや実用的なものが作れたりするけれど、それでもやっぱり限界があるんですね。要は「定義」の問題なんですけど、例えば”last”という言葉をどう定義するかという部分で、私は昨日使っていた言語でかなりつまづきました。その言語は”last”を「最新の」というような意味で使っているのですが、レシピのように組み合わせていくうちに、それは定義でカチカチになっていくのです。
私は、Xという前提で、Yというフィルターをかけた、「最新の」もの、という指定をしたかったのですが、どんな順番で書いても”last”という言葉があるだけで、それは「最新の」XにYというフィルターがかかった状態になるのです。いやぁ、自分でもこれをあとで読み返して意味がわかるかどうか分かりませんが。
例えば、メールが一番簡単なので、メールをたとえにだすとすると、私が、例えば3/1以降に来たメールで、私がリプライをしたものだけの中で、一番最新のメールを20件見たかったとします。でもその言語だと、「一番最新の20件で」3/1以降に来たメールで私がリプライをしたもの、という解釈をするわけです。違いが分かります?前者だと、いつそれをやってもだいたい20件あらわれるわけですね。でも後者だと、最大20件になるわけです。ああ、なんて融通のきかない。
今はその解決策はまだ出ていないのですが、ある日とつぜん、アイディアが浮かんだりすることがあります。たとえば、これは結局この場合はダメだったのですが、パラメータとして、数を限定できるものがあったとします。例えばそれが”n”という言葉だったとしましょう。そうすると、”last”を使わずに”n”指定すると、今度は3/1から順番に20件だしてくれます。そうすると、「一番最新の」ものを逃す可能性が出ますね。そこで、”sort”などを使い、”descending”などのオプションを使うと、逆向きにソートして結果、最新の20件を出すことができるかもしれないのです(この場合実はこれではできなかったのですが)。
だからつまり、アイディア勝負なのです。プログラミングもレシピも。あ、こうすれば動くかも、これを入れるとおいしいかも、とハっと気づくのがいわば「オリジナル」なのでしょう。でもそれを一度形にしてしまうと、あっというまに一般的になり、普通のことになり、「ひとつのレシピ」と化してしまうという、そういうこと。

Leave a Reply

Your email address will not be published. Required fields are marked *