吳元斌+熊江+劉福明+劉井波
摘要:編程語言課程群在培養(yǎng)學(xué)生編程能力中具有基礎(chǔ)性作用。該文首先分析了軟件工程專業(yè)編程語言課程群教學(xué)中存在的主要問題,然后提出了改革編程語言課程群教學(xué)的幾點具體措施,這些措施對于提高學(xué)生的編程能力具有重要作用。
關(guān)鍵詞:編程語言;課程群;編程能力;過程化教學(xué)管理
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)25-0140-02
Abstract: The curriculum group of programming language has basic function in developing students programming ability. The main problems existing in the programming language curriculum group teaching are analyzed, and some concrete measures for the reform of programming language course group teaching are posted. these measures are important to improve the students ability of programming.
Key words: Programming Language; Curriculum Group; Programming Ability; Teaching Process Management
1 引言
編程能力是軟件工程專業(yè)學(xué)生應(yīng)具備的核心能力之一,它的培養(yǎng)是通過一系列課程來實現(xiàn)的。編程語言如C語言、Java、Web程序設(shè)計、Java Web等組成了編程語言課程群,這個課程群在培養(yǎng)學(xué)生編程能力中具有基礎(chǔ)性作用。編程語言課程群在編程能力培養(yǎng)的重要性已受到廣泛認(rèn)同,在我校新修訂的軟件工程人才培養(yǎng)方案中,為了適應(yīng)應(yīng)用型技術(shù)大學(xué)轉(zhuǎn)型發(fā)展需要,編程語言課程群地位更加突出,特別是作為基礎(chǔ)的第一門編程語言教學(xué)時數(shù)大大增加,同時調(diào)整了實驗學(xué)時數(shù),基本上理論與實驗學(xué)時數(shù)各占一半,而且鼓勵教師在實驗室上理論課,加大了學(xué)生動手實踐要求和機會。
近年來,我校在編程語言群教學(xué)工作取得了一些成績,如:公開發(fā)表了十余篇編程語言教學(xué)改革論文,多個編程語言課程改革項目獲得省級、校級立項建設(shè),出版了幾部編程語言自編教材或教學(xué)輔導(dǎo)書等。盡管如此,目前編程語言課程群教學(xué)還存在不少問題,不適應(yīng)學(xué)校向應(yīng)用技術(shù)大學(xué)轉(zhuǎn)型發(fā)展的需要,不適應(yīng)編程能力培養(yǎng)的需要。在教學(xué)中我們發(fā)現(xiàn)至少下面五個問題比較突出。
(1) 編程語言課程群的教學(xué)缺乏統(tǒng)一管理,部分教學(xué)內(nèi)容重疊
編程語言課程群的教學(xué)工作缺乏統(tǒng)一管理,各門課程教學(xué)各行其是,課程之間部分教學(xué)內(nèi)容重疊,課程之間的銜接不夠。從總體上看,編程語言群中各編程語言的語法基礎(chǔ)具有一定的相似性,如C語言與Java(或C++)。Java是在C語言的基礎(chǔ)上發(fā)展起來的,語法基礎(chǔ)與C語言相近。若在上Java課程時,對其前面的語法基礎(chǔ)介紹與訓(xùn)練太多,將無法用更多的時間來介紹面向?qū)ο笤O(shè)計、GUI、異常處理、多線程、網(wǎng)絡(luò)等高級主題;同時,對學(xué)生已經(jīng)有一定基礎(chǔ)的語言基礎(chǔ)進行過多的重復(fù),會降低學(xué)生的學(xué)習(xí)積極性和學(xué)習(xí)興趣,甚至產(chǎn)生厭學(xué)情緒。
(2) 第一門編程語言的基礎(chǔ)不牢固
學(xué)好第一門編程語言相當(dāng)重要,但是萬事開頭難。若第一門編程語言學(xué)得好,將對后繼編程語言及其他課程的學(xué)習(xí)奠定基礎(chǔ),就可以“舉一反三,觸類旁通”;反之,就可能是“基礎(chǔ)不牢,地動山搖”。目前通常選用C語言作為第一編程語言,C語言對初學(xué)者來說是一門較難的課程,學(xué)好它并不容易,需要學(xué)生用心學(xué)習(xí)才行。在教學(xué)過程中我們發(fā)現(xiàn),一些學(xué)生一開始學(xué)習(xí)不上心,日積月累,問題越來越多,就容易產(chǎn)生厭學(xué)情緒。更重要的是,C語言的語法嚴(yán)謹(jǐn),不能隨意編寫程序,少數(shù)學(xué)生從課程開始到課程結(jié)束仍然寫不出幾個正確的程序,總是包含語法錯誤或邏輯錯誤。有的學(xué)生閱讀、編寫、調(diào)試程序的時間與精力不夠,軟件開發(fā)平臺(如:Eclipse)使用不熟練,軟件工程基本素養(yǎng)的訓(xùn)練和培養(yǎng)不夠。
(3) 教學(xué)過程化管理不夠
不注重學(xué)習(xí)過程的考核,期末筆試所占學(xué)期總成績的比例大(占60%),而實驗成績占的比例?。ㄕ?0%)。而且實驗考試在實驗成績中的比例沒有具體規(guī)定,沒有明確規(guī)定:實驗考試不及格,則課程總成績不及格。實驗考試過程沒有期末筆試那么正規(guī)、正式,考試時間通常只有筆試的一半,試卷的批閱也沒有規(guī)定。這不利于調(diào)動學(xué)生平時的學(xué)習(xí)積極性,平時的教學(xué)秩序、教學(xué)效果很難保證。實際上,學(xué)生閱讀、編寫、調(diào)試程序的能力主要是在平時的教學(xué)過程中培養(yǎng)出來的,期末筆試時間短、內(nèi)容不全面,不能全面考核編程能力。
(4) 課外實驗、課程設(shè)計、課程實訓(xùn)管理不夠
目前編程語言的實驗主要是在老師指導(dǎo)下的課內(nèi)實驗,而缺少課程規(guī)定的課外實驗。盡管現(xiàn)在多數(shù)學(xué)生都有自己的計算機,但是缺乏在計算機實驗室的集體學(xué)習(xí)環(huán)境。編程語言課程沒有統(tǒng)一要求學(xué)生完成課程設(shè)計,學(xué)生學(xué)習(xí)一門編程語言編碼量不夠。課程實訓(xùn)往往規(guī)定在一兩周內(nèi)完成,通常3-5人為小組完成項目,但少數(shù)學(xué)生沒有自己寫代碼,學(xué)生動手獨立編程訓(xùn)練不夠。不少學(xué)生沒有認(rèn)真訓(xùn)練如何編寫好的程序和較大規(guī)模的程序,軟件開發(fā)平臺使用技巧掌握不夠。
(5) 非編程語言課程的編程能力訓(xùn)練不夠
非編程語言課程,特別是數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計算機組成原理、計算機網(wǎng)絡(luò)、編譯原理、軟件工程等課程,程序設(shè)計的訓(xùn)練也非常重要,學(xué)習(xí)這些課程也是提高編程能力和水平的重要手段。但是,在這些課程的學(xué)習(xí)過程中,不少學(xué)生不愿自己編寫程序,而只是調(diào)試?yán)蠋熤付ǖ拇a、粘貼來自網(wǎng)上的代碼,這樣既無法提高編程能力,也無法學(xué)好、學(xué)活相應(yīng)的課程。
2 優(yōu)化編程語言課程群的具體措施
2.1 加強編程語言課程群的教學(xué)管理
建立編程語言課程群教學(xué)指導(dǎo)小組,加強編程語言課程群的教學(xué)管理,改革課程考核體系,提高實驗教學(xué)與實驗成績的比重。深入研究編程語言課程群(C語言、Java、Web程序設(shè)計、Java EE、C#等)教學(xué)內(nèi)容的交叉、關(guān)聯(lián)與繼承關(guān)系,分析它們在培養(yǎng)編程能力過程中的角色和任務(wù),對編程語言課程群的教學(xué)進行整體規(guī)劃與優(yōu)化[1]。必須讓學(xué)生牢記:單憑閱讀和學(xué)習(xí)語法結(jié)構(gòu)并不能真正掌握一門程序設(shè)計語言,必須進行編程實踐——親自編寫程序并研究別人寫的程序。學(xué)習(xí)一門新程序設(shè)計語言的唯一途徑就是使用它編寫程序[2]。
精心設(shè)計各課程的教學(xué)內(nèi)容、典型案例、編程項目與實訓(xùn)項目等,從簡單的順序結(jié)構(gòu)(Input、Process、Output,簡稱IPO)編程,到模塊化、結(jié)構(gòu)化編程,再面向?qū)ο缶幊蹋俚絁ava Web開發(fā)、Java EE流行框架技術(shù)開發(fā)應(yīng)用等。避免課程之間不必要的重復(fù),提高教學(xué)效率。注重典型案例的基礎(chǔ)作用,循序漸進地進行開展編程能力訓(xùn)練。任課教師要在教學(xué)指導(dǎo)小組的指導(dǎo)下工作,深入研究教學(xué)內(nèi)容,講究教學(xué)方法,加強教學(xué)互動,注意課程之間的教學(xué)內(nèi)容銜接。
加強學(xué)生調(diào)試程序能力的培養(yǎng),從第一門語言課程開始,學(xué)生就要練習(xí)編程語言和開發(fā)工具的基本調(diào)試技巧[3]。不斷學(xué)習(xí)流行軟件開發(fā)平臺(如Visual Studio、Eclipse、MyEclipse等),最終熟練掌握開發(fā)平臺的使用技巧,提高編寫程序、調(diào)試程序、分析程序的能力。
2.2 突出第一門編程語言的基礎(chǔ)地位
通常C語言作為入門語言教學(xué),C語言對初學(xué)者來說是一門較難的課程。在教學(xué)過程中,我們實施“教、學(xué)、做”合一、“課堂與實驗室合一”的教學(xué)模式,通過各種教學(xué)手段提高學(xué)生閱讀、編寫、調(diào)試程序的積極性和主動性,盡力使他們感受到編程的快樂和成就感[4]。另外,讓學(xué)生學(xué)習(xí)并掌握流行軟件開發(fā)平臺(如Visual Studio、Eclipse等)的使用方法,從最基本的命名規(guī)范、注釋、縮進的細微入手訓(xùn)練軟件工程素養(yǎng)[5]。為加強C語言的編程能力,我們在大一的下學(xué)期開設(shè)“C實例分析與應(yīng)用”課程,同時為后繼課程(如:數(shù)據(jù)結(jié)構(gòu)與算法等)打好基礎(chǔ)。
此外,C語言作為第一門編程語言對初學(xué)者來說有一定困難,也可以選擇其他語言(如:Python)作為第一語言。Python語言的設(shè)計哲學(xué)是“優(yōu)雅”、“明確”、“簡單”。國際上用Python做科學(xué)計算的研究機構(gòu)日益增多,一些知名大學(xué)已經(jīng)采用Python教授程序設(shè)計課程[6,7,8]。
2.3 加強教學(xué)過程管理,嚴(yán)格實驗考核
嚴(yán)師出高徒,第一堂課應(yīng)讓學(xué)生明確教學(xué)目標(biāo)要求,約法三章,嚴(yán)格課程管理。注重教學(xué)過程化管理,根據(jù)編程語言課程實踐性強的特點,要加強實驗教學(xué)的過程化管理[9,10]。不僅要提高實驗學(xué)時數(shù)占總學(xué)時數(shù)的比例,還要提高實驗成績在學(xué)期總成績中的比重(如:40%以上)。加強平時的實驗項目考核,學(xué)生編程能力的提高主要是在平時的實驗項目中實現(xiàn)的。鼓勵學(xué)生使用開發(fā)平臺進行大量調(diào)試、修改程序訓(xùn)練,從中感受編程中失敗的痛苦、成功的喜悅和成就感。通過在線考試系統(tǒng)或在線測評系統(tǒng)平臺完成實驗項目成績的統(tǒng)計與管理。
實驗考試過程應(yīng)該正規(guī)、正式,考試時間不少于筆試。嚴(yán)格實驗考試,若實驗不及格,課程總成績不及格。實驗考試采用在線考試系統(tǒng)或在線測評系統(tǒng)方式,隨機抽題,自動閱卷。為了提高學(xué)生的應(yīng)試能力,以及閱讀、分析、編寫、調(diào)試程序的能力,鼓勵學(xué)生平時在實驗過程中(如:規(guī)定的實驗項目完成之后)通過考試系統(tǒng)進行積極訓(xùn)練。
2.4 加強課外實驗、實訓(xùn)教學(xué)管理
課內(nèi)實驗是在老師的指導(dǎo)下進行了,有的學(xué)生一離開老師的指導(dǎo)就無能為力了。課外實驗正好可以培養(yǎng)學(xué)生的自主學(xué)習(xí)能力,促進同學(xué)之間的相互討論,實在不能解決的問題也可以找機會問老師,課外實驗的學(xué)時數(shù)應(yīng)不少于課內(nèi)實驗。
大量項目實踐是提高編程能力的根本保證。課內(nèi)的課程設(shè)計、單獨的課程實訓(xùn)以及企業(yè)實訓(xùn)是主要的項目實踐活動。通過這些項目實踐活動,逐漸掌握如何編寫好的程序和較大規(guī)模的程序,掌握軟件開發(fā)平臺的使用技巧與程序調(diào)試能力,理解軟件工程的基本方法,熟悉軟件工程過程(問題定義、需求分析、系統(tǒng)設(shè)計、算法設(shè)計、模塊測試和調(diào)試、集成測試等)。還可以不斷提高學(xué)生問題分析能力、規(guī)劃設(shè)計能力和團隊合作精神等綜合能力。通過完成各種實驗項目可以不斷贏得自信。
上述實踐活動只有通過認(rèn)真、踏實的態(tài)度,不斷堅持下才能夠達到好的效果,因此關(guān)鍵是要嚴(yán)格管理,絕對不能流于形式、走過場,應(yīng)規(guī)定實訓(xùn)項目成績等級的具體標(biāo)準(zhǔn)。
2.5 編程能力培養(yǎng)應(yīng)貫穿所有專業(yè)課程
不斷提高學(xué)生的編程能力,僅靠編程語言課程群是不夠的,要加強非編程語言課程(如:數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計算機組成原理、編譯原理、數(shù)據(jù)庫原理、計算機網(wǎng)絡(luò)等)的編程能力與編程能力訓(xùn)練,應(yīng)提高非編程語言課程實驗學(xué)時占整個課程學(xué)時的比例,以及實驗成績占學(xué)期總成績的比例,使學(xué)生通過自己的編程實踐與軟件工程訓(xùn)練,提高對課程內(nèi)容的理解和掌握。把這些課程的內(nèi)容當(dāng)做應(yīng)用開發(fā)的工具、技術(shù)、系統(tǒng)、項目的成功案例,加以學(xué)習(xí)研究,特別是掌握其相關(guān)的設(shè)計與實現(xiàn)的基本思想和方法[11]。
此外,應(yīng)鼓勵學(xué)生參加各種程序設(shè)計競賽,如:ACM程序設(shè)計大賽、中國大學(xué)生計算機設(shè)計大賽、全國大學(xué)生計算機博弈大賽等等,通過比賽展示自己計算機應(yīng)用與創(chuàng)作才智,進一步提高自己解決實際問題的綜合實踐能力、創(chuàng)新創(chuàng)業(yè)能力和團隊合作精神。
3 結(jié)語
加強編程語言課程群的管理,對課程群中各門課程教學(xué)內(nèi)容進行總體規(guī)劃和優(yōu)化,精選編程案例、編程項目與實訓(xùn)項目,由淺入深、循序漸進地提高學(xué)生的編程能力。對于每一門編程語言課程,要加強教學(xué)的過程化管理,特別是實驗教學(xué)的管理與考核。編程能力的培養(yǎng)應(yīng)貫穿所有專業(yè)課程和專業(yè)活動,使學(xué)生在潛移默化中提高編程能力與軟件工程素養(yǎng)。在第一門編程語言課程教學(xué)實踐中,我們積極進行教學(xué)改革實踐,表1是三學(xué)期“C語言程序設(shè)計”課程的成績統(tǒng)計分析表,盡管這三個學(xué)期試題難度不全相同,對教師的評價指標(biāo)也不完全一致,但從總的情況看,教學(xué)改革實踐還是受到學(xué)生的歡迎和好評。
表1是第一門編程語言教學(xué)改革實踐過程的情況分析,隨著改革的進行,學(xué)生的滿意度不斷提高,采取了多種措施提高了學(xué)生的編程能力和軟件工程素養(yǎng)。但全面提高編程能力,還需不斷探索,采取改革編程語言課程群教學(xué)的綜合措施。
參考文獻:
[1] 張基溫.計算機課程體系整合暢想[J].計算機教育,2014(8):59.
[2] Brian W. Kernighan, Dennis M. Ritchie. C程序設(shè)計語言(第2版·新版)[M].徐寶文, 等譯.北京:機械工業(yè)出版社,2004.
[3] 羅先錄,羅顯松,胡韶峰,等.應(yīng)用型本科計算機類專業(yè)程序設(shè)計課程體系建設(shè)研究[J], 工業(yè)和信息化教育. 2016(3):38-41.
[4] 吳元斌. 提高C語言初學(xué)者編程能力的幾點措施[J]. 現(xiàn)代計算機,2015(1):13-15.
[5] B. A. Forouzan, R. F. Gilberg. C程序設(shè)計-軟件工程環(huán)境(原書第3版)[M].黃林鵬 等, 譯. 北京:機械工業(yè)出版社,2008.
[6] 梁勇(Liang Y. D.). Python語言程序設(shè)計[M]. 李娜 譯.北京:機械工業(yè)出版社,2015.
[7] 沙行勉. 計算機科學(xué)導(dǎo)論: 以Python為舟[M]. 北京:清華大學(xué)出版社,2014.
[8] 嵩天,黃天羽,禮欣. Python 語言:程序設(shè)計課程教學(xué)改革的理想選擇[J].《中國大學(xué)教學(xué)》, 2016(2):42-47.
[9] 郭小清,謝忠紅.計算機專業(yè)程序設(shè)計類實驗課程教學(xué)方法與考核方式探討[J].高校實驗室工作研究,2015(1):11-12.
[10] 朱曉旭,楊季文,趙雷,姜小峰,姚望舒. 程序設(shè)計類課程過程性考核研究與實踐[J]. 計算機教育, 2014(22):99-102.
[11] 張燕,蔣宗禮.《應(yīng)用型軟件工程專業(yè)人才培養(yǎng)指導(dǎo)意見》研制思考[J].《中國大學(xué)教學(xué)》, 2015(6):28-31.