劉悅,吳軍明,劉煒,張博鋒
(上海大學計算機工程與科學學院,上海200444)
程序設計與軟件開發類課程是計算機專業的核心課程。其中,《程序設計方法學》課程以程序設計方法為研究對象,它不僅研究各種具體的方法,而且著重研究各種具體方法的共性,涉及規范的全局性方法,以及這些方法的顯示背景和理論基礎[1]。《程序設計方法學》可對程序設計人員選用具體的程序設計方法起指導作用,而具體的程序設計方法對程序設計工作的質量以及所設計出大程序的質量影響巨大。因此,將《程序設計方法學》作為高等學校計算機軟件教學體系中的一門專業選修課,對于培養和提高計算機專業學生程序設計的技能和水平是非常重要的。然而,目前的《程序設計方法學》教材[2-5],主要介紹《程序設計方法學》的原理、概念和定理證明,比較抽象與枯燥,定理和證明難以理解,學生更難以在具體的程序設計過程中使用這些方法。傳統的教學過程過分強調教師的地位,忽視學生的主動參與性,造成“滿堂灌”現象,大大抑制了學生的興趣,影響了教學效果。同時,傳統的教學中缺少充足的實踐環節,學生無法自覺將知識用于指導程序設計,甚至使學生對知識的實用性產生懷疑,而且程序設計能力的培養不是一蹴而就的,需要在長期的實踐中提升學生的能力。因此,為了培養學生的計算機程序設計專業素養,提高程序設計與軟件開發類課程的教學質量,我們以《程序設計方法學》課程為例,研究實踐教學方法和平臺,提出任務驅動的多環節實踐教學模式。
任務驅動教學法是一種教學方式。任務驅動的教與學的方式,能為學生提供體驗實踐的情境和感悟問題的情境,圍繞任務展開學習,以任務的完成結果檢驗和總結學習過程等,改變學生的學習狀態,使學生主動建構探究、實踐、思考、運用、解決高智慧的學習體系[6]。在教學實踐中,圖1所示為任務驅動的多環節實踐教學模式,根據學生在不同時期的知識水平和程序設計能力,設計難度和廣度遞增的任務。
傳統的“填鴨式”教學方法,過分強調教師的地位,教師忽視學生的主動參與性,造成“滿堂灌”現象,大大抑制了學生的興趣,影響了教學效果。在教育界有一句話:“我聽,我忘記;我看,有印象;我做,我記住。”因此,在課堂講授每個知識小節后,通常要給出示例或實例,通過教師演示,幫助學生理解概念,掌握方法。接著設置一個和教師演示類似的任務,讓學生自己動手同步完成任務,從而幫助學生鞏固所學知識,進一步理解概念和掌握方法。例如在介紹Floyd不變式斷言法證明流程圖程序的部分正確性時,教師講授了方法的起源、證明步驟、適應對象后,通過“求兩個正整數的最大公約數的流程圖程序”實施了“榜樣”教學法。學生聽了且看了,有一定的印象。然后馬上設計一個類似的問題——證明只用加法實現“計算z=[]”的流程圖程序的部分正確性。學生在做的過程中,通過小組討論方式協作完成這個小任務,深入理解Floyd不變式斷言法;同時,教師可以及時了解學生的掌握情況,在課堂上及時解決學生的共性問題。
課堂受限于時間,只能設計一些玩具式的任務,不利于學生真正掌握知識。同時,由于遺忘曲線,需要課后再鞏固,因此可以以有趣的任務為基礎,設計類似表1的形式多樣的課外作業。課外作業是課堂教學的有益補充,主要是根據課堂教學進度,配套設置形式多樣的課外作業,讓學生將課堂所學學以致用。其中,課外實踐環節,我們編寫了《課外實踐指導手冊》,每個課堂教學主題為一章節,包括學習入門、一系列的任務和練習以及學習小結。任務和練習設計成既有興趣、又有難度的問題,如貪吃蛇、俄羅斯方塊、八皇后問題、驗證歌德巴赫猜想等問題,要求學生用程序設計方法來設計解決方案,既可以激發學生們的學習興趣,又可以將課堂知識融會貫通用于解決問題。

