UC Berkeley EECS是如何培養計算機學生的

AdolphLWQ發表於2019-07-22

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課程架構圖,可以看到特點鮮明:分類合理、層次分明、層層遞進。紅色部分是核心課程,也是其它課程的基礎,然後將課程分為軟體、硬體、理論、應用等方向。有些課程本科和研究生階段都會開設,但研究生課程偏向高階主題、注重研究。

ucb 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),類似國內的專業/工程碩士和學術碩士。

專業碩士有兩個培養方案:

  1. Master of Engineering(M.Eng.):工程碩士,教授畢業後進入工業界所需的技能,重點培養學生的技術基礎和領導力。主要計算機相關課程是Data Science and SystemsVisual Computing and Computer Graphics,學制為1年。
  2. 5th Year M.S. Program:和M.Eng.類似,不過該專案只面向UC Berkeley自己的CS本科生,和國內的本碩連讀類似。

研究型碩士有三個培養方案:

  1. Master of Science:學制為2年,是比較小的研究型專案,讀完後可以申請博士或者進入工業界做研發。
  2. Doctor of Philosophy:博士專案,培養學術人才,學制本科生要讀5-6年,碩士讀要3-5年。
  3. Both (M.S./Ph.D.):碩博連讀,學制5-6年。

研究型專案著重培養學生的研究能力教學能力,頁面Graduate Research Program Admissions詳細列出了研究型CS(Computer Science)專業主要研究方向:

每個研究領域都有詳細的介紹,並且列出了主要研究者、開設的課程等,方便學生了解和選擇。

硬體條件

地理位置

UCB地理位置優越,地處灣區(Bay Aarea),附近比較出名的城市還有舊金山,奧克蘭,矽谷等。矽谷大量的創業公司和科技公司為學生實習提供的便利。也為伯克利與工業界緊密合作提供了條件。

圖書館

伯克利圖書館系統包括三個主要圖書館、18個學科專業圖書館和11個具有特殊藏書的附屬圖書館,藏書超過1000萬冊,北美地區排名第四。在校園裡,平均每步行5分鐘,都會遇到一個圖書館。

研究中心和實驗室

由於EECS是兩個體系,所以研究中心和實驗室大方向上包括EE方向和CS方向,這裡主要講CS方向,說兩個業界出名的實驗室。

伯克利人工智慧研究實驗室(BAIR),開發CaffePyTorch的大神賈揚清就來自這個實驗室。該研究中心包含約30名教師和超過200名研究生、博士後。研究領域包括計算機視覺機器學習自然語言處理規劃機器人。該中心開發了很多業界出名的工具,包括大資料處理框架Spark中的GraphXCycleGAN等,詳細頁面見BAIR SOFTWARE

RISELab,該實驗室前身是AMPLab,兩者都是為期5年的針對特定主題的實驗室。AMPLab研究週期為2011-2016,為業界貢獻了Mesos叢集管理框架、Spark大資料引擎、Alluxio虛擬分散式儲存等知名框架,為行業作出卓越貢獻。新的5年研究專案由RISELab承擔,RISELab實驗室研究領域聚焦在Real-time Intelligence with Secure Explainable decisions,即開發實時、智慧、安全、可解釋的決策系統,圍繞這一理念,RISELab已經研究開發了RayClipperconfluo等軟體,並開源的。Ray已經在很多公司開始使用,國內知名科技金融公司螞蟻金服就在使用。

伯克利EECS的研究中心非常多,這裡只列舉兩個,詳細資訊請瀏覽EECS-Research Centers and Labs。從這兩個實驗室可以一窺伯克利CS研究生的培養方式:學生會在導師所在實驗室做研究,和工業界保持緊密的聯絡與合作。好的軟體會和業界分享,在GitHub上開放原始碼,與各界共同開發。

總結

在本科階段,伯克利EECS很重視學生的基礎知識,課程理論與實踐相結合,課程的Project有難度需要編寫很多程式碼,以培養學生的電腦科學思維為主,程式設計能力為輔。研究生階段,重點培養學生的研究能力、教學能力,學生通過參加學術會議、開源專案等和學術界、工業界保持緊密的聯絡。

伯克利對於學生的培養方案是值得我們借鑑和學習的,但因人而異,以筆者個人經驗來說,給出以下不成熟的建議:

  1. 在CS領域,計算機基礎知識至關重要
  2. 對於想轉專業到計算機的本科學生:
    1. 可以學習CS的核心課程CS 61A 61B打基礎
    2. 然後學習一門語言課(推薦Python,適合初學者)
    3. 再學習OS、Network等課程
    4. 最後要重視實踐,多編寫程式碼和參與開源專案
    5. 接著去找實習在公司中鍛鍊自己,最後應該可以找到一個滿意的工作
  3. 本身就是CS專業的本科生:CS專業應該具備相關知識了,這時可以根據自己感興趣的CS課程
  4. 工作1-3年的程式設計師:工作和實際程式設計中可以發現自己的不足,針對不足選擇相關課程重點加強
  5. 其它情況超出筆者的能力和經驗了,可以結合本文自行決定

References

UC Berkeley EECS是如何培養計算機學生的
公眾號[QuanTalk],專注於電腦科學與技術、獨立思考、閱讀分享。歡迎關注交流

相關文章