摘要:探討了以能力培養為導向的非計算機專業程序設計基礎課程的改革思路。優化教學內容,編寫特色教材,突出算法和程序設計方法,以培養學生的程序設計能力;采用問題驅動式教學方法,以訓練學生的計算思維能力;強化實踐環節,開發教學輔助系統,以提高學生的自主學習能力。
關鍵詞:能力培養;程序設計;計算思維;自主學習
作者簡介:金永霞(1973-),女,寧夏平羅人,河海大學物聯網工程學院,講師;劉景(1973-),男,山東費縣人,河海大學物聯網工程學院,副教授。(江蘇 常州 213022)
基金項目:本文系河海大學常州校區2013年度教育教學改革項目“能力導向型程序設計語言教學及考核方法研究與實踐”的部分研究成果。
中圖分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2014)05-0101-02
程序設計是目前國內高校理工科專業普遍開設的一門基礎課,該課程以培養學生科學的思維方法,提升解決問題的能力為目標,指導學生熟悉基本編程模式,掌握程序設計的思想和方法。很多學校在程序設計課程中都以C語言作為程序描述的工具,但在教學活動中往往把“C語言”作為重點,而較少關注“程序設計”。學生雖然投入了大量的精力去學習C語言的語法,但面對一個實際問題時還是不知道如何去編程解決。筆者結合多年的教學實踐經驗,著眼于學生綜合能力的培養,對程序設計基礎課程的教學內容、教材建設、教學模式以及實踐環節方面進行了改革和實踐,以幫助學生理解程序設計的基本原則和方法,訓練科學的思維能力,學習如何利用計算機去解決一個實際問題,同時通過上機實踐掌握高級語言的語法規則和編程技巧。
一、優化教學內容,注重培養程序設計能力
程序設計課程傳統的教學內容是以語法知識為主線組織的,每介紹一個語法知識點時引入相應的例題,講解在程序中如何運用這些語法規則,這種組織方式能夠幫助學生較好地掌握語法,但容易忽視對算法思想和程序整體框架的理解,不利于程序設計能力的培養。為此筆者在授課時對教學內容重新進行整合,突出“程序設計為主,語法規則為輔”的教學思想,將C語言的主要語法在課程的開始階段就集中講解,使得學生快速掌握主要語法知識和常用控制結構,初步具備編寫程序的基本能力。在此基礎上展開算法與程序設計方法學,介紹程序設計的基本思想和原則,結合一些具體案例給出編程解決問題的一般步驟。后續在解決實際問題時再引入需要用到的復雜語法知識,這樣就形成了以算法和程序設計方法為主線的教學內容。
程序設計的核心是算法,算法的本質是處理數據,為了引導學生在針對實際問題時拓展思路形成算法設計的策略,在教學內容的組織上大部分是圍繞算法和數據結構展開。[1]通過實例對同一個問題提出不同的算法并設計相應的數據結構,鼓勵學生積極思考探索創新,真正了解程序設計的核心和本質。由于程序設計相關內容的組織方式是一種網狀結構,在學習當前知識的時候很可能會涉及后面章節的內容,這時候需要樹立整體學習的觀念,無需過度注重實現的細節,把程序中所涉及的所有函數模塊以及數據結構置于程序設計的整體框架中,給出每個函數的功能和接口描述,整個內容學習完成后,再回頭解決前面的問題。這樣在教學內容中始終貫穿程序設計的方法學,重視編程能力的培養,使學生認識到程序設計課程并不僅僅是了解某一個高級語言本身的語法,更重要的是學習如何用計算機解決問題的方法,為今后專業課的學習和實踐打下良好的基礎。
配合教學內容的優化,筆者出版了自編的主教材《程序設計基礎教程(C語言描述)》和實驗教材《程序設計實踐教程(C語言描述)》。主教材把程序設計的思路和方法作為重點,以算法為主線,把C語言作為描述程序的工具,從應用的角度切入,根據學生的學習規律,由淺入深,由易到難,構造了“以應用引入算法,在編程中掌握語法”的教材體系。教材把算法和語言緊密結合,一開始先引入簡單的程序并介紹基本的語法規則,讓學生了解程序的組成要素,會編寫簡單的程序。隨著問題復雜度的逐步提高,算法和語法逐步深入,在編程應用中掌握枯燥的語法知識。在教材中結合具體問題分類介紹常用的算法設計策略,提供了常用的編程模式,學生在運用這些基本算法的過程中逐步理解和掌握模塊化程序設計方法,為學生編寫大型程序提供借鑒。
二、采用問題驅動教學模式,訓練計算思維能力
計算思維是美國學者Jeannette M. Wing教授提出的一種先進的教學理念,Wing教授認為:計算思維是運用計算機科學的基礎概念進行問題求解、系統設計以及人類行為理解的涵蓋了計算機科學之廣度的一系列思維活動。計算思維就如同“讀、寫、算”能力一樣,是每一個人為了在現代社會中發揮職能所必須掌握的根本技能。[2]計算思維的本質是“抽象”和“自動化”,這是計算機求解問題的過程,而程序設計課程的目標之一就是讓學生學會通過編程解決問題,因此在該課程的教學活動中結合具體案例訓練學生的計算思維具有一定的實踐基礎。[3]
培養學生的計算思維,需要樹立以學生為主體的學習模式,變被動接受為主動學習。為此,教師在第一堂課就向學生展示一些生動有趣的C語言程序,讓學生了解C語言的應用領域,明確學習該課程的意義,激發探索研究的興趣。在授課時采用“問題驅動,建立數學模型,設計算法,程序實現,程序測試”的教學思路,由傳統的知識輸入型教學模式向能力培養型教學模式過渡,力圖把計算思維內化為學生的思維習慣,啟發學生面對問題積極思考。問題驅動的關鍵是找到能引發學生興趣的切入點,使“抽象”和“形式化”有的放矢,如提出一些有趣的邏輯推理問題“誰做的好事”、“八皇后問題”、“青蛙過河”等。首先引導學生分析問題,歸納并抽象出數學模型;然后為解決此類問題引入窮舉法、遞歸等算法策略;最后在實現程序時介紹選擇結構和循環結構等知識點。學生在解決問題的過程中既學習了方法和思路,又掌握了語法知識,同時也訓練了一種嚴謹的思維方式和綜合運用知識的能力。
計算思維是人類求解問題的一條途徑,程序設計的過程就是解決問題的過程,正確理解和運用模塊化方法,是培養計算思維的內容之一。教師在指導學生設計算法和編寫程序時遵循模塊化程序設計的基本原則,將問題分解為相對獨立的小任務,引導學生建立程序的總體框架,幫助學生了解如何規劃和設計一個完整程序。由于閱讀程序可以幫助學生熟悉語法,拓展自己的編程思路,教學時增加了程序閱讀方面的內容。在閱讀程序時打破了傳統的“提出問題,給出源程序,解釋程序”的教學思路,按照“自頂向下,逐步求精”的程序設計原則講解例題。同時,為活躍課堂氣氛,促使學生積極思考,鼓勵學生對已有算法進行完善,以模塊化的方式增加程序功能并上機調試,通過實驗強化編程技能,加深對結構化程序設計思想的理解。
采用問題驅動教學方法,激發學生興趣,以經典算法為基礎,大量閱讀程序強化基礎概念的理解,樹立模塊化程序設計的思想,目的都是把計算思維能力的培養有效地融入到每一堂課中,使學生具備利用計算機求解問題的基本能力。
三、強化實踐環節和輔助教學手段,提升自主學習能力
程序設計是一門實踐性很強的課程,學生需要足夠的上機實踐來訓練編程能力。課程的實踐包括兩個階段:一是按照課堂授課進度適時安排基礎實驗內容,要求學生編程實現經典算法,在上機過程中掌握語法規則和控制結構的運用,鍛煉調試程序、排錯、修改、正確性測試等基本技能,基礎實驗貫穿整個教學過程;[4]二是在課程結束時,設置獨立的項目設計實踐環節,要求學生針對一個實際問題,綜合運用所學過的知識設計算法、實現程序,訓練學生分析問題解決問題的能力、對知識的綜合運用能力、創新能力和編程能力。項目設計實驗在實施時以分組形式展開,把一個項目按功能劃分成若干模塊,組內成員分工合作,每人根據自己的能力選擇一個模塊任務獨立完成,力圖使每個學生都能在自己原有的基礎上有所收獲和進步。實驗中碰到的問題可以在組內討論解決,成員之間互相幫助,增強個體之間的溝通能力,形成一個良好的學習氛圍,有助于學生的自我管理和自主學習。實驗環節注重過程管理,從實驗預習、實驗操作、記錄審簽、實驗報告、實驗考核等方面隨時考查記錄學生的表現。[5]具體的過程管理方法為:學生在上機前就做好算法設計、編寫源程序以及設計測試用例的工作;上機時主要調試、修改程序;在每個模塊的程序完成后,教師檢查驗收程序并記錄驗收結果;學生在實驗完成后提交實驗報告,報告中重點分析闡述自己所承擔的模塊任務;在驗收考核階段,要求每位學生運行演示自己的程序并回答問題,教師根據學生在整個實驗環節中的表現進行考核。
為了方便學生在課余時間的學習,筆者開發了程序設計教學輔助系統,系統包括平時練習、上機考試、修改題目、試卷處理、學生平時練習統計五個功能模塊,教師利用此平臺可以錄入題目,供學生平時練習使用。考慮到學生對參加計算機等級考試的需求,筆者按照等級考試的題型和要求,提供難度相當的上機練習題,強化學生的實際動手能力。在學生上機所使用的實驗教材中,針對每個知識單元都給出了詳細的程序范例和課外上機的題目,希望在課外沒有指導老師的情況下,學生能按照教材的指導獨立完成上機實驗。
強化實踐環節和輔助教學手段,規范實驗過程管理,能夠督促學生重視平時的上機練習,為學生的自主學習提供支持。學生通過動手實踐真正掌握編程技能,從該課程的學習中有所收獲,避免了平時不努力,考試之前突擊復習應付考試的不良現象。
四、結束語
對程序設計基礎課程進行改革,目的是讓學生掌握程序設計的思想和方法,在以后的學習中能利用高級語言編寫程序來解決本專業領域中的問題,對提升學生的計算機應用能力具有積極的促進作用。課程改革在實際教學應用中也取得了較好的效果,近年來學生在江蘇省計算機二級考試中達到了較高的通過率,并且在“藍橋杯”全國軟件設計大賽中獲得了一、二、三等獎的好成績。以能力培養為導向,優化教學內容,編寫特色教材,采用啟發式教學模式,強化實踐環節和輔助教學手段,對程序設計類課程的教學改革做出了有益的探索,有利于學生對本專業課程的學習,對提升學生的專業能力具有重要意義。
參考文獻:
[1]丁海軍,金永霞, 景雪琴,等.程序設計基礎教程[M].北京:清華大學出版社,2013.
[2]Jeannette M. Wing.Computational Thinking[J].Communications of the ACM,2006,49(3):33-35.
[3]陳國良,董榮勝.計算思維與大學計算機基礎教育[J].中國大學教學,2011,(1):7-11.
[4]王曉勇,肖四友,張文祥.基于能力培養的C語言項目化訓練教學模式初探[J].計算機教育,2009,(10):60-62.
[5]朱昌平,劉銀恩,高遠,等.通信電子線路實驗課程教學的“五環”過程管理辦法[J].實驗室研究與探索,2005,24(8):11-13.
(責任編輯:王意琴)