さすがにこのレベルになると…

暴論では。なんか、杖をついて歩くお爺さんから「そんな非効率な道具を使うからダメなんだ」と言って杖を取り上げる、みたいな話だ。登氏が優れた仕事ができるのは、方法論が良いからではなくて、そんな方法論を実際に使える登氏がすごいとしか思えないのだけど。

そもそも純粋に論理の積み上げでプログラミングする人なんてほとんどいないんじゃないかな? 誰だって創造的な作業では直観を積み上げて手探りでゴールを目指すしかないと思う。でも並みの人の直観というのはちょっとずつズレてるもので積み上げていくとだんだん明後日の方に傾いていってしまう。だから時々手を止めて一歩引いてズレてないか確認しないと気が付くと崩壊、ということになってしまう。この確認の作業で論理的思考が要求される。でも基本は非論理的な小さな飛躍の繰り返しだ。

センスがある人の場合、つまり経験を積んだり元々才能があったりする人の場合、早い段階でゴールが見える。課題の構造を見ると、一発で大枠で矛盾のないデザインが見えてくる。でも、センスがあっても自分のセンスに自身のない人は理屈に惑わされていらぬ寄り道をしてしまう(デザインパターンがどうとかUMLがどうとか悩んでみたり)、ということはあるのだろう。

でも、センスがなければそもそも課題の構造すら見えないし、理詰めで全体像をデザインするなんて不可能。だからとりあえず思いつきで進んでいって試行錯誤を繰り返すわけだ。その結果、ある1日に1000行書いたコードは続く一月の間に新陳代謝を繰り返してやっぱり1000行のまま、ということになるのではないか。*1

多分世の中の課題の多くは表面的に見える条件だけでは一意に解が定まらないような、そういう課題なのだろう。センスがあろうとなかろうと、どこかで論理的には導けない決め付けを導入して前に、というか前だと思う方向に進むしかない。センスというのは、どういうときにどういう決め付けをしていいか、というパターン学習の蓄積で、パターン学習能力というのは何かの方法論で向上できるようなものではないと思う。

以上、論理的に考えたのではなくて経験的に感じたことを理屈っぽく再構成してみました。

まあ、理屈で考えるとパターン学習能力だけでも絶対説明できそうにない生産性なんだけどね、登さんの場合。短期記憶とか集中力とかそのへんも尋常じゃないと無理だと思う。そういえば、こんな話を聞いたことが。昔、フォン・ノイマンがパーティーの席で難しい数学の問題を出されたんですよ。ノイマン、暫し瞑目の後、見事に暗算にて正解を解答。すると、出題者が「さすがノイマンさん、わかってらっしゃる。この問題、ここに注目すると暗算で解けるんですねー、こうやってまともに解こうとすると何時間も…」などと説明をはじめるのですが、ノイマンさんすかさずこう言ったそうです「いや、そのまともな方のやり方で解いたんですけど。」*2


*1:ちなみに昔やったプロジェクトで計算したらだいたい2500行/月だった(チーム平均も僕自身も)。

*2:うろ覚えなので細部はテキトー。マーチン・ガードナーだか誰だかの本で読んだ記憶。→マーチン・ガードナー『aha! Gotcha ゆかいなパラドックス(2)』p160だった。