【書籍紹介】プログラミング言語C 第2版 ANSI規格準拠
『プログラミング言語C 第2版 ANSI規格準拠』共立出版
B.W. カーニハン, D.M. リッチー著、石田晴久訳
「プログラミング言語C 第2版 ANSI規格準拠」は、C言語の設計者デニス・リッチーらによるC言語の古典である。定番の入門書ということで、春によく売れるらしい。ただし、良くも悪くも「古典」であり、必ずしも万人におすすめできるわけではない。特にプログラミングを始めた最初の書籍としてはおすすめしない。
最近はC言語そのものの出番も減り、派生言語であるC++やC#、Objective C、あるいはJavaを使うケースも多いだろう。しかし、私は本書を「Cから派生した言語を使うすべてのエンジニア」におすすめしたい。Cを理解すれば、C++がなぜあんなに変なルールになったのかが理解しやすいし、Javaの方向性も分かるだろう。
人によって違うだろうが、私の場合、新しいプログラム言語を習得する場合の手順は概ね以下のようになる(「プログラム言語を確実に習得する4つのステップ」より)。
- 参考書を1冊購入するか講習会を受講する
- 例題をキーボードから手入力して確認する(丸写しする、いわゆる「写経」)
- 演習問題を解く
- 人に教える
実際に、講習会を受講するのは難しい人も多いだろう。IT系の勉強会も盛んだが、プログラム言語をしっかり学ぶには時間が足りない。
そこで多くの人は参考書を購入することになる。私が参考書を選ぶときに注意している点は4つある。(1)文法、(3)サンプルコード、(3)設計思想、そして(4)薄いことだ。
入門書に「文法」が必要なことは当然だろう。基本的な文法が記述してあり、短いプログラムと演習問題が掲載されているものを選びたい。実用的なプログラムは長く複雑なので、丸写しするには向いていない。初学者は最初から実用的なものを求めてはいけない。
ピアノを学ぶ場合でも、まずは指の使い方に始まり、次に練習曲へ続く。作品演奏はその次のステップだ。ショパンは「練習曲(エチュード)」として優れた作品を残しているが、それにしても決して初学者のための練習曲でない。
もちろん、文法だけしか載っていないものは入門書として不適切である。「情報処理技術者試験」等を対象とした「対策本」も、(即戦力として役立つ部分もあるかもしれないが)表面的な理解に留まりやすい。
「プログラミング言語C」には基本文法はもちろん、多くのサンプルコードや演習問題が含まれている。ただし「そもそもプログラムは何か」とか、コンピュータのメモリ割り当てメカニズムは説明されていない(C言語最大の難関であるポインタと配列を理解するには、メモリ割り当ての基礎を知る必要がある)。しかも演習問題はかなり難しい。演習問題の解答を集めた「アンサーブック」という書籍が出ているくらいだ(『プログラミング言語Cアンサー・ブック 第2版』ただし、あまり良い解答ではない)。
次に言語の本質を示す「設計思想」が含まれていることを重視したいのだが、これがなかなか難しい。何を持って言語の「本質」と言えるかが具体的に表現できないからだ。ピアノを学ぶ人が、「ピアノでしかできない表現」と言われても困るだろう。楽器としての特徴は表現できても、音楽としての特徴を指摘するのは難しい。
うまく判断できないので、私はその言語を設計した人、または設計した人に近い立場の人が書いた本を選ぶようにしている。「プログラミング言語C」は、C言語を設計したデニス・リッチーが著者として参加している。
本書に登場するサンプルコードや演習問題も、あとで思えば「C言語らしい」ものが多く、知らず知らずのうちに「C言語的発想」が身に付くようになっている。ただ「C言語らしい」ことは、C言語を習得して初めて分かることなので、参考書を選ぶときは信頼できる人の意見に耳を傾けたい。
最後が「薄い」である。厚い参考書は途中で読む気をなくす。「プログラミング言語C」は、演習問題を飛ばせば簡単に読み終わる。もちろん、単に読むだけでは力は付かない。しかし、「全部読んだ」という事実は自分に対する自信となる。あまり厚いと「読むことすらできなかった」という劣等感が生まれ、やる気をなくす。必要以上に厚い本はおすすめできない。
「プログラミング言語C」には欠点も多い。最も多い批判は「説明が不十分」という指摘だ。前述の通り、基礎的なコンピュータの知識ばかりか、いくつかのプログラミング言語を知っていることまで前提としている部分がある。私が「プログラミング言語C」を読んだときは、Basic、Fortran、Lisp、アセンブリ言語(IBM 370系、モトローラMC6809、インテル8080)などの言語を習得したあとだったからよく理解できたが、全くの初心者では難しいだろう。
それでも本書を推すのは「1冊の書籍で全てを説明する」という考え方にはそもそも賛成できないからだ。それができれば理想だが、著者によって得意な部分と不得意な部分がある。1冊の書籍がカバーする範囲を絞り、多くの書籍を組み合わせて学習できる方が効率はよいはずだ。
「プログラミング言語C第2版」は、1989年に出版され、技術書としては異例のロングセラーである。批判も多いが、これだけの期間にわたって売れ続けているのはそれだけの価値があると考えている。(1)ある程度のプログラミング経験がある人で、(2)C言語に影響を受けた言語を使っている方におすすめしたい。