軟件最佳化

指將一隻軟件改到更加有效率，等個系統行起上嚟唔使用咁多系統資源。

簡單例子有檢查吓隻軟件嘅源碼，確保段源碼完全冇任何多餘嘅碼－想像家陣編寫緊一隻網上遊戲嘅程式，隻遊戲好受歡迎，有數以十萬計嘅玩家，如果個程式嘅源碼當中有一行多餘嘅碼，噉十萬幾位玩家玩起上嚟部伺服器就要行多十萬幾行多餘嘅碼，會搞到部伺服器嘅負責大咗好多。因為噉，最佳化喺實際嘅軟件工程工作上係一個相當受重視嘅課題。

以下嘅內容，假設讀者已經識嗮電腦程式編寫嘅基礎概念。

基礎概念 

軟件最佳化係軟件工程上嘅一樣重要工序：軟件泛指用嚟做某啲特定功能嘅電腦程式，例如一隻電子遊戲就係一隻用嚟做娛樂用途嘅軟件；齋靠日常觀察就可知，部電腦要行一個電腦程式，梗要或多或少噉花啲時間同埋記憶體，而事實表明，一個寫程式嘅人寫程式嗰陣用嘅手法，會對「個程式要行幾耐先行得完」舉個簡單例子，想像家陣想寫個程式，個程式要攞個數 a 做 input，output 出嗮所有「細過或者等如 a、又係 10 嘅倍數」嘅數，即係
如果 input 係 200，就要出 200, 190, 180, 170, 160,... 噉嘅一列數；
如果 input 係 150，就要出 150, 140, 130, 120, 110,... 噉嘅一列數；

想像下面段虛擬碼：

a = 200; 
  while (a > 0)  
  {
    b = 10;
    if (a % b == 0} 
      print(a);
    a -= 1; 
  }

上面段碼查實唔係咁有效率－b = 10 呢個步驟唔使喺個 while 迴圈每個圈度都行一次，而因為段碼有咗不必要嘅步驟，就搞到段碼行起上嚟慢咗。上面段碼可以改做：

a = 200;
  b = 10;
  while (a > 0) 
  {  
    if (a % b == 0} 
      print(a);
    a -= 1;
  }

－b = 10 呢個步驟就變成淨係做一次咁多，令到段碼效率高咗。軟件最佳化指緊嘅就係：

上面攞嚟做例子嗰個程式好簡單。就算做咗最佳化，齋靠肉眼睇唔多覺佢行得快咗。不過專業軟件工程上整嗰啲軟件，好多時閒閒哋成幾萬行碼咁長，有啲甚至仲有成上億行碼。對於噉嘅軟件嚟講，如果佢哋每 50 行碼就要嘥多 10 毫秒行，已經會對佢實際用嗰陣嘅表現造成明顯影響。因為噉，專業嘅軟件工程師都相當關注最佳化嘅問題，會諗好多技巧想令啲程式更加有效率。

層面

演算法

源碼

強度折減

系統樽頸

缺點 

最佳化好多時會令個程式嘅可讀性下跌。

奧坎剃刀
優雅
複雜系統
記憶洩漏

文獻 
Abelson, H., & Sussman, G. J. (1996). Structure and interpretation of computer programs. The MIT Press.
Gorelick, M., & Ozsvald, I. (2020). High Performance Python: Practical Performant Programming for Humans. O'Reilly Media.
Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.

攷

拎 
Code Optimization in Compiler Design. GeeksForGeeks.

軟件工程