【MOOC專訪】計算機程式設計 — 劉邦鋒老師

         臺大資工系學生在網路上一致推薦:要學好 C 語言,就要上劉邦鋒老師的計算機程式設計!這門課今年九月十一日將在 Couresra 平台開課。老師配合線上教學有教無類的特性,以非本科生為目標修課學生,濃縮他在臺大的教材,用最淺顯易懂的教學,讓同學們都能輕鬆學會 C 語言。

         劉老師在臺大資工系最知名的就是活潑的教學風格,上課會配合親自編纂的計算機程式設計課本,將程式語言深入淺出地教給同學,並且讓同學親自上台演示「人體計算機」,用人體模仿程式運作的方式,讓同學們快速理解複雜的程式語言。此外,老師還自行開發「批改娘」系統,批改學生作業,讓學習輕鬆快速又有效率!獨樹一格的教學風格,還讓同學為老師取了一個有趣的名字:「P教授」。

         許多人對資工領域的課程充滿好奇和恐懼:「計算機程式這些字看起來真的好陌生啊…」、「到底什麼是 C 語言?」、「非理工本科生,學了會有什麼收獲?」、「我該怎麼做課前準備呢?」本次專訪,就讓P教授來親自解答吧!

問:關於程式語言,雖然未實際接觸,但仍有聽過一些相關名詞,除了C語言外,還有聽過像是C++、JAVA之類的,如果能以比較生活化、與一般人較無距離的例子來類比,老師會怎麼簡介這些常見的程式語言?

答:C 的話比較低階,意思就是比較接近機器語言;而 C++ 是 C 的 Super set ,包含了物件的觀念; Java 就是減肥後的 C++ ,和前者不一樣在於它有非常齊全的程式庫,很多已經寫好的東西可用。以使用者來說, C 就是工程師在用的, C++ 是寫應用或開發大型系統用的, Java 比較像純粹開發應用程式在使用的,不過因為它非常容易擴充,現在也會被拿來寫大型系統。

這次選擇 C 語言的教學有幾個原因,一來是 C 語言比較低階,物件觀念相對較差,但在控制方面和 C++ 差不多,所以比較適合初學者;再者對本科生來說,剛開始接觸低階的東西,將來要習修系統程式會比較有概念,也更容易過渡到核心語言。

問:目前滿多學校除了會在資工、資管等科系開設程式設計課程,也會在通識課程裡開設相關課程,請問老師,就讀文組、商學相關科系,平常與這個領域較無關聯的學生,修完這門課後,除了會寫程式以外還會有什麼意想不到的幫助嗎?

答:邏輯思考能力吧,因為計算機其實滿簡單,只是邏輯而已。學會程式的話,將來對其他需要用到邏輯概念的東西接受度也會很高,假設我告訴他瀏覽器是怎麼寫出來的,他寫完程式以後大概就知道瀏覽器要怎麼弄,雖然不會完全懂,但對瀏覽器的觀念就會比單純的使用者有更深的了解,因為瀏覽器就是比較複雜的程式,其實和簡單程式運作道理是一樣的。

問:對資工、資管系的學生而言,如果未來期待往程式設計領域發展,老師建議在專業以外增強什麼能力?

答:這又得講非常多了,因為資工系的各項課程不是獨立的,大學四年有一連串的東西要學,彼此間互相關聯。寫程式這件事可以說很簡單,也可以說很難,因為寫個程式要能夠跑,要有好的算法,就涉及資料結構演算法;再者,寫出來的東西要在硬體上執行,就必須懂一點 architecture ,就是計算機結構,才知道為什麼這樣寫比較快或比較慢。光跑一個程式就要了解演算法、資料結構、計算機結構、還要有編譯器知識,知道編譯器怎麼編程式碼,最後編出來怎麼在硬體上跑又涉及到作業系統、主流語言。
所以寫程式有很多層面,若只看寫程式當然很單純,但想讓程式跑得又快又好又便宜,讓複雜的工作很快地執行完畢,就必須什麼都要懂,而這就是資工的領域了。所以回歸最基本,該加強的能力還是系統程式跟資料結構演算法,這兩個最重要,再來才是我們講的其他東西。

