蘇小紅 趙玲玲 邱景 王甜甜 張彥航



摘要:針對CS2013缺乏與其相匹配的實踐教學指導性綱領的問題,以CS2013的知識體系為指導,設計了程序設計課程的實踐教學實施方案,制訂了以系統編程、問題求解、計算思維和自主學習能力培養為核心,涵蓋程序設計完整知識體系的實踐教學大綱,并具體給出了一個實驗課程設計案例。然后,在這一大綱指導下進行了翻轉實驗的教學改革試點,借助高級語言程序設計能力訓練平臺和編程題考試自動評分系統,嘗試了線上線下緊密結合,課內課外互為補充,能力為導向,考、講、練結合,學習成效驅動的翻轉實驗教學模式,在本校程序設計課程實踐教學中取得了良好的效果,保障了學生的實驗效果和實驗目標的達成。
關鍵詞:CS2013;程序設計課程;實踐教學;知識體系;能力培養
從計算機誕生至今,計算學科的相關專業教育一直受到國際學術學會組織的關注。美國計算機學會(ACM:Association for ComputingMachinery)和美國電氣和電子工程師學會計算機分會(IEEE-CS:Institute of Electrical andElectronics Engineers-Computer Society)聯合任務組于2013年推出了第四部計算機科學(CS:Computer Science)高等教育指導性大綱CS2013(Computer Science Curriculum 2013)。CS2013中的知識體系涵蓋了18個知識領域,提供了不同大學和學院的121門案例課程,這些課程從不同側面體現了知識領域中的各個知識單元組合成課程的不同方式。此外,CS2013也提供了5所不同大學和學院的核心課程設置案例,這些案例展示了如何通過知識單元實例化將完整的知識體系分配到專業培養方案中的一系列核心課程中。這些案例不僅共享了課程和核心課程設置的經驗,而且展現了不同的教育理念。這些經驗和案例為高等學校實施教學改革和實踐提供了切實可操作的課程設計方法和人才培養方案改革模式,也引領了全球計算機教育領域的發展方向,為計算機領域專業教育構建了一幅全面、具體、嚴謹、深入、可操作性強的藍本,因而受到國內外高等院校計算機教育行業的普遍推崇,在全球計算機教育領域產生了廣泛而深遠的影響,并引發了對其指導思想的深入研究和實踐的熱潮。
然而,作為計算機專業教育的基石,實踐教學領域卻一直沒能推出一部與CS2013相匹配的指導性大綱。造成了實踐教學一線缺乏清晰統一的指向和綱領,導致了先進教學理念與實踐教學的脫節。
為了使中國的計算機課程與國際接軌,在我國計算機高等教育中推廣CS2013的先進教育理念,2013年受教育部委托,由中國計算機學會教育工委、Intel公司牽頭,組織國內十余所著名高校核心課程教師成立了“ACM CC2013中國工作組”,針對CS2013中缺乏對教學實踐環節的指導性綱領問題,重點對適應CS2013指導思想的計算機專業實踐教學體系進行研究。希望通過參與CS2013實踐教學體系的研制工作,結束國內只是被動跟隨國際標準的現狀,適時將中國計算機教育的特色、需求、想法表達出來,以計算機專業實踐教學體系為切入點,以期在國際計算機教育的舞臺上發揮更大的作用。ACM很重視中國工作組提出的增加實踐教學體系的建議,同意由中國研制CS實踐教學體系,作為CS2013的附錄發布。作者作為ACMCS2013中國工作組成員之一,參與了CS2013實踐教學體系中“程序設計基礎”核心課程實踐教學體系的設計和編寫工作。
本文對程序設計課程的CS2013實踐大綱的制訂工作進行了介紹和總結。程序設計課程群是計算機科學中的重要組成部分,在計算機專業課程體系中占有舉足輕重的地位。而如何在程序設計課程的實踐教學中將CS2013的教育理念具象,踐行CS2013中的知識點覆蓋和能力培養,體現CS2013中從知識到能力到思維培養的層次性要求,同時兼顧我國計算機專業教育的實際,是程序設計課程實踐教學大綱制定過程中著重解決的問題,也是本文重點闡述的內容。
一、基于0S201 3的程序設計課程教學目標
1.CS2013中的程序設計課程
CS2013中將計算機科學的知識體(BodV ofKnowledge)組織為18個知識領域(KnowledgeArea)構成的集合,分別與計算領域中的各分支對應。其中,從各知識領域所涵蓋的知識單元來看,與程序設計課程相關的知識領域主要包括程序設計語言和軟件開發基礎。程序設計課程相關的知識單元和核心知識點如圖1所示。
2.基于CS2013的程序設計課程能力培養目標
與以往單純強調對知識的掌握不同,CS2013中的一門課程可能包含多個知識領域中的知識單元,涵蓋某個知識領域也可能需要多門課程,因此CS2013更強調學生對知識的實際運用能力,尤其是綜合運用所學知識進行系統設計的能力,即具有系統編程能力;同時,在實踐中鍛煉求解問題的技能,要求學生能夠將生活中的實際問題轉化為可以運用掌握的知識來予以解決的模型,進行合理的假設和抽象,還要求學生對同一問題掌握多種求解方法,即問題求解能力;CS2013雖沒有反復強調問題求解技能,但對求解問題方法的選擇和求解代價的評估,以及對封裝、抽象、系統級視角解決問題等思維方式的引入,都蘊含了對學生計算思維能力的要求;此外,計算機學科的快速發展特性使得學生是否具有終身學習的能力成為計算機學科對學生的培養是否成功的標準之一。這種終身學習能力要求從向學生傳授知識,改變為引導學生自主學習,最后使之形成終身學習的習慣,因此如何引導和強化學生形成自主學習能力應該是當今高等教育中所有課程的實踐教學環節所面臨的重要任務。
其中,系統編程能力的訓練應在實踐教學中貫穿始終。隨著實踐教學的開展和深入,逐漸培養學生的問題求解能力,在學生具備基本的編程能力、掌握一定的問題求解方法之后,引導其進行自主學習,并最終形成計算思維,完成從手到腦到思維的能力的逐級提升。
3.基于CS2013的程序設計課程教學目標
教學目標決定著教學的過程和對教學的評價。只有設立了明確清晰、恰當合理的教學目標,才能聚焦教學活動中的各個環節,使各項教學活動的設計緊緊圍繞著目標而展開,并為最終達成目標而服務。用目標的導向性避免教學活動的盲目性和隨意性,避免教師過分依賴個人的直覺和經驗進行教學。
因此,為了制訂與CS2013相匹配的程序設計課程實踐教學大綱,首先要明確程序設計課程的教學目標,即通過熟悉一種程序設計語言(如c/c++)的基本語法和編程實踐,了解軟件設計與開發的過程,掌握結構化程序設計和面向對象程序設計的基本方法,掌握計算機問題描述和求解的思維方法,以及軟件系統設計與實現的基本方法,使學生熟悉程序設計語言的集成開發環境,熟悉計算機求解問題的常用算法,熟練運用結構化程序設計和面向對象程序設計方法解決實際問題,增強系統分析、設計、編碼和調試的能力,養成良好的程序設計風格,使其具備今后無論使用什么語言編程都能靈活應用這些思想和方法的能力。
二、基于CS201 3的程序設計實踐教學設計
1.基于CS2013的程序設計課程實踐教學規劃
根據程序設計課程的能力培養目標和教學目標,以及CS2013中對程序設計相關知識領域和主題的規劃,結合國內的實際教學情況,從CS2013中相關的主題中提煉出需要在教學實踐環節中予以強化、加深的知識點和能力點,并針對這些需求規劃制訂了與課堂教學內容和進度匹配、覆蓋重要知識點和能力點的實驗和課程設計。
在整體規劃中,實驗部分包含不多于5個必修實驗,不多于2個選做實驗,課程設計部分包含最多3個必修課程設計。各實驗與相應知識領域、知識單元和知識點的對應關系如表1所示。
2.基于CS2013的實踐教學內容設計原則
實踐教學內容設計遵循以下三條原則:
(1)基礎實驗部分循序漸進、層層深入地引導學生逐步運用所學知識,對關鍵能力的形成進行反復訓練,最終強化為計算思維能力。
(2)綜合實驗和課程設計兼顧趣味性和實用性,強調學生綜合運用所學知識進行系統編程能力的訓練和培養。
(3)實驗任務強調自主性,鼓勵學生自主選題或自主設計任務要求,為學生自主實驗創造條件,激發學生的主動學習意識和學習興趣,從而逐步形成自主學習能力。
3.基于CS2013的實踐教學內容設計
CS2013制訂的實踐教學大綱的具體實驗內容、題目和對應的能力培養目標如表2所示。
三、基于CS201 3的程序設計實驗設計案例
以貪吃蛇游戲為例,介紹本實踐教學大綱制訂的思想和設計方法。
1.案例內容
題目:貪吃蛇游戲。綜合運用面向對象知識,編程實現貪吃蛇游戲,熟練掌握面向對象的程序設計方法,增強系統分析、設計、編碼和調試的能力。
(1)用戶賬戶管理功能:記錄用戶個人信息、得分和級別,支持個人信息的增刪改查。
(2)游戲管理功能:按照食物出現的頻率、貪吃蛇移動的速度等設置不同的難度。使用鍵盤方向鍵控制貪吃蛇的上下左右移動,在沒有用戶按鍵操作情況下貪吃蛇自己沿當前方向移動,在貪吃蛇所在的窗口內隨機地顯示貪吃蛇的食物,并實時更新顯示貪吃蛇的長度和位置;當貪吃蛇的頭部與食物在同一位置時,食物消失,表示用戶吃掉了食物,貪吃蛇長度增長,用戶得分增加;當用戶得分達到預設值時,游戲過關;當貪吃蛇頭部到達窗口邊界或即將進入身體的任意部分時,游戲結束。
(3)進階內容:實現學英語背單詞功能。游戲開始后向用戶展示一張給定的單詞表,單詞表可從指定的單詞文件中隨機抽取,隨著游戲級別增長,單詞表中單詞的難度加大;食物為字母,用戶操縱貪吃蛇按順序選擇要吃掉的字母,吃掉的字母形成單詞表上的未被吃掉的單詞后,用戶得分增加,單詞表中的單詞減少;當單詞表為空時,用戶過關。這個進階內容就是學生自主設計的一個任務。
2.案例分析
該課程設計覆蓋的知識點如表3所示。這些知識點涉及cs2013中的軟件開發基礎和程序設計語言兩大知識體,知識點覆蓋全面,基本涉及了從基本的數據結構到面向對象程序設計,從算法到程序設計方法,從設計、編碼到測試、驗證等程序設計課程中涵蓋的幾乎所有重要內容,是具有很強綜合性的課程設計題目。
題目的特點是兼具趣味性、綜合性、層次性、實用性。趣味性體現在題目來源于受眾廣泛的游戲,以游戲這種學生喜聞樂見的形式來代替較為刻板的題目,可以提高學生的學習興趣;綜合性體現在題目覆蓋了貫穿程序設計課程的大多數知識點,同時能夠對程序設計、編碼、測試、調試、糾錯、抽象和建模等多種能力進行訓練,在知識點覆蓋廣度和能力訓練深度上具有綜合性;層次性體現在題目中功能的設置從易到難,由淺入深,學生可以根據能力選擇其中的部分功能予以實現,以適應不同層次的學生的不同需求;實用性體現在經學生自己設計實現的這一系統可在自己的學習中實際使用,這將大大促進學生對程序設計的實際價值的認知,從而提高學生對程序設計的興趣。
四、學習成效驅動的翻轉實驗教學實踐
如果沒有好的測評作為導向,那么目標的制訂和實施將成為一紙空談。有效的評價機制可以讓教師及時了解教學目標的實現程度和學生的學習狀況,以便及時調整教學活動,改善教學計劃和方法。
為了順應“互聯網+教育”的發展趨勢,保障學生實驗效果和實驗目標的有效達成,我們自主研制開發了支持遠程在線自主實驗的高級語言程序設計能力訓練平臺。該平臺允許學生自主選擇實驗內容,自主選擇完成實驗的時間和地點,讓學生“我的實驗我做主”。這種方式從空間和時間上拓展了傳統實驗課的“疆域”,使程序設計課程的部分實驗從課內遷移到課外,從而形成“線上線下緊密結合、課內課外互為補充”的實驗教學模式。在資源約束、空間約束和時間約束的條件下,這種實驗教學模式突破了傳統實驗在固定時間、固定地點和可獲取知識信息量有限等方面的制約,突破了場地、時間和資源的限制,實現了實驗教學手段的電子化、網絡化和信息化,促進了信息技術與高等教育的深度融合。
實驗的目的是什么?既不是教師在實驗課上盯著學生一行行敲代碼,也不是僅僅給學生一個實驗分數,而是讓學生在實驗和師生面對面的交流過程中能夠做有所得、學有所獲。既然如此,那么如何讓學生在實驗過程中“做有所得、學有所獲”呢?
基于這樣的考慮,我們在高級語言程序設計能力訓練平臺上增加了程序在線評測、錯誤反饋和定位等功能。原來學生提交的實驗程序需要教師手工評閱,現在學生提交實驗程序可以實時獲得評分和成績排名,允許學生多次提交程序,直到成績滿意為止,對錯誤的程序還能給出相關提示輔助學生自主修正錯誤。平臺的在線評測、錯誤反饋和定位等功能使得學生不僅在課外沒有教師指導的情況下也能自主完成實驗,而且在實驗代碼的一次次提交和改錯中還能獲得能力的提升,既降低了教師指導實驗的工作量,又達到了“以評促學”的教學目的,提升了學生的程序調試和排錯的能力,教師還可以從平臺上及時跟蹤和了解學生的學習情況和學習行為特點,使學生的實驗效果可控、可觀測。
為了引導學生從關注“學習成績”到關注“學習過程”和“學習成效”,我們還改革了實驗考核方式。一方面按學生在高級語言程序設計能力訓練平臺上的刷題分排名取相對分,作為平時實驗分;另一方面完全取消了期末考試,每次實驗課都利用我們自主研制的編程題考試自動評分系統進行機上考試,在所有實驗考試成績中去掉一個最低分作為學生的實驗上機考試分數。相對于期末只考一次而言,這種分階段馬拉松式的考核方式能幫助學生及時發現自己在學習上存在的問題,以便及時補救,從而達到“以考促學”的目的,避免了期末考前臨時抱佛腳、“亡羊補牢、為時已晚”的問題。
為了讓學生每次都考得明明白白,學得扎扎實實,我們又進行了如圖2所示的實驗翻轉課堂試點。在每次考試結束后,都由教師和學生共同點評錯誤的程序,讓學生有反思自己試卷的機會,共同點評典型錯題之后再進行一次不計分的模擬重考,讓學生考一次收獲一次、練一次進步一次。
這種“考講練相結合、能力為導向、學習成效驅動”的翻轉實驗教學模式,在2015年秋季學期試點后取得了良好的效果。以前的實驗課經常有遲到早退和上網聊天現象,自試點翻轉實驗課以后,不再有遲到早退和上網聊天的現象,因為學生從這種實驗教學模式中嘗到了甜頭,實現了“考有所得”。這種“一對多”的批量指導模式大大緩解了實驗助教嚴重不足和一對一指導實驗工作量大的問題,提高了實驗指導效率,而且學生在教師點評錯題后通過自己的思考和分析自行解決自己的問題,也更容易產生成就感。此外,教師還可從隨堂考試和試卷點評中及時了解學生在學習上的薄弱環節,進而有的放矢地調整后續的教學進度和教學內容。