私はそんなに他人のプログラムは読んでない

プログラム上達の早道は他人のコードを読むことだと言われている。

Part1 オープンソース/C言語に学ぶ「ソースコードの読み方」

にも読め読めと書いてある。

でも、実は私は他人のコードを読めばプログラムの上達が早いということには、ちょっと懐疑的だ。

もちろん最初は読むべきだ。どの言語でも「らしさ」ってのがあって、またどの言語も「哲学」がある。そういったものを早く知るには、先達の書いたコードを読むのはいい。最近はあまり見ないが、「まるでPascalみたいなC」なんてコードを書いてしまうのは、そういったものへの理解が足りないとゆーか、「プログラム言語の気持ち」を理解してないからだろう。だから、最初のうちはコードを読むべきだ。

しかし、その時期が過ぎてしまったら、私は逆に

読むべきではない

と思っている。

「フルーツトマト」というやたらに甘いトマトがある。あれはどうやって作るかと言えば、極度な貧栄養あるいは好環境でない(たとえば海岸の近くとか)土壌で育てて、ごくたまに液肥を与える。劣悪な環境で育つことによって根が強化され、時々与えられる肥料を力の限り吸収し、最大限に生かす構造にする。その結果、あそこまで甘いトマトになるのだ。栄養いっぱいの環境ではないから大きくはならないが、甘さはそれこそ「フルーツ」だ。

私は「他人のコード」というのは、文字通り「肥やし」だと思う。読めばすぐ効果が出るところも似ている。オープンソースならコードまるごとパクるのもOKだし、そうでなくても理解できなかったアルゴリズムがコードとなって見れる。その効果は素晴しく即効性もある。とは言え、やはり「肥やし」であって、いつも豊富にある状況だと「フルーツトマト」は作れないと思うのだ。

他人のコードを読まず、文献も少ない状況で、ひたすら自分の頭で考える。考えに考えて、「もうだめぽ」と思ったところで、コードなり文献なりを読む。そうすれば、読んだコードや文献のは目に見える部分だけではなくて、深いところまでわかる。あるいはそういった資料の「気持ち」とか、書いた人の背景とか、そういったものまでわかって来る。ただ読むよりももっとリアリティを持って迫って来る。

そうやって自分で考えてから他人のコードを読むと、自分の思考の甘さを突きつけられたり、時には読んだコードよりも自分のコードの方が勝っていて優越感を感じたりする。あるいは、「ああ、やっぱりこう考えたか」と思ったりもする。そうすることが、本当の「血肉」となるのではないかと思う。

私はこれはそんなに意識してなくて、結果的にそうなってしまったていた。

私の一番の「成長期」はそんなに参考になるコードに触れる機会がなかった。そもそもそんなにコードがオープンにされている環境にいなかったし、見るための「設備」も持ってなかった。だから読みたくても読めない。田舎だから本もロクになかった。だから、プログラムを書く時には、自分の頭で考えるしかなかったのだ。

その代わり、たまに「いいコード」が手に入ると、それをプリントアウトして読みまくった。東大版Postscriptとか、XLispとか、 Smalltalk/Vとか… 一生懸命読んだものだった。今となればみんな過去のコードかも知れないけれど、当時は一生懸命だった。

読めない時は自分の頭で考えているわけだけど、もちろん間違ってたりもするが、逆にどこにもないものを考えついていたこともある。最近になってデータベースにビットマップインデクスが使われるようになったけど、同じことを私が思いついた20年前には、まだ見たことも聞いたこともなかった。もちろんあったのかも知れないけど、少なくとも実装されたものは見なかった。その当時のサーチエンジンのインデクスは、ポインタアレイしかなかったものだ。

そんなことこんなことを思うと、「他人のコードを読む」というのは、程々にしておいた方が良いように思う。瞬発力はつくかも知れないが、「血肉」にするには自分の頭を使うべきだ。そもそも、コードはコピペで作られるものではなく、頭で考えるものなんだから、いかにして頭を鍛えるかだ。