Rob Pike's 5 Rules of Programming
Rule 1 プログラムがどこで時間を使うようのかを予知はできない。 ボトルネックは驚くような場所に発生するので、どこにボトルネックがあるかを証明するまで、当てずっぽうで高速化を図ってはいけない。 Rule 2 計測せよ。 計測するまで速度のチューニングをしてはいけない。また、コードの一部が他の部分を差し置いて支配的でないときも同様。
Rule 3 趣向を凝らしたアルゴリズムはnが小さいときは遅く、そして大抵の場合nは小さい。そのアルゴリズムは大きな定数を持つ。頻繁にnが大きくなると分るまでは、凝ったことをしないこと。(nが大きくなる場合でもまずルール2から適用せよ) Rule 4 凝ったアルゴリズムは単純なものよりバグが入りがち、そして実装難易度が高い。 単純なアルゴリズムおよび単純なデータ構造を使え。
Rule 5 データが最も重要である。 適切なデータ構造を選びうまく整理できているならばアルゴリズムは自明だ。アルゴリズムではなく、データ構造こそがプログラミングの中心なのだ。 Builderscon 2018 で Rui さんが発表していたlldの開発話でも同じことを言っていて非常に印象に残ったohbarye.icon 異常なデータ構造を直すより異常な振る舞い・アルゴリズムを直すほうが遥かに簡単ohbarye.icon
Rob Pikeの1と2はTony Hoareの有名な格言「早まった最適化は諸悪の根源である」("Premature optimization is the root of all evil.")の言い換え。 Ken Thompsonの「疑わしい場合は力技でいけ」("When in doubt, use brute force.")は3と4の言い換え。 3、4はデザイン哲学KISS ("Keep it simple, stupid.")の例。