書評:ふつうの Linux プログラミング - 入門本のかくあるべき姿

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

ふと軽い気持ちで手に取った入門本であるが、いやはや驚いた。
入門本のかくあるべき姿がここにあったのだから。


「ふつうの Linux プログラミング」の内容はタイトルが表している通り、ふつうの Linux プログラミング。
cat コマンドや head コマンドを C で実装しながらプロセスやファイルやパイプの仕組みを学んでいく、というある程度 C 言語を知っている人向けの入門本である。一見巷にありふれていそうなふつうの本であるが、本書はひときわ輝いている。プロセスやファイルやストリーム等々の概念の説明もわかりやすく、文体も読みやすい点で素晴らしいのだが、なにより本書が優れているのはエラー処理を省略せずに書いているところだろう。

例えば、cat のサンプルプログラムの一部。

for(;;){
    n = read(fd, buf, sizeof buf);
    if(n < 0) die(path);
    if(n == 0) break;
    if(write(STDOUT_FILENO, buf, n) < 0) die(path);
}

読んで STDOUT に書くだけのプログラムであるが、ちゃんと実用できるようエラー処理を書いている。「サンプルならシンプルに」が定番だった今までは、その分実用する際に様々なノウハウが得られたが、本書はそのノウハウも含めてちゃんと記載してあるのだ。もちろん、それぞれのエラー処理の意味も解説付きで。


エラー処理を侮るなかれ。「エラー処理を見ればプログラムの出来が大体わかる」という言葉も時折聞こえるだけあって、エラー処理には品質が現れやすい。なぜなら初心者であるほどどこでエラー処理をすれば良いのか判断できないからだ。初心者はプロセスからパイプで文字列を読み込んでいる際、プロセスが終了した場合のことを想像できない。ファイルに書き込んでいる最中にディスクフルになった場合のことを想像できない。そのためエラー処理には経験が必要であり、若いほど「使えないプログラマ」と判断される。


しかし責めるべきは若いプログラマではなく、エラー処理をサボり、エラー処理の説明もサボっていた数々の入門書ではなかろうか。
本書はこれらをサボらなかった。だからこそ、このクオリティ。


果たして、「サンプルならシンプルに」は正しいのだろうか。今まで誰もが盲目的に正しいと信じてきたが、それで良かったのだろうか?もちろん、すべてのエラー処理を書いていたらコードは100倍に膨らむことだってあるので読みやすさではシンプルなものに逆立ちしても勝てない。しかし、本書はエラー処理はサボらずに書いても、エラーの処理は die() で済ませることでシンプルさと良いバランスを取っている。そろそろ、エラー処理は経験から学ぶのではなく、書籍から学べるようになっても良い頃だろう。


エラー処理を行うとコードが煩雑化するので入門書では敬遠されていたが、本書はエラー処理を書いても問題ないどころか素晴らしい本になることを示した。
本書「ふつうの Linux プログラミング」レベルの本が普通の入門書に広まることを期待してやまない。