もうこの話題が登場して何度目になるのかは知らないが....

shi3zの日記 - マシン語を知らない子ども達
あまりも当たり前過ぎて21世紀に入ってから言葉にだしたことはあまりないのですが、当然のことながら、プログラムというのは、マシン語を理解して初めて「書ける」と言うのです。

そんなことは、ない。

私の上の娘は、まだ日本語文法を習っていないが、日本語で彼女の母や父である私や妹や級友と話すことが出来る。まだ辞書さえ知らない下の娘も同様だ。

確かに、「下の事」を一通り習った者は、「底まで知っていて」やっと「知っている」と言って「下の事」を知らない者を下に見がちだ。しかし、知識を深さでしか測れない者は、往々にして知識を広さを測ることが出来ない。「一段下の階層を知らなければそのことを知らない」という人に限って、そのことの左右に関して何も知らなかったりするのだ。

shi3zの日記 - マシン語を知らない子ども達
80386を理解することは現代のCPUを理解するということであり、これを理解しないままマルチタスクOS上で動作するプログラムを書くことはほとんど自殺行為です。

そんなことはない。私はよくマルチタスクのプログラムをperlやruby(やときどきerlang)書くけど、これらは何の改変もなしにPowerPCでもIA-32でも動く。もちろん各CPUの特性を知っておくに超した事はないが、最近のLLではこれらのCPUごとの「癖」をなるべく見せないように工夫されている。階層が一段違うが、例えばperlなら、fork()システムコールがないWindows上でもfork()関数が使えたり、RubyならPOSIX threadに頼らずともThread.newできたりといった具合だ。perlやruby書くのにCPUの知識は必要だが、perlやruby書くのに、CPUの知識は必須ではない。

# pythonが出てこないのは、単に私の使用頻度の問題

だいたい階層の設計において、下の階層の知識がなければ使えないというのであれば、その設計は間違っている。内部実装を知らないと使えないクラスというのは、ダメOOPの代表ではないか。エンジンがガソリンかディーゼルかハイブリッドか知らなくても車は運転できるのだ。

もちろん、一段下の階層は、知っておいた方が得だ。一段下の階層に関する知識は、隣接する知識との共通項になっていることも多いので、たいていそれを知る事は知識を深めるだけではなく、知識を広めることにもなる。

しかし、「知っていると得」と、「知らなければ駄目」の間はあまりに離れている。何のために階層があるかといえば、このキャズムを超えるためである。階層と階層の間にインターフェイスを設けて、階層の中身を知らなくてもそのインターフェイスさえ知っていればその階層の恩恵を受けられる。

さらに付け加えれば、下の階層への知識欲は、必要に応じて湧くものだし、そしてそういった知識欲が湧いている状態の方がすんなり飲み込めるものだ。

無理矢理飲ませる事はない。彼らの喉が渇くのを待ちさえすれば。

Dan the Man with Too Many Layers to Support