プログラミング名著100選(2)
「ほげほげのプログラムが書ける」と言った場合、プログラミング言語そのものを理解しているというよりは、何かやりたいことがあって、それをプログラムとして書き起こせる、ということを意味する場合が多い。プログラミング言語の構文をいかに習得しようとも、プログラムが書けないことは多々ある。
少しでもプログラミング言語を勉強した者ならば実感しているだろうが、プログラミング言語そのものにはわずか数十のkeywordしか出てこない。せいぜい、1時間か2時間勉強すれば覚えられるはずだ。だけど、それだけでプログラムが書けるようになるわけではない。一体、何が足りないのだろうか?
これにはいろんな要因があるのだが、まず「データ構造とアルゴリズム」に対する理解が不十分だということが挙げられる。
私はN.ヴィルト先生の『アルゴリズム+データ構造=プログラム』で勉強したが、この本は、いまや入手困難だ。その後、この本をベースにして類書が数多く出版されたので、この分野の入門書として、いくつか挙げておく。アルゴリズムCシリーズはこの手の教科書として定評がある。
『定本 Cプログラマのためのアルゴリズムとデータ構造』は入門書にちょうどいい。
『珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造』 この本はC/C++でサンプルが書かれており、入門〜中級者ぐらいが読むのに適している。
まあ、リスト、スタック、キューに始まり、2分木〜ソートetc..について書いてある本は数多くあるし、あまりひとつの本にこだわる必要はないと思う。
また、データ構造の説明はCで書くよりJavaで書くほうが(ガーベジコレクタがあったり、説明のためにGUIを利用できたりするので)わかりやすいことは多い。そんなわけでここでは『Javaプログラマのためのアルゴリズムとデータ構造』と『Javaによるデータ構造とアルゴリズム解析入門』の二冊を紹介しておこう。
あと、中級以上の人には、アルゴリズムイントロダクションをお勧めする。これはMITでの計算機アルゴリズムの教科書として利用されている、"Introduction to Algorithms" の翻訳であり、3分冊になっている。
『アルゴリズムの設計と解析手法 アルゴリズムイントロダクション』
『精選トピックス アルゴリズムイントロダクション』
『数学的基礎とデータ構造 アルゴリズムイントロダクション』
原書は、第2版が出ているので、英語が苦にならなければ原書の『Introduction to Algorithms(2nd Ed)』を読まれたし。
ただ、アルゴリズムとひとことで言っても、その対象とする範囲は広大なので、たとえばグラフ理論ならグラフ理論の教科書で勉強したほうがいいだろうし、数学的な基礎は数学の本で勉強したほうがいいと思う。だからここで紹介するのは本当に基礎的な事項を学ぶために必要なものだけにとどめた。