文/施博仁 (臺大電機系畢)
一、 前言
電機系大一上所有必修科目中,「計算機程式」 (簡稱計程),大概是多數人在高中時完全未接觸過的科目,是電機系第一門震撼教育。在這門課中,學生的相對程度很容易重新洗牌,高中數理極好的人可能發現自己居然不大會寫程式,而原本對自己沒信心的人,卻可能意外發現一片天空。
電機系的計程使用 C++,它的歷史悠久且至今仍被廣泛地使用。C++ 相較於它的前身 C 語言,多了物件的概念,作為初學者的入門語言相當合適且具代表性,對往後學習新的語言能一通百通地迅速進入狀況,所以這門課很重要,同學務必認真學習。修完計程後,有興趣者可再修習「資料結構與程式設計」和「演算法」,或是更偏向實際應用的實驗課,如「網路與多媒體實驗」和「嵌入式系統實驗」等。如果發現自己不喜歡也不擅長電機系的非程式科目,那麼筆者建議可以多去修習資工系的課,或相關學程和專題研究,將來推甄或報考相關研究所會較有利。關於電機系和資工系大一計程的差別,筆者放在附錄說明。
二、 親自撰寫程式學習
寫程式是一門透過實踐與觀察,學習思考如何應用的學問,務必自行多加撰寫和修改範例,作為練習。確實瞭解每個環節的基本運作與細節,才能確保寫程式時,不會寫得坑坑洞洞,到處都是問題。由於電機系一門課開設多個班,因此在開學時,應選擇適合自己學習習慣的老師,並且保持不蹺課的好習慣。此外,關於學習工具,建議以閱讀老師上課的英文投影片為主,教科書為輔,有不懂的地方再翻閱教科書。
由於程式書籍往往花費太多文字解說程式碼,而學習程式語言講求效率,所以在選購這類課本時,可挑選中文版本。 市面上 C++ 的書籍翻譯已很成熟,使用中文書可以幫助快速理解,熟悉專有名詞,以節省更多時間。在建立基礎觀念後,通常投影片和教科書會有程式碼範例,以作為驗證基礎觀念和展現觀念之用途。建議可先試著看程式碼,局部不懂之處,再查看程式碼的解說。如果老師的講解、投影片和書籍文字無法讓自己瞭解某程式的觀念或用途,那麼就實際執行程式,確認用途,或修改程式碼,看看執行結果是否和自己想的一樣,以驗證觀念。許多書籍附有光碟片或下載連結,提供完整程式碼檔案的範例,如此雖然可省去一行行打程式的時間,但是第一個程式還是要親自從無到有一行行地建立並執行。待熟悉以後,為更有效率地運用時間,才用現成的檔案進行修改。
三、 越是熟悉程式,越能精準除錯
在個人的輔導經驗中,最常被詢問的問題在於如何除錯 (debug)。寫程式最麻煩的就是臭蟲 (bug),也就是程式運作到一半當掉或出現和預期不同的結果。如果重新查看程式碼仍無法看出錯誤,土法煉鋼的辦法是加入更多程式碼,執行到關鍵處就輸出相關變數查看。更有效率的做法,則強烈建議學習透過「除錯器」(debugger) 協助除錯,像是在 Windows 上常用的程式編譯器,如:Dev C++ 和 Visual C++ 都有除錯器,Linux 上也有內建的 GDB 和 DDD 可以使用。以上這些編輯器,在網路上都有很豐富的教學資源。
再者,寫程式就好比寫文章,不能不知所云或含混帶過。對於自己寫的程式碼越瞭解、熟悉,就越有敏銳的直覺可找到臭蟲可能出現的位置並加以檢查,無論是人工除錯或使用除錯器皆是如此。寫程式的過程如有不確定的地方,就要另外寫小程式做局部測試,以減少最後全部完成後再挑小臭蟲的時間成本。還有,每次找到臭蟲一定要反省為何會犯錯,是單純的粗心、邏輯錯誤還是觀念錯誤? 這些一定要弄清楚。寫程式最忌諱出錯改正時,卻不清楚自己在改什麼,若碰巧改對,在通過測試後就置之不理,並未從修改過程中吸取教訓,同樣的錯誤一犯再犯,是不可能寫出好程式的。
四、 結語
程式設計的樂趣有別於理論課程,它可以滿足個人創作的夢想,有機會看到各種應用軟體的雛型在自己手上誕生。在大學時就可以發現自己也可以是位工程師,而不只是理論家,這是很有成就感的事,所以學習程式設計,何樂而不為呢?
電機相關領域免不了都要學習如何寫程式,只是頻率的多寡和使用的語言不同而已。為了使用電腦卓越的運算能力,除了透過程式語言和電腦溝通之外,別無他法。當面對計算量與資料量龐大的複雜問題,或是進行電腦模擬時,想獲得最佳的效率就得寫程式。程式語言在學術或業界都是必備的工具,學習好程式設計,日後絕對有機會派上用場!
附錄:電機系和資工系開設的大一計程有何差別?
電機系的計程使用 C++,資工系的計程使用 C 語言,C++ 是 C 語言的增強版,最初誕生時 (1983年) C++ 比 C 多了類別 (Class),後續又增加更多強大的功能。類別是使用者自行定義的資料型態,以類別為藍本產生的個別資料 (變數) 稱為物件 (Object),其內部可以定義各種儲存資料 (稱為成員變數,member variable),以及定義外部互動與內部運轉的方式 (透過成員函式,member function)。具有此種「物件」概念的程式語言,稱為物件導向程式 (Object-oriented programming,OOP) 語言,它允許使用者將物件視為具有特定完整功能的基礎單位。以物件來開發程式很有效率,以建立一座城市為比喻,我們先設計好磚瓦、門窗、磁磚這些物件,接著設計者只需管它們的使用方式,適當組合可構成新的物件―即建築;透過不斷使用建築此物件,並適當排列,完成這個都市。所以物件讓設計者得以站在更宏觀的置高點進行程式開發,其流程更為直覺迅速。然而,C 語言的優勢在於允許使用者更直接、嚴謹地管理記憶體,雖然更為繁瑣,但它更容易讓設計者瞭解底層的作業系統和系統程式的運作,因此資工系從 C 語言學起,是出於往後還有相關進階課程的考量,大部分電機系學生並無此需要。
|
|