摘要:針對美國斯坦福大學計算機科學系面向全校開設的程序設計入門類課程設置情況,分析該類課程的整個課程體系,包括教學、輔導、作業(yè)和考核等各個環(huán)節(jié)安排,總結(jié)其課程設置人性化和科學化、輔導機制完備化、考核手段精細化的課程特點。
關(guān)鍵詞:計算機科學;程序設計;課程體系;作業(yè)寬限日政策;誠信準則
0 引 言
美國斯坦福大學地處加利福尼亞州西部的舊金山( San Francisco)和圣何塞(San Jose)之間,位于著名的“硅谷”中心,是世界科研和高等教育領先機構(gòu)之一。隸屬于斯坦福大學工程學院的汁算機科學系始建于1965年,如今引領著世界計算機科學的科研和教育前沿。
筆者最初接觸到斯坦福大學的計算機課程是在2009年主講數(shù)據(jù)庫原理雙語課程時,當時選用了一本原版教材A First Course in DatabaseSVstems,這是由斯坦福大學的兩名計算機教授(Jeffrey D.Ullman和Jennifer Widom)合作編寫的。瀆過之后發(fā)現(xiàn),國內(nèi)的同類著名教材可以說就是這本教材的翻譯本和節(jié)選本,從此開始關(guān)注斯坦福及其計算機課程。
筆者再次接觸斯坦福大學的計算機課程是2010年底。當時,網(wǎng)易正式推出“全球名校視頻公開課項目”,其中由斯坦福大學計算機科學系教授麥蘭·薩哈米( Mehran Sahami)講授的編程方法學( programming methodology)引起筆者的關(guān)注,于是由此展開對斯坦福大學的計算機課程研究和探索。 1 斯坦福大學計算機程序設計入門類課程概述
斯坦福大學計算機科學系面向全校殲設了5門計算機程序設計入門類課程,供全校學生選修,這5門課程分別是CS101、CS105、CS106A、CS106B和CS106X。
1.1 CS101-計算機理論入門(introduc-tion to computing principles)和CS105-計算機入門(.ntroduction to computer science)
這兩門課程主要是計算機科學中主要領域的通識教育,平均每年度有大約500名學生選修。課程主要講授計算機基礎知識以及JavaScript、HTML、CSS等簡單的程序設計。學習CS101和CSl05花費的時間和精力相比其他程序設計入門課程要少很多,如果只是為了完成斯坦福對通識教育的要求,選修這兩門課非常適合。CS101于春季學期開課,CS105于秋季、冬季學期開課。
1.2 CS106A-編程方法學( programming methodology)
編程方法學是斯坦福選修人數(shù)最多,也是教學規(guī)模最大的計算機程序設計入門課程,在2012年秋季學期中,有650名學生選修CS106A。CA106A教授的是良好的軟件工程思想,同時結(jié)合使用較廣泛的Java程序設計語言,比單純程序設計的知識范圍要大得多。該課程適合所有專業(yè)的學生學習,事實上,選修該課程的大多數(shù)是工程學院以外專業(yè)的學生。該課程不需任何程序設計經(jīng)驗,但課程要求嚴格,需要花費大量的精力。CS106A于每年的秋季、冬季、春季和夏季學期開課。
1.3 CS106B-抽象編程( programming abstractions l
該課程是CS106A的直接后續(xù)課程,涵蓋高級程序設計主題,如遞歸、算法分析和數(shù)據(jù)抽象等。CSl06B[5]采用C++程序設計語言,C++類似于C和Java的結(jié)合。如果學生已經(jīng)參加了計算機科學高級課程考試并取得了4分或5分的成績,或在一門專業(yè)課程中取得了好成績,則可以從CS106B開始學起。CS106B要求學生已經(jīng)對好的程序設計風格以及軟件工程思想非常熟悉(達到CS106A的水平),在此基礎上,可以學習解決程序設計和數(shù)據(jù)抽象中的新問題。CS106B于秋季、冬季、春季和夏季學期開課。
1.4 CS106X-抽象編程(高級)( progra-mming abstractions(accelerated))
CSl06X是CS106B的提高版本,它使用C++程序設計語言,講授的主題與CS106B完全相同,只是進行更深層次的探討。由于課程內(nèi)容很多,因此課程進度非???,適合已通過計算機科學高級課程考試或有扎實的程序設計基礎的學生。不要錯誤地認為真正的工程師都會直接選修CS106X,實際上,大多數(shù)計算機科學家和工程師(包括2012-2013秋季學期CS106A的授課教師Mehran Sahami教授)都是從CS106A開始學習。CS106X通常于秋季學期開課。
許多斯坦福的學生在高中階段或是在他們本身從事的與計算機相關(guān)的工作領域中已經(jīng)獲得相當多的程序設計經(jīng)驗,這種情況下,即使從CS106X開始學習程序設計類課程也很浪費時間,但是根據(jù)以往的經(jīng)驗,每一屆新生中只有10~15位應該從程序設計類更高起點的課程開始學習。對于大多數(shù)學生來說,還是應該從CS106課程開始學習。大多數(shù)高中的計算機課程對現(xiàn)代軟件工程技術(shù)涉及不多,學生通過CS106可以學習科學的程序設計理念,為更高級的工作打下堅實的基礎。
2 課程體系——以CS106A為例
2.1 課程安排
總共上課11周,每周3節(jié),每節(jié)50分鐘。除上課以外,學生每周必須參加50分鐘的小組討論。
2.2 課程組成員
(1)1位授課教師(instructor)。課程的負責人,主講課程,另外每周有2小時的課程輔導。
(2)l位首席助教(head to)。輔助教師完成課程所有任務,每周兩次(每次2小時)的課程輔導。
(3)多名討論小組長(section leaders)。討論小組長主要負責組織每周一次的小組討論,每個小組6~8名成員。小組長還要履行下列職責:與組員一同上課,每周一次的課程組會議以及針對每次作業(yè)與每名組員面對面交流后評分,輔助期中、期末考試成績考核,每周2小時在公共機房進行輔導答疑。
(4)多名課程輔導者(course helpers)。每周在公共機房進行2~10小時課程輔導答疑。
2.3 課程網(wǎng)站
課程通過網(wǎng)站發(fā)布課程最新公告,提供詳細的課程資料并根據(jù)課程進度隨時更新,網(wǎng)址為http://www.stan ford.edu/clas s/cs 106/或http://cs106a.stanford.edu/.
2.4 學分
本科生選修CS106A可獲得5學分,研究生選修這門課可獲得3學分,但是對兩者的要求完全一樣。
2.5 教材和課堂講義
(1)該課程有兩本教材。第1本名為Karelthe Robot Learns Java,這是一本35頁的書,以一個極其簡單的機器人世界為背景,介紹程序設計的主要思想??_爾是一個友好的小機器人,生活在一個格子世界中。在課程的第1周,學生將和卡羅爾一起探索程序設計,解決問題和體會軟件工程思想。這本教材對于學生完成第一次作業(yè)非常有用,學生可以登錄課程網(wǎng)站下載該教材電子版,也可以在斯坦福書店買到這本書。
第2本名為The Art and Science of Java,作者是Eric Roberts。熟悉了機器人卡羅爾的世界后,學生可從第2周開始學習用Java程序設計語言構(gòu)建更大、更詳細的程序。該教材非常好地介紹了Java中的軟件工程思想。
(2)課堂講義(handouts)。除了教材,教師還會以課程講義的形式發(fā)放課程附加材料,作為教材的補充材料。每次上課時,學生都可以在教室入口處的講義箱領取,也可以從課程網(wǎng)站以PDF格式直接下載。
2.6 課程主要聯(lián)系方式Email
這門課程要求學生擁有Email帳戶。在斯坦福,所有學生通過LaIR都可取得Email帳戶,師生之間課后的主要交流都是通過Email完成,包括作業(yè)的提交、討論組的注冊等。
2.7 程序設計作業(yè)
(1)教學大綱已經(jīng)列出本門課有7次程序設計作業(yè),每次作業(yè)都有截止時間。隨著課程進度的推進,作業(yè)會越來越難,時間花費也將越來越多,因而后面作業(yè)的權(quán)重比前面的要稍重一些。除了學期期末的作業(yè),學生針對每個作業(yè)都要與小組組長一對一地交流10~15分鐘進行互動評分,包括作業(yè)中的閃光點、仍需改進的地方、在程序設計思想方面的欠缺。通過這些,學生可以獲得更詳細的信息,也可以提問評分等級及依據(jù)。
(2)作業(yè)評分等級。作業(yè)等級由高到低分別為++、+、、√+、√、√-和、√--6級,作業(yè)成績主要由討論小組長評定,但是其中的最高級++代表著“絕對完美”,必須經(jīng)由課程教師和助教同意才能給出,這種成績很稀少且不口T多得,每學期只會出現(xiàn)有限的幾個。
(3)作業(yè)寬限日政策。每次作業(yè)必須在指定的時間前提交電子版,但是學生有時還會遇到些意外而導致作業(yè)不能按時提交,因此采取作業(yè)寬限日政策,規(guī)定每學期可以有兩個作業(yè)寬限日.當寬限日用完后,上交遲到的作業(yè)(最多遲到3個上課日)會隨著遲到的時間每天降低一個級別(如√+降至√,依此類推)。與小組長的面對面交互評分將在作業(yè)上交截止日期后的兩周內(nèi)完成,超過3個上課日上交的作業(yè)將不會被評分。只有極特殊的情況出現(xiàn)(如因病、家庭緊急情況和宗教原因等),才有可能延長寬限日,這必須在作業(yè)到期日前的24小時內(nèi)經(jīng)由助教同意,小組長沒有這種權(quán)力。
2.8 課程考核方式及分數(shù)比例
課程可在實踐的過程中不斷地改革考核方式及分數(shù)比例,以兩個學期為例。
(1) 2012年冬季學期。除了7個程序設計作業(yè)外,還有2次中期考試,其中程序設計作業(yè)占55%,第1次期中考試占20%,第2次期中考試20%,小組參與占5%。
( 2) 2010年秋季學期。除了7個程序設計作業(yè)外,還有1次中期考試和1次期末考試,其中程序設計作業(yè)占45%,期末考試占30%,期中考試占15%,小組參與占10%。
2.9 誠信準則
早在1921年,斯坦福的學生學術(shù)委員會便制定《斯坦福大學誠信準則》,通行至今。作為計算機課程的學生,在學術(shù)誠信方面應該做到:①在提交的作業(yè)中注明在完成作業(yè)過程中接受的幫助;②不要與其他學生共享實際程序;③不要看往屆學生的程序解決方案和代碼;④做好對提交的程序進行解釋說明的準備;⑤所有提交程序都要經(jīng)過自動抄襲檢測程序的檢測。
3 幾點體會
3.1 課程設置多樣——人性化
同一門課程按不同的深度分層開設,每位學生可以結(jié)合自身的實際情況選修適合的課程。國內(nèi)大部分高校的程序設計入門課程比較單一(如只開設C程序設計),這樣容易造成兩極分化的現(xiàn)象,一是學生對程序設計沒有很大興趣或是能力不足,卻沒有第二種選擇,造成學習困難,成績不好;二是學生對程序設計興趣濃厚,學習起來游刃有余,希望有更高的起點,卻被禁錮在一定的課程范式中。
3.2 課程安排合理——科學化
(1)程序設計類課程的導向及重點清晰。這類課程首先強調(diào)的是軟件工程思想,而不是一開始就單純地學習一門程序設計語言,學會的僅僅是語言結(jié)構(gòu),實際上,學習軟件系統(tǒng)開發(fā)過程中實用的軟件工程思想才是最重要的。
(2)課程體系結(jié)構(gòu)完善。斯坦福大學計算機系的每門課程都有完善的課程體系,關(guān)于課程的基本情況在學期一開始的第一次課,課程主講教師就會向全體學生介紹清楚并開始執(zhí)行。
3.3 課程輔導具體——完備化
課程相關(guān)資料全部上網(wǎng),包括教材電子版、課堂資料、相關(guān)軟件、作業(yè)和授課視頻等。一門課程除了有主講教師和助教,討論組組長和課程輔導者(均由高年級的學生擔任)還為學生學習提供全方位的幫助,每周的周日至周四晚上都在公共機房為學生完成作業(yè)提供幫助。登錄http://cs198.stanford.edu/,點擊“輔導時間表”鏈接,學生便可得到最新的輔導時間安排。
3.4 考核機制全面——精細化
首先對交作業(yè)的時間有嚴格的規(guī)定,寬限日的政策具體明確,可操作性極強;然后設計多個評分等級,同時對作業(yè)進行面對面交流評分;最后要求學生誠信地完成作業(yè),并且有嚴格的檢測手段。
4 結(jié)語
課程設置人性化、課程安排合理化、課程輔導完備化、課程機制精細化是斯坦福大學程序設計入門類課程的特點,這值得國內(nèi)大學相關(guān)課程學習。如何借鑒斯坦福的經(jīng)驗,探索出一套更適合各高校培養(yǎng)目標的課程體系,值得我們進一步研究。