徐明星 王瑀屏 鄔曉鈞 黃震春 姚海龍
文章編號:1672-5913(2015)11-0017-04
中圖分類號:G642
摘要:提出以培養計算思維為主線、以激發學術志趣為核心、以引領計算人生為目標的指導思想,構建以學生為中心的多維度、多層次、系統連貫的計算機程序設計系列課程體系,介紹系列課程中各個教學環節的具體改革措施。
關鍵詞:程序設計;計算思維;以學生為中心
1 背景 計算機程序設計是計算機專業和一些非計算機專業(如數學、數理基科班等院系與專業)的重要基礎,其教學體系一般是由幾門關系松散且相對獨立的課程構成,如C語言程序設計、C++語言程序設計等。這些課程的教學通常以介紹某個特定程序設計語言(如C、C++)的語法知識為主。隨著計算機科學與技術的發展,這樣的課程組織與教學設計已經跟不上時代步伐,不能滿足實際工作的需要。
作為一所研究型大學,清華大學一直以培養創新拔尖人才為己任。從2001年起,清華大學計算機科學與技術系(以下簡稱“計算機系”)吳文虎教授主持了系本科生課程程序設計基礎的教學改革任務。經過幾年的努力,課程被評為首批國家級精品課程,奠定了建設高水平計算機程序設計系列課程的良好基礎。2003年秋,我們針對計算機系本科生開設了C++面向對象程序設計課程,當年學生評教即進入全校同類課程的前5%。2004-2009年,我們又在暑假小學期開設了C++程序設計實踐課程,初步形成了一個以講授程序設計為核心內容的系列課程雛形。如何通過改革和調整,將這些彼此關聯的課程重新打造成一個更加緊密的有機課程體系;使之既能體現時代特色、跟上發展潮流,又能更好地服務于世界一流大學的建設需求,提高創新拔尖人才的培養水平,成為又一個擺在我們面前亟待解決的問題。
為此,我們認真學習和借鑒國內外的先進教學理念,深刻反思傳統計算機程序設計教學的不足之處(如實踐教學與理論教學脫節),著重研究、探討和解決了以下幾個問題。
(l)程序設計系列課程應如何定位才能跟上時代發展的步伐,站在科技發展的前沿?
(2)作為研究型大學的專業基礎課程,應該采取什么樣的教學模式、方法和手段,教授哪些內容,才能真正為學生的專業發展打好基礎,引領和激發學生的學術志趣?
(3)面對不同專業發展要求、不同背景基礎的學生,如何實現以學生為中心的個性化教學?
通過對這些問題的反復研討和深入思考,我們明確了程序設計系列課程的建設思想——以培養計算思維為主線、以激發學術志趣為核心、以引領計算人生為目標。自2009年以來,通過課程改革與新課程設置,我們建成了程序設計系列課程體系,包括多門課程、多個課堂:大一秋季程序設計基礎(48學時,兩個課堂)、大一春季面向對象程序設計基礎(32學時,兩個課堂,其中一個是雙語教學小課堂)、夏季小學期程序設計實踐(32學時)等3門內容連貫的專業基礎課,以及一門與ACM競賽相關的全校任選課程序設計藝術和實踐(48學時,全年開課)。
系列課程的教學內容包含基礎算法設計與實現、基本數據結構的設計與應用、面向對象程序設計、設計模式、并行與異步程序設計的基本思路與方法、實踐與提高等,使用的計算機語言為C/C++。系列課程以大班教學為主,課堂選課人數在150名左右,授課對象包括計算機專業學生和數學專業學生;為滿足國際交流需要,作為主課堂的補充,面向對象程序設計基礎課程還同時開設了雙語教學的小班課堂;ACM競賽選修課程每年培養60名左右的學生參與日常訓練和競賽。
在多年實際教學的研究與探索過程中,我們努力貫徹落實先進的教學思想和教育理念,在系列課程的各個教學環節都進行了相應的改革和實踐,取得了具有先進性、前瞻性以及可復制性的教育教學成果,建設了一個完整的程序設計系列課程體系。該系列課程以國家級精品課程為基礎不斷延伸,把枯燥的編程技巧提升到程序設計藝術和科學方法論的層次,引導和激發學生對計算科學的興趣和志向,配合實踐訓練課程形成了多維度、多層次、系統連貫的課程體系。該體系時間跨度大,內容覆蓋廣,受益學生多。
2 以計算思維培養為主線,科學合理地設置系列課程內容
計算思維是人類求解問題、設計系統、理解個體行為的一種思想和方法,也是近年來在計算機教育領域討論的熱點話題。隨著計算機科學的發展,計算的方法與模型日益豐富和復雜,這極大地推動了數學、物理學、生物學等學科的發展。
程序設計系列課程以計算思維培養作為貫穿各門課程的主線,把教學的主要內容和精力用來拓展學生思維模式,提升學生對復雜事物進行高度抽象的認知水平和思維能力。在能力和素質的提升過程中形成和發展計算思維,感受計算機程序算法的科學性與設計實現的藝術性,提升學生的學習境界,為學生未來的專業發展打下堅實基礎。
在知識傳授的基礎上,我們強調理論與實踐相結合,解決實際問題。通過在系列課程的每一個環節中貫徹“理性思維結合理性實踐”的教學理念,使學生脫離紙上談兵的學習狀態,著力引導學生進行自主探究式學習、合作學習等,讓他們在解決實際問題的過程中體會和提升程序設計的思想和境界。
系列課程教學要注重前后關聯銜接,以層層深入的知識體系為載體,逐步深化思想的交流,在潛移默化中引領學生的計算人生。
程序設計基礎課程以如何用計算機解題來組織各章節內容,強調思維模式的更新與轉換;面向對象程序設計基礎注重如何分析思考變與不變的辯證關系,強調建立面向接口的思維模式;程序設計實踐課程則通過如何表達復雜的同步與異步的時序關系,深化和完善計算思維,強調集成創新;程序設計藝術和實踐課程通過算法設計與編程實踐進一步鞏固和提升計算思維能力,強調團隊協作和算法創新。
系列課程的教學內容在組織編排上層層遞進、前后呼應,始終遵循程序設計課程的教學規律和學生的認知規律。例如:第一學期課程重點是基礎算法思維,旨在培養學生初步建立計算思維,使他們掌握基本問題的分析和求解方法;第二學期課程則強調抽象思維,要求學生掌握復雜問題的分析與程序實現的基本方法;實踐課程以及ACM訓練課程則開展有強度、有深度的上機編程訓練,強調對思想、知識與技能的靈活運用,要求學生融會貫通。
3 多個環節和多種措施全面發力,激發學生的學術志趣
以任務驅動形式,從學生熟知的學習和生活經驗中提煉問題,強調引導式教學,鍛煉學生主動學習,培養他們探究未知的習慣,提升學習的境界。例如:對新知識介紹均從問題切入,在示例的分析講解中進行啟發式教學,設置課堂討論環節進行深入互動,等等。
在課堂示例的講解過程中,剖析具體問題的深刻內涵,闡述問題形式化與數學建模對問題求解的重要性,鍛煉學生的科學思維能力;從多種角度、多個層次來分析復雜事物之間的關系,引導學生養成對比研究和辯證思考的認知習慣。
強調抽象的理論思考與實際的上機實踐相結合,要求理性思維下的理性實踐,使學生不懼程序錯誤、善用程序錯誤,進而增強程序調試能力,培養探究未知和追求真理的科學精神。例如,針對學生寫程序時經常發生的錯誤,考慮到很多初學者會因此感到強烈的挫折感和學習“門檻”,教師在課堂演示過程中可以故意出現一些常見的打字錯誤或算法錯誤,如少敲一個分號、少寫一個大括號、漏掉某個重要判斷或預處理等,在出現編譯錯誤或運行錯誤后故作驚慌,然后為學生示范如何根據提示信息進行分析,最終找到并修正錯誤。這種當堂的發生錯誤和分析解決的互動過程,使得同學們了解了程序設計過程中難免出現的各種錯誤,并認識到這些錯誤并不可怕,重要的是要注重積累經驗并冷靜分析。此外,我們還設置了常見錯誤分享的教學環節,要求學生把學習過程中遇到的錯誤以及解決過程與全體同學分享,使同學們懂得錯誤是一種寶貴的財富,鼓勵他們不要僅停留在老師講的正確寫法上,而要更多地嘗試其他寫法,看看會發生什么,探究問題背后的原因。
課程以上機編程解題為主要考核形式,強化實踐,反復訓練學生理解和分析問題、建立模型、設計算法、上機編程、全面測試和理性調試,培養學生嚴謹務實的科學作風。
在線評測系統實現自動批改學生提交的作業,只記(錄)成功,不計(較)失敗。評測系統允許同學們在截止時間前多次提交,最終成績按照獲得最高分的一次提交來計算。這種機制不僅符合軟件開發的實際情況,還能有效鼓勵學生不畏失敗和困難、越挫越勇,逐步養成追求卓越和完美的精神,為未來的學習研究工作打下基礎。在歷年的教學實踐中,這個措施最受學生歡迎,甚至出現過為完成一道有一定難度的問題,反復提交20多次后終于獲得該題滿分的情形。此外,在線評測系統還能顯示學生各自的學習進度(如作業完成情況在全年級中的排名),有效激發學生之間的良性競爭,引導學生開展自主學習、主動鉆研和反復實踐。
在課堂教學、課外閱讀、課后作業中,我們有針對性地提供一些需要用后續課程的知識才能解答的“開放”問題,激發學生持續深入學習,逐步形成鉆研問題的品質。例如,我們在講完變量一章中故意設置“求從1到n的平方和”這樣的問題,盡管用已知的數學公式和已有的編程知識能夠完成,但它能夠使同學們隱隱體會到后續章節會出現的“循環”概念;而在講完函數一章后則提出“函數能否調用自己”的問題,引發同學思考,鼓勵同學嘗試,為后續章節的難點“遞歸”作好鋪墊。
各課程根據不同側重點精心設置小組大作業,要求各小組獨立開展調研,組織討論,協作完成大作業的程序設計與實現,最后安排課堂時間挑選優秀小組進行成果匯報,模擬學術交流過程,使學生體驗研究工作的幾個關鍵環節,培養學術精神。
通過小組大作業來培養團隊協作能力,幫助大一學生盡快適應大學的學習和生活。選拔和組織有基礎的學生,以3人為一隊進行日常訓練并參加ACM競賽,引導學生定位團隊角色,磨合團隊協作模式,在充分有效溝通的基礎上,分工合作,研究并解決問題。
4 以學生為主體進行個性化教學,實現因材施教
在本系列課程的學生中,既有沒接觸過程序設計的,也有中學期間就獲得信息學大賽金牌的;既有計算機專業的,也有非計算機專業的。他們在計算思維方面的基礎差異大且專業發展方向不同,因此在教學內容、教學方法和教學環節的設置上,我們準備了多種教學預案。
在開課前對選課學生進行計算機基礎調查和專業背景調查,根據調查結果調整部分教學內容、教學環節和考核要求,使不同課堂之間既遵循共同的教學理念和思路,又各有特色,滿足不同專業學生的專業發展需求。例如,數學專業的學生通常會在高年級時學習和使用Mathmatica語言,我們針對他們經常遇到的問題,講解類似問題在C語言中如何解決,讓他們認識到問題其實出在數學思路上。這樣,一方面為他們將來的課程學習打下好的基礎,照顧到他們專業發展的特殊性;另一方面又使他們加深了對計算思維的理解和認識。
選拔有基礎、有意愿的同學擔任課程小教員,分組輔導身邊的同學。針對不同編程基礎的同學設計不同層次的題目,為不同專業的同學設計不同的示例。例如,針對數學專業同學設計示例時盡量選用數學問題進行講解,如用二元一次方程組的求解過程講解分支結構與邏輯思維的關系,用存儲素數表的應用需要來講解文件操作等。在講解思路上也側重類比數學中的常用方法,如類比數學歸納法與遞歸的解題思路。在教學過程中,鼓勵學生就某個感興趣的問題深入鉆研,并在課堂上展示交流。我們每年都組織課程成績優異且學有余力的學生參加校際的程序設計競賽,如“北京郵電大學校賽”“北京理工大學校賽”等。
開設雙語課堂,課程以英語講授為主,重點難點輔以中文解釋,為留學生和外語基礎好的學生提供更合適的學習環境;采用討論式教學方式,組織學生進行課上報告,促進課堂內交流互動,分享編程經驗與心得,彼此學習、共同提高;發揮英語教學優勢,依據并切合學生實際編程能力,引入經典英文學術論文(部分論文Google引用次數達30 000次以上)的閱讀與實現教學環節,激發學生的學術興趣。
依托計算機系學生創新實驗室組建清華大學ACM競賽代表隊,為有很好基礎并希望繼續提高算法水平的同學提供平臺,提供與國內外高校程序設計高手競技和交流的機會。
5 效果
以上教學改革措施在實踐中取得了很好的效果,主要體現在:
(1)相關系列課程的教學效果和學生評教均很好。學生反映,系列課程的學習不僅使他們覺得具體專門的知識是非常有趣和實用的,還從中深刻領悟了做人做事的道理。
(2)清華大學ACM競賽代表隊的競賽成績近年來一直穩定在世界前列,學生在競賽過程中切實感受到了追求卓越的學校傳統,領悟到了計算的科學之美與算法的藝術之美。
(3)在國家精品資源共享課程項目的申報與建設過程中,本成果的應用對于申報立項成功也發揮了重要作用,保證了精品資源在理念與內容上的先進性和獨特性。
(4)在成果建設過程中形成的《程序設計基礎(第3版)》被評為國家“十二五”規劃教材。
(5)經過本成果中系列課程的學習培養,學生提高了學習能力,為后續課程(如數據結構、Java語言編程等)的學習打下堅實基礎。
(6)本系列課程大大加強了學生解決實際問題的設計與實現能力,一些同學參加國際大學生超級計算機競賽、挑戰杯項目等,均取得了優異成績。
6 結語
要建成一個好的系列課程體系,必須“用心”,從科教興國的戰略高度,對教育對象負責,對建設世界一流大學的目標負責。教育最重要的是要喚醒學生的力量,引導學生主動學習,使他們樹立終身學習的觀念。對此,我們深感責任重大。課程建設只有起點,沒有終點,未來我們會不懈努力,勇于探索,以取得更好成績。