Island Life

< Paulの記事"The Other Road... | Lispセミナー >

2004/03/26

プログラミングと体力

ハッキングには体力が重要だ。ただし、ここで言う体力とは、 納期前に連続で徹夜できる体力のことではなく(それも重要ではあるが)、 抽象的なアイディアを具体的に動くものにまで持ってゆく力のことである。

効率的なフォームで走ることを思い浮かべることができても、 実際にそのフォームでフルマラソンを走るためには、 アイディアを実現するに耐える肉体が無ければならない。 美しい映像を思い浮かべることができても、 それをキャンバスに写し取るには、手が理念についてきてくれなければならない。 それらは、訓練と経験によって培われる、広い意味での基礎体力とでも 呼べるものだと思う。

分野を問わず、必要とされているのは、内なる理念と、表現するデバイスとを 繋げることだ。そして、基礎体力は両者を繋ぐチャネルのバンド幅である。 抽象的なアルゴリズムを、実際の現場のコンテキストで動作するプログラムへと 具体化する過程にも、似たようなチャネルがあるように思える。

プログラミングにおける基礎体力は、こんな形で現れる。 アイディアを思いついた時に、そのアイディアを核としてとりあえず 動くものをでっちあげてしまう。多くの場合、できあがったコードのうち、 アイディアそのものを具現している部分はほんの一部にすぎず、 残りの多くはそのアイディアを地面に固定させるための仮の骨組みや足場に すぎない。仮の骨組みや足場を作るのは、面白味のない単純作業だが、 それが無いと大事なアイディアを試すことが出来ない。 この時、そういう骨組みや足場をえいやっと素早く作ってしまえる能力が、 基礎体力だ。

重要なのは、そこにかかる時間である。そういう足場を作れるか作れないか で言えば、多少なりともプログラミングの心得のある人なら作れることが 多いだろう(結局のところ、そういう足場には新しいことは必要ないのだから)。 だが、そこで時間を喰っていると、肝心のアイディアがどんどん古びていってしまう。 アイディアはナマ物だから、捕まえたら十分に素早く料理しなければならない。 下拵えだの出汁を取るだののためだけに料理の本をひっくりかえして もたもたやってたら、アイディアは腐ってしまう。

この基礎体力の恐ろしさは、それが指数的に効いて来ることだ。

  • まず単純に、アイディアを実装して試してみるのにA氏はB氏の半分の時間で済むと すると、A氏はB氏の2倍のアイディアを試してみることができる。 英語の学習には多読も有効だが、ペーパーバック1冊1日で読める人と、 1冊に10日かかる人とでは、学習としての多読の効率は10倍違って来るわけだ。 本人が注いでいる労力は少なくとも主観的には同じなのに。 さらに、経験すればするほど効率が良くなるとすれば、差はひらくばかりである。
  • だがそれだけではない。頭の中と表現デバイスとのチャネルは 双方向なんである。Paul Grahamも アイディアは、より多くのアイディアを生む と書いているが、アイディアを形にしてみることではじめて 得られるアイディアというのが多数ある。従って、 速く形にすることが出来ればできるほど、 たくさんのアイディアが得られることになる。 たくさんのアイディアのストックを持っているということは、 実装の戦略を検討する際に選択の幅がひろがるということでもあるし、 行き詰まった時に道を開くためのヒントをたくさん持っているということでもある。 これら全てが、ものつくりを加速する方向に作用する。

この指数的なカーブのどこかに、クリティカルな基礎体力の閾値というのが あるような気がする。多少幅はあるにせよ、それ以下の体力の場合、 有用な結果が得られるまでにあまりに時間がかかるため、 本人の気力が萎えてしまったり、時間切れになるなどして、 結果が出せずに終わってしまうということだ。

いろんなものをつくり出す力、創造性のようなものは、人によって あったりなかったりすると思われているふしもあるが、 頭の中でアイディアを生み出す力に差が無かったとしても、 体力が閾値を越えているか否かで、出力にall or nothingの差が現れる。

プログラミングにおける生産性は人によって桁違いの差が出ると 言われることもあるが、それは、プログラミングが 肉体の物理的な限界というものにあまり左右されないために、 この指数的効果がそのまま観測されるからではなかろうか。

なかなか結果が出せないと焦るものである。 知識が足りないからだと本を買い込んで例題を解いてみたりとか 能力が無いと諦めたりとか。 だが、その理由が、基礎体力が閾値以下であるせいだとしたら、 基礎体力をつけること以外に逆転はあり得ない。 そして、基礎体力をつけるには、自分の頭の中の考えを 形にしてみる、という訓練を重ねるしかないのだ。 (既に閾値を越えている人が行き詰まって悩む場合はまた別で、 そこにはシリアスな問題が横たわっていたりするんだが、 どうも、体力不足の人も自分の問題をシリアスにとらえがちのような 気がする。)

(ここで 述べられている、日本と欧米のCSの大学院生の差なんかも、体力の差のような 気がする。話をしてみると日本の学生にもすごい人は多く、頭の切れという 点ではそれほど差はないと思うのだが、出てくるものの量では 差をつけられているのではないか。あくまで印象論だが。)

(ここで言っている体力は違うようでいて微妙に重なるようでもある、 「体力と知力」も おもしろい。)

Tag: Programming

Past comment(s)

iwao :

非常に共感しました.よろしかったら「数学は体力だ」もどうぞ.かつてのボスの文章です.

有野

私は似たような概念を腕力、と呼んでいます。私は萎えずにやる気が続いている期間、というのは人によっての差は小さく、そこまでである程度の形にならないとやる気をなくして挫折していまう、という思想を持っているので、持続力もイメージさせる体力より、腕力、という表現の方がしっくり来る気がします(まあどうでもいいんですが)