問:資工領域是否有人才飽和之類的問題?

答:其實在 Computer science 和 Super engineer 領域有個很特殊的現象,它可以一個人抵一百個人,其他產業即使遇到困難,一百個人慢慢做,通常也能做出來,資工領域就不同了,找一百個平庸的人還做不出的 project ,可能找到一個很強的人馬上就做出來了,臺灣就缺這種很厲害的人。

要會寫程式,其實外面也有很多人在教,所以 app 開發人才很容易飽和,但這種人沒辦法處理一些複雜的資料結構或演算法問題,他們學不到真正核心的東西,例如程式怎麼寫比較快,同時懂系統程式、資料結構演算法、OS的人還很少,而這種人在資工系才訓練得出來,所以我還看不出在哪個國家會出現資工人才飽和的問題。

問:在理解老師所教授的概念之後,老師會建議我們如何練習?如何掌握程式設計的技術?

答:還是建議靠多做題目多練習,才能較為迅速地掌握程式語言。我在臺大十幾年的教學已經有「題海」,但這如果公開 ,server 會無法負擔流量,所以建議同學去找網路上整理過的 free access 資源,就會有很多題目,不過題目也要挑選,大部份網上的題目偏向演算法,是訓練比賽選手用的,針對語言學習的題目相對較少。我這邊推薦一個適合學習的網站給同學們:http://zerojudge.tw/ (高中生程式解題系統),之後也會在 Coursera 課程中公佈額外的練習題目。

問:雖然這門課程開設的對象是毫無經驗的初學者,但在資工領域、程式語言學習上有沒有哪些常用的名詞、語法,在課程開始之前先瞭解,會更容易跟上學習的腳步?

答:我的教材儘量做的讓沒基礎的同學也能學習,目標是讓高中生也能懂,但基本上要懂二進制、簡單的數學、和邏輯。可以的話能預習一些簡單計算機概論會出現的東西,例如:記憶體、 CPU ,計算機構成等等 (見下圖)。


問:在學習完本期課程後老師是否還有後續的開課規劃,或是建議我們能學習後能做什麼樣的安排?

答:這堂課開在資工系我會用半年把它上完,但我所期望的課單靠這六堂沒辦法完全講完,所以明年若有空可能會再錄個為期六週的進階篇課程。
我覺得學生上完課以後,可以把《由片語學習 C 程式設計》後面看完,前面 1/3 跟著課程講解看懂了有基礎,後半應該就有能力自己看了。這本書講的內容其實很豐富,因為這本書的設計是希望讓讀者達到資工系的專業程度,

課程規劃

粗框是給非本科生的課程,本科生則是連細框單元也要加進去教學,比如物件觀念就是教本科生。這門課大約會上到「字元」、「字串」,不過也還沒教過非本科生,教到哪就算到哪吧 (笑)。

問:臺大 Coursera 每位開課老師都投入相當大的資源和精力,以確保與課學生都能獲得最優質的學習品質,最後想問老師,是什麼原因讓您願意不辭辛勞也要開課?

答:第一點–程式設計能力很重要,因為任何理工科的學生到最後都會接觸計算機,算是一種基礎技能,和英文數學差不多,所以如果不會寫程式未來會受限很多。

第二點–它很簡單,我認為高中生就有能力寫程式了。(我有拿我兒子做實驗,其實高中生也看得懂,不用擔心 ) 所以其實沒有那麼難,只是大家把它想太難了。任何一個高中生、大學生應該都有能力把它學會,要有信心,這東西一點也不難,比一般人想像中容易多了。

經過老師的解答,是否也讓你燃起寫程式的鬥志了呢?就讓 P 教授帶領你開發潛在的程式設計能力吧! ☞☞ http://www.coursera.org/course/cprogramming

留言

這個網誌中的熱門文章

遊戲化學習(下篇) 結合 PaGamO 遊戲平台,讓人不再抗拒測驗

遊戲化學習 (上篇) 八個讓生活不再無聊的心理學大公開