學習程式設計的方法?!

最近 XDite 和陳鍾誠助理教授都針初學者該如何學習程式設計提出看法, 我相信任何方法,都會有人成功,但對於兩者提出的方法,我有極不同的看法。

XDite 說初學者不要問「為什麼?」只要肉體記憶就好了。 我並不贊同這個說法,學習者不同階段需要不同的方法,但程式設計的初學者 並不適合肉體記憶。 程式設計是一門需要精確控制和演示的技藝,初學者若不在初期瞭解其背後的道理, 很易因錯誤的理解,養成不良的習慣,事後是很難修正的。 一旦有先入為主的錯誤觀念,是很難主動發現,更何況是改變。 初學者只用肉體記憶,還會危害整個產業的發展,產出更多會說出 「不知道之前那裡錯了,反正現在會動了」這樣回應的工程師。 其實臺灣早就不乏這樣的工程師,東西出問題就東試西試,直到某天突然就能動了, 但不知為什麼。 瞭解背後的原理,並不是無限的一直追下去,一直到了解晶片上的原子層級如何運作。 但,也不能忽略其重要性,至少要邏輯層面必需很清楚。 肉體記憶並不是不重要,但不是在初學時間該做的事。 肉體記憶是在你完成基本的教育之後,已知如何進行簡單的 coding 之後, 才需要透過不斷的練習,從錯誤中不斷的改進自己,最終將千垂百煉所得到的結果 內化成經驗。 而不是別人告訴你該怎麼做,你就不斷的重複一樣的動作記下來。 就算學騎自行車,也不是重複別人告訴你的動作就能肉體記憶。 需要從失敗中不斷的修正。

陳鍾誠助理教授提出的 以案例當作教學內容的方法 ,不全然是錯,但我覺的 他所列的課綱內容則有很大的問題。 以案例作教學內容是很好的方式,但案例必需很精確的對映想要傳授的特定 知識。 例如,學習 for loop。 因此案例不能太複雜,不能包括太多新東西,每次案例都加上一點新東西。 就像國小的國語課本第一冊,第一課「老師好,小朋友好」。 以前傳統的案例就是印文字畫面的三角型,倒三角,九九乘法表之類的。 而陳助理教授列出的案例有太多額外的知識需要知道。 例如,第三單元「音階和語音的合成─音效播放與共用副程式」, 這必需知道太多背景知識,學生就像看放煙火一樣,好漂亮喔! 但不會有然後,不會試著去了解裡面的化學原理。 這種案例,比較適合進階教學,而不是初學者。

我的初學建議

對於程式設計初學者,應該用很短的時間先簡單介紹程式語言基本語法 的作用和範例,然後再回頭仔細教每一個基本的語法。 語法的教學要搭配一些簡單的例子。 例如前面提到印文字三角型或各種幾合圖型。 (隨著時代進步,或許可以開始使用圖形介面,如果 API 夠簡單。) 學習語法的時間儘量不要拉的太長,讓初學者可以快速進入下個階段。 當初學者學完基礎語法之後,就需透過各種案例, 組合各種語法,從錯誤中不斷檢視自己的認知,並修正觀念。 在過程中,開始摻入一些 OO, 資料結構等觀念。 案例的學習,重點不在於多,而是讓初學者驗證自己對知識的認知是否正確, 並修正自己想法,練習將想法精確的轉化成指令的過程。 另一方面,必需把時間花在思考練習中所遇上的問題,而不是 從別人口中問到解答。