2.1 項目設計
項目的提出是能否調動學生學習積極性的關鍵。目前隨著信息化建設的深入,軟件在各個行業都獲得了廣泛應用,其實際應用領域非常廣泛。課程設計應該提供一個良好的學習“情境”,要結合教學目標,來模擬演練實際軟件開發過程。項目的設計需要遵循以下幾點:①選擇學生比較熟悉的領域,貼近學生生活和學習方麵的應用,避免選擇需要較強專業背景、業務邏輯複雜的應用,例如可以選擇學生選課、書籍管理、宿舍管理等,而盡量不要去選擇企業人事管理之類的應用。這樣可以方便學生理解或完整需求,激發他們用程序去解決現實生活問題的興趣。②功能上要有層次性,可劃分為一般性要求和可拓展性要求,一般性要求指出必須實現的功能,可拓展性要求則指出可以擴展的功能,引導學生去探索和想象,可以方便開展梯隊型教學。③從項目的編碼實現考慮,要能涵蓋C語言中的結構體或聯合體等複雜數據類型,體現函數和指針這條主線,以促進學生去綜合運用和深入理解這些重要的知識點。
2.2 分組劃分
一個軟件的開發僅依靠個人力量往往是無法實現的。軟件生命周期的各個階段需要軟件小組開發人員協作完成[2],因此,在課程設計教學中,我們采用分組教學模式來培養學生的團隊合作意識和團隊精神,來充分體現合作與競爭、分層教學與因材施教[3],並且還可以通過幫帶方式和組內討論消化掉一部分問題。分組是否合理、有效,直接影響協作模式能否取得良好的教學效果。在C語言課程設計實踐中,我們按照任務量安排人數,學生分為以3-5人一組,按照組內搭配合理,組件平衡原則分配,在分組時充分考慮到學生的個體能力差異,使學生能在交流合作過程中取長補短。分組觀點認為組內成員之間的合作關係可以有“頭腦風暴”式、模擬課題式、同伴互助式、角色扮演式和組合式[4]。這裏,我們可以結合軟件開發的分工特點,將角色扮演應用到課程設計的分組中,由小組組長擔當開發經理角色,其他人員針對其特長分別擔當需求分析師、架構設計師、開發人員、測試人員等角色,根據開發階段的不同,各成員可以扮演不同類型的角色。
2.3 培養學生用模塊化思想對實際問題進行分析和設計
結構化方法強調以模塊為中心,采用模塊化、自頂向下、逐步求精設計過程。項目驅動的教學要培養學生用模塊化思想思考複雜問題,即將程序劃分成獨立命名且可獨立訪問的模塊,最後裝配集成模塊完成指定的功能。指導過程中,不僅需要糾正學生一接觸題目馬上編碼的習慣,而且需要糾正學生在main方法中編寫所有代碼的習慣,這種方式會使得整個函數變得龐雜,代碼冗餘大,不利於分工協作,也給閱讀和維護帶來很大的困難。當學生在程序分解主函數和若幹個其他函數時,發現常存在著隨意分解、隨心所欲定義函數的現象,針對這一情況,教師可以先以一個項目為例,如成績管理係統,演示模塊的分解過程,說明內聚性和耦合性要求[5]。在實際項目應用時,要求學生按功能分解,模塊內的函數做到功能盡量單一,留出接口供其他模塊調用,一個模塊對應一個文件,便於分工協作。各小組在完成按模塊劃分的軟件體係結構圖後,才被允許進入下一個詳細設計編碼階段。
2.4 強化編程思想的訓練,加深對重要知識點的理解
算法是程序設計的靈魂,教學中需要成功訓練好學生的頭腦,使他們變得足夠熟練、敏捷和靈活,需要訓練學生在多個抽象層次上同時思考問題[1]。因此,實踐過程中,要求學生熟練應用程序流程圖或偽代碼等工具設計算法,在組內展開討論,比較不同算法實現方案的優劣,以及如何在完成程序的功能基礎上,改善程序結構,優化算法,進一步提高運行效率和空間利用率。
對C語言而言,訓練學生的編程思想,離不開指針、函數參數傳遞這些重要概念,是否真正理解這些概念也與能否成為一個優秀程序員直接相關。在學生編碼時,可幫助他們建立內存模型,通過跟蹤每條語句的執行情況,感受不同數據類型在內存中所占用的空間,直觀地觀察內存布局變化、變量的生命周期、變量狀態的變化等,去深入理解這些概念尤其是指針的本質。
程序設計的另一目的是要培養學生的操作能力,其中很重要的一點就是提高調試能力。調試的方便與否與程序書寫風格密切相關,學生通常不注意代碼的規範化,出現沒有層次縮進,標記符隨意命名、詞不達意,也沒有必要的注釋等現象,這些給查錯和閱讀帶來了很大的不便,不利於分組模式下的協作開發和維護,因此,實踐教學時應該培養學生注意良好程序風格。此外,教學時還需糾正部分學生寫代碼一寫到底的習慣,讓學生認識到程序的編寫是一個調試-修改-調試的反複迭代過程,要在多次錯誤或失敗中獲取調試經驗。在學生出現錯誤時,要引導學生根據錯誤和警告信息,分析辨別是語法錯誤還是邏輯錯誤,並鼓勵學生使用調試工具,應用斷點跟蹤和對分查找等調試方法,去主動地發現和解決問題。