取其精華

計算機四強選手

 

視頻 課程主頁(課件)
麻省理工(MIT)

網易公開課;YouTube、Coursera/edX/

對應課程的網站

OCW/Audio vedio lecture

斯坦福(StandFord)

~ ~
加州大學伯克利分校(UCB) ~ ~
卡內基梅隆大學(CMU) ~ ~

OCW(OpenCourseWare)上視頻比較少,找視頻的可以去YouTube上或者Coursera、edX上瞅瞅。

電子工程和計算機學科包含:

  1. 電氣科學與工程理學士/課程6-1
  2. 電氣工程與計算機科學理學士/課程6-2
  3. 計算機科學與工程理學士/課程6-3
  4. 計算機科學與分子生物學理學士/課程6-7

附Degree Chart

  1. 6-1 http://catalog.mit.edu/degree-charts/electrical-science-engineering-course-6-1/
  2. 6-2  http://catalog.mit.edu/degree-charts/electrical-engineering-computer-science-course-6-2/
  3. 6-3 http://catalog.mit.edu/degree-charts/computer-science-engineering-course-6-3/

 

畢業要求(MIT)


伯克利是怎麼教授學生的

(1)一般CS的課都是視頻的,即使不去也沒有關係,反正YouTube上都有。

(2)教學資源非常強大,上課lecture是很小的一部分,很多課每週都有lab有discussion,每隔幾週一個大的project。每個助教引領一個discussion,而且有office hour專門答疑。lab上不會做了也可以直接問他們會手把手教你。

(3)課程內容豐富而且視野開闊,不會說我單獨的給你上一門C語言什麼的,課程的應用方向是什麼就教什麼。

比方說從他們大一上第一門編程課cs61a,教材用的是伯克利改編的python版本的SICP

  • 整個學期的安排大概是,一開始教你python,基本上兩個禮拜過完語法層面,然後開始講高階函數lambda函數等等接近函數式編程的東西,之後教你各種基本的小算法比如鏈表樹什麼的,但是配套的練習非常多,比如反轉鏈表,快排,二叉樹各種路徑生成搜索等等,然後每個練習都有測試例子可以在本地直接跑。之後是講面向對象編程,在之後是我最喜歡的部分,教scheme這門lisp的方言,也是大概一週過完scheme的語法層面,然後講解函數式編程的美妙之處比如惰性求值lambda演算,在之後讓你用python實現一個scheme的解釋器,體會命令式語言和函數式語言的不同。然後在講講SQL語句與宏啥的。
  • 61a每週基本上一到兩次作業加上一次實驗,然後一個學期有四個project,然後project的代碼框架都搭的特別好,比如說第二個project Ants,就是實現一個類似於植物大戰殭屍的遊戲,但是圖形層面基本遊戲邏輯都給你寫好了,但是各種ant單位和敵人的部分交給你實現,這個project寫完你對於面向對象編程就有一些瞭解了。

(4)注重對於整個計算機科學體系的培養

在伯克利,一般的CS學生就是大一上cs61a(structure and interpretation of computer program),大一下cs61b(data structure)加上cs70(Discrete Mathematics and Probability Theory),然後大二上cs61c(machine structure),上完61系列加上70基本上就是junior低年級的CS課就ok了,然後各種課就隨便上170算法,162操作系統,164編譯原理,184圖形學,189機器學習等等。

比方說我上面說的61a是計算機科學的入門課,學生了解了一門面向對象的高抽象的語言python,一門函數式的語言scheme,同時實踐了基本的一些算法(鏈表,二叉樹,快排等等),也瞭解了SQL語句,瞭解了macro宏的概念,寫了很多的作業與實驗具有了一定的編程基礎。然後是61b數據結構,這門課他們是用java教的,也是一兩週過完java語法層面能夠寫一寫基本的算法。在之後是61c相當於我們的計組,抽象層面進一步降低,到硬件的層面,也是一兩週過完C語言(用的是經典的那本教材C語言程序設計),然後教一些基本的彙編指令(用的是伯克利自己研發的RISC-V指令集,開發這個指令集的David Patterson教授今年剛拿圖靈獎),接着將cache,浮點數等等計組的內容,實踐過程中用到了spark和openmp還有intel的simd指令等等東西。最後的project也是實現一個簡單的CPU(用他們提供的程序模擬的)。

(5)視野開拓,理論與實踐並行

我覺得學習操作系統就應該寫操作系統,學編譯原理就應該寫編譯器,但是國內大部分高校這兩門課就很容易教偏了(當然一些頂尖高校像清北復交之南浙之類的應該都教的很好),經常是理論大大多於實踐,搞得學生沒有興趣,我上的162操作系統就是改pintos這個教學用的操作系統,雖然實現的過程比較痛苦(原諒我菜),也參考了別的組的文檔,但是感覺收貨非常大,你真正的才能知道原來操作系統是怎麼回事,而不是成天看書背書背概念。

(6)沒有水課,至少就計算機專業課來說,基本沒有。

(7)不開無意義的課

像我在國內竟然Linux的使用還要單獨開課,這。。。自己找本鳥哥的書,查查文檔手冊啥的直接上手不就行了?然後學過了一門命令式語言比如C/C++後還要專門開課教java,而且還每週還只講講基本語法,一週講變量,一週講條件語句。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章