程式設計準則

(Criteria for programming)

這些準則適用於所有程式,不論它是用於何平台上(Fortran, Matlab, Mathcad, Mathematica, LabView)

1. No magic number

    在程式碼中避免出現未經定義之數字,否則會造成往後之閱讀者或修改者搞不清楚此數字代表之意義。

Example: 

Max_frequency = 100先定義100是什麼
For ( i = 0; i < Max_frequency)
(程式中不直接使用100, 而是使用定義之變數)

2. Quote all sources

    註明所有方程式、程式碼等之出處,方便往後閱讀者或修改者查證。

3. Full remark

    註明每一段程式碼之工作原理,並加以詳細之說明。

4. Modulize

     將所有方程式模組化,如此同樣一個計算才不會重複出現在程式碼中,而是只要將模組化後之方程式呼叫出即可。

Example: 

out = Function( in )

5. 變數命名要有物理意義:

     如此程式閱讀者或修改者才能一目了然此變數在程式中所隱含的物理,而非隨便用一代號命名,造成程式閱讀者或修改者摸不著頭緒。

Example: 

Max_frequency = 100先定義100是什麼
For ( i = 0; i < Max_frequency)
(程式中不直接使用100, 而是使用定義之變數)

6. 禁用GOTO 語法:

     GOTO指令易破壞程式之結構,而且程式執行程序上下亂跳亦造成程式閱讀者或修改者之困擾,使得程式往後難以修改。

7. User-friendly

    把程式清楚的分為三部份:第一部份為 "input parameters",把所有可讓使用者更改的參數都放在此處,仔細定義其意義及單位;第二部份為 "calculation",即所有計算、模擬、及資料處理;第三部份為 "output",即把所有使用者想看到或輸出的結果放在此處。

8. Time Efficiency

    仔細檢討所有呼叫法、演算法都是時間上最有效率的,例如(1)依各部份所要處理的問題的性質及參數範圍,選擇各部份最適合的演算法,(2)自動控制每一步最適合的分割大小,(3)自動控制每一個迴圈的上下限(例如積分的上下限),(4)選擇適當的準確度要求 (tolerance),(5)執行一次後儲存再多次呼叫,而非每次呼叫都讓它執行一次,(6)分辨速度的瓶頸是在哪個部份或周邊I/O,將程式最佳化。

    利用計時器來分析各部份執行花的時間是否合理,找出可能有問題之處加以檢討。

    除了選用快速的電腦外,計算耗時的程式應考慮使用平行處理。

9. Space Efficiency

    一開始先定義各陣列,預留記憶體空間;適時的釋放不再需要的記憶體空間;善用快速記憶體。

10. 版本標示

    除了檔名在每次修改時要加日期外(更改 input parameter 部份的數字為使用,非修改),必須在程式一開始處註解清楚這個版本是由哪個版本修改而來的,改的地方有哪些,以及修改人及修改日期。

11. 收斂檢查

    更改適合的參數或分割來檢查該演算法是否已確實收斂。

11. Benchmark

    用各種不同的方式來檢驗程式結果是否正確:(1)輸入別人做過的模擬或實驗的參數,比較結果是否一致;(2)選一個特例是可以以簡單計算或物理直覺回答的,輸入此特例來比較結果是否一致。