話是這麼說的沒有錯, 但是
其實 "多看別人寫的程式" 這句話是有語病的, 沒有好好的分析它的話, 甚至會嚴重地誤導你的學習, 所謂的 "多看別人寫的程式" 這種說法和我們在學習外國語言時的座右銘 "多看、多聽、多說" 是一致的, 但是很重要的是你要在適當的環境裡來實行才有效果, 例如學美式英文, 你就是要到美國去, 或者至少你接觸到的人必須是土生土長的美國人才可以, 這樣子你多聽的才是正確的, 多講的才是正確的, 如果你在一堆中國人當中講練習英文, 那就不必了, 不會道地的。 那麼講到寫程式呢? 我們在很多地方都可以看到很多人寫的程式, CPU 都可以執行, 答案都是我們想要的, 這樣子的程式應該可以看看了吧? 錯! CPU 可以執行、 且不會出錯、 會跑出正確答案的程式不見得是你應該學習的程式。
讓我們這樣子來解釋: CPU 是一個很簡單的東西, 它能做的事很單純, 所以操作命令它的程式當然也會很單純, 你一定很容易可以看得懂的, 所以簡單的說一個好的程式應該是很單純的, 很淺顯易懂的, 邏輯清楚不混淆的 ..., (請注意:很單純淺顯的程式不一定很短喔!) 你該看該模仿的程式就是這樣子的程式。
如果一個程式讓你乍看起來覺得前後的敘述糾葛在一起, 前後的資料變數看似相關又好像無關, 迴圈三四層, 條件測試三四層, 全域變數一堆, 每一個函式二三百列敘述, 變數都是用 x1, x2, x379, y10ab, yvs, srw, ... 這種沒有意義的名字, 那就建議你別費神去看了, 這種程式也許可以執行, 有錯誤的時候根本沒人敢去改它, 它像是一張多維度的網子, 每一個敘述雖然只使用三五個變數, 但這三五個變數在一二十個敘述中使用到, 這些敘述又使用到其它的變數, 如此幾乎所有的變數和敘述都相關了, 牽一髮而動全身, 誰敢去動它? 當然也就別提去修改增加它的功能了。
有的人做事雜亂無章法, 有的人做事有條有理, 通常我們在處理事情的時候都會將相關的事物放在一起, 無關的事物則各自歸類, 如此的話就是看起來有條有理的那種人, 如果完全不做整理, 所有的事情都混雜在一起處理的話, 就是屬於雜亂無章的, 我不是在批評做事雜亂無章的人, 其實這類的人如果能把事情一一完成的話, 通常是記憶力比較好的那種人, (如果亂成一堆又無法完成, 我們就不必討論了。) 不過這種人終究是少數, 通常一般人記憶力沒那麼好的話, 就需要靠整理的功夫, 分門別類, 就可以減少出錯的機會, CPU+Memory 這個組合因為記憶力超強, 因此它可以做的事情包括很多亂無章法的事, 但是千萬別學它。
注意:
資料與動作流程是兩個相互影響的東西, 有時資料結構的不適當, 會導致程式流程異常的複雜, 例如: 寫一個二維矩陣相乘的程式如果你用一維的陣列來表示的話, 你的程式當然會比較複雜, 另外有時程式邏輯沒有清楚地歸納、 適當地分段區隔開來, 會導致資料的混淆與錯亂, 例如: 全域變數就好像一堆人吃大鍋飯菜, 又不分公筷母匙的, 你一筷、 我一匙的, 你怎知道飯菜到底是誰吃了, 是誰汙染了..., 相同地, 全域變數內的資料可能在程式任何一個地方被修改, 完全不配合各自區段之邏輯, 其內資料的變化就很難掌握了。
回
程式設計課程
首頁
製作日期: 98/11/10
by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw