我在 CMU 交換的那半年,看見美國、台灣電腦科學教育的巨大鴻溝(中)

評論
評論

本文作者為交通大學資工系學生 Heron Yang,他在 部落格 中詳實紀錄了前往全球電腦科學系排名第一的卡內基美隆大學交換的課程內容。Inside 獲作者授權轉載。

作者簡介:"Create Something People Want" -- 是我的信念,於是致力於軟體開發、網頁與網路程式設計、原型發想、文章撰寫與攝影,很歡迎人找我討論想法與合作。喜歡極簡與咖啡。

前言

在 Carnegie Mellon University 交換的日子已經邁入期中,我所修的其中一門課考完了期中考,其餘的則有 Project 在進行中。與學期初修課心得的想法的是一樣:希望把我所見所聞跟更多人分享。

在 CMU 要同時兼顧課業、社交活動與睡覺實在很困難,而我近日的時間安排則是:

  • 早上:寫作業、準備當日上課需要的閱讀
  • 下午:上課或討論 Project
  • 晚上:參與活動或與同學討論作業
  • 深夜:繼續寫作業

每日睡五至六小時,但對於生活中遇到的每件事情都讓我很興奮,特別是在這裡新認識的每一個人;而,這篇文章我會將重點放在修課部分,以及我們可以學習的地方。

修課

這學期我總共修了四門課,分別是 Principles of Software Construction: Objects, Design, and Concurrency、Web Application Development、Network Security 與 Advanced Web Design,以下我簡短介紹這幾門課的內容與特別的地方,而在「反思」的部分則描述與交大相呼應、可學習的地方。

Principles of Software Construction: Objects, Design, and Concurrency

這是 CS 二年級的課,但我在課程中認識的人大部份都已經是研究生了。內容以比較高角度的方式看寫程式的架構與設計,講述抽象的程式設計概念(Design Pattern)並學習畫 UML 圖(例如程式流程圖、物件關係圖等)。
這堂課每週都有作業,也是我起先花最多時間寫作業的一門課,使用 Java:

  • 第一週作業:用 BFS 找出朋友關係圖中,兩個朋友的距離
  • 第二週作業:用 Dijkstra's Algorithm 找最短路徑
    • 使用匹茲堡真實的公車路線資料,規劃使用者如何從 A 站搭車到 B 站(如同 Google Map 的路線規劃)
    • 需要寫 Java 的 UnitTest 達到 100% line coverage(就是每一行自己寫的程式碼都要寫出對應的測試程式)
    • 通過 CheckStyle(即 Java 程式碼中的排版需要符合規定,並且有標準完整的註解)
  • 第三週作業:模擬匹茲堡城市中的公車與搭車情況
    • 練習中型規模的程式如何設計,作業中車子、車站與乘客之間有多種相互關係
    • 模擬各種細節情況,如: 10% 的人若是搭輪椅延後上下車時間,影響全部公車是否準時到達的比例是多少
    • 使用多種課程學到的設計概念

第二週作業我寫起來有 5000 行的程式碼,第三週不加測試碼的話則有 7000 行,是挺辛苦的一門課。下課時間德國教授被一大群的中國學生圍成一圈詢問作業的問題,過了快一小時都不能離開。然而,上週的期中考之後情況好許多,我也漸漸習慣這裡的作業方式了。

反思

  • 交大程式教學重視語法跟完成度,但幾乎不管設計想法 :我記得在交大第一堂 C 語言的課在教不同資料型態的語法;而在 Stanford 學習第一堂 CS 課程時候,教授刻意在前期都不講語法,而透過包裝好的教材(Stanford Karel)學習從較抽象的角度開始思考程式。同時,在交大多數助教並不會看每位同學的程式碼,但在 CMU 連變數名稱取不夠好都會被寫盡評分的回覆裡。
  • 交大程式課程沒有涵蓋「測試」:從這門課的要求中可以看出寫測試碼佔很重要的比重,每寫一小段程式碼就必須寫一段對應的 Unit Test 測試碼。

Web Application Development

