如何設計一門計算機科學入門課?


一門好的計算機入門課在於:上手快、重原理但實用、能與IT工業接軌(即不過時)。斯坦福計算機系爆火的入門編程課CS106b 抽象編程 Programming Abstractions 就是此類課程的佼佼者。

斯坦福大學本科課程註冊人數最多的課(一年4個學期共1600人次),是吳恩達CS229機器學習註冊人數的三倍。開設20多年以來一直都在迭代更新。平均每三個斯坦福畢業生就有一人上過此課,當然來上這門課的不只是CS或EE的學生,還有商科、東亞研究、歷史等。很多同學就是上完這門課後果斷專了碼農。

斯坦福是quarter制,一個學期只有10周,如何在這短短的10周可以讓一個計算機小白對編程產生濃厚興趣?這門課從學習最重要的編程概念,如數據結構(向量、堆棧、隊列、鏈表、樹、圖、堆)、演算法(遞歸、回溯、排序、搜索)、指針、動態分配、面向對象,到培養碼農基本素養,如養編碼規範、考慮封裝,設計借口,降低代碼複雜度,內存管理,這門課會提供給全方位的編程體驗。

講師Marty Stepp,不僅幽默風趣,對於複雜的概念,比如遞歸,他都能用最精簡的語句、最深刻的比方,讓學生一聽就明白,而且永遠忘不了。

大量實踐是成為一個好碼農的必要條件。每周一次作業大多是實現一些好玩的小遊戲,比如數字連連看,走迷宮。別看這些遊戲簡單,如果單獨完成都要花上8-10小時,所以作業是以結對編程的形式完成。考慮到這或許是很多人第一次寫大程序,作業遇到障礙也很正常。於是這門課雇了30多個CS系高年級的學生,每天從早上9點到晚上12點都有人在計算機房給學生作答,他們甚至會手把手為你debug!

為什麼是cs106b呢?因為cs106a 是另一門編程入門課叫編程方法論(programming methodology),106a 主要面向零編程基礎學生,用的是Java,主要是講面向對象的編程設計,講師Sahami是個網紅。106b 主要面向有一定工科背景,用過Matlab、或腳本類語言,對編碼有興趣的學生,用的是C++。(更贊的是歷代講師為此門課寫了Stanford C++ library,語句要比飽受詬病的standard template library簡單許多。)雖然106a也不是閉著眼睛就能完成考試的課,106b的內容更實用,而且大部分CS學生都是跳過106a直接上106b的。

課程首頁

油管視頻

斯坦福大學公開課:抽象編程_全27集_網易公開課


看你要用什麼語言。Python或Java一般最簡單。

循環 -》函數-》遞歸。。。基礎課也就那些東西。重要的是你能想出哪些有趣的project idea讓學生有繼續學CS的興趣。找不到idea就翻牆倒外面直接copy。大部分Top university都有歷年的class archive

大部分沒基礎的學生都是聽到CS好找工作才選CS,可是他們卻不知道只有經歷了data structure、machine structure的輪番轟炸之後才算真正接觸到「合格」。你的任務其實是勸退,讓沒有好好考慮過的學生學得死去活來。這也是國外大學經常做的,大學校第一學期lv1入門課1200+人選,第二學期lv2入門課就只有800+了。lv3有600、700+。到了真正的upper division一般就只有500+。 你說那些人都去哪裡了呢。


計算機入門課不就是用for循環print字元畫圖嗎?:-D

https://courses.cs.washington.edu/courses/cse142/17su/

(逃)


推薦閱讀:

你所讀的計算機科學方向,有哪些不錯的講義(Notes)?
計算機專業原版教材值得讀嗎?
想開始初步學習計算機有什麼建議嗎?
基於RNN的seq2seq與基於CNN的seq2seq區別,為什麼後者效果更好?
對比JIT和AOT,各自有什麼優點與缺點?

TAG:程序員 | 軟體工程 | 大學教育 | 計算機科學 | 理論計算機科學 |