當愛因斯坦遇上Python!
物理模擬程式競賽 激發台大生創意火花

寫程式和學第二外語,你覺得哪個對學生比較重要呢?蘋果(Apple)執行長庫克(Tim Cook)去年10月在接受法國媒體採訪時曾說,「如果我是一位10歲的小男孩,我認為學習寫程式比學第二外語更重要!」庫克還強烈建議全球各政府,都應該將學習寫程式,納入基礎教育的課程規劃。程式語言無疑是未來全球共通的溝通方式。

Coding成為職場必備技能

與《財富》雜誌(Fortune)和《彭博商業週刊》(Bloomberg Businessweek)並列為全球三大財經商業媒體的《Fast Company》 雜誌,也曾發文表示「寫程式」將是職場工作者最重要的必備技能。不只是企業大老闆與知名媒體超推崇寫程式的能力,就連職場工作者也將「Coding」視為拿高薪的必備武器。

美國職業資訊網站glassdoor近期就做了2018年「美國50個最好的工作」《50 Best Jobs in America》調查 。它是根據工作內容好壞評比(Job Score)、工作滿意度(Job Satisfaction)、平均薪資(Median Base Salary)、開放的職缺數量(Job Openings)進行綜合比較。我們可以發現,在前50名的好工作中,就有18種工作和「寫程式」這項技能密不可分。

舉例來說,榮登全美最棒工作冠軍的「資料科學家」(Data Scientist)與亞軍的「系統營運工程師」(DevOps Engineer),以及排名第六的「電機工程師」(Electrical Engineer)、名列第八的「行動開發人員」(Mobile Developer),這些美國人心目中的好職位,各個都得具備coding的專長。想成為未來職場上最炙手可熱、無可取代的專業人才,「學習Coding」絕對是邁向成功的第一步。

以寫程式學物理,台大教授翻轉教學方式

台大物理系教授石明豐與台大電機系教授林宗男,同樣認同Coding的重要性,但他們認為寫程式不應只是電資學院學生的專利,很多理學院、工學院的學生也該培養coding的能力。

因此石明豐教授從4年前開始,率先將很多理工科系必修的大一基礎課程「普通物理」進行變革――融合電腦程式「Python」與「VPython」模組於大一普通物理課程的跨領域學習。換句話說,課程內容將不再只是以紙筆計算解題,而是透過寫程式來瞭解物理原理。

首先,教授會藉由一系列的作業讓學生學習程式語言Python,熟悉了Python之後,再利用Python中的模組――VPython 的3D圖像,來模擬物理原理。石明豐教授認為,「唯有先瞭解抽象的物理原理,才有辦法理解為何要用某些特定的方程式,」接下來,就能進一步透過寫程式來解題了。

舉例來說,流體力學方程式在物理學當中是一個相當複雜的系統,但有學生就懂得利用3D繪圖來模擬海浪,並透過大格點來處理流體力學方程式,做出表面波與兩層不相容流體的內波。最後,學生不僅完成了水槽中的水波模擬,對於流體力學方程式也有更深入的瞭解。

石教授強調,很多學生在學習物理時,大多習慣「紙上談兵」,如果單以紙筆計算,是難以真正理解物理原理,因此要藉由學習寫程式,培養學生解決問題的能力。

林宗男教授在電機系必修課程「計算機程式」課程中,同樣是以Python作為入門程式語言,並利用vPython以3D繪圖方式模擬物體運動。重視實作的林宗男教授,還特別為學生安排了每周3小時的上機實作練習,要透過充分的實作,讓學生輕鬆迅速地瞭解Python這個程式語言。

舉辦物理模擬程式競賽,號召大一生一起玩Coding

為了讓更多對寫程式有興趣的非本科系學生,能有發揮實力的舞台,林宗男教授和石明豐教授在3年前共同創辦了「台大物理模擬程式競賽」。石明豐教授表示,當初之所以舉辦這樣活動,就是希望能透過競賽方式,「讓學生以物理原理或物理應用為大框架,撰寫與生活情境、物理相關課程中習得的物理現象有關的模擬程式。」

競賽主題並不限於物理學,還可包含化學、生物與心理學等其他科學內容與面向。今年就有台大心理系的學生報名參賽,主題是跟視覺心理學有關的「視錯覺」(Footsteps Visual Illusion),另外還有撞球、打水漂、火焰模擬、滑板特技模擬、節拍器的同步現象等各種有趣的主題。林宗男教授表示,「期望能透過每年舉辦競賽,激勵學生發揮創意,將程式應用於所學課程。」

物理模擬程式競賽今年已經邁入了第三個年頭 ,看到一年比一年更優秀的參賽作品,都讓林教授和石教授為之振奮。值得一提的是,物理模擬程式競賽是限定給大一學生參加的,今年得獎的團隊中,還有不少學生是在大學前從來沒接觸過coding的「程式麻瓜」,這些學生才經過一個學期的學習,就能寫出讓教授讚賞的好程式,實在難能可貴。

