信通院的桑林副院長希望我寫一個交流感受,她想了解下北美的教學方式和中國最大的區別是什麼,花了幾天時間,趁著離開UCSD沒一個月,趕緊把想法記錄下來。
我叫夏宇,是北郵通信工程大四的學生,2012年9月到12月,我很幸運參加了北郵和SAF的合作項目來到University of California San Diego,作為UCSD Extension的學生,在UCSD完成了一個quarter的學習。在這短短的三月裡,我深刻體會到了中美在Computer Science專業本科教育的差別。
在北郵,我雖然不是計算機專業學生,但我們專業也有一些計算機方面的基礎課程,比如c++,數據結構,同時因為我對cs很感興趣,選修了通信工程專業裡所以和計算機相關的課程,比如計算機網絡,linux作業系統,資料庫概論,還有校任選課,作業系統概論,圖論基礎等。
我在UCSD選了下面三門課程
Intr/Computer Sci&Obj-Ori:Java CSE-11
Server-side Web Applications CSE-135
Software Engineering CSE-110
其中CSE11是Freshmen level的課程,也就是面向cs專業大一學生開設的課程,CSE135則是面向大四學生開設的課程,而CSE110則是主要面向大三學生開設的課程。
下面我想從幾個不同的方面談下我的體會。
課程形式
就拿CSE11 Java programing和我大一上的C++課程比較。
UCSD的CSE11,課程形式是每周二、周四的早晨8:00到9:20的lecture,周五下午2:00到2:50的Discussion Section。還有Lab hour,在給定的Lab hour裡,會有Tutor或Ta幫你解答問題,其他時間也可以去機房,但沒有Tutor或Ta。
國內一般是每周會有兩次兩個小時的課程,中間休息10分鐘。大一的時候也有上機時間,也有助教,也可以向助教求助。
另外兩門課程的形式
CSE135 Server-side Web Application,同樣是每周兩次一小時二十分鐘的lecture,一次discussion section。沒有lab hour
CSE110 Software Engineering,課程形式比較特殊,課程模擬一個軟體公司,學生組成不同軟體開發團隊, 每周兩次lecture,周一有一小時Customer meeting,周三有lab,時間不定,一般會花費兩個小時以上
分數組成
UCSD的cse11,有5次當堂Quiz,就是小測驗,老師出一張小卷子,十五分鐘的時間完成,5次總共佔10%的分數,10次Programming Homeworks,每周一個,編程作業佔40%的比例,期中佔20%,期末佔30%
CSE-135 Server-side Web Application,三個大作業,佔60%的分數,一個期中10%,一個期末30%
CSE110 期中10%,期末30%,項目60%,項目細分的很多,包括lab,出勤,文檔,最終演示,每周的customer meeting。
國內的C++, 作業20%,術後習題為主,編程和概念類作業各佔一半,期中20%, 期末60%
我的體會
讓學生從大一就接觸高級知識
北美的課程,尤其是cs的課程,內容更新的很快,非常強調實踐,比如java課程,因為這個cse11是Accelerated Pace課程,是給已經有過編程經驗的同學開設的高級入門課程,老師每周都會布置強度很大的作業,作為大一新生,第一次作業就是GUI繪圖,在隨後的作業裡,面向對象設計,多線程比比皆是。有一次作業是寫一個簡單的連連看遊戲,只給你一周時間,而國內的小學期,也是用c++做遊戲,給將近一個月的時間。另外老師非常強調使用正確的工具,比如不允許使用IDE如Eclipse開發,而要求使用VIM,並引入Linux系統作為開發平臺,在每次作業的簡單題裡,都會有關於Linux和VIM使用的小問題。
這個我覺得極為關鍵,相信現在不少國內的計算機科班的學生,接觸Unix和開源文化都是大二大三才開始的,而且很少是從課堂上了解到的,但在北美,大一的老師從第一天上課開始就開始向大家宣傳,而且如果你要去lab做作業,你發現所有的主機都是Cent OS的,雖然也有Windows,但上面沒有Java的JDK,沒法寫代碼,從代碼的編寫,到編譯,執行都要用最原始的方式進行,不藉助於任何自動化工具,老師希望通過這種方式讓學生更多的了解程序底層的細節。
向學生介紹最前沿的知識
印象最深的是CSE-135 Server side Application Development的課程內容,老師從java Servelet入手,講Server-side Application Development的本質,到JSP, Database Design,Security,再到後面Javascript,AJAX,和Web Framework,所有的內容都是和當今業界緊密聯繫的,實用性非常高,像Ruby On Rails,Html5這些技術都有介紹和展示。 反觀我們專業大四上的網絡程序設計與開發,內容都是很多年前的了,和當今真正網際網路行業使用的技術存在很大距離。
這個學期學校還開設了高級軟體工程課程,授課的老師帶著大家學習Ruby on Rails框架,並在實踐中向同學介紹什麼是敏捷開發,同時老師還會要求同學們組隊完成項目,項目內容自己團隊確定,一般都是基於web的一些有意思的工具,比如有一個團隊做的Lost and found網站,結合google map,丟東西的人可以把物品描述和物品丟失的可能位置標記出來,撿到東西的同學也可以給物品拍照,並把撿到的位置標出來,供學校學生使用。完成後會將web app部署到雲端,通過這種方式,學生在課程中同時也接觸了像SaaS等現在非常火的概念。 但在國內,計算機專業學生的軟體工程課往往還是做類似於圖書館管理系統,學生管理系統等。內容雷同,而且用的技術也是很多年前的java ee等企業級的傳統軟體項目。
高素質的學生
來到UCSD以後,另外一點令我感受頗深的是學生的素質。原來以為美國學生大學party居多,並不很重視學業,但實際上恰恰相反,cse11的java課程一共有180多的學生上學期選了這門課,最後我的排名是67名,總分97分(北美的很多課程有電子的成績系統,每次作業,每次考試的成績都會放在上面,系統會自動計算你的排名,你可以看到很多統計數據)有10幾個學生的總分超過了100分(每次作業都有bonus額外分數,期中期末考試也有額外分數)80分以上學生佔到了95%,每個周末你都能看到很多大一的學生自發組成學習小組,來到機房做作業。
軟體工程,我和另外7名同學組成一個小組,為一個當地珠寶商開發一個電商網站,我的組員每個人都主動承擔很多工作,文檔撰寫和coding,有一次我們團隊負責前端的同學因為要去舊金山參加面試,耽誤了幾天時間,但他周末回來後,周六周日兩天都泡在機房,最後還是按時完成了他負責的任務。 北美這邊自由的選課制度和嚴格的教學方式使得本科的cs畢業生就具備很強的實踐能力,有很多UCSD CS本科生去Facebook,Google實習,拿到全職offer的也是數不勝數。
嚴格的學術紀律
在UCSD上的三門CS課程,第一節課上來老師都會強調Honor of Scholarship,cs11的老師甚至第二節課讓我們列印一份Integrity of Scholarship Agreement,籤字交上來,這樣才算選上這門課,我有一個東南大學參加SAF交流項目同行的同學,有一次資料庫作業快要截止了,但他當時還在寫高級數據結構的作業,於是他便從自己中國同學那裡要了一份兒代碼,改了改變量名就交了上去,但被老師查出來和原來那份有極高的相似度,於是他們兩個都被叫到了老師辦公室,解釋是怎麼回事,他們向老師解釋因為他們是交換生,剛到這裡還不太了解這邊的規矩,所以請求老師原諒他們一次,他們很幸運,老師說不會上報給學術委員會,我的同學也老老實實的重寫了一遍作業。
老師和他們說,這種事情如果被學術委員會裁決為抄襲或舞弊,他們會受到非常嚴格的懲罰,類似於留校察看或者直接開除。而在北郵,期末考試作弊,會被留校察看,替考會被開除,而平時作業抄襲沒有任何處理,這也就導致了很多編程作業,抄襲往屆學長作業,團隊開發,只有一兩個能力強的寫代碼,其餘人傍大腿這種情況。
完善的助教制度
在UCSD的Computer Science and Engineering Department有著非常完善的助教制度,很湊巧,我上的CS11的老師和CS110的老師是專門負責CSE下助教和Tutor事宜的老師。
在UCSD,Ta要求是研究生或博士生,tutor可以是本科生或研究生,拿CS11舉例子,180多人的課程,有一個Head TA,還有十多個tutor,Head TA是研究生,在google和facebook都實習過,現在是UCSD的facebook校園大使,她負責管理手下的十多個本科tutor,tutor主要負責lab hour時給同學答疑解惑,每周的discussion課也會有不同的tutor來給大家上,每次的編程作業每個助教會判十幾個學生,然後親自給學生發郵件,並標出每一部分的得分和扣分原因及改進意見。 這些tutor一般都是大三或者大四學生,工作一個quarter,學校會給他們大概1000多刀的工資,每周需要有大概3~4個小時的工作時間。
而TA有兩種選擇,一種是每周工作10個小時,每個月有1000多美元的工資,還有一種是每周工作20小時,每個月有2000多美元的工資,還能減免一半的學期學費。但是TA非常辛苦,每節lecture都要參加,要了解當前課程內容和進度,還要主持discussion lecture,還有判作業改作業,解答學生問題,期中期末監考,老師基本上只負責授課,剩下所有的事情都交給Ta來做。雖然Ta和tutor很辛苦,但吸引他們的並不主要是工資。 這邊的很多大公司,比如微軟、Facebook、亞馬遜、Google等,他們傾向於招募有過Ta或tutor經驗的學生,而且作為教授的Ta,教授最後會幫你內推或者考慮接受你作為Phd學生。所以就成為了一種良性循環,大一新生上課後,知道他身邊的ta和tutor很多都是在這些大公司實習過的,他們知道主要因為有tutor經歷,也有了奮鬥的目標,於是他們在老師和ta、tutor的鼓勵和幫助下拿到高分,大二被招募回來做tutor,有了這段經歷找實習的時候很有競爭力,拿下了大公司的offer,再回來做tutor或ta,幫助更多的學生。
但這種模式在中國實施起來難度很大,一方面是學校沒有這麼多資金支持,另一方面是教育資源有限,老師太少,學生太多。 而且學術紀律和學生素質達不到要求,但我認為這其中有很多值得學習和借鑑的東西。
UCSD—Final Presentation專業剛剛結束了在ucsd上的cse110 軟體工程的 final presentation。感觸很多,想和大家分享一下。
首先介紹一下這門課的形式,Professor Gary Gillespie 是我們的lecturer,cse110的形式很特殊,Gary實際上以公司的形式來開設這門課程,cs110 fall 2012 Gary是公司的founder和ceo,他手下有兩個TA,他們分別是COO,Chief Operating Officer,營運長,一個CIO,Chief Information Officer。 還有三四個Tutor,他們是Executive Board Members。專門負責lab時的tutoring。
課程開始時,Gary向我們介紹了這門課的形式,所以學生組隊,8-9人的團隊,作為公司的一部分,這個學期的主題是電子商務,但沒有限定的方案或形式,所以團隊可以自己做決定,沒有要求實現技術,完全自己決定。
所有組員都有明確的角色分工
Project Manager Subject Matter Expert: Researches the inner workings of online stores and is involved with how the business rules are integrated into the project. Senior System Analyst: Coordinator of Use Cases, User Story, Requirements. Software Architect: Coordinates design, selector of technologies. Software Development Lead: Coordinates software development. Algorithm Specialist: Designer of algorithms and module interfaces. Database Specialist: Maintains database and related issues. Quality Assurance Lead: Coordinates testing phase, ensures procedures followed. User Interface Specialist: Focuses on the look and feel, and user experience. 每個人根據自己擅長的技術或興趣選擇職位,所有人都會sumbit code,但側重和工作量不同。
就這樣,一周這後,5個小組誕生了。所有的team每周需要參加周一的customer meeting,實際上就是每組展示每周的artifect,來模擬整個軟體開發過程,比如User Story,User Case,Database Design etc, 然後Gary逐一點評,每周三還有 Engineer All hand lab,每周都有一個學習主題,比如Version Control使用,html css,mvc design等等。每周各個team還有 team meeting 討論分工和進行code review,每周每個人要提交time card,來規劃每周的時間安排,每兩周還有peer review,給自己的組員打分,來評價每個人的貢獻,也會給自己打分,得分低的學生與自己給自己打得分和teammate給自己打分差距極大的學生,Gary會單獨發郵件溝通。經過三個月的奮鬥,終於到了最終presentation的時候。
這門課最後一共有41名學生enroll,分為了5個小組,分別是:
Team WIN ——World wide inventory management 我所在的團隊,Final Presentation 第二名,一共8個人,我的角色是Software Architect + Software Development Lead 這是我們最後的網站Michael Collins Jewelry Store 組長Cory在當地的一家珠寶店兼職工作了很多年,他現在的網站非常舊,Preview Version 而且基本沒有server side的支持,完全的靜態網頁,我們打算為他重新打造一個全新的系統。我們使用的Python Django, Mysql 和Bootstrap + Jquery
Team WTF —— Not what the fuck, is We Trader Fun 8人團隊 http://wetradefun.appspot.com/ (沒有完全向外界開放) WTF的點子我非常喜歡,他們決定做一個遊戲交換的網站,有點像初中玩GBA那會兒去玉泉東換卡的意思,他們的網站使用了GiantBomb 一個Game Database 網站提供的api來獲得所有的遊戲信息,你可以搜索所有的遊戲信息,然後加入wishlist,然後你可以把你手頭閒置的遊戲加入到offer list,當有其他人對你的遊戲感興趣他們會給出offer,你則需要從眾多offer中選出一個最喜歡的,然後和他交換。 同樣使用的Python Django Mysql 和Bootstrap + Jquery
Team OCD —— Over Clocked Developers , 9人團隊這是他們的最後網站BuyBox Final Presentation第一名的團隊,他們開發了Buybox網站,類似於一個微型的二手市場,你可以將自己閒置的,想賣的東西發布到上面,感興趣的買家可以直接給你打款,最大的feature是和社交網絡,二維碼的結合。 用戶發布東西後,可以列印出帶有二維碼的傳單,在學校裡散發,當用戶掃描二維碼後,可以跳轉到buybox的網站,而且他們的結帳系統非常直接簡單,和itunes類似,首先設置後信用卡信息,然後每次決定購買時,一步了當,簡單明了,系統非常易於上手,前端的界面也是經過細心雕琢,也適配移動終端。他們下一步打算在UCSD嘗試讓大家使用,很有可能作為創業的項目。 他們的團隊也是強手雲集,Team member,product manager是HP的工程師,大四學生,一個ruby on rail高手,Quality Assurance Lead是管理科學專業,cs minor,他策劃的所有商業方案,並打算明天以他們的網站去做business課程的final presentation。 他們的database specialist 和software architect分別是Carefusion 和 Northrop Grumman的軟體實習生,另外一名db specialist是graduate student,ruby高手。兩名女生是ui design,每個人都投入了大量的時間和精力在這個項目上,其中一個ui女生和我一開始上cse135課,本來我想和她組隊做cs135的項目,但後來她drop了,說要投入精力在她們的網站。他們使用Ruby on Rails +Mysql + Bootstrap,使用Heroku作為hosting platform
Team WAIT —— Wonderful Amazing Inventory Tracking, 他們也有一個真實客戶,其中一個組員的媽媽是一個賣眼鏡的公司的CIO,他們需要一個Inventory Tracking system來跟蹤所有的貨物,但因為他們使用的非常過時的資料庫,但希望逐步切換到新的技術,於是WAIT team創建了一個Inventory Tracking Website,幫助他們的客戶來做這個過渡,功能很強大,可以上傳excel表格,並轉換格式,呈現在網站上,並能在google map上跟蹤所有seller信息,他們的客戶非常滿意,並打算讓他們繼續做下去,他們很有可能把系統作為產品,買給這個公司。用的技術同樣是Python Django + Mysql + Bootstrap,Jquery
Team SOL —— Software Optimization Logistics 7人團隊,做的類似於OCD,也是一個小型的電商系統,但沒有很多的創新點,也沒有很吸引眼球的feature,SOL Website 可以看到他們所有的Artifect,但網站的server SOL Team 無法訪問。 他們最大的亮點是他們的Artifect,所有的文檔都是以網頁的形式發布到網上,他們的一個組員是php大牛,寫了一個工具來管理這些文檔,我是非常佩服。他們用的技術是Jsp + Mysql + Bootstrap,Jquery
雖然最後大家投票,我們組排名第二,但我自己認為第一當之無愧是OCD,第二是WTF,第三是WAIT,我們排第四,因為論UI,我覺得我們做的一般,網站的功能也非常簡單,實現的也是中規中矩的小型電商網站,而WTF有非常好的商業方案和功能實現,如果上線,感覺會發展很快。WAIT沒有絢麗的UI,但很樸實,為它們的客戶提供最好的解決方案,專註解決問題。
在ucsd的這個quarter感觸最深的就是這門課,和我在北郵上過的課徹底不同,Gary上課基本不怎麼講太細的理論,他在Xerox和SAIC工作了有20多年,是一個Senior Software Engineer,UCSD的本科和研究生,退休後回到UCSD做全職Lecturer,他第一節課就說,I hate teaching Software Engineering, Because you can't learn it unless you actually do it, so I have no idea how to teach at all. 所以真正的課堂就比較奇葩,一般上來他就講他工作時的一些故事,講他身邊的奇葩工程師,特別二逼的manager,特別照顧他的mentor等等,然後就開始講Head First Design Pattern,用了三周時間過完了一本書,有用了兩周時間過完了Head First Software Development,上課基本沒有講義,直接維基百科,無比飄逸,quiz和midterm都很簡單,甚至允許你自己出題,如果題目出的好還給你加分。
但真正學東西的是當你做project的時候,和所有隊友溝通,交流,分配任務。我的隊友Brian,他也是Software Development Lead,一個Chinese,但從來不說中文,開始的兩周基本不怎麼參與開發,第一次peer review結束後,被Gary單獨聯繫後,開始輸出,但往往不能令人十分滿意的完成任務,總是給你殘缺的東西,然後自己去忙別的,我們的manager cory很負責,他是Cognitive Science的學生,修了Cs的minor,非常喜歡Game Industry,打算以後去暴雪工作做game desiger,Ryan是我們的UI Specialist,非常負責,獨自完成了很多design的任務,Josh是Quality Assurance Expert, 這個周末連續工作了兩天,測試網站,提出bug,編寫測試用例,非常認真,我從一開始就非常認真,投入了很多時間精力在項目上,基本每個周末都在lab裡coding,我寫了80%的後端系統,和很多前端的頁面,我的隊友也很信任我,認可我的貢獻,兩次peer review都給了我滿分,對於整個team,最大的問題是能夠輸出代碼的人太少,包括我也是參考著一本Python電子商務實戰的書在寫,我雖然學過一段時間python,在微軟實習的時候也做的web development,但因為對Django不熟,很難完全自己實現一個模塊,更何況我的隊友了,Steven更偏向硬體,而且手還骨折了,平時所有的文檔formatting都交給他,也很難輸出,樂哥修了四門課,也沒時間精力。好在最後系統成功上線,雖然在交付前有很多bug要調,但畢竟是一個完整的項目,雖然沒有OCD的Buybox那麼牛逼,但畢竟人家是全員參與,而且很多有經驗的developer,我們能拿第二已經很欣慰了。
昨天去聽了UCSD在Facebook的實習生的經驗交流會,印象最深的就是Facebook不管你的學歷和學校或著gpa,他們找的是對網際網路有極高熱情且聰明的人,有了熱情和興趣,你便願意投入時間和精力去做某件事,而聰明的人能更快的掌握工具,更短的學習周期和更好的學習效果,加快完成的時間。
經過一個學期的項目,有太多的東西要學,html css js還有後端的技術,包括資料庫,回國後要靜下心來認真學了。下周final week,快回國了! 爭取再找份實習,加油少年!
THE END
【美國留學中心】最齊全的美國留學資訊,最扯的美國新聞吐槽,最有用的留學攻略。回復「#加關鍵字」進入搜索,如「#留學」。
微信ID:usagogogo
點擊閱讀原文即可體驗主頁菌推薦的可測你離DreamSchool幾裡地的免費評估表(不準我會亂說?!