プログラマが入門書の次に読めばよさげな書籍

はじめに

本記事は2010年10月に某所で書いた記事を2016/2/2に編集したものです。

プログラムの入門書を読んだ上でプログラムを書いた経験があるけれども、そこからステップアップするために何をしていいのかわからないという人向けの本をいくつか紹介したいと思います。なるべく平易な文書で書いてあるものを選びました。ただし、筆者の趣味の問題で、Linux/UNIX関連の本が多いです。

「これらを読むだけで凄腕エンジニアになれます」などという無責任なことは言わないですが、飛躍するための1ステップとしては十分役立つのではないかと思います。

珠玉のプログラミング

コンピュータシステムを使って物事を解決しようとするとき、どんな状況でどのようなデータ構造、アルゴリズムを使うことによって、結果がどうなったかという面白いエッセイを掲載しています。データ構造やアルゴリズムを扱った本は数式がたくさん出てきて一目で挫折しそうになったり、「じゃあこれを使えば具体的にどう嬉しいの」ということになりがちなのですが、本書はそんなことはありません。

プログラミング作法

「とにかくgetsとかscanfは使うな」とか「コード見ればわかることをコメントに書くな」とか、まともなプログラムを書くのに役立つノウハウがたくさん書かれています。歴戦のエンジニア達が時間をかけて自然に体得してきたノウハウをすばやく学べます。C, Java, awk など多彩な言語が出てきて、それぞれで同じアルゴリズムを実装するなどしているのも面白いです。

ふつうのLinuxプログラミング

比較的やさしくUNIX系OSシステムプログラミングについて述べています。この手の書籍には詳解UNIXプログラミングという定番本があるのですが、初学者がいきなり読むと恐らく挫折するので、この本を前準備として読むとよいかもしれません。

UNIXプログラミングの道具箱

UNIX系OSにおいて、現代的な開発ツールを使わず、古典的な開発をするための各種ツールについて説明しています。各ツールについてそれぞれ数ページで目的と使い方をわかりやすく説明しており、そのようなツールがあることを知らない人が世界を広げるためのとっかかりとして使えると思います。少し古いのが難点で、とくにautotoolsとかcunit,cppunitの説明はインターフェイスが今と全く異なるので全部使えないのですが(ほかにも陳腐化したものがあるかもしれませんが、未確認)、調べればどうにかなるレベルです。

GNUソフトウェアプログラミング

GNUツールを使ったソフトウェア開発の基本についてやさしく書いてあります。個々のツールの紹介はさわり程度ですが、エディタ(emacs),make,gccはもとより、リンカ(ld),アセンブラ(as),デバッガ(gdb) について一冊の中で簡単な使い方まで述べてくれている本はなかなかないです。この本の内容を知っているかいないかでけっこうな差が出ると思います。バージョン管理システム(VCS)に関する記載はさすがに古いですが、その他は今でも陳腐化していない知識です。

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く

ソフト屋さんにわかりやすいように、ハードウェアとソフトウェアの境界部分についてやさしく解説しています。ここの仕組みはこう決められているからこうだ、ではなく、こういう意図でこうしているのだ、というところまで丁寧に説明しているのがよいです。トピックをいくつか挙げると、データの表現方法(整数、浮動小数点数、文字)、メモリの特性(アクセス方法、キャッシュ、スワップ、NUMA)、CPU(独自命令セットの設計のほか、パイプライン、スーパースカラなどの高速化技術)、IO(MMIO,IOIO,各種デバイスについての解説)、などです。これらの言葉の意味でわからないものがあったかたは読んでも損は無いかと思います。