読者です 読者をやめる 読者になる 読者になる

書評:プログラミング作法

書籍 プログラミング

プログラミング作法

プログラミング作法

今までたくさんの技術書を読んできたが、その中でどれが一番か?と聞かれたら本書を推すだろう。


この本に出会ったのは大学生の頃、とある授業中に先生に紹介されたからだ。
その時の先生の紹介の仕方が強く印象に残っている。

私はこの本が出た時、「しまった!」と思いました。
良いプログラマになるために必死に積んだ経験やノウハウが、明文化されコンパクトな形で世に出てきてしまった。
プログラマは職人的なところがあったが、本書が出たおかげで、誰でも良いプログラマになれるようになった。


そしてプログラマになって数年、今ではよくわかる。この本がどれだけの経験やノウハウを圧縮して詰め込まれた本であるかを。

目次

  1. スタイル
  2. アルゴリズムとデータ構造
  3. 設計と実装
  4. インターフェース
  5. デバッグ
  6. テスト
  7. 性能
  8. 移植性
  9. 記法

どれひとつとして欠けてはならないものだ。それぞれ個別にとても重要で、かつこれらを総合的に組み合わせることで良いプログラムが出来上がる。すべての章、すべてのページが金言である。長期間プログラマとして生き、そこで学んだ知識やノウハウを全て凝縮してさらに lzma してそれをヒューマンリーダブルにしたようなものが本書だ。それにしても、なぜ本書はここまでクオリティが高いのか。それも、著者を見れば納得。著者は C 言語の Brian kernighan と UNIX の Rob Pike。この二人の共著が駄本のわけがない。

本書の作法を愚直に守るだけで十分立派なプログラマになれる。もう10年以上前に出版された本書の作法が守られてないコードはそこかしこに存在しているのだから。たとえば、第一章の冒頭に出てくるこのコード。

if( (country == SING) || (country == BRNI) ||
    (country == POL) || (country == ITALY) )
{
    /*
     * 国がシンガポールかブルネイかポーランドだったら
     * 現在の時間はオフフック時ではなく応答時
     * 応答時をリセットし曜日をセット
     */
    ...

丁寧なコメントがついているが、コメントにはシンガポール、ブルネイ、ポーランドの場合だと記述してある。しかしコードを良く見ると、 country == ITALY, すなわりイタリアもこの条件分に入ることがわかる。つまり、コードかコメントどちらかが(あるいは両方とも)間違っている。そしてもうひとつ。このコメントからは、シンガポール、ブルネイ、ポーランドの3つの国の関連がわからない。このコードをメンテナンスする場合にはどこか別の所からもっと詳しい情報を手に入れなければならない。

このように、ほんのコードの断片にすら悪いコードの匂いは潜んでいる。


他にも、今となっては「当たり前」感のある作法がゴマンと出てくるが、それで良い。それらの作法を知らなければ見るもおぞましいコードが出てくること請け合いだし、作法をここまでコンパクトに美しくまとめた本は他に無いのだから。ブライアン・カーニハンやロブ・パイクが長年の経験を積んで会得したプログラミングのエッセンスがこれだけ簡単に読めるなんて、活字や出版が文明に与えた衝撃に感嘆せざるを得ない。本書を読んでないプログラマにはプログラマと名乗って欲しくない。学生のうちならまだしも、金を稼ぐプロのプログラマなら当たり前のように読んでいなければならないレベルだ。それほどまでに本書はプログラマの必読書だと思う。



本書が出版されてから10年以上経過しているが、10年ではプログラミングのエッセンスは変わらない。上辺の技術は乙女心の如く変化が激しいが、本質的な部分では未だに C や LISP が発明された時代と大きく変わってはいないだろう。そして今のところ、今後もしばらくは本書が色褪せることは無さそうだ。

冒頭でも書いたが、もう一度書いておこう。

今までたくさんの技術書を読んできたが、その中でどれが一番か?と聞かれたら本書を推すだろう。

名著は色褪せない。良いコードと同じように。