盧瑾 顧國民 江頡 李曲 雷艷靜 徐衛 浙江工業大學計算機科學與技術學院
實驗教學作為程序設計課程學習的重要環節,在提高學生動手實踐能力和自主學習能力、實現知識和技能的“內化”等方面具有理論教學不可替代的作用,是學生能順利進行后續專業課程學習的重要基礎和前提。然而,傳統的課程設計內容陳舊,偏離工程實際,實驗教學課程體系較為單一,與學科發展前沿有所脫節,無法激發學習興趣。基于OBE教學理念,筆者分別從計算思維、工程思維和創新思維培養切入,對程序語言課程設計教學進行了改革與實踐。通過改革實踐教學方法建立學生的計算思維,培養學生分析問題、抽象問題模型及解決問題的能力;引入程序設計自主實驗教學模式,便于學生將理論課程中碎片化的知識點構建成相對完善的知識體系,以激發學生的創新意識,培養學生的工程應用和實踐創新的能力。
程序語言課程設計作為一門實踐類型的專業基礎課程,其教學的基本目標是讓學生充分理解程序設計思維,能夠將程序設計相關課程的理論知識進行綜合運用,從而實現綜合型軟件開發能力培養。
課程設計以程序語言課程知識點為基礎,通過對實際問題進行需求分析、方案設計、代碼實現及最后的功能測試,完成軟件開發的全過程。整體過程需要綜合運用程序設計語言,另外涵蓋算法等相關知識與技術,提升培養需求分析、系統設計等軟件工程理念。實際教學過程中存在以下問題:
①缺乏計算思維,分析解決問題能力不足。實驗要求針對問題建立模型、設計算法及有效地求解編碼,完成一個應用性、綜合性強的程序,而學生分析能力不夠,邏輯思維欠缺,往往表現出無從下手及難以抽象問題解決模型的情況。
②缺少工程思維和工程思想。學生幾乎不從工程角度看待問題。
③缺少創新思維。傳統實驗基本限定在一定的框架之下,缺少綜合類實踐項目,學生沒有機會使用新工具和新手段,創新性思維得不到鍛煉,沒有提出新方法和新觀點的機會。
實驗教學課程設計將軟件工程過程貫穿于實驗,以加強創新能力、工程實踐能力培養為核心,堅持教學與科研相結合。實驗內容引入專業相關的工程實際問題或者當前社會的熱門課題,通過任務驅動實現分組合作學習,引導鼓勵學生通過各種渠道調查研究,對目前現有的算法進行實現,鼓勵改進和創新,通過交流、討論和實踐來共同完成任務。強化思維培養,設計思維培養途徑,突出思維與實踐活動的結合。
為了使不同層次的學生都能得到教師的關注,在教學實踐中得到有效的指導,并確保每個層次的學生都能參與,發揮各自的特長,獲得較好的學習體驗,真正實現學生的整體進步和全面發展,需要將實驗選題和要求進行層次化設計,將選題分為綜合設計類和探索設計類。其中,綜合類與課程內容結合更為緊密,探索類與科研內容相關聯。實驗要求分為基本任務與擴展任務兩個部分,基本任務階段具有普適性,針對大部分學生,擴展任務具有提升性,為的是滿足學生的差異化、個性化需求。右表為課程設計內容分層設計的示例,其中以人體動作識別程序為例,實驗內容拓展到圖像處理和機器學習等目前研究的熱門方向,任務要求分為基本功能、進階功能和提升功能,以兼顧各個層次的學生。
傳統的程序語言課程設計實驗一般集中一周的時間在實驗室完成實驗設計,最后進行實驗演示和提交實驗總結報告。這種教學模式受開發周期和開發場地的約束,實驗內容設計得也相對簡單、單一,缺乏跨學科的交叉融合,無法激發學生學習興趣和實驗熱情。另外,實驗安排缺乏靈活性,實驗周期短,也導致學生沒有充分時間接觸并探索新領域。

課程設計實驗內容示例
計算機類專業實踐環節硬件資源依賴性不高,筆者提出將實驗周期從一周拆分到八周,每周固定一個時間段進行線下信息集中交流,平時借助線上平臺隨時溝通反饋,拓展實驗教學的時間和空間,實現泛在化教學。通過任務驅動的形式,以解決復雜工程問題的能力培養為導向,從頂層統一規劃、優化設計、循序漸進、劃分階段(如圖1)。需求分析階段收集相關技術現狀知識及進行待解決問題分析,在需求明確的情況下實現復雜問題任務分解,實現團隊分工協作,開發階段設計算法,確定流程及編碼實現,提出方法的創新,同時并行測試工作,最后撰寫報告。將任務分配到各個階段,使項目貫穿于整個課程設計的學習周期。

