概要
- プログラムのボトルネックは予想外の場所に現れる点
- 最適化は計測後に行うべきという原則
- 複雑なアルゴリズムは小規模データには向かないこと
- シンプルなアルゴリズムとデータ構造の重要性
- データ構造選択がプログラミングの中心である点
プログラム最適化に関するPikeのルール
-
ルール1 :プログラムのどこで時間がかかるかは予測困難 ボトルネック は意外な場所に現れがち 速度向上の工夫 は、実際に問題箇所を特定してから実施
-
ルール2 :必ず 計測 してから最適化 速度向上 のための調整は、計測データに基づき実施 一部のコード が全体を圧倒する場合のみ最適化を検討
-
ルール3 : 複雑なアルゴリズム は小さいnでは遅い nが小さい 場合はシンプルな方法が有効 大きなn の場合でも、まず計測(ルール2)を優先
-
ルール4 : 複雑なアルゴリズム はバグが多く実装も難解 シンプルなアルゴリズム と シンプルなデータ構造 を推奨
-
ルール5 : データ構造 が最重要 適切な データ構造選択 と整理でアルゴリズムも自明となる プログラミングの中心 はアルゴリズムでなくデータ構造
関連する有名な格言・設計哲学
- ルール1・2 はTony Hoareの「 Premature optimization is the root of all evil (早すぎる最適化は諸悪の根源)」の再表現
- ルール3・4 はKen Thompsonによる「 When in doubt, use brute force.(迷ったら力技でやれ)」に該当
- KISS原則( Keep It Simple, Stupid)の具体例
- ルール5 はFred Brooksの「The Mythical Man-Month」で言及
- 「 write stupid code that uses smart objects (賢いオブジェクトを使った単純なコードを書け)」と要約されることも多い
まとめ
- 最適化 は計測と根拠に基づく判断が重要
- シンプルさ と データ構造重視 の設計思想
- 歴史的な名言や原則に裏打ちされたプログラミングのベストプラクティス