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

評論
評論

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

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

前言

落筆的此刻是學期結束的隔天,與撰寫前兩篇心得(學期初學期中)的動機是一樣的,希望把交換過程間的所見所聞與更多人分享。而不同之處是我已經在這兒待頗久,融入並適應之後很多想法可能較無法很客觀地從第三人角度撰寫。

學期初多半的精力我用在適應環境,然而學期中之後,因為幾乎每一堂課的主軸都變成 Project ,我在學習上的重點變成怎麼與人互動、和大家怎麼一起把東西做好,而不同文化的優秀學生合作經驗成為最寶貴的收穫。

以下針對我所修的四門課,在期末這段時間值得分享的地方,接著是我跟過往在交大學習經驗上的反思。

修課

Principles of Software Construction: Objects, Design, and Concurrency

這堂課仍一直是以作業考試為主的,課程目標是讓我們從較高角度但兼具實作的方式學習各種中大型程式的設計與需要用到的技巧,以下是學期後半段的作業以及簡介:

  • Scrabble:撰寫一個 Scrabble 遊戲(二維拼字遊戲),需要有介面並有好的設計以面對之後的擴充功能。其中有運用到多種 Design Pattern ,寫程式之前需先繪製程式設計圖跟助教討論
  • Socail Network Analytics: 這份是需組隊的作業,我與一個印度同學合作,需撰寫出一個可以針對各種 Social Network 裡的數據分析並製圖的程式。困難之處在於作業要求的是一個 Framework ,需要讓使用者可以自由加上不同 Plugin 的架構(例如, Facebook Plugin 、 Github Plugin),於是程式彈性是很高的,支援各種用途。這份作業分成三大部分,第一部分是把設計圖提出在助教課上報告;第二部分則是撰寫程式,包含 Framework 與數個 Plugin ;最後一部分是寫 Plugin 裝在其他組的 Framework 上頭
  • MapReduce:這是一個分散式系統中運算資料的方式,而作業需寫出數個 Server 跟 Client 同時跑以模擬一份運算怎麼在多台機器上頭分工後完成

整體而言,這堂課教導學生從原本寫單份的小型程式到架構較複雜的中大型程式。

Web Application Development

學期中我們作業是完成一個社群網站,其中功能包含註冊、 Email 確認信、登入、留言、上傳相片與即時更新等,最後再把網頁放到雲端服務上,我的做起來像是 這樣

接下來的時間我們都分組完成一份 Project ,過程中有很多的次的進度報告,是在一個小會議室中跟助教還有一些其他同學報告、聽取建議。我們做的是 Bug Killer ,概念如 StackOverflow 讓人可以發問 Bug 與回答 Bug ,不同之處在於我們加上點數的功能,於是使用者發問 Bug 需要付出點數、回答問題則可以得到點數,且點數是可以用實際金錢買的,最終的作品放在 這裡

其他同學有人做類似 SoundCloud 線上音樂平台、同時包含商家與客人端的點餐系統以及旅行路程規劃等網站。

Network Security

每堂課上課前的論文閱讀仍持續至期末考前,而 Project 部分我們每週見面討論,分頭做實驗,最後再撰寫一份論文並有海報的期末報告。我們做的是分析網路上販賣假 YouTube 瀏覽量的方式,透過實際購買假瀏覽量,我們能分析流量的特徵,並嘗試寫自己的程式去產生瀏覽量。論文放在 這裡

期末的海報報告頗有趣的,在一個室內空間中有免費點心食物,然後感興趣的人會進來聽各組的作品,最後透過投票選出最佳的組別。有組別做新式的防火牆並在學校工作站上測試、有組做網線網路未註冊使用者偵測系統並錄製了影片展示等,大家都很愉快並認識彼此的作品、互相學習。

Advanced Web Design

這堂課總共有四份作業,最後另外有一個分組 Project ,且有一個共同展示成品的時間。我們做的作品叫做 Tmate ,靈感來自於我們發現設計師與工程師這兩個族群通常有各自的社交圈,彼此之間的交集並不多,然而以一個完整作品的角度而言,這兩個社交圈若能彼此認識是很好的,於是 Tmate 讓設計師與工程師可以登記自己的頁面、彼此認識,並可以依照專長搜尋。成品在 這裡 ,是同時支援各種螢幕大小的。

IMG_0822
Tmate 網站支援多種螢幕大小

反思

  • 交大修課的期末 Project 規模與完整度較小 :發現在 CMU 同學們投入在期末 Project 的精力頗大,每個所做出來的東西完整度或規模,都是我先前在交大不曾做過的,而我這兒遇到的人大家都努力堅持到最後、不斷的修正問題直到最後一刻。
  • 交大在專業工具上的使用上較少 :如網頁設計的課,與設計師隊友使用 Git 同步程式碼省下大量的時間跟開發問題; Network Security 的 Project 中我們使用 LaTeX 寫最終的報告,在架構與可讀性上增加許多。

不只是修課

有趣的是,在 CMU 這段時間裡,我學到最有用的知識其實並不是來自課堂,主要以下幾項值得分享:

  • VIM/zsh:從高一用 VIM 到現在我始終很難找到同好,甚至推銷總是失敗;然而在這兒我參加 CMU 電腦社團的講座,講者分享他的 VIM 用方式,以及很多我不曾知道的使用方法跟 Plugin ,讓我的往後打程式的效率又更進一步(這裡 有他當時的筆記)
  • LaTeX:一樣是我以前接觸過但不曾學起來的東西之一,在先前的環境裡並沒有遇到其他人在使用 LaTeX ,而在 CMU 一位好朋友很喜歡 LaTeX ,跟她學了很多,現在我也能自己寫不少 LaTeX 的文件了!
  • Git:又是一樣的,過去我自己會使用版本管理系統,但是同學們之間並不使用,所以在這兒讓我有機會可以體驗 Git 在多人同時開發時候是如何的、又有什麼問題需要注意的

結語

網頁設計的 Project 我們在展示的前一天在圖書館通宵趕工,隔週週末我們一起去動物園玩; Network Security 的 Project 我們合作間不時會吵架,但最終得了第二名,隊友們感情很好我們更曾一起去華盛頓玩; Principles of Software Construction 分組作業的印度隊友則跟我一樣喜歡貼貼紙在電腦上,於是我們互送了很多貼紙;而 Web Application 的隊友則是我這段時間最好最好的朋友,我們總是一起唸書。

於是乎,在不同學校交換的過程中,最重要的是遇見什麼人,而大家彼此之間的態度又是如何。所學的知識固然珍貴,但會讓我難忘而永存的是這裡遇到的每一個人,以及我們如何互相對待彼此。誠心待人、遇到問題直問、專注並投入在自己的學習上是這回交換日子裡我學習到的態度,讓自己保有這樣的態度是不需要跑到地球另一端、也不需要花錢的。

延伸閱讀:


精選熱門好工作

客服消費爭議專員

樂購蝦皮股份有限公司
臺北市.台灣

獎勵 NT$20,000

Full-stack (Frontend most) Senior Software Engineer

ShopBack 回饋網股份有限公司
臺北市.台灣

獎勵 NT$20,000

Backend 工程師

Omlet Arcade 美商歐姆雷特
臺北市.台灣

獎勵 NT$20,000

評論