ユユユユユ

webエンジニアです

K&R を読み通した

 K&R を読みはじめた - ユユユユユ より1ヶ月で、ひとまず通読した。

f:id:jnsato:20210905153156j:plain

 ANSI C の大きくない仕様を一冊で網羅する、という能書きで始まる。実際、シンタックスの説明は用法を折々に交えながらでも、150ページばかりで終わっている。残りの40ページは標準ライブラリとシステムコールの解説であり、やや応用に踏み込む。それでも200ページに収まる。

 名著であるとおもう。それは、 C を発明し、仕様を策定した当事者たちが執筆しているという時点ですでに疑いようがないのだが、実に平易な文体で議論が勧められて、ゼロから C の知識を理解させる、という入門書としてこれ以上の成果はありえないだろう。このような書物が成立するのは、そもそも仕様が十分に小さく、かつ平易であるからにほかならないわけで、 C のようにシンプルな言語がほかにないことをおもうと、このようにシンプルに言語を解説しきる、という書物はもう二度と成立しえないだろう。40年近く前に書かれた本でありながら、いまだ読むに耐える技術書であるということのなんとすさまじいことか。しかもそれは、 C そのものがいまだ利用に耐える言語であるということに照応している。

 ごく短い文量のうちに、読者はごく初歩的なシンタックスの理解からはじめて、最後には malloc の再実装にいたる。読み始める前の僕にこう伝えたら、「いくらなんでもそれは無茶な...」と萎縮するだろう。しかし、ごく単純な言語機能を理解して、ごく単純なルーチンを実装する、ということを積み重ねる手続きにおいて、無茶な飛躍は存在せず、ただ自然な因果の帰結としてそれが成立するのである。恐るべきことである。

 裏を返すと、このように基本的な部品を用意し、それら部品の組み合わせにより、より大きなシステムを作る、というのは、まさしく理想的なプログラミングの営みである。その営みがもっとも純粋な形でこの本には表現されている。それをさておいて、 C は難しいとか、 OS は難しいとか、食わず嫌いを正当化する意見を一方的に持って、無学をひけらかしていた以前の自分の至らなさを省みるきっかけともなった。

 と、殊勝なことを言いつつも、やや手抜きをしながら読み上げたことも事実である。練習問題は序盤から手強いことも少なくなく、終盤に至ってはさらに多くのエネルギーを要求する。これらを逐一踏ん張るよりも、まずは最後まで通し読みすることを優先した。ただそれでもなお、 UNIX の内包するいくつかの重要なデータ構造に関する知識を再発見することができたし、読み物としてもすでに上等な著作であることは言うまでもない。

 それから、入門書であることに疑いはないのだが、読者を選ぶ本であることも明らかである。それなりにプログラミングの素養のある者でなければ、およそ読むことはできないだろう。僕の場合は、 C++ をいくらか利用していたことが少なからずアドバンテージとなって、読み通すことができた。しかしまったくの初心者はいうに及ばず、スクリプト言語の経験のみを資産として本書に挑むことも、果たして可能であるかどうかはわからない。

 まあ、読める人は読めるし、読めない人は読めない、という表現しかしようがなさそうだ。仮に読めないとしても、いずれ読む必然性がどのプログラマにも開かれていることは間違いない。その意味では、万人必携の書ということにもためらいはない。ほかならぬ僕自身も、やがて時がくれば再読しうるし、その折にはあらためて、新しい読みを獲得するだろうという予感がある。