Tuesday, May 12, 2015

[CMU V.S. 交大] - 學期末修課心得

Network Security 期末海報展覽

前言

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

學期初多半的精力我用在適應環境,然而學期中之後,因為幾乎每一堂課的主軸都變成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讓設計師與工程師可以登記自己的頁面、彼此認識,並可以依照專長搜尋。成品在這裡,是同時支援各種螢幕大小的。

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的隊友則是我這段時間最好最好的朋友,我們總是一起唸書。

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

* 關於交換過程更多的生活點滴:http://cmu.heron.me/

Heron at CMU

4 comments: