ロブ・パイクのプログラミングにおける5つの基本原則
- ルール1. プログラムの実行時間がどこに集中するかを事前に予測することはできません。ボトルネックは予想外の場所に発生するため、速度改善のためのハックを施す前に、まず実際にボトルネックが発生している箇所を特定することが重要です。
- ルール2. 計測しましょう。速度のチューニングは、コードの特定部分が他の部分を大幅に遅延させていることが確認できてから実施してください。それまでは一切、行わないでください。
- ルール3. 複雑なアルゴリズムは入力サイズnが小さい場合には非効率ですが、nが小さいケースがほとんどです。複雑なアルゴリズムには無視できない定数項が存在します。nが大きくなることが確実でない限り、複雑なアルゴリズムを採用するのは避けましょう。(たとえnが大きくなる場合でも、まずルール2を適用してください)
- ルール4. 複雑なアルゴリズムは単純なものよりもバグが発生しやすく、実装も困難です。単純なアルゴリズムとデータ構造を優先的に使用してください。
- ルール5. データが最重要です。適切なデータ構造を選択し、適切に設計できていれば、アルゴリズムは自然と明らかになるものです。プログラミングにおいて重要なのはアルゴリズムではなく、データ構造なのです。
ルール1と2は、トニー・ホーアの有名な格言 「早期の最適化はすべての悪の根源である」を言い換えたものです。
ケン・トンプソンはパイクのルール3と4を「判断に迷ったときは、力任せの方法を採用せよ」と言い換えています。
ルール3と4は、設計哲学「KISS(Keep It Simple, Stupid)」の具体例です。
ルール5は、以前フレッド・ブルックスが『人月の神話』で述べたものです。このルールはしばしば「賢いオブジェクトを使用する単純なコードを書け」という簡潔な表現で語られます。
https://www.cs.unc.edu/~stotts/COMP590-059-f24/robsrules.html