表1 課外作業的設置
程序設計能力的培養是一個長期過程,可以將《程序設計方法學》的實踐延伸到暑期實踐和畢業設計,將其作為《程序設計方法學》課程的一個設計型、綜合性的實踐教學環節。在暑期實踐中,將小組軟件過程TSP(Team Software Process)思想應用到程序設計和軟件開發類課程的實踐教學中[7]。該實踐環節要求學生綜合運用所學知識,從實際生活和工作中發現問題,提出軟件項目,在可行性分析的基礎上,進行項目立項開發,通過小組分工、進度計劃安排、需求分析、系統設計、系統實現、測試、運行等環節,建立一套軟件系統。學生在實踐經驗豐富、動手能力強的教師指導下,以小組協作的方式進行,以軟件工程文檔、軟件包等形式提交自己的設計與實現方案,同時也向其他同學匯報、演示自己的系統。這種相互間的交流和討論,擴大了學生的視野,鍛煉了學生的能力,提高了學生的綜合素質。在畢業設計環節,可以將個人軟件過程PSP(Per?sonal Software Process)應用到程序設計和軟件開發類課程的實踐教學中。學生個人以PSP方式研發一個軟件系統,體驗軟件開發的全過程。通過延伸實踐,不僅可以激發學生的學習興趣,鍛煉學生的動手能力,而且可以培養學生面向實際應用提出問題的意識;提高學生分析問題、解決問題的能力;增強學生的學習興趣和創新意識,培養學生的創新精神和創新能力;增強學生研究性學習的主動性。
為了配合任務驅動的實踐教學活動,可以利用信息技術來構建課外練習實踐平臺,以供學生利用程序設計方法進行程序設計實踐;構建開放性的互動式網絡教學與分析平臺,以支持任務驅動的實踐教學日常管理,展開教學數據分析。
(1)功能齊全的互動式網絡教學管理
設計與實現教學管理與分析平臺可以有助于任務驅動的實踐教學活動的開展。在我們的教學活動中,采用B/S架構,C#、ASP.NET和SQL Server 2015技術,在VS 2015集成開發環境下構建了開放性的互動式的《程序設計方法學》網絡教學管理與分析平臺。該平臺為師生提供如圖2所示的包括網站首頁、課程大綱、師資隊伍、課程資源、課程實驗、課程作業、在線答疑、在線練習、教研成果和教學分析等功能模塊,實現了課程資源的網絡化、日常教學工作的自動化、師生交流的及時化,還可以對課程教學情況進行統計與分析,從而為
自建常用程序設計方法的實踐平臺,可以讓學生在平臺中能夠實踐如何在逐步求精、模塊化、最弱前置謂詞等程序設計方法指導下進行程序設計。在我們的教學中,利用了江西省高性能計算技術重點實驗室提供的PAR平臺,讓學生能夠利用PAR平臺中的RADL語言描述程序規約,設計算法;利用抽象程序設計語言Apla來刻畫抽象程序;利用平臺提供的轉換器,將Apla抽象程序轉換到諸如C++、Java、VB、Delphi等可執行語言,體會軟件形式化和自動化生成的全過程。該課程的教學提供更好的網絡平臺,為教師改進教學方法提供決策支持。
(2)基于ECharts的教學情況分析
教學管理與分析平臺支持課程教學的全部環節,可以積累教學過程中的全部數據,包括師生的個人基本信息、師生的互動信息、學生的作業情況、考試成績等。對于這些豐富的數據,平臺可以進行統計分析并采用當今最為流行的可視化技術ECharts,以圖表的形式展現數據分析結果。我們的《程序設計方法學》教學分析界面主要包括教學情況總結、師資分析、作業提交分析、互動分析、成績分析和聯動分析六部分內容。
如圖3所示,教學情況總結主要是對歷年的教學情況表進行查看;師資分析主要用餅狀圖展現教師的年齡分布、學位分布和職稱分布;作業提交分析主要分析每一年作業提交的比例;互動分析即為提問人數情況分析,主要用柱狀圖展示平均每周提問人數,用折線圖展示學期增長情況,可以觀察到提問人數的變化;成績分析模塊主要以折線圖比較每學期平均績點、測試平均成績和平時成績,從而來觀測學生成績的變化;聯動分析主要以散點圖的形式對比了每學期的總成績、平時成績和學生人數,從而可發現平時成績與學生總成績的關聯。教學分析平臺綜合考慮和采用了多種數據圖表類型,對存儲的教學數據實現可視化分析,用戶能夠很清楚直觀地理解課堂教學情況的統計和分析結果。

圖2 平臺功能層次圖

圖3 教學數據分析結果的ECharts可視化展示
程序設計與軟件開發類課程是計算機專業的重要核心課程,具有理論與實踐并重的特點。任務驅動的多環節實踐教學模式在《程序設計方法學》課程和中英文授課的軟件工程課程中得到應用,實踐教學證明該模式能提高課程的教學水平和效果,對培養學生的程序設計和軟件開發能力起著良好作用。隨著模式的更加廣泛地應用,平臺將積累更多的教學數據,我們將引入機器學習方法對其進行學習,對教學效果和質量進行全程掌控和提前預警,從而提高教學的智能化水平。