這一門課是 Software Engineering 的前期入門課,也算是很多人修的二年級課,但交大其實並沒有對應的課程。

這是一堂同時跨四年級與研究所的課程,學習用 Django 寫網路應用程式,是學校十分熱門的一門課,而每週都有作業。我個人先前恰好學過大部份的內容,所以還行,但對於沒有學過的同學,幾乎是一週要學一個新的語言:

  • 第一週作業:用 CSS/HTML 繪製出一個計算機
  • 第二週作業:讓計算機會動(我的做起來像 這樣
  • 第三週作業:讓計算機在 Django 上跑
  • 第四~第六週作業:寫一個社群網站,可以註冊、登入、留言、評論與追蹤等
Screen Shot 2015-02-22 at 10.22.52 AM
作業是做一個類似於 Facebook 的社群網站

反思

交大的網路應用程式設計並沒跟上時代,多數同學都是自學 :應用程式在交大的重視度較小,而網路應用程式則被包含在資料庫這門課底下,使用 PHP;雖然 PHP 不失一種易學習的語言,但有較完整架構的 Django 或 ROR 並沒有課程在教,而 CMU 這裡則是已經從 Java 換到熱門的 Django 架構(今年)。

Network Security

這門是研究所的課程,與矽谷校區的同學同步,所以上課前都會開啟教室視訊,對方教室的同學也可以發問。是一位印度教授在授課,剛開始的前幾週偶而會漏掉幾個聽不懂的字,但漸漸有改善。

除了上課以外,這門課到目前為止做了:

  • 每次上課前閱讀一至兩份論文
  • 作業一份:寫防火牆
  • Project 討論

論文一篇約十幾頁至三十幾頁,起先我需要花半天的時間才能瞭解一篇論文大概在講述什麼,漸漸的配合上閱讀技巧,可以在兩小時內抓到一篇論文的討論的重點,也會稍微跳過一些細節部分。

其中防火牆作業用到我過往在交大 OSDI 課程中學到閱讀大型程式的方式(cscope, ctags)以及修改 kernel code 的經驗,而有些同學並沒有相關的經驗則在這次作業中挺卡關。

Project 部分近日也在進行中,我們會與微軟的一位研究員一同合作、定期開會討論,成員有韓裔美國人、土耳其人與印度人,與其他成員聊天、討論是最有趣的部分。

反思

  • 交大要求的閱讀並不多 :雖然許多課程都有買教科書,但是會閱讀完的同學並不多,我認為與學習環境的關係最大,如果多加些閱讀的作業會有幫助。
  • 交大課堂產學合作較少 :如這堂課我們組選定主題之後,老師找了一位微軟的研究員與我們共同進行,所以可以使用到微軟的資源,最重要的是研究內容可以使用真實在運作的服務,而非只是實驗室內的小模擬。

Advanced Web Design

這是設計學院的課程,教的是進階的網頁設計,相對於其他 CS 的課程,這門課其實相對輕鬆許多,老師對於作業的要求較有彈性,也很重視討論,於是有一半的課程只有討論,大家跟附近的同學聊天、老師則會與同學一一了解情況。

第一次作業是將現有的 FBI 網頁改成現代的新網頁,同時支援電腦、平板與手機(我的作業在 這裡),設計是一個不斷問題修正與討論的過程,寫作業的過程是我學習到最多的部分。
由於交大沒有相對應的課程,所以「反思」部分則略過。

整體修課而言

  • 交大修課其實是很輕鬆的
    • 交大作業期限通常是兩週以上,而 CMU 作業大部份是每週一份,且都滿大份的。
    • 交大上課同學打混比較多,在 CMU 多數人都很專注,且積極問問題,特別是 Design Pattern 那門課,如果錯過一些概念就會跟不上。
IMG_1763
CMU 的資工系大樓,比爾蓋茲所建

結語

雖然生活很繁忙,但是我十分喜歡這裡,在課程中學到的東西比以往扎實許多,而每一個不懂的地方都可以問很清楚,身邊也有很多實事求是、打破砂鍋問到底的同學,我也認為這是求學最好的態度。

延伸閱讀:

評論