2008-02-28

為什麼土木系還必修計算機程式語言的課?

今天收到一封目前已在某知名大學教書的學生的來信如下:

==================================================

RE: 為什麼程式設計(Fortran C/C++) 是土木系必修的課?

親愛的謝老師:

我相信也許您這邊會有一個不錯的答案?
今天在XX大上課 有一個學生問我 為什麼我們要學寫程式?
當然我努力嘗試的回答他說明會寫程式 可能帶來的總總好處 對於以後的 學業 或者 研究 工作 等等

可是回來的路上用別的角度來想這個問題

其實我也有同樣的困惑
我的大學同學們 以前ㄧ樣 修過這些基礎的課 (程式設計 工程演算法 數值分析 有限元素 Fortran C/C++)
仔細算算現在還在寫程式的 好像只有我(或者還有一兩個吧)
身為一個土木人 真的需要學這個東西嗎? 如果不是待在 研究 研發單位 繼續做研究(當老師 或者繼續深造)
有需要這種技能嗎?
我可以理解 老師們為什麼會認為 這是基礎課程
因為老師們繼續從事研發 研究的工作 所帶領的研究生也須要(或者正在學習) 從事研究 研發的工作
現有的電腦工具當然是 經常不能滿足需求的(或者實在太貴了付不起錢)
如果現在的工具能夠滿足需求那就常常表示問題已經被解決了
所以就算是有再強大的工具經常還是需要 一小段程式碼才能更有效率 更符合需求

如果像我同學們一樣 當個公務員 工程師 會使用電腦軟體 並具有domain knowledge 也就足夠
使用 商業用的 品質掛保證的電腦軟體 也不需要會寫程式

打從我當研究生開始 到現在 經歷 10個年頭 寫程式 對我來說 是一件頗有心得的事

可是就連我 還是會忍不住想
如果我以後 不從事 研究 研發 或者 當個教師 分享我的經驗 我這項才能對我有什麼特別的用處嗎?

這似乎像人生裡的眾多選擇一樣 人的生命(或者時間)是有限的
選擇了某樣東西 最後當然也就捨掉了另外一些東西

真是個傷腦筋的問題!!

需要老師一些意見的 XX

==================================================================

你是否也有同樣的困惑呢?在此分享我的回信如下:

很好的問題。我每次教計算機程式的必修課,就會重新思考這個問題,也都會在第一堂上課說明課程目標時,跟同學們分享自己的思考。
不過,我也不敢說已有非常滿意的答案,尤其是資訊時代變化得這麼快,只有時時反省思考,努力學習,才不會過時落伍。
以下分享我目前的思考,供你參考。

學生們學習一門課程時,直接的思考是「為什麼要學這門課?或學習這門課有什麼用?」,自然的,老師們教學時也不可避免的應該回應這樣的疑問,
只是,老師們常會從更寬廣的角度來思考這個問題,甚至觸及如「大學教育的目的」等層面之議題。
或許你覺得我扯得太遠了,不過我的確是如此看待此問題的,也常藉此與同學們討論他們來大學求學到底要學些什麼的相關議題。
因為,我覺得一旦他們能把這些根本問題想清楚,應能有更正確的學習態度與更強的學習動機,而這些都是良好學習的基礎,不只在大學裡,也在他們離開學校以後。
此外,以整體的角度來檢視個別的必修課程,才能比較清楚地看出每門課為達整體教學目標(目前在工程教育認證的推動下,每個工程科系都應發展出自己的教育目標與特色),所應扮演的角色與應達成之任務,也才能設計出適當的課程學習內容。因此,以下之課程規劃與思考,或許具有一定的普遍性,但也可能只適用於台大土木系目前的整體課程中,請配合你們系的整體教學目標來調整。

我同意你所說的,隨著資訊時代的進步,將來只有少數的同學會需要撰寫程式,且其中的許多同學也可能不會繼續用這門課所教授的程式語言來撰寫程式,因此,這門課的重點不應只在會用特定的程式語言來寫程式,而應包含如何透過電腦程式語言的撰寫,來增進學生在與電腦溝通互動時,對電腦的運作邏輯與限制的理解,還有如何透過電腦語言及電腦程式之設計、寫作與維護之介紹,讓學生了解如何撰寫電腦程式解決工程領域中的問題。當然,我也同意,教會同學們會用特定的程式語言來寫程式,是課程中所必要的,只是我認為這只是主要的手段,而主要的目的。也就是說,如果這門課只是定位於教會學生使用特定的程式語言來寫程式,便會屬於一種傳授特定職業技術的課程,一些志不在此的同學們就會有為何要學的疑惑與抗拒。但如果這門課想教的是透過程式寫作這樣的與電腦近距離的接觸與互動,來對e化社會中已不可或缺的電腦有更進一步的理解,我想這樣的知識與經驗對學生而言應就不會有以後用不到的問題,但是我必須要說,要說服全班的學生們有這樣的共識並不容易。

或許你接著會問,既然重點不只是在會用特定的程式語言來寫程式,那麼該選擇教授那個程式語言才最能達到前述之課程目的呢?關於這個問題,我認為若先不考慮授課教師的意願與專長,或許可以從下面的幾點來考量。從程式語言的豐富性來考量,C/C++是個很好的選擇,若覺得不需要介紹指標,Java與C#也是不錯的選擇;從程式語言的未來性來考量,C/C++、Java與C#都是不錯的選擇。但若再考量視窗寫作上的教學需求,可能C#會是很好的選擇;若想挑一個較簡單又支援視窗寫作的程式語言,VB應是不錯的選擇;從工程的應用角度考量,以Excel或MatLab為基礎的程式寫作也是可以考慮的選擇。我覺得未來的程式寫作(尤其在非資工領域),將逐漸朝向視覺化程式寫作(Visual Programming)方向發展,是否會有為工程專業而設計的此類程式語言崛起,也是值得密切注意的。

另外,在課程的設計上也有幾點心得提醒你注意一下。因為這門課的學生在程式語言的寫作能力上與學習的興趣上,通常都會有很大的差異,因此在教學上與作業的要求上,要拿捏好一個能達到教學目標的基本標準, 讓程度中等及以下的同學們經由適當地努力皆可達成要求。儘量增加上機實作演練機會,降低講授進階技巧之比重,但為了讓程度好的同學不會覺得課程太簡單,可以設計一些具挑戰性的加分作業,鼓勵他們自己更深入的學習。如何讓同學們跟上進度也很重要,因為這門課的學習有賴知識與經驗之累積,學生一旦落後進度太多,很可能就此跟不上而無法通過課程。

此外,我認為這門課還可以訓練同學們的邏輯思考與組織能力,只是如何在課程中讓同學們理解這點,也需要在課程中費心安排與設計。

以上供你參考,希望有所幫助。