2008/12/28
技芸とサイエンス
もともと文芸の能力と科学の能力とは相反するものではないし、 独立したもののように錯覚してしまうこと自体が「理系文系」思考の最大の罪だと思うのだけれど:
ITエンジニアにコンピュータ・サイエンスは必須か - Zopeジャンキー日記
ここで、「コンピュータ・サイエンスをきちんと学んでいないとダメだ」といった趣旨の意見があった。これこそ、「ITは「理系」なのか?」で私が主題にしたかったポイントであり、まさにこのような考えかたに対して、私はちょっと違う気がする、ということが言いたかったのだ。
コンピュータ・サイエンスの知識は、もちろんあったほうがいい。しかし、ないとダメということもないと思う。
その理由は、プログラミングや設計の能力は、コンピュータ・サイエンス的な「科学の能力」というよりも、むしろ文章を書くような言語運用力、つまり「文芸の能力」に似ていると思うからだ。
[...]
コンピュータ・サイエンスは、コンピュータやプログラムを可能にする仕組みの知識であって、「プログラミングのスキル」というものは、それとは違うものだと思う。
それは理詰めでは到達できない、一種の「アート」であって、論理的な思考力以上に「美的感覚」を要求される、職人芸だと思う。
「理詰めで到達できないアートである」「論理的な思考力以上に美的感覚が要求される」 からといって「理論(コンピュータサイエンス)が無いとダメということはない」とは言えない。 上記前提から言えるのは、「理論だけではダメである」ということだ。
エリック・レイモンドの「コンピュータ・サイエンスの教育で誰かをプロのプログラマーに しようとするのは、ブラシや絵の具について学ばせてプロの画家にするのと同じくらい難しい」 という言葉は「コンピュータ・サイエンスの教育」 についてであることに注意。そしてノーヴィッグはレイモンドの言葉を 「でも、学校を楽しめないのなら、(熱意があれば)仕事をやる過程で同じような 体験を得ることはできる。いずれの場合にせよ、本による学習だけでは十分ではない。」 と言った後で引用している。「ちゃんとした教育をうけてないとダメとは言えない」と 言ってるだけであって、理論の知識そのものが不要かどうかには触れていないし、 ノーヴィッグの言葉はむしろ経験を通した理論の獲得をimplyしているのではないか。
確かにセンスは大きな役割を果たすのだけれど、センスだけで有益な仕事が出来るように なる例は非常に限られているだろう。歴史的に見ても飛び抜けたセンスを自分が持っていると 思うなら、理論は無視しても良いかもしれない。だがそうでない大多数の人にとって、 体系的な理論は自分のセンスを何万倍にも増幅してくれる強力な道具になる。
ITに求められるのは、とにかくたくさんの知識・道具の使い方を理屈抜きでアタマに叩き込んで、必要なときにそれを取り出せる、というような能力だ。イメージ的には、理系の研究者というよりも、はるかに「情報の土建業」に近い。
[...]
そして、「たくさんの知識・道具の使い方を理屈抜きでアタマに叩き込んで、必要なときにそれを取り出せる」という能力は、まさに「語学」の能力だ。語学では、文法などでは多少の論理性はあるものの、ほとんどは単語・イディオム・慣用表現を理屈抜きにアタマに叩き込む、つまり「覚える」「慣れる」というのが学習の中心だ。
「理系の研究者」に対してのイメージが間違っているような気がするけれど、 「たくさんの知識・道具の使い方を理屈抜きでアタマに叩き込んで」というのは 研究者だろうが現場の開発者だろうが必要とされる前提だ。 その後に、「それらの知識を理屈で体系化して『身につける』」という段階が来て、 その上に立った時にやっと「センス」が活きてくる。
サイエンスは知識を体系化する道具のひとつととらえることもできる。 学部4年生になって卒論を始めた頃、読まなければならない論文の量に 絶望的になったものだ。しかも読めば読むだけ、参照されてる文献をたどるから 読まなければならない論文が増えて行く。 けれども、その分野がコンピュータサイエンスの太い枝のどこに位置するのか、 そしてその分野内で枝がどのように張っているのか、が見えてきたら、 詳細にアルゴリズムまで調べるべきもの、歴史的な意味として「こんなのがあった」と 知っておけば良いもの、直接は関係しなさそうだけどもしかすると応用できるかもしれないもの、 などの見分けがつくようになり、ずいぶん楽になった。
プログラミングをアートに近いものととらえ、より良いものを作りたいと思うなら、 より良い道具を求めるのは自然なことではないか。 コンピュータサイエンスはプログラミングに関する古今東西の道具が整理されて納められた 道具箱 なのだ。道具が無い時にそれを言い訳に前に進まない、というのは間違っているが、 道具がすぐ隣にあるのに「道具よりもセンスが大事」と言って使ってみようとも しないのもまた間違っているのではないか。
理論を学ぶことによって自由な発想ができなくなってしまうのではないか、 と懸念する人もいる。「素人の方が既存の概念に縛られない発想ができる」ってやつだ。 そういうこともたまにはある。宝くじを当てるのに理論は必要ない。 何かを作ることをただ趣味でやりたいだけなら、ひたすらスロットマシンの レバーを引くように続けるのも良いだろう。退屈はしないし、時々小さな当たりがあるし、 ジャックポットの可能性だってゼロではない。 だが趣味ではなく、仕事として、あるいは人生のひとつの目標として 何かを作りたいと思うときに、その成功の可能性をスロットマシンに賭けたいかい?
道具だけ揃えて悦に入っている人も中にはいるのかもしれない。 そういう連中から「お前はこんなに立派な道具を持っていないからダメだ」と言われたら、 「道具なんか関係ねぇ」と反発したくなるのもわかる。 けれどもあなたが、自分のやっていることをアートだと位置付けるならば、 彼らの言うことなど無視して、自分が作りたいものを作るのに役に立つかどうかだけを考えて 判断すべきなのだ。問題なのは彼らではない。あなた自身でさえない。 結果として得られる作品だけが問題なのだから。
It is the tale, not he who tells it. ---Stephen King
Tags: Programming, ものつくり