西南科技大學計算機科學與技術學院 蘇 波
程序設計能力是工科類專業學生應該掌握的一項基本技能。C 語言是一門工程實踐運用廣泛的程序設計語言,它在項目底層可以提供對操作系統和內存的精準控制,是從事嵌入式開發、芯片設計必不可少的開發語言。在高級語言方面,C 語言由于其高效率和精確的特性,是科學計算、并行程序開發的重要工具,同時C 語言幾乎適用于所有的操作系統,對提高開發效率和跨平臺使用具有極大的便捷性。總體而言,C 語言具有極強的實用性,既可用于編寫應用軟件,也適合于編寫系統軟件。雖然最近幾年由于數據挖掘、人工智能和數值計算等領域的蓬勃發展帶動了Python 程序設計語言,但是仍然無法撼動C 語言程序設計開發語言榜首的地位。C 語言既是計算專業學生必須掌握的程序設計語言,也是許多非計算機專業學生所青睞的技術學科。C 語言程序設計是各省乃至全國計算機等級考試的重要考試科目,幾乎所有的高校都開設有C 語言程序設計課程。目前,很多學校往往將學習重點放在程序設計語言本身,注重語法的講解,忽視了程序設計能力的培養和訓練。這種學習方法對于學生應付考試中的填空、選擇以及編寫小程序的題型來說是沒有問題的,且往往可以取得較好的成績。但是,由于缺少項目鍛煉能力,甚至出現有些高分考上碩士研究生的計算機專業學生,無法針對具體或者復雜問題編寫出可以運行并產生實際效益代碼的現象,給人造成了“高分低能”或“學習無用”的錯誤導向。
由于學生現在學習的課程門類較多,總學分又沒有太多變化,很多課程的學時數都有所減少。雖然C 語言程序設計是一門邏輯性較強且概念相對較多的科目,但部分教師為了完成教學任務,往往壓縮學生的上機實踐時間。C 語言課程一般在大一開設,大多數學生還不適應大學的學習方式和課程安排,還停留在高中的學習模式。目前程序設計類課程實驗教學一般以教材為中心,理論教學上到什么地方,實驗課就操作什么內容,學生照葫蘆畫瓢,照著教材案例進行操作,這些都導致了如下弊端。
學生對知識點整體認識不足,掌握的知識內容孤立。“萬變不離其宗”,這里的“宗”就是知識點,比如C 語言里面的循環就有do-while、while 和for 三種結構。循環還可以嵌套循環,如果學生僅僅只是明白每個單一的知識點,但不能很好地將各個知識點串聯起來,達到融會貫通的程度,則無法編寫出高效的代碼。
學生往往是“單兵作戰”,一道題一個人就可以解決,缺少了知識的碰撞與思想的交流。合作學習是一種共同進步模式,通過合作學習,基礎扎實的學生可以幫助基礎薄弱的學生,學生在合作過程中會產生新的問題,大家在共同探討中解決問題。這個過程會激發學生的創新思維,進而逐步形成創新意識,并有效激發各自的學習潛能,提高學習效率,對合作雙方都有所收獲,有利于實現共同進步。
編程思維與我們日常的思維方式存在不一樣的地方,編程思維并不是局限于編寫程序的技巧,而是一種高效解決問題的思維方式。它是由分解—識別模式—抽象—算法四個步驟組成,是從理解問題到找出路徑的思維過程。這種跳躍性的思維能力是初學者的一個巨大障礙,造成了學生學習興趣的下降,無法有效激發學生的學習積極性,促使學生發揮主觀能動性。
所謂項目驅動式教學法是指教師指導學生在追求項目成果的過程中,通過項目實踐掌握系統知識技能的教學方法。實驗教學實施過程秉承聯系論、結構論和結果論三個關鍵理念,三個理念分別對應課程目標、課程組織和課程實施三個層面。聯系論要求教師在組織項目驅動實驗教學時合理選擇知識,使之與項目實現有機結合;結構論要求教師對所選取的知識進行知識重組,既要考慮項目完成的需要,也要考慮學生對知識的接受情況;結果論考量學生的項目完成情況。構建主義認為,知識是學習者在一定的情景下利用必要的學習資料,通過意義構建的方式獲得的。基于項目驅動的實驗教學法,學生在教師指導下最終以項目成果的形式表現,通過項目的開發、設計和實施將書本理論知識與應用實踐進行有機結合,從而掌握相關知識。
教學模式是在一定教學思想指導下和豐富教學經驗的基礎上,為完成特定的教學目標和內容,圍繞某一主題形成的穩定、簡明的教學結構理論模型及具體操作的實踐活動方式。實驗教學直觀性、實踐性、科研性以及綜合性的特點,決定了其在培養學生綜合素質和能力方面具有其他教學環節不可替代的作用。正確認識實驗教學在人才培養以及高校整個教學工作環節中的突出作用,對提高學生綜合素質將起到至關重要的作用。構建行之有效的基于項目驅動的實驗教學模式,需要從教學目標的制定、教學知識點的優化組合、實驗教學項目的設置、教學方式和考核機制等方面進行變革。
教學目標決定著課堂教學的內容,對于教學結構安排、教學方法實施和教學組織形式起著導向作用。教學目標的制定必須以教學大綱為準繩,以教材為依據。教師可以根據布魯姆教育目標分類法,從知道、領會、應用、分析、綜合、評價等六個方面對教學目標進行分類。教學目標的制定還應該符合學生的畢業要求,比如在工程知識方面的指標點為掌握程序設計知識,具備面向對象、面向系統的程序設計理論與方法,并能運用于軟件的設計與實現;問題分析方面的指標點為計算問題表達與證明,能對計算問題進行形式化描述,設計問題的數據結構與算法,并分析設計方案的正確性;設計開發解決方案的指標點為軟件系統分析與設計,根據需求規格說明書能進行軟件體系結構、數據模型與管理、關鍵算法及安全策略設計,撰寫系統設計說明書;研究方面的指標點為實驗實現,能夠根據實驗要求或設計指標組建實驗平臺,運用相關儀器(軟件)完成相應的實驗實現,正確觀察、記錄實驗數據。
項目驅動式的實驗教學必須圍繞理論課教學知識點開展,將理論課程中講解的知識點融入項目的各個模塊中去,比如在項目中可以將輸入、輸出、數據類型、分支以及循環結構放在一起進行訓練。在高階項目中,可以將查詢、排序、統計以及記錄添加和文件的建立讀寫等知識點融合在一起。教師通過將C 語言所有的知識點進行適當的劃分,再進行有機的優化組合,既可以使學生在練中學,也可以通過實驗使學生明白各個知識點的適用場合。
實驗項目的設置不一定必須使用真實的項目,因為真實的項目規模較大且比較復雜,與學生現階段能力不相符,容易給學生造成挫敗感。教師應該根據教學需要將項目所涉及的知識限定在教學大綱所要求的范圍之內,大項目與小項目相結合,小項目是大項目的基礎,大項目是小項目的綜合應用。項目的安排應該符合學生的認知規律,由淺入深,由易到難,使學生能夠真正得到實踐,進而最終完成項目,激發學生的學習熱情并增強學習信心。
相較于傳統的教學方式,項目驅動的實驗教學更加注重學生的自主探索和課堂探討,教師只需要對過程進行把控。項目驅動的實驗教學過程可以分為準備階段、分析階段、設計開發階段和評價階段。準備階段用于確定小組成員以及項目負責人;項目分析階段需要學生討論項目涉及的知識點,將項目任務分解為小的模塊;在項目設計開發階段需要制定合理的實施方案和技術路線,確保在規定的時間內運用所學知識完成項目;項目評價階段用于對照項目任務,測試檢驗各個功能需求是否完成,給出總結性評價,完成項目報告書的撰寫。
項目驅動式實驗教學模式注重教學全過程,因此最終成績構成更適合采用結構化評分方法。在實驗教學實施過程中,教師應該鼓勵學生在小組內積極進行互動,防止個別學生消極對待,提高學生的團隊精神,確保每個學生都得到相應的鍛煉。這個過程對學生綜合素質的提高具有積極的作用,有利于促進學生的全面發展。