汪小林 羅英偉 李文新 代亞非 許卓群
摘要:本文詳細介紹了北京大學“計算概論”課程的教學體系建設(shè)及其改革情況,并闡述了該課程“立足基礎(chǔ)、因材施教、強化實踐”的教學理念和內(nèi)涵。
關(guān)鍵詞:計算概論;教學體系;程序設(shè)計;在線實踐;在線考核
中圖分類號:G642 文獻標識碼:B
“計算概論”課程是北京大學面向全校理科專業(yè)(理學、工學和醫(yī)學)一年級學生開設(shè)的計算機基礎(chǔ)教育特色課程,是北京大學信息科學技術(shù)學院開設(shè)的選課人數(shù)最多的主干基礎(chǔ)課(每年有2000余人選修本課程)。針對本課程涉及的專業(yè)多、選課學生多的特點,經(jīng)過十余年的建設(shè),本課程已逐漸形成了“立足基礎(chǔ)、因材施教、強化實踐”的教學理念。
首先,我們按專業(yè)分兩個層次建設(shè)課程,為“電子信息科學類”專業(yè)提供“計算概論A”課程,為其他理科專業(yè)提供“計算概論B”課程;不同的層次,課程內(nèi)容深度會有所不同;不同的專業(yè)背景,在教學和實習內(nèi)容設(shè)計上也會有不同的針對性。其次,根據(jù)學生的基礎(chǔ)不同實現(xiàn)分班教學:對于“電子信息科學類”類專業(yè),基礎(chǔ)好、領(lǐng)悟力強的學生給予實驗班教學,大部分學生在普通班學習,為基礎(chǔ)較差的學生開設(shè)輔導(dǎo)班個別輔導(dǎo);對其他理科專業(yè),則分通選課(供各院系基礎(chǔ)好的學生選修)、元培班(北大元培學院學生)和普通班(各院系其他學生)進行教學。
與此同時,我們設(shè)計和開發(fā)了程序設(shè)計在線評測系統(tǒng)POJ(http://acm.pku.edu.cn/JudgeOnline,http://poj.grids.cn)和編程網(wǎng)格系統(tǒng)PG(http://programming.grids.cn),強化學生的動手能力,并與大學生程序設(shè)計競賽結(jié)合,培養(yǎng)學生的創(chuàng)新能力。
作為北京大學覆蓋面最廣的理科課程之一,我們以北大的網(wǎng)絡(luò)教學平臺為基礎(chǔ),以北京大學國家級計算機實驗教學示范中心為依托,輔以多個具有不同專業(yè)特點的課程網(wǎng)站,構(gòu)建了一個多層次開放的網(wǎng)絡(luò)教學與實驗環(huán)境(http://www.jpk.pku.edu.cn/pkujpk/icportal/),為學生提供了豐富的教學資源和教學輔導(dǎo),整個課程的網(wǎng)絡(luò)資源對每個學生都是開放的。
1課程定位:北京大學計算機基礎(chǔ)教育的基礎(chǔ)課程
隨著計算機科學與技術(shù)的不斷發(fā)展和普及,該課程已經(jīng)日漸成為繼語文和數(shù)學之后的第三大智力工具,所有學生都需要也應(yīng)該學習計算機科學與技術(shù)的相關(guān)課程。早在1996年,許卓群教授就已經(jīng)在北京大學主持開設(shè)面向全校理科學生的“計算概論”課程。經(jīng)過十余年的建設(shè),北京大學根據(jù)學生的基礎(chǔ)不同、專業(yè)不同提供了不同層次和不同內(nèi)容的計算機基礎(chǔ)教育課程。對“電子信息類”專業(yè)的學生,北京大學設(shè)計了“程序設(shè)計與算法類”課程群,由“計算概論A”、“程序設(shè)計實習”、“數(shù)據(jù)結(jié)構(gòu)與算法A”、“數(shù)據(jù)結(jié)構(gòu)與算法實習”、“算法分析與設(shè)計”五門課組成。而對于其他理科專業(yè)學生,我們設(shè)計了“計算概論B”和“數(shù)據(jù)結(jié)構(gòu)與算法B”課程。北京大學規(guī)定所有理科本科生必須修滿兩學期以上的計算機基礎(chǔ)課程,并將該系列課程列為本科生主干基礎(chǔ)課進行重點建設(shè)。
北京大學設(shè)計的有關(guān)課程群,為理科本科生提供了一個系統(tǒng)的、理論與實踐相結(jié)合的計算機基礎(chǔ)教育框架。其中,“計算概論”課程是這個框架中的基礎(chǔ),如圖1所示。
北京大學設(shè)計的“計算概論”課程,是所有新入學本科一年級學生學習計算機科學與技術(shù)的第一門課程。它總括了計算機學科的知識體系,是計算機學科的入門基礎(chǔ)。通過學習,學生不但可以掌握計算機的基本工作原理以及程序設(shè)計的基本方法,為學習后續(xù)課程創(chuàng)造條件;而且可以真正理解計算的本質(zhì),提高抽象思維和嚴格的邏輯推理能力,為將來參與創(chuàng)新性的研究和開發(fā)工作打下堅實的基礎(chǔ)。
2課程內(nèi)容體系:立足基礎(chǔ)、因材施教、強化實踐
2.1立足基礎(chǔ)
如何在新入學的大學生中開展計算機基礎(chǔ)教育,一直是高校課程設(shè)計中面臨的一個問題。一般說來,計算機學科的入門基礎(chǔ)包括計算引論(Introduction to Computing)和程序設(shè)計基礎(chǔ)(Programming Foundation)兩個部分。在高中階段,很多學生已經(jīng)接受過計算機基礎(chǔ)教育,如軟件、硬件、計算機網(wǎng)絡(luò)、二進制、文字處理以及基本的操作系統(tǒng)和數(shù)據(jù)庫操作等基礎(chǔ)知識和基本的程序設(shè)計訓(xùn)練。當然,由于升學及其他方面的原因,不同學生的基礎(chǔ)各不相同:有的學生對計算機的基礎(chǔ)知識了解很少,有的學會了計算機的基本操作和應(yīng)用,有的會寫程序,有的則掌握了較好的編程技巧,但很少有學生能夠真正理解計算的本質(zhì)??紤]到這些情況,我?!坝嬎愀耪摗闭n程在內(nèi)容上融合了計算的內(nèi)涵和程序設(shè)計基礎(chǔ)兩個方面,讓學生在理解計算本質(zhì)的基礎(chǔ)上掌握程序設(shè)計的原理和方法,進而提高解決實際問題的能力。同時,我們根據(jù)學生的不同層次設(shè)計不同的教學班級,滿足學生的不同需求,爭取讓每個學生都能夠在本課程中保持“新鮮”的學習,避免了“跟不上”、“嚼冷飯”、“進度慢”等現(xiàn)象。
在課程內(nèi)容設(shè)計上,我們沿著計算機科學發(fā)展的主線,介紹從手工計算到機械計算再到現(xiàn)代計算機演變過程中起決定性作用的思想、技術(shù)、人物、事件,貫穿整個過程講述二進制、數(shù)據(jù)的表示、數(shù)據(jù)通信、數(shù)據(jù)的存儲與管理、存儲程序原理、計算機硬件與體系結(jié)構(gòu)、機器指令和匯編、高級語言、計算機系統(tǒng)軟件與應(yīng)用軟件、計算機網(wǎng)絡(luò)、信息安全等重要的基本概念是怎樣構(gòu)成“計算”的基本內(nèi)涵的;同時,讓學生及時了解當前計算機領(lǐng)域出現(xiàn)的新思想、新技術(shù)、新方法;最后系統(tǒng)講解程序設(shè)計基礎(chǔ),使學生掌握程序設(shè)計的基本方法,在實踐環(huán)節(jié)逐步提高程序設(shè)計的技巧,建立良好的編程習慣,寫出規(guī)范的程序代碼,為后續(xù)課程打好基礎(chǔ)。
在教學過程中,除了讓學生掌握編程語言的語法,理解程序的層次及結(jié)構(gòu),學會寫計算機程序等基本功之外,我們更強調(diào)的是對學生問題抽象能力的培養(yǎng),讓學生學習如何把要解決的實際問題用數(shù)學的形式表示以及符號化的方法處理。我們也注重訓(xùn)練學生邏輯思維的能力,學習如何分析問題,確定解題思路。此外,本課程還介紹一些基本的、經(jīng)典的算法知識,例如:遞歸、貪心算法和動態(tài)規(guī)劃,開闊學生解題的思路。同時,程序的調(diào)試也是必不可少的學習內(nèi)容。
計算機學科發(fā)展迅速,知識更新日新月異,直接反映時代的發(fā)展特征。為此,我們也在不斷根據(jù)最新的技術(shù)發(fā)展對課程內(nèi)容進行補充和調(diào)整,如:針對CPU的發(fā)展,我們補充介紹了“多核”的概念;在2007年物理學諾貝爾獎公布時,我們又在磁介質(zhì)存儲原理中補充了“巨磁阻效應(yīng)(Giant Magneto-Resistive,GMR)”,解釋為什么磁盤體積越來越小,而容量卻越來越大;針對移動USB盤的普及,我們又深入介紹了閃存存儲原理;在軟件技術(shù)方面,我們把虛擬化、軟件即是提供服務(wù)等新思想及時介紹給學生;在網(wǎng)絡(luò)及應(yīng)用方面,我們也把一些最新技術(shù)和應(yīng)用介紹給學生,如IPv6、P2P、博客等。
2.2因材施教
作為一門面向全校理科新生的計算機基礎(chǔ)教育課程,“計算概論”為全校兩個層次的學生提供不同模塊的教學課程,為“電子信息科學類”專業(yè)學生提供“計算概論A”課程,為其他理科專業(yè)學生提供“計算概論B”課程。不同層次的課程內(nèi)容和深度會有所不同;同時,面向不同的專業(yè)背景,教學和實習內(nèi)容設(shè)計上也會有不同的針對性。其次,根據(jù)學生的基礎(chǔ),實現(xiàn)分班教學:對于“電子信息科學類”類專業(yè),基礎(chǔ)好、領(lǐng)悟力強的學生給予實驗班教學,大部分學生在普通班學習,為基礎(chǔ)較差的學生開設(shè)輔導(dǎo)班個別輔導(dǎo);對于其他理科專業(yè),則分通選課(供各院系基礎(chǔ)好的學生選修)、元培班(北大元培學院學生)和普通班(各院系其他學生)進行教學。在同一授課層次的授課內(nèi)容中,采取基礎(chǔ)訓(xùn)練(30%)、綜合實踐(40%)和創(chuàng)新培養(yǎng)(30%)相結(jié)合的培養(yǎng)模式。
本課程課時安排為5學時/周,共90學時(18周),包括課堂教授和上機?;緦W時分配為課程講授3學時/周,上機2學時/周。不同的教學班級,可以根據(jù)實際的需要適當調(diào)整課堂講授和上機的學時分配。
2.3強化實踐
作為計算機基礎(chǔ)教育的第一門課程,我們尤其注重實驗教學內(nèi)容的改革和建設(shè),強調(diào)學生真正動手編程訓(xùn)練。除了在課堂上講解程序設(shè)計示例之外,我們還針對“計算概論A”和“計算概論B”的不同實踐教學要求,建設(shè)了現(xiàn)代化的在線實驗教學平臺——程序設(shè)計在線評測系統(tǒng)POJ(http://acm.pku.edu.cn/JudgeOnline, http://poj.grids.cn,面向“計算概論A”的實驗教學)和編程網(wǎng)格系統(tǒng)PG(http:// programming.grids.cn,面向“計算概論B”的實驗教學),同時建設(shè)了一個能夠適合各專業(yè)背景的、循序漸進的上機編程題庫。利用POJ/PG系統(tǒng),任課教師可以根據(jù)課程進度編排學生程序設(shè)計實習內(nèi)容(包括作業(yè)、練習、競賽等);學生可以通過網(wǎng)絡(luò)在線提交程序設(shè)計的源代碼,POJ/PG系統(tǒng)自動驗證學生提交的程序并實時通知結(jié)果。除了用于教學之外,POJ/PG系統(tǒng)還面向社會開放,吸引了大量程序設(shè)計愛好者的參與和討論,這種氛圍是一般教學平臺不具備的。此外,我們還會設(shè)計一些大型程序設(shè)計練習,要求學生以小組的形式,運用在本課程上學到的編程思想、方法和技巧,完成一個綜合性的程序設(shè)計題目,提高解決實際問題的能力、合作意識和團隊合作能力。多年的實踐證明,這種在線程序設(shè)計驗證以及團隊協(xié)作的實習方式激發(fā)了學生的實習興趣,提高了學生的學習積極性與主動性。
2.4教材建設(shè)與選擇
早在1999年,許卓群教授和裘宗燕教授就已經(jīng)為“計算概論”課程撰寫了教材《計算概論——叩開通向信息世界的大門》,在此基礎(chǔ)上,我們又在2005年出版了新的《計算概論》教材。為了更好地適應(yīng)教學發(fā)展的需要,我們又在2005年版教材的基礎(chǔ)上進行了修訂,修訂后的教材被遴選為教育部普通高等教育“十一五”國家級教材規(guī)劃選題、中國新聞出版總署重點教材。
為了加強程序設(shè)計實習的教學,同時配合POJ/PG系統(tǒng)的使用,2007年由李文新、郭煒、余華山編寫(清華大學出版社出版)了《程序設(shè)計導(dǎo)引及在線實踐》,本教材在敘述中穿插了許多精心編制的思考題,特別適合教師進行啟發(fā)式教學。同時,許多例題后都會總結(jié)POJ/PG系統(tǒng)上的學生在完成該題時容易犯的典型錯誤,讓學生少走彎路。
目前,我們正在編寫和“計算概論”理論教材相配套的實驗教材《計算概論實踐》。程序設(shè)計題解是本實驗教材的重點內(nèi)容,將與POJ/PG系統(tǒng)緊密結(jié)合,所有例題都來源于POJ/PG系統(tǒng)的題庫,與題庫的建設(shè)思想保持一致,以形成一個有機的教材體系。
裘宗燕教授也為本課程主編和編著了若干輔助教材,包括《從問題到程序——程序設(shè)計與C語言引論》(裘宗燕,北京大學出版社,1999)、《計算機基礎(chǔ)教程(上、下冊)》(裘宗燕主編,北京大學出版社,2000)、《C++語言基本程序設(shè)計》(裘宗燕,科學出版社,2003)等。
除了教材編寫之外,我們也非常注重向?qū)W生推薦國內(nèi)外其他經(jīng)典的教材,如清華大學吳文虎教授的《程序設(shè)計基礎(chǔ)(第2版)》(清華大學出版社)、Gary J.Bronson的《A First Book of ANSI C》(電子工業(yè)出版社,英文影印版)等。
3在線實踐與在線考核
3.1在線實踐
在計算機教學中,實驗教學至關(guān)重要。為此,我們設(shè)計了在線程序設(shè)計實習與教學輔助支撐平臺——程序設(shè)計在線評測系統(tǒng)POJ和編程網(wǎng)格系統(tǒng)PG。POJ系統(tǒng)是以題目為中心的訓(xùn)練系統(tǒng),主要面向“電子信息類”專業(yè)的程序設(shè)計練習,同時也面向程序設(shè)計競賽訓(xùn)練和競賽。該系統(tǒng)提供的訓(xùn)練思維能力和編程技巧的題目形式多樣,在全國程序設(shè)計競賽和計算機專業(yè)學生中有很深的影響。PG系統(tǒng)是基于POJ系統(tǒng)進行設(shè)計和開發(fā)的,主要面向更廣泛的非計算機專業(yè)的基礎(chǔ)教學,以課程為中心組織管理題目資源,提供面向不同專業(yè)背景的、適合循序漸進學習的題庫資源。POJ/PG系統(tǒng)目前共有2000多道題目,很多題目來自ACM/ICPC國際大學生程序設(shè)計競賽,反映的就是工作和生活中的實際問題。
學生可以針對某個題目編寫程序并提交,讓POJ/PG系統(tǒng)自動判定程序的對錯,在幾秒之內(nèi)就可知道對還是錯,錯在哪里。每個學生在POJ/PG系統(tǒng)上可以建立自己的賬號并選課;教師可以在POJ/PG系統(tǒng)上開設(shè)課程,布置練習和作業(yè),同時一眼就能看到布置的習題學生是否已經(jīng)完成,這幾乎將教師評判學生作業(yè)的工作量減少到零。POJ/PG系統(tǒng)對程序正確性的評判是極為嚴格的:學生提交的程序在POJ/PG系統(tǒng)服務(wù)器端編譯、運行,根據(jù)POJ/PG系統(tǒng)給出的輸入數(shù)據(jù)進行計算并輸出結(jié)果,將得到的輸出結(jié)果和標準答案進行對比,必須一個字節(jié)都不差,程序才能算通過,這對于培養(yǎng)嚴謹、周密的程序設(shè)計作風極為有效,而傳統(tǒng)的人工評判是難以做到這一點的。通過POJ/PG系統(tǒng),程序設(shè)計的實踐性以一種特殊的方式提到了十分重要的地位,不論對計算機專業(yè)的學生,還是非計算機專業(yè)的學生,都非常適用。
POJ/PG系統(tǒng)都提供了適合教師和學生進行個性化輔導(dǎo)和學習的交流手段:學生之間可以就編程問題進行討論;學生可以就每一道題目向老師請教;教師可以查看學生的源代碼,并對其中出現(xiàn)的問題進行一對一的輔導(dǎo);教師可以對學生的實習情況進行全面的統(tǒng)計和分析,掌握和了解學生的學習情況及實習效果。POJ/PG系統(tǒng)不僅可以幫助任課教師對一門課程的目的和實驗教學進行編排,全面掌握學生的編程能力,并提供個別輔導(dǎo)和點撥;同時激發(fā)了學生的學習興趣,鍛煉和提高學生的編程能力,讓學生接受教師的單獨輔導(dǎo),強化個人的訓(xùn)練成果。
POJ/PG系統(tǒng)可以減輕任課教師重復(fù)的工作量,使其將更多的精力投入到教學活動中;同時更好地幫助任課教師發(fā)現(xiàn)和抓住教學活動中的關(guān)鍵時段和關(guān)鍵因素,創(chuàng)造出相對于以往更加具有交互性、更因材施教的教學方式。
3.2在線考核
在考核方面,本課程更多地考察學生的實際動手能力。除了在線實踐及上機作業(yè)外,期末考試也有很大一部分通過POJ/PG系統(tǒng)完成。這兩部分實踐考察占總成績的60%以上(參見表1)。由于實踐考核占總成績的比例較大,因此學生都會主動地加強對自身動手能力的練習。
POJ/PG系統(tǒng)可以防止學生在實習和上機考試過程中的作弊行為,保證實踐考核的效果。對于平時的練習和作業(yè),系統(tǒng)可以通過對比學生提交源代碼的相似性提示老師對可能抄襲的學生進行檢查;在上機考試時,系統(tǒng)可以通過限制IP地址訪問,將用戶和IP地址進行綁定(即考試時一旦用戶在一臺機器上登錄了系統(tǒng),則不允許其他用戶在此機器上登錄,同時也不允許該用戶在其他機器上登錄)等方式來防止學生之間的抄襲行為。
3.3創(chuàng)新性培養(yǎng)
為了更好地開展創(chuàng)新性培養(yǎng),除了設(shè)置“實驗班”、“通選課”、“元培班”進行教學外,我們還經(jīng)常在POJ/PG系統(tǒng)中部署“競賽”練習,供成績優(yōu)秀的同學練習;同時,對這部分同學進行額外輔導(dǎo),讓他們組隊參加學校組織的各種練習賽,鼓勵他們?yōu)檫M一步參與到大學生程序設(shè)計競賽中做準備。事實上,北京大學近年來參與大學生程序設(shè)計競賽的成績不斷提高,其中還有一部分同學來自于其他院系。通過這種創(chuàng)新的培養(yǎng)方式,很多其他理科專業(yè)的學生增強了對計算機的興趣,發(fā)現(xiàn)和挖掘了潛質(zhì),有的學生在本專業(yè)后續(xù)的研究工作中利用計算機技術(shù),取得了很好的研究結(jié)果,有的學生更是在畢業(yè)后直接從事了與IT相關(guān)的工作。