コード匂い129 -構造最適化


我々は、実際のシナリオを推測して時間と空間の複雑さを改善するのが大好きです

TL;DR: Don't optimize anything until you have a real use scenario benchmark.


問題

  • 読みやすさ
  • と違反
  • 早期最適化
  • 解決策

  • カバーをテストしてシナリオ.
  • 読み取り可能な(そして可能な非演奏者)コードを書く.
  • 実際のユーザーデータと実際のベンチマークを行う.( no ,あなたのコードを10 , 000回繰り返すことは本当のユースケースではないかもしれません).
  • あなたが決定的なデータを持っているならば、あなたはベンチマークの見つけられたボトルネックをPareto principle .
  • 80 %悪いパフォーマンスを引き起こして最悪の20 %の問題を添付します.
  • 文脈


    大学とオンラインコースでは、良いデザインルールの前にアルゴリズム、データ構造、および計算複雑さを学ぶ.
    我々は、可能な(可能な)パフォーマンス問題を過大評価して、コード可読性とソフトウェア寿命を過小評価する傾向があります.
    早熟な最適化には、実際の問題を解決する証拠がない.
    事実が我々に本当の問題があると言うとき、我々は我々のコードを外科的に改善する必要があります.

    サンプルコード


    間違い


    for (k = 0; k < 3 * 3; ++k) {
         i = Math.floor(k / 3);
         j = k % 3;
         console.log(i + ' ' +  j);
      }
    
    //This cryptic piece of code iterates a 
    //two dimensional array
    //We don't have proofs this will be useful
    //In real contexts
    


    for (innerIterator = 0; innerIterator < 3; innerIterator++) {
      for (outerIterator = 0; outerIterator < 3; outerIterator++) {
       console.log(innerIterator + ' ' +  outerIterator);
      }
     }
    
    // This is a readable double for-loop
    // 3 is a small number
    // No performance issues (by now)
    // We will wait for real evidence
    
    

    検出


    [ X ]マニュアル
    これは意味のある匂いです.
    我々は、コードが読むのが難しいとわかるかもしれません.

    タグ

  • 早期最適化
  • 結論


    我々は、マシンの最適化を停止し、人間の読者とコードメンテナの最適化を開始する必要があります.
    早めの最適化のために設計されたプログラミング言語を回避し,ロバストなものを好む必要がある.

    関係






    詳しい情報

  • Premature optimization is the root of all evil is the root of evil
  • クレジット


    写真でPriscilla Du Preez on Unsplash

    Optimism is an occupational hazard of programming: feedback is the treatment.


    ケントベック


    この記事はCodesmellシリーズの一部です.