王燕 周愷 潘雷
摘要:《C語言程序設計》是大多數(shù)高校計算機專業(yè)的第一門程序設計類課程,該課程在整個計算機課程體系中有著非常重要的地位,但教師與學生都普遍認為該課程既難教也難學。該文首先分析了當前C語言課程教學中存在的一些普遍問題的成因,然后分別從教學目標、教學內(nèi)容、教學方法、教學手段以及考核方式等方面進行了探索,主張注重培養(yǎng)學生程序設計的思想和使用C語言開發(fā)軟件能力,并給出一些可行的改革建議。實踐證明,該教學模式的改革方案是提高C語言教學質量,提高學生運用C語言解決問題的有效途徑。
關鍵詞:C語言;教學改革;網(wǎng)絡教學平臺;在線評判系統(tǒng);過程考核
中圖分類號:G642.0 文獻標識碼:A 文章編號:1009-3044(2018)09-0150-04
Abstract: "C language programming" is the first program design course for computer specialty in most colleges and universities. The course is very important in the whole computer course system, but both of teachers and students agree that the course is difficult to teach and study. Firstly, the paper analyzes the causes of some common problems in C language teaching. Then, the teaching objective, content, method, approach and assessment are explored respectively. The paper proposes to cultivate students program design and software development capabilities using C language, and give some feasible suggestions for reform. Practice has proved that the reform plan of the teaching is an effective way to improve the quality of C language teaching and the students use of C language to solve the problems.
Key words:C language; teaching reform; network teaching platform; online judgment System; process evaluation
1 引言
C語言是當今流行的高級程序設計語言之一,它既具有高級語言的特點,又具有低級語言的功能,可以寫出效率很高的程序,被世界計算機界廣泛接受。目前,在各高校中《C語言程序設計》課程已作為信息工程類專業(yè),特別是計算機相關專業(yè)普遍開設的一門專業(yè)基礎課。通過這門課的學習,學生不僅需要熟悉C語言本身的各種結構,而且還應該學會從問題出發(fā),通過逐步分析和分解,把原問題轉化為能用計算機通過程序方式解決的問題,進而編寫出對應的C語言程序并具備一定調(diào)試程序的能力[1]。更重要的是,掌握一門程序設計語言也是大學素質教育和計算機基礎教育的一部分[2]。
但在實際教學中,學生反映C語言課程難學,程序編寫能力提高慢;而老師們也認為課時較少,學生難教,期末考試成績未達預期。經(jīng)調(diào)研分析,出現(xiàn)以上問題的原因主要有以下幾個方面:
(1) 入門難?!禖語言程序設計》是大多數(shù)高校學生進校后學習的第一門程序設計課程,加上C語言本身語法規(guī)則多且靈活,很容易出錯,指針等概念又抽象復雜,難以理解。因此,學生在學習的時候難免會出現(xiàn)畏難心理。
(2) 教學內(nèi)容不合理。在以往教學中,教師往往過分強調(diào)C語言本身語法細節(jié),使學生容易陷入語法知識的細節(jié)而忽略程序設計的本質。這樣,學生不能真正學會程序設計的基本思想和方法,更不能利用C語言編程去解決實際問題。 “高分低能”現(xiàn)象較為普遍。
(3) 教學方法和教學手段單一。課堂教學是學生知識來源的主要方式之一。但很多教師在課堂上主要采用“教師講,學生聽”這種以自我為中心進行的授課模式,教學手段也僅限PPT加黑板板書。導致學生無法參與到教學過程中,學生學習興趣下降,課堂上甚至出現(xiàn)睡覺、玩手機等現(xiàn)象,致使教學效果無法得到保證。
(4) 考核方式不合理。傳統(tǒng)的《C語言程序設計》考核方式為:平時30%+期末考試70%。 顯然,這種簡單的“一錘定音”考核方式很難督促學生平時的學習,學生把一門課的學習時間就集中在考前的一個星期,學習效果可想而知。甚至,在學生的要求下或鑒于學校對考試成績的要求,一些教師還在考前劃重點,這進一步助長了學生的這種考前臨時抱佛腳的心理。
如何解決上述問題?又怎樣才能讓學生愛學、學會、會用?這些都是值得我們探討的問題。近年來,在學習其他高校相關課程改革經(jīng)驗和總結以往教學經(jīng)驗基礎上,我們不斷地對《C語言程序設計》課程改革進行探索,取得了一定成果,同時也存在一些需要進一步研究和解決的問題。
本文的剩余部分內(nèi)容安排如下:第一部分,給出了我們在教學目標、教學內(nèi)容、教學方法、教學手段以及考核方式等方面的具體改革措施;第二部分,展示了我們的教學成果以及目前還存在的問題;最后,總結全文。
2 具體改革措施
首先,我們確定了《C語言程序設計》課程改革的總體思路:
(1) 運用“建構主義”的學習理論,學生是學習和實踐創(chuàng)新的主體,教師發(fā)揮“向導”作用,成為“啟發(fā)者”和“示范者”;
(2) 貫徹“以學生為中心”(以生為本)的思想,鼓勵學生積極與課程學習,將“學會自學”作為學習的基本要求;
(3) 確定多元化的考核目標,將課本的學習與課外的閱讀、課內(nèi)的表現(xiàn)與課外的表現(xiàn)、校內(nèi)的學習與校外的實踐等結合起來進行考核。
接下來本文分別從教學目標、教學內(nèi)容、教學方法和手段以及考核方式等方面探討具體的改革措施。
2.1教學目標改革
樹立一個正確的教學目標是學好一門課的根本所在,教師和學生都應向這一目標“看齊”?!禖語言程序設計》是一門實踐性比較強的程序設計類課程。程序設計最重要的思維過程是如何把目標域問題建模成計算,然后再根據(jù)選用的編程語言將計算過程形式化出來[3]。因此,對于程序設計類課程,不能簡單要求學生掌握語言的基本語法規(guī)則,而是要培養(yǎng)其解決實際問題的能力和編程實現(xiàn)的能力。
為此,我們在《C語言程序設計》課程教學中注重培養(yǎng)學生的編程思維能力,以啟發(fā)和訓練學生的編程思維為主導,著眼于解決問題的思路和方法,從而增強學生解決實際問題的編程能力,激發(fā)學生的編程興趣,培養(yǎng)學生的創(chuàng)新能力。也為學生在后續(xù)學習過程中更容易接受其他編程語言做準備。
具體而言,通過該門課程的學習,學生應具有以下基本編程素質和能力:
(1) 基本的編程思維及良好的編程習慣;
(2) 代碼調(diào)試和測試的能力;
(3) 查找技術資源與閱讀技術文檔的自學能力。
2.2教學內(nèi)容改革
前文提及,C語言作為編程語言的啟蒙,最重要的是培養(yǎng)學生的編程思維能力以及著眼于解決問題的思路和方法,從而增強學生解決實際問題的能力。然而傳統(tǒng)的教學內(nèi)容過多地強調(diào)語法知識,這樣極大地限制了學生編程思維的形成和編程能力的提高。這就是學生不愛學、學不好,即使學會了語法知識也不能轉化為實際能力的根本原因。
因此,在整個C語言教學過程中,應本著“強算法、弱語言”的原則,即把解題思路、方法和步驟當做授課的重點,從而讓學生明白如何分析并解決實際問題,逐漸培養(yǎng)學生明白如何分析并解決實際問題,逐漸培養(yǎng)學生進行程序設計的正確模式。
這需要對教學的內(nèi)容進行整合和分類,從應用出發(fā),分散重難點[4]。具體而言,我們首先,將數(shù)據(jù)類型、運算符、表達式等抽象的知識分散到各個章節(jié),即學即用。其次,順序、選擇、循環(huán)、函數(shù)等結構化程序設計內(nèi)容只講基本用法,通過引入具有趣味性、實用性的例題,吸引學生的興趣,讓學生積極主動地參與到學習中,體會編程的樂趣。對于這部分難于理解的語法細節(jié)可以通過逐步加大例題的難度方式呈現(xiàn)給學生。最后,數(shù)組、指針、結構體、文件等應用模塊教學內(nèi)容以一兩個與學生息息相關的項目如成績管理系統(tǒng)、學籍管理系統(tǒng)、學生選課系統(tǒng)等,作為切入點,逐步深入和完善。在整個項目過程中,重點講解分析以及解決問題的思路,培養(yǎng)學生編程思維能力。另外,還將部分計算機經(jīng)典算法引入課堂中,進一步提高學生程序編寫能力。
2.3 教學方法改革
普希金曾說過:當學生的思維停止時,你的教學效果等于零。因此,在教學方面我們使學生積極主動參與到課前、課堂、課后整個教學過程中。
1)強調(diào)課前預習
我們每次提前一星期將學習內(nèi)容以一個個不超過20分鐘的小視頻發(fā)布在本校網(wǎng)絡教學中心平臺[6]上,供學生隨時隨地觀看。這樣,一方面將學生的被動學習狀態(tài)轉化為主動學習狀態(tài),提高學習效果;另一方面任課教師在課堂上對于簡單、基礎的內(nèi)容可以不講,只講重點和難點,提高教學效率。另外,為了了解學生對視頻內(nèi)容的掌握情況,除了發(fā)布視頻外,我們還給出了一些針對視頻內(nèi)容的提問。任課教師可以根據(jù)學生對這些問題的回答情況,對教學內(nèi)容有選擇性地進行講解。
2)討論式和項目驅動式課堂教學
目前,C語言教學分兩部分,理論課堂和上機實驗。
在理論課堂上,首先,我們對預習內(nèi)容做簡單總結性回顧;接下來,重點以“項目為導向”組織課堂教學,將本堂C語言所包含的知識點融入到一兩個實際案例項目中,通過任務驅動,將相關理論知識引入教學過程中。在案例分析時,重點講解編寫程序的思想和方法,確定編寫程序方案;然后引導學生討論學習,并按照討論得到的方案現(xiàn)場編寫程序。此外,為了吸引學生的注意力和提高學生程序調(diào)試能力,還可以故意在程序中在設置一些BUG,讓學習去發(fā)現(xiàn)問題,解決問題。對于一些較為復雜的項目可以采用遞進驅動教學法[5]。也就是先給一個比較實際的切入點,使學生比較容易入手,然后再將此項目不斷修改、擴充,引導學生逐步深入,逐步優(yōu)化。因此,整個過程包括:提出問題、解決問題、擴展問題、再解決問題、優(yōu)化設計等環(huán)節(jié),這是一個螺旋式滾動向前的過程,能夠非常自然地調(diào)動學生的參與,有效地開闊了學生的思維,使得學生在課堂上真正成為“主體”,教師扮演了“主導”角色。
對于上機實驗環(huán)節(jié),我們將實驗分為兩類:基礎性實驗和設計性實驗。基礎性實驗用于消化和鞏固理論教學內(nèi)容,相對比較容易,學生能夠較順利地通過實驗,獲得一定成就感。這類實驗題目當堂發(fā)布,每個學生需獨立完成,當堂提交。設計性實驗難度較大,實用性強,學生需要組隊完成。課前給出題目,組織學生討論,得出算法流程,然后上機編程調(diào)試,完成后當堂提交。這樣一來,一方面有利于培養(yǎng)學生對知識的應用能力與問題的分析能力,更主要的是培養(yǎng)了他們的團隊協(xié)作能力。
在上機過程中,教師巡回指導,可以發(fā)現(xiàn)學生編程過程中的普遍性問題和學生們的新思路、新方法。課程結束前,教師總結學生出現(xiàn)的問題,讓學生進行分析和解決。同時還可以請有獨特思路的學生演示自己的方法和程序,以鼓勵大家提出新方法。
3)重視課后學習反饋
為了了解學生對知識掌握情況以及提高學生知識梳理能力,每次課結束后,我們要求學生及時完成學習日志和自我評價。主要內(nèi)容包括:本次課的學習目標是什么?本次課你學到了哪些內(nèi)容?本次課還有哪些知識沒掌握?為什么沒掌握?在課堂討論中,你有哪些特出表現(xiàn)?又犯過哪些錯誤?為什么會犯這些錯誤?等等。
2.4 教學手段改革
在教學手段上,除了采用多媒體教學課堂教學和板書設計結合方式外,我們還借助了本校網(wǎng)絡教學平臺以及在線評測系統(tǒng)(Online Judge System,OJ),充分利用因特網(wǎng)發(fā)揮信息現(xiàn)代化強大優(yōu)勢,使其成為輔助教學有力工具。
1)網(wǎng)絡教學平臺
教師通過網(wǎng)絡平臺可以上傳各類教學資源、批改作業(yè)、網(wǎng)上答疑;而學生可以隨機隨地了解自己學習狀態(tài),更有針對性地調(diào)節(jié)個人學習方案,促進學習效率的提高和自我知識水平的提升。網(wǎng)絡教學平臺主要內(nèi)容有:(1)教學大綱、教學進度、教學課件、教學視頻等教學資源,供學生了解教學內(nèi)容;(2)較豐富的題庫內(nèi)容,用于學生學后練習、自測和自我評價。題型有選擇、程序閱讀、程序改錯、程序填空,主要鞏固語法和提供學生的程序思維能力。(3)討論區(qū),主要用于構建學生和教師、學生與學生之間的交流渠道,以便參與者之間進行交流、協(xié)作和討論。
2)在線評測系統(tǒng)
為了方便學生練習編程,以提高其編程能力,學院還建設了OJ系統(tǒng)。OJ系統(tǒng)可以實現(xiàn)在線提交程序、實時評測、在線考試等功能。具體我們將上機實驗編程以及課后編程作業(yè)都發(fā)布在OJ系統(tǒng)上,要求學生通過OJ來完成。其中,實驗編程每周2-3題,要求當場提交;課后編程每周4-6題,一周內(nèi)完成。另外,我們還在OJ系統(tǒng)上發(fā)布了上千道編程練習題,學生可以根據(jù)自己的水平自主選擇進行練習。
利用OJ系統(tǒng)既可以保證評測結果的公平性和實時性,也可以減輕教師的工作負擔。此外,在OJ系統(tǒng)上提交完程序后,系統(tǒng)能立即給出結果,這樣學生能及時對程序進行訂正,實現(xiàn)查漏補缺。同時學生通過在OJ上做題,排名不斷上升,產(chǎn)生成就感,從而提高學生編程興趣。
3) 引入課外實踐
為了及時解決學生課后遇到的問題以及營造濃厚的學習氛圍,學院還配備了專門教室作為答疑室。答疑室配備一門專職實驗室教師,還有若干名高年級優(yōu)秀學生。答疑室全天候開放,學生們可以相互討論學習也可以求救于教師。我們還鼓勵學生參加如ACM、藍橋杯等各種計算機程序設計大賽、大學生創(chuàng)新性實驗項目、大學生課外科技項目,以培養(yǎng)學生的實踐能力、解決問題的綜合能力,鼓勵學生創(chuàng)造性思維。更重要的是,以上述比賽和項目為契機,激發(fā)學生的編程興趣。
2.5 考核方式改革
考核方式可以說是一門課程的指揮棒,如何考試也就決定著學生如何學習,老師如何教學。在傳統(tǒng)考核方式中,考核方式單一,期末考試成績占的比重過高,導致學生不注重平時學習,過多寄希望考前突擊。另外,傳統(tǒng)的C語言課程一直采用筆試的考試方式,大多試卷以語法知識為主,而對編程能力要求不夠。從而導致教師在教、學生在學的過程中,只注重語法知識、而編程能力培養(yǎng)不夠。一學期下來,一些學生甚至不知如何使用開發(fā)環(huán)境、如何編譯運行程序、如何排查程序錯誤等這些簡單的編程問題。
因此,我們加強過程考核,使學習過程中始終穿插著考核,這樣有利于提高學生對課程學習的重視程度,促使學生關注課程學習的每一個細節(jié),對提高學生自主學習能力有很大的幫助,而且能顯著提高課堂時間利用率,使學生能夠達到高效率的學習。
考核具體要求以及權重如表1所示。
3 改革成果及問題
3.1 改革成果
近一年多來,通過對《C語言程序設計》課程進行教學改革,我們?nèi)〉昧肆己玫慕虒W效果。學期結束時,大部分學生都覺得學有所得,對本次教學改革比較認可。教學成果主要表現(xiàn)為以下幾點:
第一,學生通過課外大量的閱讀和自主學習,學習能力和自主性都得了很大的提高。80%以上的學生能在課前進行預習,課堂上睡覺玩手機現(xiàn)象基本消失,部分學生還能積極主動回答問題。第二,學生開始注重提問、交流、總結和反思。網(wǎng)絡討論區(qū)、QQ群、答疑室等討論人明顯增多,已出現(xiàn)師資配備不足。第三,考前突擊和指望教師透題的心態(tài)有所轉變。學生期末考試前壓力減輕,不再需要熬夜復習,也不需要教師劃考試重點。第四,期末成績明顯提高。
圖1和圖2分別是我校2015級和2016級計算機專業(yè)《C語言程序設計》成績分布圖。由圖2可以看出,教改后該課程不及格率為12.24%。這對其他學科來說,可能并不理想。但對《C語言程序設計》這樣一門我校學生普遍認為非常難學的一門課程來說,非常難得。由圖1可以看出在教改前的不及格率就高達35%左右。同時對比兩圖還可以看出,教改后70分以上的比例也較教改前大幅提升,由39.85%上升到57.61%。
最后,近一兩年來,我院學生在藍橋杯和ACM程序競賽中獲得多項獎項,特別是在今年還獲得第42屆ACM國際大學生程序設計競賽亞洲區(qū)域賽銀獎。
3.2 存在的問題
本次課程改革雖然取得了一定成效,同時也存在一些問題,主要表現(xiàn)如下:
首先,大部分同學成績集中在60-80分之間,80分以上高分不多。分析其中原因,發(fā)現(xiàn)大部分同學編程能力較以往同學有所提高,但考核成績中編程部分得分還不太理想沒有達到預期目標,因此不易獲得高分。建議在本課程開設前,增加一門課程,訓練學生利用工程思想和方法發(fā)現(xiàn)并解決問題,這對學生編程能力提高會有所幫助。當然,編程能力的提高并不是一蹴而就,需要一個長期積累過程。
其次,學生的預習還不是很到位,導致課堂缺乏深層次的討論。這需要我們在今后的工作中,進一步改進預習指引,合理設置討論主題,提高預習質量。
最后,教師資源不足,一些教學工作難以開展。通過這次教學改革,學生平時學習主動性提高,問題也多了起來,但師資不足,難以應付。另外,網(wǎng)絡教學平臺和OJ平臺也需要專門人員維護,導致教師資源進一步緊張。因此,建議在學生中聘任助教,協(xié)助教師來完成任務。
4 結束語
本文針對《C語言程序設計》課程實踐性高以及當前本校教學過程中存在的問題,進行相應的教學改革。本次改革以培養(yǎng)學生程序設計的思想和應用C語言開發(fā)軟件能力為目標,依托學校的網(wǎng)絡教學平臺、在線評測系統(tǒng),從教學目標、教學內(nèi)容、教學方法和手段、考核方式等多方面探討了該課程教學模式。實踐證明,教學效果顯著,學生學習能力和自主性都得了很大的改善,C語言編程能力也得到一定程度的提高。在今后的工作中,我們將繼續(xù)根據(jù)實際教學情況,對文中提出的改革措施進行完善,讓學生喜歡學、學得會、學得好、用得活。
參考文獻:
[1] 裘宗燕. 從問題到程序-程序設計與C語言引論[M]. 北京:機械工業(yè)出版社,2013:7-8.
[2] 謝競博. C語言程序設計教學中的問題及改革建議[J].重慶郵電大學學報社會科學版,2008,20(2):137-140.
[3] 尹波,孟愛國,朱前飛,左利芳. 面向編程思維能力培養(yǎng)的C語言教學改革研究[J].計算機時代,2016 (11):67-69.
[4] 鐘美. 培養(yǎng)應用型人才為目標的C語言教學改革[J].計算機教育,2013(6):55-58.
[5] 張素芹,吳連生. 獨立學院“C語言程序設計”教學改革實踐[J].計算機教育,2010(14):21-23.
[6] 南京曉莊學院.南京曉莊學院課程中心[CP/OL].[2018-2-5]. http://njxzc.fanya.chaoxing.com/portal.