ベル研究所でのUNIX開発や Plan 9、Infernoというオペレーティングシステムの開発で知られ、また最近ではGoogleでGo言語の作成に携わっているソフトウェア開発者「Rob Pike」。
長い経験を持つ世界的なエンジニアの言葉は拝聴すべき価値のあるものだと言えるでしょう。特にそのなかでも有名なのは「Rob Pike's 5 Rules of Programming」と知られる5つのルールです。プログラマが従わなければならない5つのルールがコンパクトにまとめられています。
そのルールとは:
- ルール1: プログラムがどこで時間を使うのか知ることはできない。ボトルネックは意外な場所に存在するので、ボトルネックがどこにあるかが確定するまで推測やスピードハックを試みてはならない。
- ルール2: 測定せよ。測定して、コードの一部が残りの部分を圧倒するまでチューンしてはならない。
- ルール3: 凝ったアルゴリズムはnが小さいときは遅い。そして普通nは小さい。凝ったアルゴリズムは大きな定数を持つ。nが頻繁に大きくなることがないのならば、凝ってはならない(nが大きくてもルール2を最初に使用する)。
- ルール4: 凝ったアルゴリズムはシンプルなものよりバギーで実装するのが困難だ。シンプルなデータ構造とシンプルなアルゴリズムを使用せよ。
- ルール5: データが支配する。正しいデータ構造を選び、上手く管理できれば、アルゴリズムは自ずと明白になる。アルゴリズムではなくデータ構造がプログラミングの中心だ。
ルールには以下のようなコメントが添えられています。
ルール1と2はTony Hoareの有名な格言「早期の最適化は諸悪の根源」の言い換えで、Ken Thompsonはルール3と4を「不確かな場合は、ブルートフォースを使え」と言い換えている。ルール3と4は、KISSデザイン哲学の例だ。Rule 5は「The Mythical Man-Month(人月の神話」でFred Brooksが以前述べた。ルール5は「スマートオブジェクトを使用する愚かなコードを書く」と短縮される。
もともとRob Pike氏が1982年にC言語プログラミングについて語った「Notes on Programming in C」から抜粋されたもののようです。文脈が理解しづらいと思う方はオリジナルを参照してみてもよいでしょう。
Hacker Newsでも過去何回かとりあげられて注目されています。
それぞれ100件以上のコメントがつけられていますので、こちらも参考になりそうです。