汪小林 羅英偉 李文新 代亞非 許卓群
摘要:本文詳細介紹了北京大學“計算概論”課程的教學體系建設及其改革情況,并闡述了該課程“立足基礎、因材施教、強化實踐”的教學理念和內涵。
關鍵詞:計算概論;教學體系;程序設計;在線實踐;在線考核
中圖分類號:G642 文獻標識碼:B
“計算概論”課程是北京大學面向全校理科專業(理學、工學和醫學)一年級學生開設的計算機基礎教育特色課程,是北京大學信息科學技術學院開設的選課人數最多的主干基礎課(每年有2000余人選修本課程)。針對本課程涉及的專業多、選課學生多的特點,經過十余年的建設,本課程已逐漸形成了“立足基礎、因材施教、強化實踐”的教學理念。
首先,我們按專業分兩個層次建設課程,為“電子信息科學類”專業提供“計算概論A”課程,為其他理科專業提供“計算概論B”課程;不同的層次,課程內容深度會有所不同;不同的專業背景,在教學和實習內容設計上也會有不同的針對性。其次,根據學生的基礎不同實現分班教學:對于“電子信息科學類”類專業,基礎好、領悟力強的學生給予實驗班教學,大部分學生在普通班學習,為基礎較差的學生開設輔導班個別輔導;對其他理科專業,則分通選課(供各院系基礎好的學生選修)、元培班(北大元培學院學生)和普通班(各院系其他學生)進行教學。
與此同時,我們設計和開發了程序設計在線評測系統POJ(http://acm.pku.edu.cn/JudgeOnline,http://poj.grids.cn)和編程網格系統PG(http://programming.grids.cn),強化學生的動手能力,并與大學生程序設計競賽結合,培養學生的創新能力。
作為北京大學覆蓋面最廣的理科課程之一,我們以北大的網絡教學平臺為基礎,以北京大學國家級計算機實驗教學示范中心為依托,輔以多個具有不同專業特點的課程網站,構建了一個多層次開放的網絡教學與實驗環境(http://www.jpk.pku.edu.cn/pkujpk/icportal/),為學生提供了豐富的教學資源和教學輔導,整個課程的網絡資源對每個學生都是開放的。
1課程定位:北京大學計算機基礎教育的基礎課程
隨著計算機科學與技術的不斷發展和普及,該課程已經日漸成為繼語文和數學之后的第三大智力工具,所有學生都需要也應該學習計算機科學與技術的相關課程。早在1996年,許卓群教授就已經在北京大學主持開設面向全校理科學生的“計算概論”課程。經過十余年的建設,北京大學根據學生的基礎不同、專業不同提供了不同層次和不同內容的計算機基礎教育課程。對“電子信息類”專業的學生,北京大學設計了“程序設計與算法類”課程群,由“計算概論A”、“程序設計實習”、“數據結構與算法A”、“數據結構與算法實習”、“算法分析與設計”五門課組成。而對于其他理科專業學生,我們設計了“計算概論B”和“數據結構與算法B”課程。北京大學規定所有理科本科生必須修滿兩學期以上的計算機基礎課程,并將該系列課程列為本科生主干基礎課進行重點建設。
北京大學設計的有關課程群,為理科本科生提供了一個系統的、理論與實踐相結合的計算機基礎教育框架。其中,“計算概論”課程是這個框架中的基礎,如圖1所示。

北京大學設計的“計算概論”課程,是所有新入學本科一年級學生學習計算機科學與技術的第一門課程。它總括了計算機學科的知識體系,是計算機學科的入門基礎。通過學習,學生不但可以掌握計算機的基本工作原理以及程序設計的基本方法,為學習后續課程創造條件;而且可以真正理解計算的本質,提高抽象思維和嚴格的邏輯推理能力,為將來參與創新性的研究和開發工作打下堅實的基礎。
2課程內容體系:立足基礎、因材施教、強化實踐
2.1立足基礎
如何在新入學的大學生中開展計算機基礎教育,一直是高校課程設計中面臨的一個問題。一般說來,計算機學科的入門基礎包括計算引論(Introduction to Computing)和程序設計基礎(Programming Foundation)兩個部分。在高中階段,很多學生已經接受過計算機基礎教育,如軟件、硬件、計算機網絡、二進制、文字處理以及基本的操作系統和數據庫操作等基礎知識和基本的程序設計訓練。當然,由于升學及其他方面的原因,不同學生的基礎各不相同:有的學生對計算機的基礎知識了解很少,有的學會了計算機的基本操作和應用,有的會寫程序,有的則掌握了較好的編程技巧,但很少有學生能夠真正理解計算的本質。考慮到這些情況,我校“計算概論”課程在內容上融合了計算的內涵和程序設計基礎兩個方面,讓學生在理解計算本質的基礎上掌握程序設計的原理和方法,進而提高解決實際問題的能力。同時,我們根據學生的不同層次設計不同的教學班級,滿足學生的不同需求,爭取讓每個學生都能夠在本課程中保持“新鮮”的學習,避免了“跟不上”、“嚼冷飯”、“進度慢”等現象。
在課程內容設計上,我們沿著計算機科學發展的主線,介紹從手工計算到機械計算再到現代計算機演變過程中起決定性作用的思想、技術、人物、事件,貫穿整個過程講述二進制、數據的表示、數據通信、數據的存儲與管理、存儲程序原理、計算機硬件與體系結構、機器指令和匯編、高級語言、計算機系統軟件與應用軟件、計算機網絡、信息安全等重要的基本概念是怎樣構成“計算”的基本內涵的;同時,讓學生及時了解當前計算機領域出現的新思想、新技術、新方法;最后系統講解程序設計基礎,使學生掌握程序設計的基本方法,在實踐環節逐步提高程序設計的技巧,建立良好的編程習慣,寫出規范的程序代碼,為后續課程打好基礎。
在教學過程中,除了讓學生掌握編程語言的語法,理解程序的層次及結構,學會寫計算機程序等基本功之外,我們更強調的是對學生問題抽象能力的培養,讓學生學習如何把要解決的實際問題用數學的形式表示以及符號化的方法處理。我們也注重訓練學生邏輯思維的能力,學習如何分析問題,確定解題思路。此外,本課程還介紹一些基本的、經典的算法知識,例如:遞歸、貪心算法和動態規劃,開闊學生解題的思路。同時,程序的調試也是必不可少的學習內容。
計算機學科發展迅速,知識更新日新月異,直接反映時代的發展特征。為此,我們也在不斷根據最新的技術發展對課程內容進行補充和調整,如:針對CPU的發展,我們補充介紹了“多核”的概念;在2007年物理學諾貝爾獎公布時,我們又在磁介質存儲原理中補充了“巨磁阻效應(Giant Magneto-Resistive,GMR)”,解釋為什么磁盤體積越來越小,而容量卻越來越大;針對移動USB盤的普及,我們又深入介紹了閃存存儲原理;在軟件技術方面,我們把虛擬化、軟件即是提供服務等新思想及時介紹給學生;在網絡及應用方面,我們也把一些最新技術和應用介紹給學生,如IPv6、P2P、博客等。
2.2因材施教
作為一門面向全校理科新生的計算機基礎教育課程,“計算概論”為全校兩個層次的學生提供不同模塊的教學課程,為“電子信息科學類”專業學生提供“計算概論A”課程,為其他理科專業學生提供“計算概論B”課程。不同層次的課程內容和深度會有所不同;同時,面向不同的專業背景,教學和實習內容設計上也會有不同的針對性。其次,根據學生的基礎,實現分班教學:對于“電子信息科學類”類專業,基礎好、領悟力強的學生給予實驗班教學,大部分學生在普通班學習,為基礎較差的學生開設輔導班個別輔導;對于其他理科專業,則分通選課(供各院系基礎好的學生選修)、元培班(北大元培學院學生)和普通班(各院系其他學生)進行教學。在同一授課層次的授課內容中,采取基礎訓練(30%)、綜合實踐(40%)和創新培養(30%)相結合的培養模式。
本課程課時安排為5學時/周,共90學時(18周),包括課堂教授和上機。基本學時分配為課程講授3學時/周,上機2學時/周。不同的教學班級,可以根據實際的需要適當調整課堂講授和上機的學時分配。
2.3強化實踐
作為計算機基礎教育的第一門課程,我們尤其注重實驗教學內容的改革和建設,強調學生真正動手編程訓練。除了在課堂上講解程序設計示例之外,我們還針對“計算概論A”和“計算概論B”的不同實踐教學要求,建設了現代化的在線實驗教學平臺——程序設計在線評測系統POJ(http://acm.pku.edu.cn/JudgeOnline, http://poj.grids.cn,面向“計算概論A”的實驗教學)和編程網格系統PG(http:// programming.grids.cn,面向“計算概論B”的實驗教學),同時建設了一個能夠適合各專業背景的、循序漸進的上機編程題庫。利用POJ/PG系統,任課教師可以根據課程進度編排學生程序設計實習內容(包括作業、練習、競賽等);學生可以通過網絡在線提交程序設計的源代碼,POJ/PG系統自動驗證學生提交的程序并實時通知結果。除了用于教學之外,POJ/PG系統還面向社會開放,吸引了大量程序設計愛好者的參與和討論,這種氛圍是一般教學平臺不具備的。此外,我們還會設計一些大型程序設計練習,要求學生以小組的形式,運用在本課程上學到的編程思想、方法和技巧,完成一個綜合性的程序設計題目,提高解決實際問題的能力、合作意識和團隊合作能力。多年的實踐證明,這種在線程序設計驗證以及團隊協作的實習方式激發了學生的實習興趣,提高了學生的學習積極性與主動性。
2.4教材建設與選擇
早在1999年,許卓群教授和裘宗燕教授就已經為“計算概論”課程撰寫了教材《計算概論——叩開通向信息世界的大門》,在此基礎上,我們又在2005年出版了新的《計算概論》教材。為了更好地適應教學發展的需要,我們又在2005年版教材的基礎上進行了修訂,修訂后的教材被遴選為教育部普通高等教育“十一五”國家級教材規劃選題、中國新聞出版總署重點教材。
為了加強程序設計實習的教學,同時配合POJ/PG系統的使用,2007年由李文新、郭煒、余華山編寫(清華大學出版社出版)了《程序設計導引及在線實踐》,本教材在敘述中穿插了許多精心編制的思考題,特別適合教師進行啟發式教學。同時,許多例題后都會總結POJ/PG系統上的學生在完成該題時容易犯的典型錯誤,讓學生少走彎路。
目前,我們正在編寫和“計算概論”理論教材相配套的實驗教材《計算概論實踐》。程序設計題解是本實驗教材的重點內容,將與POJ/PG系統緊密結合,所有例題都來源于POJ/PG系統的題庫,與題庫的建設思想保持一致,以形成一個有機的教材體系。
裘宗燕教授也為本課程主編和編著了若干輔助教材,包括《從問題到程序——程序設計與C語言引論》(裘宗燕,北京大學出版社,1999)、《計算機基礎教程(上、下冊)》(裘宗燕主編,北京大學出版社,2000)、《C++語言基本程序設計》(裘宗燕,科學出版社,2003)等。
除了教材編寫之外,我們也非常注重向學生推薦國內外其他經典的教材,如清華大學吳文虎教授的《程序設計基礎(第2版)》(清華大學出版社)、Gary J.Bronson的《A First Book of ANSI C》(電子工業出版社,英文影印版)等。

3在線實踐與在線考核
3.1在線實踐
在計算機教學中,實驗教學至關重要。為此,我們設計了在線程序設計實習與教學輔助支撐平臺——程序設計在線評測系統POJ和編程網格系統PG。POJ系統是以題目為中心的訓練系統,主要面向“電子信息類”專業的程序設計練習,同時也面向程序設計競賽訓練和競賽。該系統提供的訓練思維能力和編程技巧的題目形式多樣,在全國程序設計競賽和計算機專業學生中有很深的影響。PG系統是基于POJ系統進行設計和開發的,主要面向更廣泛的非計算機專業的基礎教學,以課程為中心組織管理題目資源,提供面向不同專業背景的、適合循序漸進學習的題庫資源。POJ/PG系統目前共有2000多道題目,很多題目來自ACM/ICPC國際大學生程序設計競賽,反映的就是工作和生活中的實際問題。
學生可以針對某個題目編寫程序并提交,讓POJ/PG系統自動判定程序的對錯,在幾秒之內就可知道對還是錯,錯在哪里。每個學生在POJ/PG系統上可以建立自己的賬號并選課;教師可以在POJ/PG系統上開設課程,布置練習和作業,同時一眼就能看到布置的習題學生是否已經完成,這幾乎將教師評判學生作業的工作量減少到零。POJ/PG系統對程序正確性的評判是極為嚴格的:學生提交的程序在POJ/PG系統服務器端編譯、運行,根據POJ/PG系統給出的輸入數據進行計算并輸出結果,將得到的輸出結果和標準答案進行對比,必須一個字節都不差,程序才能算通過,這對于培養嚴謹、周密的程序設計作風極為有效,而傳統的人工評判是難以做到這一點的。通過POJ/PG系統,程序設計的實踐性以一種特殊的方式提到了十分重要的地位,不論對計算機專業的學生,還是非計算機專業的學生,都非常適用。
POJ/PG系統都提供了適合教師和學生進行個性化輔導和學習的交流手段:學生之間可以就編程問題進行討論;學生可以就每一道題目向老師請教;教師可以查看學生的源代碼,并對其中出現的問題進行一對一的輔導;教師可以對學生的實習情況進行全面的統計和分析,掌握和了解學生的學習情況及實習效果。POJ/PG系統不僅可以幫助任課教師對一門課程的目的和實驗教學進行編排,全面掌握學生的編程能力,并提供個別輔導和點撥;同時激發了學生的學習興趣,鍛煉和提高學生的編程能力,讓學生接受教師的單獨輔導,強化個人的訓練成果。
POJ/PG系統可以減輕任課教師重復的工作量,使其將更多的精力投入到教學活動中;同時更好地幫助任課教師發現和抓住教學活動中的關鍵時段和關鍵因素,創造出相對于以往更加具有交互性、更因材施教的教學方式。
3.2在線考核
在考核方面,本課程更多地考察學生的實際動手能力。除了在線實踐及上機作業外,期末考試也有很大一部分通過POJ/PG系統完成。這兩部分實踐考察占總成績的60%以上(參見表1)。由于實踐考核占總成績的比例較大,因此學生都會主動地加強對自身動手能力的練習。

POJ/PG系統可以防止學生在實習和上機考試過程中的作弊行為,保證實踐考核的效果。對于平時的練習和作業,系統可以通過對比學生提交源代碼的相似性提示老師對可能抄襲的學生進行檢查;在上機考試時,系統可以通過限制IP地址訪問,將用戶和IP地址進行綁定(即考試時一旦用戶在一臺機器上登錄了系統,則不允許其他用戶在此機器上登錄,同時也不允許該用戶在其他機器上登錄)等方式來防止學生之間的抄襲行為。
3.3創新性培養
為了更好地開展創新性培養,除了設置“實驗班”、“通選課”、“元培班”進行教學外,我們還經常在POJ/PG系統中部署“競賽”練習,供成績優秀的同學練習;同時,對這部分同學進行額外輔導,讓他們組隊參加學校組織的各種練習賽,鼓勵他們為進一步參與到大學生程序設計競賽中做準備。事實上,北京大學近年來參與大學生程序設計競賽的成績不斷提高,其中還有一部分同學來自于其他院系。通過這種創新的培養方式,很多其他理科專業的學生增強了對計算機的興趣,發現和挖掘了潛質,有的學生在本專業后續的研究工作中利用計算機技術,取得了很好的研究結果,有的學生更是在畢業后直接從事了與IT相關的工作。