個人多年來教授程式設計、軟體開發等相關課程,經常遇到學習者即便在撰寫簡單的程式時,仍遭遇極大的障礙。傳統上的障礙來自於程式語言本身的語法、語意挑戰,我們將這個現象稱為符號障礙(symbolic barrier),如正確的撰寫一個迴圈、主程式與函數、參數的傳遞、區域變數與全域變數的使用等。如同學習一個外國語言,學習者需要為這些基本規則加以掌握,才能寫出使用該外國語言者看得懂得文章[1]。目前市面上已有許多優異的教科書或參考書,足以有效的解決symbolic barrier的問題。
除了符號障礙以外,寫軟體面臨的問題仍有:工作習慣養成、如何從程式到軟體、個人到團隊等問題。在學校養成良好工作習慣,有助於學習者日後發展。唯有解決這些問題,學習者才能在寫軟體的工作上漸漸的步入坦途,而能將其心力專注在解決實際問題上。
寫這個部落格的動機在於提出一個簡單、有效、且學習者可養成工作習慣的方法,以有效克服這些障礙。我將以數學家George Pólya著稱於世的How To Solve It解題方法中所揭櫫的四個步驟為基礎,提出一套簡單、易學、易養成習慣的方法,使學習者在極短的時間內即可開始寫出有意義的程式,不再只為學習克服程式語言的符號障礙而寫一些無用的程式。
How To Solve It的四個步驟為瞭解問題(understanding the problem)、規劃解法(devising a plan)、依規劃解題 (carrying out the plan)與回顧(looking back)。數學問題分成problem to prove 與 problem to solve兩大類;借用How To Solve It於寫軟體,則典型的問題為problem to solve:建造一個程式以解決問題。套用到寫程式,這四個步驟為 :
- 瞭解問題(U):程式的需求為何?具體而言,程式的輸入資料為何?程式的輸出為何?限制為何?
- 規劃解法(D):列出解決該問題所需做的所有程式待辦工作。
- 依規劃解題(C):一次挑出一個待辦工作,加以完成並驗證。
- 回顧(L):並檢視程式,提出待改善之處,列入待辦工作中。
舉例而言,後文中物件導向版的向量(vector)的例子裡,先只定義一個夠用的建構元(constructor),讓學習者能定義向量物件後,即開始 解決向量計算的問題,而避免進入所有形式的建構元的詳細介紹。在另一方面,這個策略下寫出來的程式可能不夠好甚至不正確。此時,How to solve it的L步驟『回顧』中,學習者將有機會檢視現況,並提出下一階段可進行的改善作法。
How to solve it 適用於所有語言的學習。這個部落格的短文中採用的例子裡,我將假設你已經寫過C程式,並準備學習C++語言。
沒有留言:
張貼留言