圖1 任務驅動式實驗流程
如下頁圖2所示,以混合思維為培養目標的課程設計主要通過不同任務環節展開。基本任務包括實驗基本功能和進階功能的實現,完成基本功能的方法是通過引入計算思維培養課程和改革教學方法來培養學生分析問題、解決問題和抽象模型的能力;進階功能通過專業認識培訓展開,結合翻轉課堂討論培養學生工程思維和工程實踐能力;創新思維的培養以擴展任務實現提升功能展開。三種思維的培養圍繞整個實驗環節展開,貫穿整個實驗體系。

圖2 設計的實驗教學模型
計算思維的根本目的是問題求解、系統設計以及人類行為理解。實驗引入應用程序開發要求,結合經典算法,針對問題求解通過建立模型、設計算法及有效地求解編碼,完成一個應用性、綜合性強的程序,將問題求解提升到計算思維訓練的高度,是典型的計算思維課程。在基本任務實現過程中,學生通過分析問題,提出方案,解決問題,再修改方案,經歷了從無到有、從局部到整體、從粗糙到完善的設計過程,整體需求的分析訓練了系統思維能力,設計到具體代碼的實現鍛煉了邏輯思維能力和計算思維能力,方案的討論也提升了團隊協作及溝通的能力。
如圖3所示,教師發布設計并發布課程設計內容,集中介紹課題要求,學生課外自主搜集相關課題資料,根據自身特點與能力,自行組隊選題;待確認實驗題目后,教師以集中授課的形式開展課程設計流程介紹和課題思路講解,學生自行開展學術調研,再自主開展實踐,并初步完成實踐內容。實驗室主要進行實踐內化工作,教師在需求分析和詳細設計階段分別通過聽取學生匯報及檢查的形式了解學生實踐情況,針對出現的問題進行重點講解及交流討論;學生根據教師指導優化實踐結果,最后提交實踐材料。學生在實驗平臺、開發語言以及算法選擇上有足夠的自主權,在自主設計環節中教師提供的模型只是基準,學生可以在此基礎上提出異議,自主分析問題、解決問題的能力得到充分鍛煉。

圖3 自主學習式教學方法
以計算機類專業為研究對象,工程思維可以狹義理解為在特定的約束條件下開展計算機軟、硬件工程項目所需要具備的思維方式。與課內驗證性實驗不同,程序語言課程設計實驗要求通過需求分析、概要設計、詳細設計、程序編碼、功能測試及調試運行等步驟,促進學生運用系統觀點,對對象互相聯系的各個方面及其結構和功能進行系統認識,從而提升解決復雜問題的能力,同時在實驗項目開展過程中將項目功能、性能、成本、可靠性等約束條件考慮在內。
針對學有余力的學生,創新思維培養采用增設擴展任務的形式,打破以往的實驗框架統一模式的限制,鼓勵學生基于基本任務功能,對實現方法進行不同的思考,激發學生探索新技術的積極性,從而創造出新的思維方法,培養創新思維能力。
整個實驗課程設計了2個大方向、10項實驗,涵蓋管理類程序設計、微信小程序設計、圖像處理和機器學習等技術。圖4為上文表中實驗內容示例人體動作識別程序設計對應的成果圖,其中圖(a)為人體動作識別基本任務實現效果,圖(b)為人體動作識別方法應用推箱子小游戲的擴展任務效果,課程設計內容、流程以及實踐教學方法的改革,極大地提高了學生的課程參與積極性,調動了學習的主觀能動性,對比傳統教學,學生實踐能力明顯提升。

圖4 實驗內容示例的成果圖
針對程序語言課程設計實踐教學中存在的問題,本研究將計算思維、工程思維、創新思維三種混合思維培養目標嵌入到實驗項目內容和實踐過程中,打破傳統的實驗內容與模式,通過需求分析、理論講解、自主設計及調試驗證各環節結合實施,同時將內容拓展到目前研究的熱門方向,激發學生學習興趣,加強學生對已學課程知識的鞏固和二次深入學習,使得學生在能力范圍內實施創新思想,不斷提升自身的工程化實踐水平,在實踐推行過程中得到學生積極的響應,且實驗成果完全達到預期目標。