偉大なコーダーが推奨する技術書まとめ
言語や有名なツールを生み出した著名なコーダーが「読むべき」(MUST)として挙げた書籍を一覧にまとめました。(『Coders at Work』より)
名前 | 業績 | 書籍 |
---|---|---|
ジェイミー・ザウィンスキー | XEmacs Netscape |
『計算機プログラムの構造と解釈』 |
ブラッド・フィッツパトリック | memcached OpenID Perlbal LiveJournal |
『The Art of Computer Programming』 |
ダグラス・クロックフォード | JSON JSLint JSMin |
『The Art of Computer Programming』 |
ブレンダン・アイク | JavaScript | 『The Art of Computer Programming』 ブライアン・カーニハンの本 Smalltalk関係の本 |
ジョシュア・ブロック | Java Collections Framework 『Effective Java』著者 |
『The Art of Computer Programming』 『オブジェクト指向における再利用のためのデザインパターン』 『英語文章ルールブック』 『ハッカーのたのしみ』 『プログラム書法』 『人月の神話』 『Java並行処理プログラミング』 『メリアムウェブスターズ カレッジエイト英英辞典第11版』 |
サイモン・ペイトン・ジョーンズ | Haskell GHC |
『The Art of Computer Programming』 『計算機プログラムの構造と解釈 』 『珠玉のプログラミング』 『ビューティフルコード』 "Purely Functional Data Structures" "Compiling with Continuations" 『プログラミング原論』 パー・ブリンチ・ハンセンの本 |
ピーター・ノーヴィグ | 『エージェントアプローチ 人工知能』共著者 |
クヌース コルメン,ライザーソン,リベスト サリー・ゴールドマン エイブルソン,サスマン 『Code Complete』 |
ダン・インガルス | Smalltalk オブジェクト指向 ポップアップメニュー Bit Block Transfer |
バル・ショアのMETA II論文 LISP 1.5の本 APLの本 |
ケン・トンプソン | UNIX UTF-8 B言語 正規表現 QED ed Go |
内容が濃くてシンタックスとセマンティクスだけを提示するような本 |
Javascriptの生みの親であるブレンダン・アイク,memcachedの作者ブラッド・フィッツパトリック,Haskellの設計者であるサイモン・ペイトン・ジョーンズ,Googleの研究本部長であるピーター・ノーヴィグなど多くのコーダーがドナルド・クヌースの『The Art of Computer Programming』(TAOCP)を読むべき本として紹介しました。
ケン・トンプソンのおすすめ本はシンタックスとセマンティクスだけを提示する本ということですが,「言語仕様」のことでしょうか・・・。
The Art of Computer Programming
クヌースは自身のTAOCPについてこう述べています。
私の本のどの5ページを取っても誰かの一生涯分の研究になっている
要は「簡単には読めないぜ」と。
実際に上記の偉大なコーダーたちでさえもTAOCPについては興味のある部分のみを読んだり,「参考書」としてのみ使用していると発言しており,その難しさが伺えます。
感想
僕が学生時代に使用した教科書はコロナ社の『アルゴリズムとデータ構造』ですが,他の教科書と同じで,細かい内容は覚えていません。TAOCPは読むことすらできないでしょう。
しかし実業務ではB木を知らなくてもRDBのインデックスが使用できますし,クイックソートを知らなくても一行の関数呼び出しコードでデータは高速にソートされます。技術的な問題が発生しても,広大なネットを検索すれば最新の解決法を取り入れることが可能でしょう。
Common Lispの設計者であり,JavaやECMAScript標準化メンバーのガイ・スティールは次のように述べています。
ーー プログラミングについての考え方で,当時と今とで一番変わったことは何ですか?バブルソートが最も優れたソート法ではないと学んだことを別にすると?
(スティール)最大の変化は,最近ではコンピュータの中で起きていることをすべて理解することはできなくなったということでしょう。(中略)70年代には,コンピュータのメモリは4,000語しかありませんでした。コアダンプして1語1語見て期待通りになっているか調べることができました。オペレーティングシステムのソースリストを読んでどうなっているか見るというのは十分理にかなったことでしたし,実際私はやりました。ディスクルーチンやカードリーダのルーチンを調べて,自分でその変種を作りました。IBM1130全体の動きを理解していると感じていました。少なくとも関心のある部分は理解していました。今ではそんなことはできなくなっています。
コーダーはどこまで関心のある部分を広げて深める(ハックする)かが試されています。
(この流れで微妙ですが)関心を広く深くするためにも,ぜひTAOCPを読んでみてはいかがでしょうか。
僕は読みません。
人生で最悪のバグは?
コーダーの共通点を見つけるという観点で,次のワードが頻出しました。
- 嫌いな言語はC++
- 人生で最悪のバグはマルチスレッドやプロセスが起こすバグ
- IDEは素晴らしいがEmacsを使う
- デバッガよりもprint文デバッグを使う
C++が想像以上に嫌われていました。ブレンダン・アイクは《いまだに70年代のデバッガやリンカではまりまくって,バカみたいです。どうしてみんな我慢しているのかがわからない》とまで言っています。
デバッガについても積極的な使用者は少なく,ジェイミー・ザウィンスキーはGDBでデバッグ中にGDBのバグを発見した経験から信頼していないなど,print文デバッグを好む傾向がありました。
アンケート
最後までご覧いただきありがとうございます。以下のアンケートをコーダーで共有できたら面白いと思いますので,ぜひコメントしてみてください。(アンケートのWebサービスをMEAN Stackで作ってみた,とかも最高です)
1. 嫌いな言語は何でしょうか?
2. 人生最悪のバグは何でしょうか?
3. おすすめの書籍は何でしょうか?