UC Berkeley EECS是如何培養計算機學生的
Photo by Anthony Hall / Unsplash
加州大學伯克利分校電子工程和電腦科學系(EECS)是世界知名的院系,計算機領域在2020 USNews排名第一。EECS的使命是教育
、創新
和服務社會
。自建立以來,為社會培養了大批人才,誕生7點陣圖靈獎得主。EECS認為,其成功的背後,是強大的合作傳統、與工業界緊密聯絡和互助的文化。
像這樣的頂尖大學,本文無法面面俱到,而是從計算機專業培養入手,結合課程
、研究中心實驗室
等角度總結其培養學生的特點,為CS領域或想轉行CS的小夥伴提供可借鑑的方法和參考。
課程
命名約定
課程採用編號+課程名
表示,比如很出名的CS 61A: The Structure & Interpretation of Computer Programs
,61A是課程的編號,字母A表示系列(下面會介紹),後面跟著名字。關於編號有如下約定:
- 0xy (e.g., 16, 61, 70) - lower-division courses,預設0是省略的,表示核心課程
- 1xy (e.g. 105) - upper-division courses,高階課程
- 15x - Computer Architecture,計算機體系結構類課程
- 16x - Software,軟體類課程
- 17x - CS Theory,計算機理論類課程
- 18x - CS Applications,計算機應用類課程
- 11x - Electromagnetics/Optics,電磁學或光學類課程
- 12x - Information Processing and Communication,資訊處理和通訊類課程
- 13x - Physical Electronics,物理電子類課程
- 14x - Integrated Circuits and Embedded Systems,積體電路和嵌入式系統類課程
- 19x - Special Topics, Directed Studies,特殊主題課程,指導學習
不同編號序列按照如下約定:
- 1xy,1開頭為本科課程
- 2xyA is the mezzanine-level course room-shared with 1xy,和1xy課程共享教室,但內容層次更高
- 2xyB,研究生課程
- 2xyC, 2xyD...,2xy後面跟C、D...表示後續課程
從上面可以總結出,0xy是核心課程,1xy是本科課程,2xy是研究生課程。總體分為EE和CS兩大類,層次分明。
0xy核心課程
核心課程:
- CS61A 計算機程式的構造和解釋
- CS61B 資料結構
- CS61C 計算機結構
- CS70 離散數學和概率論
0xy系列課程重點培養學生的計算機基礎、電腦科學素養和數學能力。
1xy本科生課程
本科生CS課程:
- CS 161 電腦保安
- CS 162 作業系統與系統程式設計
- CS 164 程式語言與編譯器
- CS 169 軟體工程
- CS 170 高效演算法與難題
- CS 172 可計算性與複雜性
- CS 174 組合數學與離散概率
- CS 182 設計、視覺化和理解深度神經網路
- CS 186 資料庫系統概論
- CS 188 人工智慧導論
- CS 189 機器學習導論
- CS C191 量子資訊科學與技術
面向本科生的1xy系列課程和0xy系列核心課程有明顯區別,0xy是核心基礎課,1xy則針對CS不同方向開課。
2xy研究生課程
研究生CS課程:
- CS 252 研究生計算機體系結構
- CS 261 計算機系統安全
- CS 261A 因特網與網路安全
- CS 262A 計算機系統高階主題
- CS 262B 計算機系統高階主題,對262A的延續,高階話題一門課講不完...
- CS 263 程式語言設計
- CS 264 程式語言實現
- CS 265 編譯器優化與程式碼生成
- CS 268 計算機網路
- CS 270 組合演算法與資料結構
- CS 285 Deep Reinforcement Learning, Decision Making, and Control
- CS 286A 資料庫系統導論
- CS 286B 資料庫系統實現
- CS 288 自然語言處理
- CS 289A 機器學習導論
- CS 294-162 機器學習系統
- CS 298-015 BAIR First-year Proseminar
- CS 299 個人研究
2xy系列是面向研究生的課程,部分課程名和本科課程相同,為了區別會在前面加上Graduate
(研究生)或Advanced Topics
(高階主題),比如CS 252. Graduate Computer Architecture
。為了培養研究生論文閱讀、交流討論等能力,還開設了研討會課程(CS 298-015 BAIR First-year Proseminar)。
課程總結
下圖是筆者總結的CS課程架構圖,可以看到特點鮮明:分類合理、層次分明、層層遞進。紅色部分是核心課程,也是其它課程的基礎,然後將課程分為軟體、硬體、理論、應用等方向。有些課程本科和研究生階段都會開設,但研究生課程偏向高階主題、注重研究。
EECS資訊化程度很高,上文提到的課程都有對應的官網資源,讀者可以瀏覽EECS Course WEB Sites選擇自己感興趣的課程。
培養方案
本科
伯克利是公立大學,招收的學生數量比哈佛、史丹佛要多很多,因此對於本科生來說有三個特點:寬進嚴出、競爭激烈和豐富多彩。在學位上,CS方向為本科生主要提供兩個選擇:
- 由文理學院(Letters & Science)提供的CS專業專案,畢業後授予Bachelor of Arts
- 由工學院(College of Engineering)提供的EECS專業專案,畢業後授予Bachelor of Science
兩個學位CS課程內容是一樣的,不同點在於選修課上,文理學院提供更豐富的課程選擇,工學院的選修課側重EECS領域。想修雙學位可以選擇前者,希望專注於計算機、STEAM選擇後者,詳情參考EECS/CS Program Comparison Chart。
研究生
伯克利的研究生有兩種,面向工業(Industry-Oriented Degree Programs)和麵向研究(Research-Oriented Degree Programs),類似國內的專業/工程碩士和學術碩士。
專業碩士有兩個培養方案:
- Master of Engineering(M.Eng.):工程碩士,教授畢業後進入工業界所需的技能,重點培養學生的技術基礎和領導力。主要計算機相關課程是Data Science and Systems和Visual Computing and Computer Graphics,學制為1年。
- 5th Year M.S. Program:和M.Eng.類似,不過該專案只面向UC Berkeley自己的CS本科生,和國內的本碩連讀類似。
研究型碩士有三個培養方案:
- Master of Science:學制為2年,是比較小的研究型專案,讀完後可以申請博士或者進入工業界做研發。
- Doctor of Philosophy:博士專案,培養學術人才,學制本科生要讀5-6年,碩士讀要3-5年。
- Both (M.S./Ph.D.):碩博連讀,學制5-6年。
研究型專案著重培養學生的研究能力和教學能力,頁面Graduate Research Program Admissions詳細列出了研究型CS(Computer Science)專業主要研究方向:
- Artificial Intelligence (AI)
- Operating Systems & Networking (OSNT)
- Database Management Systems (DBMS)
- Graphics (GR)
- Human-Computer Interaction (HCI)
- Programming Systems (PS)
- Scientific Computing (SCI)
- Security (SEC)
- Theory (THY)
- Education (EDUC)
每個研究領域都有詳細的介紹,並且列出了主要研究者、開設的課程等,方便學生了解和選擇。
硬體條件
地理位置
UCB地理位置優越,地處灣區(Bay Aarea),附近比較出名的城市還有舊金山,奧克蘭,矽谷等。矽谷大量的創業公司和科技公司為學生實習提供的便利。也為伯克利與工業界緊密合作提供了條件。
圖書館
伯克利圖書館系統包括三個主要圖書館、18個學科專業圖書館和11個具有特殊藏書的附屬圖書館,藏書超過1000萬冊,北美地區排名第四。在校園裡,平均每步行5分鐘,都會遇到一個圖書館。
研究中心和實驗室
由於EECS是兩個體系,所以研究中心和實驗室大方向上包括EE方向和CS方向,這裡主要講CS方向,說兩個業界出名的實驗室。
伯克利人工智慧研究實驗室(BAIR),開發Caffe和PyTorch的大神賈揚清就來自這個實驗室。該研究中心包含約30名教師和超過200名研究生、博士後。研究領域包括計算機視覺
、機器學習
、自然語言處理
、規劃
和機器人
。該中心開發了很多業界出名的工具,包括大資料處理框架Spark中的GraphX、CycleGAN等,詳細頁面見BAIR SOFTWARE。
RISELab,該實驗室前身是AMPLab,兩者都是為期5年的針對特定主題的實驗室。AMPLab研究週期為2011-2016,為業界貢獻了Mesos叢集管理框架、Spark大資料引擎、Alluxio虛擬分散式儲存等知名框架,為行業作出卓越貢獻。新的5年研究專案由RISELab承擔,RISELab實驗室研究領域聚焦在Real-time Intelligence with Secure Explainable decisions,即開發實時、智慧、安全、可解釋的決策系統,圍繞這一理念,RISELab已經研究開發了Ray、Clipper、confluo等軟體,並開源的。Ray已經在很多公司開始使用,國內知名科技金融公司螞蟻金服就在使用。
伯克利EECS的研究中心非常多,這裡只列舉兩個,詳細資訊請瀏覽EECS-Research Centers and Labs。從這兩個實驗室可以一窺伯克利CS研究生的培養方式:學生會在導師所在實驗室做研究,和工業界保持緊密的聯絡與合作。好的軟體會和業界分享,在GitHub上開放原始碼,與各界共同開發。
總結
在本科階段,伯克利EECS很重視學生的基礎知識,課程理論與實踐相結合,課程的Project有難度需要編寫很多程式碼,以培養學生的電腦科學思維為主,程式設計能力為輔。研究生階段,重點培養學生的研究能力、教學能力,學生通過參加學術會議、開源專案等和學術界、工業界保持緊密的聯絡。
伯克利對於學生的培養方案是值得我們借鑑和學習的,但因人而異,以筆者個人經驗來說,給出以下不成熟的建議:
- 在CS領域,計算機基礎知識至關重要!
- 對於想轉專業到計算機的本科學生:
- 可以學習CS的核心課程CS 61A 61B打基礎
- 然後學習一門語言課(推薦Python,適合初學者)
- 再學習OS、Network等課程
- 最後要重視實踐,多編寫程式碼和參與開源專案
- 接著去找實習在公司中鍛鍊自己,最後應該可以找到一個滿意的工作
- 本身就是CS專業的本科生:CS專業應該具備相關知識了,這時可以根據自己感興趣的CS課程
- 工作1-3年的程式設計師:工作和實際程式設計中可以發現自己的不足,針對不足選擇相關課程重點加強
- 其它情況超出筆者的能力和經驗了,可以結合本文自行決定
References
- 原文連結
- 伯克利加州大學計算機專業課程簡介
- 轉專業在Berkeley上的CS課
- 加州伯克利大學計算機系是如何培養計算機人才的?
- 在加州大學伯克利分校(UC Berkeley)學習計算機是怎樣的體驗?
- 2020最新世界大學排名
- 《大學之路》 吳軍
公眾號[QuanTalk],專注於電腦科學與技術、獨立思考、閱讀分享。歡迎關注交流
相關文章
- 麻省理工學院是如何培養計算機學生的計算機
- 加州大學伯克利分校是如何培養計算機學生的計算機
- 培養個人的計算機素質 (轉)計算機
- 為了培養計算機學生,這所學校把地租給科技公司,沒想到......計算機
- 我是如何學習計算機程式設計的計算機程式設計
- 一個計算機學生計算機
- 如何培養創造力:別學程式設計,學繪畫程式設計
- 如何培養創造力:別學程式設計 學繪畫程式設計
- 如何培養良好的程式設計實踐程式設計
- 如何培養良好的程式設計風格程式設計
- 如何培養正確的原型設計思維?原型
- 計算機科班生學計算機組成原理的意義何在呢?計算機
- 學計算機的人是很幸福的計算機
- 研究了四大計算機名校的培養方案,核心課程都在這了計算機
- UI設計培訓分享:ui設計師如何培養設計思維?UI
- 最偉大的計算機程式設計師是如何誕生的?—解讀高德納計算機程式設計師
- UC Berkeley新研究:通過深度學習建模注意點取樣陣列深度學習陣列
- 計算機實際上是如何工作的計算機
- IT職場:如何培養企業員工對精益生產的認同感?
- 名校AI課推薦 | UC Berkeley《人工智慧導論》AI人工智慧
- 計算機主機板的維護和保養妙招計算機
- 韓國大學培養“黑客”對戰朝鮮參與學生學費全免黑客
- 計算機底層是如何訪問顯示卡的計算機
- 給計算機專業學生的幾條建議計算機
- 計算機隨機數的產生 (轉)計算機隨機
- 為什麼計算機專業學生想學前端 如今Web前端薪資如何計算機前端Web
- 智慧時代,應該如何培養中小學AI教師?AI
- 一個碼農是如何用遊戲推動計算機圖形學的?遊戲計算機
- 如何培養資料分析思維?
- 如何培養風控GPS高手
- 如何培養技術洞見力?
- UC Berkeley提出變分判別器瓶頸,有效提高對抗學習平衡性
- 北京學Linux雲端計算哪個培訓機構好?Linux
- 小白文——計算機網路如何學??計算機網路
- UC Berkeley提出新型分散式執行框架Ray:有望取代Spark分散式框架Spark
- 最偉大的計算機程式設計師是如何誕生的?——解讀高德納(Donald E.Knuth)計算機程式設計師
- 談談對程式設計師的培養程式設計師
- 培養程式設計師的人脈程式設計師