私の好きなジャズピアニストにチック・コリアという人がいます。その方面では重鎮の一人で、最近では日本人の若手女流ジャズピアニスト上原ひろみを紹介した人として言及されることも多いようです。
このチック・コリアという人、ジョン・トラボルタやトム・クルーズと同様に某カルト宗教の広告塔という面もあるのですが、音楽的には本当に優れていることは否定できないと思います。
彼はこう言います「音楽で最も重要なものはリズムだ」と。この重要性に比較すれば、他のことは大した問題ではないというのです。一般的には、音楽の三大要素として、リズム・メロディー・ハーモニーなどと言われますが、彼はこの中の一つが他に比較してとりわけ重要だと主張するわけです。
これにならい、私もプログラミングにおいてとりわけ重要なものが何であるかを考えてみたのですが、それは「整理整頓」と、それと表裏一体の関係にある「制限」や「制約」であると考えました。この重要性に比較すれば、プログラミング言語の良し悪しや個々の技術の内容などは大した問題ではないようにも思えてしまえるほどです。
「モノ」の整理については、巷では収納名人でテレビでもおなじみの近藤典子さんなどが有名ですね。皆さんモノの整理整頓について、助けが必要な事情が一般にあるようです(これは、うちの場合も全く同じではあります)。
「モノ」の整理整頓がなぜ必要なのか。当然のことですが、必要なときにその「モノ」をすぐに取り出したいわけです。逆に、簡単に収納できることも必要です。取り出すのが簡単でも収納が面倒であれば、嫌になってそこに収納しなくなってしまいます。美的センスも必要ですね。眺めても見苦しくなく、あるいは普段は完全に視界から消してしまうなどです。しかし、意外に見落としがちな点かと思うのですが、整理整頓と表裏一体の関係にあるのが、「制限」あるいは「制約」です。
食器を収める棚には文房具や本やトイレットペーパーを(特別な事情のある場合は別ですが)収納してはいけないのです。ある場所をカテゴリづけし、それ専用のものとして扱わねばなりません。また、その上位のカテゴリ、例えば「台所」というカテゴリには、料理を作って出すためのものが集まらなければなりません。食器の他には、冷蔵庫、流し台などです。
さらに上位のカテゴリとして、会社であれば食堂、家庭であれば居間というカテゴリがあるでしょう。これらの「部屋」をその上位の「建物」の中にどのように収納するかも重要ですね。
このようにカテゴリは階層構造になっており、そのカテゴリ以外のものを含めてはいけないという制約を持つわけです。整理整頓とは本質的にこのようなものです。どこに何があるかがすぐにわかる整理整頓という概念と、何らの制約からも自由であることとが相反することは当然です。
オフィスビルの中に、食堂から離れたトイレの中に、オロシガネ(大根おろし)がかけてあったらどうでしょうか?美しくない上に不便で仕方がありません。何よりも、料理を作ったり食べたりする人は大変です。
この場合には、とてつもなく当たり前のことなので、別段そこに制約や制限があるようには思えません。しかし、「何をしようが俺の自由だ!」と言って、トイレの中に食器置き場を作る輩が出だしたら、「食器は食堂の外に出してはいけない」という張り紙をしなければならなくなるでしょう。
プログラム作りは、これによく似ています。というよりも、トイレの中に食器置き場を作ってしまう輩があまりにも多いのです。もちろん、プログラミングの場合、モノの例のように、その「置き場」というものが自明なわけではありません。なぜなら、プログラマは常に新しい「モノ」を作るからです。その新しいモノをどこに置くかは、もはやセンスの問題になります。このセンスの無い方は、トイレの中にオロシガネをかけてしまいます。
こういったセンスというものは、場数を踏まなければわからないものです。経験がものを言う世界なのです。おそらくこれは、一般にイメージされているプログラマ像とは異なるものだろうと思います。
プログラマというのは、プログラミング言語という英語に似た言語を使い、与えられた仕様なり何なりを満たす「文章」を作成していく、その文章というのは、コンピュータに仕事をさせるための命令の集まりである、というのが大方のイメージではないでしょうか?これはこれでその通りです。
しかし、プログラミングの本質的な部分、キモの部分は、与えられた、あるいは故意に自ら課した制約・制限の中で、物事を整理整頓していく仕事なのです。
前者のようなとらえ方をしている人は、少なくともお金をもらうことのできるプロとは言えません。
例えば、ここにプロの野球選手なり、サッカー選手なり、ゴルファーがいるとします。彼らは、もちろん猛練習をして、筋肉と運動神経を鍛えあげたことでしょうけれども、それでプロになれるのでしょうか?違うでしょう、プロとしての彼らに必要なものは最終的には精神力ではないでしょうか。いかなるプレッシャーのもとでも自らの力を完全に引き出すことのできる精神力がプロとしては必須のような気がします。
ここがプロとアマの違いだと思います。どのような世界においても、一般の方が「こういうものだろう」と想像するものや、アマチュアレベルの方が懸命に「練習」しているものとは、一つ別のものがプロの世界では存在すると思いますし、それらをなかなか言葉で現したり、教えたりすることは難しいのではないでしょうか。
ただ、簡単に言葉で表すことができるのであれば、その知識は誰でもが習得できるものであって、その程度のレベルでは(以前もこのような話を書きましたが)競争に勝つことはできないでしょう。
続きます。