如何設計一門計算機科學入門課?
一門好的計算機入門課在於:上手快、重原理但實用、能與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,各自有什麼優點與缺點?