從前的程式麻瓜,變身競賽Coding高手

以今年獲得冠軍的作品「火焰模擬」來說,是由台大電機系大一生李崇嘉、熊政凱完成的。台中一中畢業的李崇嘉,直到進入台大電機系就讀後,才第一次接觸Python,開始學習寫程式;熊政凱則是雲林正心中學畢業,高中時曾經有接觸過Python、C++這兩種程式語言。在李崇嘉和熊政凱身上,還可以看得到大一新生的青澀感,但談起自己的作品,言談中則有著滿滿的自信。

「物理規則很簡單,數學也可以計算出來,但要把公式用程式模擬出來,就是一個挑戰。」熊政凱解釋,以他們的作品主題「火焰」來說,就是生活中常見的物理現象,而火焰的燃燒則牽涉到化學的熱與能量,這些物理與化學原理都能從書本上學到,但如果要做到火焰模擬,就得寫出好程式,才能產出逼真的動畫。

「這真的不是一件簡單的事!」李崇嘉指出,剛開始模擬的雛型就是做出一個會冒泡泡的球,接著再一步一步補強完成。「原本我們希望做出一個完整的理想型模擬,但真正操作之後,發現實務上有一定困難,所以只能簡化。」雖然說是簡化,但實際模擬出來的火焰效果自然逼真,完全看不出是程式初學者的作品。問他們是如何進行團隊分工,兩個人則不約而同地說,一個人負責主架構,另一個人負責補上分支。兩人團隊合作無間,才能一舉奪得冠軍殊榮。

身為競賽評審的林宗男教授和石明豐教授,對於李崇嘉和熊政凱的作品都讚不絕口。石教授表示「在這個作品中,作者們想要模擬火焰的燃燒情形,並將燃燒的動畫顯示出來。其中,他們考慮了燃燒過程中,因化學能產生的熱、氣體受熱膨脹的情形、雜訊、浮力與重力等,並以粒子的模型來處理火焰的動態。儘管他們並未將流體性質考慮進去,但是以大一生的程度來說,這個作品已經相當優秀了!」

談到未來,李崇嘉笑說,「接下來我們還要再修機器學習課程,讓電腦去學習如何做出最棒、最栩栩如生的火焰模擬!」




完成作品好比執行專案,參賽學生收穫滿滿

今年參賽隊伍中,有一組來自台大資工系大一的3人團隊――高聖傑、蔡宥杏、蘇庭葦,他們的作品「打水漂」同樣傑出,並深受評審委員好評,榮獲了競賽第二名的好成績。

石明豐教授指出,今年亞軍作品的題目,和兩年前另一個得獎作品是一樣的題目――打水漂,而今年的作品更優秀,將圓盤和水面接觸之間的力,包括浮力、正向力、摩擦力與這些力所產生的力矩,做了更仔細的分析,使得模擬更接近真實,也能清楚顯示出水漂的次數,和圓盤的轉速、速度、角度等的關係。

有趣的是,高聖傑、蔡宥杏、蘇庭葦和得到冠軍的李崇嘉一樣,在上大學之前都沒接觸過程式,直到進了台大之後才開始認真學寫程式。而資工系教的程式語言大多是C或C++,他們3人是因為修了「普通物理」課程才第一次接觸Python。

談到自己為什麼會參加競賽,高聖傑侃侃而談,「大一上學期我特別修了高英哲教授的普通物理課程,因為我對物理模擬真的很有興趣!」為了完成打水漂這個作品,高聖傑、蔡宥杏、蘇庭葦3個人光是寫程式就寫了將近20,000行,高聖傑甚至每星期至少花6個小時、有時還超過10小時以上時間在準備這個作品。

高聖傑形容,參加這個競賽就好比執行一個「專案」一般,團隊必須充分合作。「寫程式就像寫作文一樣,畢竟每個人寫的程式碼不盡相同,有自己的風格、習慣的方式。寫完自己的部分之後,還得co-work、彼此配合,才算真正完成project。」高聖傑笑說,要完成這個作品真是一項大挑戰。

蔡宥杏、蘇庭葦表示,平常在學校上課時,不管是做作業或學習,都很習慣教授給什麼就學什麼,而且只需顧好自己的部分就好。但要完成物理模擬程式的作品,可得通過層層關卡,像是確認作品主題與內容、分配團隊成員各自的任務、寫程式、試誤、彼此調整等等。「參加這個競賽真的讓我們學到很多!」她們2人異口同聲地表示。

林宗男教授和石明豐教授一直堅信,不論是以寫程式學物理,或是提供學生充分實作練習,抑或是舉辦物理模擬程式競賽,這些努力一定能逐步改變學生的學習態度,讓台大學生不再只是會考試、拿高分,而是懂得發現問題、解決問題的高材生。