席耀一 唐永旺 陳剛
[摘 要]新工科教學(xué)強調(diào)提高學(xué)生的動手實踐能力。目前,高校編程語言的教學(xué)存在教學(xué)時間少,講述編程語言種類有限,缺乏總結(jié)不同語言共性特點與規(guī)律,教學(xué)內(nèi)容更新慢等問題。針對這些問題,提出著力提升學(xué)生的自信心,帶領(lǐng)學(xué)生找出規(guī)律和共性特點,培養(yǎng)學(xué)生計算思維,強調(diào)項目驅(qū)動的重要性的措施,以期進一步提高學(xué)生的動手實踐能力。
[關(guān)鍵詞]新工科; 編程教學(xué); 實踐能力; 語言種類
[中圖分類號] G642 [文獻標識碼] A [文章編號] 2095-3437(2020)08-0087-03
新工科教學(xué)強調(diào)學(xué)生動手實踐能力的提高,特別是編程能力和分析解決問題的能力[1-2]。如何上好高校編程語言類課程對于完成該目標具有重要意義。目前,高校該類課程教學(xué)一般僅是單純圍繞某一種或幾種語言的語法與應(yīng)用進行講解,學(xué)生在有限的時間里僅能夠掌握這些語言的語法和簡單應(yīng)用。然而在學(xué)生畢業(yè)走向工作崗位后,一般會需要用到從未學(xué)過的編程語言,這時部分學(xué)生會選擇社會上的相關(guān)培訓(xùn)班重新學(xué)習(xí)該種語言,而部分學(xué)生則會表現(xiàn)得茫然無措。這一問題極大地限制了學(xué)生的就業(yè)前景,打擊了學(xué)生的就業(yè)信心,與新工科教學(xué)的培養(yǎng)目標不符。
近年來,圍繞如何提高編程語言教學(xué)質(zhì)量的研究層出不窮,然而有一個問題沒有得到應(yīng)有的重視,即如何應(yīng)對編程語言種類繁多的問題。在“互聯(lián)網(wǎng)+”時代,與動手實踐密切相關(guān)的編程語言層出不窮。據(jù)統(tǒng)計,目前共有編程語言600余種。在新工科教學(xué)實踐過程中,如何更好地應(yīng)對編程語言種類繁多的問題值得相關(guān)教育工作者思考。
文章首先分析了編程語言的特點,然后分析了高校編程語言教育的現(xiàn)狀,最后針對存在的問題,提出了相關(guān)對策。
一、編程語言特點分析
正確總結(jié)編程語言的特點規(guī)律,有助于加深對編程語言的認識和規(guī)律把握,對于提出有效策略以應(yīng)對編程語言種類繁多的問題具有積極意義。所謂萬變不離其宗,本文以使用廣泛的C語言為例,通過對C語言的分析,達到總結(jié)編程語言特點規(guī)律的目的。
C語言是編程語言界的常青樹,作為大多數(shù)學(xué)生入門的第一門編程語言[3],其用途廣泛,在動手實踐教學(xué)中占有重要地位。C語言的特點在于執(zhí)行效率高,生態(tài)體系健全,C語言主要從事操作系統(tǒng)開發(fā)、服務(wù)容器開發(fā)和嵌入式開發(fā)領(lǐng)域。雖然C語言可以解決大部分與編程相關(guān)的動手實踐問題,但是在教學(xué)和實踐應(yīng)用中,C語言也存在調(diào)試困難和開發(fā)周期長等問題。作為公認的入門語言,C語言在大數(shù)據(jù)和“互聯(lián)網(wǎng)+”時代有時反而不及Python和Java等語言應(yīng)用廣泛。實際上,每種語言都有自己的優(yōu)勢和缺陷,目前沒有任何一種語言能夠完美解決所有的動手實踐問題。例如R語言在數(shù)據(jù)統(tǒng)計分析領(lǐng)域獨樹一幟,JavaScript語言在網(wǎng)頁腳本編程中獨領(lǐng)風(fēng)騷,Python語言在深度學(xué)習(xí)領(lǐng)域目前的地位無可匹敵。這也是為什么有如此多的編程語言的原因之一。
時代在進步,編程語言本身也在不斷發(fā)展完善。以C語言為例,1972年美國貝爾實驗室的D.M.Ritchie在B語言的基礎(chǔ)上設(shè)計出了C語言的第一個版本。從此開始,C語言先后在1989年、1994年、2001年和2004年歷經(jīng)了多次修訂。目前流行的C語言編譯系統(tǒng)大多是以美國國家標準化協(xié)會(American National Standards Institute,ANSI)指定的C語言標準為基礎(chǔ)進行開發(fā)的,但不同版本的C編譯系統(tǒng)所實現(xiàn)的語言功能和語法規(guī)則略有差別。其他語言的情況和C語言相似,也在不斷推陳出新。例如Java每隔一定時間就會發(fā)行新版本,而且新版本相較于舊版本都會新增很多特性;Python3與Python2相比也發(fā)生了不少變化。
此外,不同編程語言之間多有相似之處和共性特點。例如都需要對要解決的問題進行邏輯建模,都需要考慮選擇與循環(huán)等控制結(jié)構(gòu),都有整形、布爾型、浮點型等數(shù)據(jù)類型,變量標識符命名方式很多也一模一樣。又如,面向?qū)ο箢惖某绦蛟O(shè)計語言都會講述封裝、繼承和多態(tài)。
從上可以看出,現(xiàn)有的編程語言存在三大特點:一是缺乏普適性語言能夠擅長處理所有應(yīng)用領(lǐng)域問題;二是語言本身更新發(fā)展速度不斷加快;三是不同編程語言之間存在相似之處和共性特點。
二、高校編程語言教學(xué)現(xiàn)狀分析
編程語言有自身的特點,然而目前高校編程語言的教學(xué)現(xiàn)狀卻在一定程度上與編程語言自身的特點規(guī)律不相符。
(一)教學(xué)時間少
編程語言作為介于基礎(chǔ)課和專業(yè)課之間的課程,在高校教學(xué)中所占的時間比例偏低[4-5],相關(guān)課程數(shù)目少,課時時長非常有限。在強調(diào)厚基礎(chǔ)和強本領(lǐng)的今天,這種情況在短時間內(nèi)很難改善。
編程類課程教學(xué)時間有限,導(dǎo)致很多教師在內(nèi)容選擇上以基礎(chǔ)性語法介紹為主,缺乏大型實際應(yīng)用案例分析與上機練習(xí)。相當(dāng)一部分學(xué)生在有限的時間內(nèi)學(xué)到的只是枯燥的語法和一些書本上的小練習(xí),這讓他們感覺編程沒什么用。
(二)講述編程語言種類有限,缺乏總結(jié)不同語言共性特點與規(guī)律
由于教學(xué)時間有限,高校所講述的編程語言種類非常有限,缺乏總結(jié)不同語言共性特點與規(guī)律。多數(shù)高校在選擇教學(xué)內(nèi)容時,只能以較為基礎(chǔ)和應(yīng)用相對廣泛的語言為對象,例如多數(shù)高校會開設(shè)C語言課程,部分高校還會開設(shè)Matlab、Python和Java程序設(shè)計等課程,但是開設(shè)其他語言的很少。
高校編程語言類的教學(xué)既要結(jié)合專業(yè)和時代需求[6],也應(yīng)兼顧編程語言的特點。雖然部分理工類學(xué)科專業(yè)要求掌握該專業(yè)的一門常用語言即可,但是在大數(shù)據(jù)和“互聯(lián)網(wǎng)+”時代,越來越多的職業(yè)崗位要求學(xué)生掌握多門編程語言。
(三)教學(xué)內(nèi)容更新慢
編程語言本身在發(fā)展更新,尤其是進入大數(shù)據(jù)和“互聯(lián)網(wǎng)+”時代后,其更新的速度不斷加快。然而與編程語言的不斷發(fā)展不同的是,高校相關(guān)課程教學(xué)內(nèi)容的準備和更新相較于編程語言的發(fā)展卻有一定的遲滯。這種情況在科技發(fā)展日新月異的今天是不可避免的,即編程語言類課程的開設(shè)很難做到永遠與時代需求高度一致,一般都會具有一定的延后性。
從高校編程語言的教學(xué)現(xiàn)狀來看,其存在以下三方面的矛盾和問題。
一是高校的編程語言教學(xué)現(xiàn)狀和專業(yè)實際需求之間存在一定的矛盾,即專業(yè)實際需要掌握多種編程語言,而講述不同編程語言的課程數(shù)目少,相關(guān)課時數(shù)不足。
二是現(xiàn)在高校教學(xué)中講授具體語言使用的多,總結(jié)不同語言共性特點規(guī)律的少。
三是現(xiàn)在高校編程語言的教學(xué)實際與編程語言特點并不匹配,即前者內(nèi)容的更新跟不上后者的發(fā)展速度。
上述問題和矛盾很多時候?qū)е聦W(xué)生恐懼編程甚至認為自己不適合學(xué)習(xí)編程,這些問題和矛盾也是社會上與編程語言相關(guān)的培訓(xùn)班需求一直旺盛的原因之一。
三、相關(guān)對策
立足于現(xiàn)在高校的教學(xué)實際,單純提高編程語言課程在總課時中所占的比重,并不能很好地解決上述矛盾和問題。因為新工科教學(xué)越來越強調(diào)提高學(xué)生的自主學(xué)習(xí)能力,很難在已經(jīng)排好的專業(yè)學(xué)習(xí)計劃中增加編程語言類課程。另外,即便是能夠增加一定的教學(xué)時間,總體來看,增加的時間對于種類繁多且不斷更新的編程語言來說也是杯水車薪。
所謂授人以魚不如授人以漁,每一門具體的編程語言其實就是“魚”,而如何快速學(xué)習(xí)掌握編程語言的方法才是真正的“漁”。在新工科時代背景下,與其被動更新專業(yè)所需的編程語言,不如在有限的教學(xué)時間內(nèi)認真總結(jié)所有編程語言的共性特點和規(guī)律,提高學(xué)生對編程語言的認識高度,使其掌握編程語言的學(xué)習(xí)方法,為今后獨立學(xué)習(xí)編程語言打下堅實基礎(chǔ)。筆者在一線教學(xué)中經(jīng)過摸索和思考,提出了以下對策,僅供參考。
(一)著力提升學(xué)生的自信心
編程語言學(xué)習(xí)一直是高校大學(xué)生的一個痛點,有的甚至在學(xué)習(xí)后得出自己不適合學(xué)習(xí)編程的結(jié)論。面對此現(xiàn)狀,首先應(yīng)該著力提升學(xué)生學(xué)習(xí)編程的自信心,要讓學(xué)生明白編程語言只是人與計算機交互的工具。不管工具如何變化,交互的對象和目標始終沒有變,因此不同的工具一定有相通之處,不必過度擔(dān)心工具之間完全不同而裹足不前,不敢上手,甚至剛?cè)腴T就要放棄。
在此過程中,教師也可以通過編程示范,特別是調(diào)試示范,甚至是不同編程語言之間的交叉示范,來釋放學(xué)生內(nèi)心對編程的恐懼感,讓學(xué)生明白任何編程語言其實都不難。只要帶著信心去學(xué),耐心去調(diào)試,一定會發(fā)現(xiàn)編程語言其實非常簡單,也一定會產(chǎn)生“山重水復(fù)疑無路,柳暗花明又一村”的感覺。
另外,多站在學(xué)生的角度看問題,思考其為何困惑、疑難點在哪、為什么會出錯等,然后針對問題詳細解釋,這有助于學(xué)生從一開始就找準問題癥結(jié)所在,從而提升學(xué)生對編程的自信心。
(二)帶領(lǐng)學(xué)生找出規(guī)律和共性特點,培養(yǎng)學(xué)生的計算思維
筆者講述過多門編程語言,在講一門新的編程語言時,經(jīng)常會設(shè)身處地從學(xué)生已有的編程基礎(chǔ)出發(fā),詳細對比新語言和已學(xué)過語言之間的異同點,對于不同點重點詳細講解,對于相同點簡單講解,學(xué)生普遍反映此種教學(xué)方式接受快,理解也更為清晰。實際上很多編程語言是相通的,尤其是應(yīng)用領(lǐng)域相同的編程語言。例如Java和C++有很多類似之處,而Java和C#也相差不多,與Python和Scala語言也有相互借鑒之處,它們的本質(zhì)都是面向?qū)ο蟮乃枷耄以谡Z法中也有很多地方非常相似。如果精通一門,基本上一通百通。
此外,編程最核心的就是編程思想、算法及邏輯[7],這些內(nèi)容都有共性之處,而語言只不過是一種規(guī)定,例如算法的三種基本結(jié)構(gòu)的表達在不同語言中都有,語法也只是略有差異。如何讓學(xué)生學(xué)會跳出編程,站在編程之上看待編程,培養(yǎng)他們的計算思維[8]是高校編程類教學(xué)中應(yīng)該著力的一個地方。
帶領(lǐng)學(xué)生找出編程規(guī)律和不同語言的共性特點有助于學(xué)生達到一門精、多門通的學(xué)習(xí)效果,學(xué)生不再需要掌握所有的語言,只是在需要用時花費少量的時間學(xué)習(xí)一下基本語法,即可快速上手實踐。否則學(xué)生容易停留在紛繁復(fù)雜的語法層面,不能站在一定的高度看問題并總結(jié)特點規(guī)律,導(dǎo)致只見樹木不見森林。
(三)強調(diào)項目驅(qū)動的重要性
紙上得來終覺淺,絕知此事要躬行。古人很早就告訴我們知識要拿來應(yīng)用才能深刻領(lǐng)悟,真正學(xué)懂。編程語言作為一門動手要求很高的語言更是如此。教師課堂上的講授更多只是幫助學(xué)生厘清某一門編程語言的體系和脈絡(luò),降低學(xué)生入門的難度,扮演的更多是“領(lǐng)路人”的角色。
正所謂師傅領(lǐng)進門,學(xué)藝在個人。無數(shù)的經(jīng)驗告訴我們單純地依靠課堂講授,死記硬背語法,對于提高編程能力幫助并不明顯,而讓學(xué)生在實戰(zhàn)項目中練習(xí),實現(xiàn)相關(guān)功能,調(diào)試代碼BUG,是提高編程能力的捷徑[9]。實戰(zhàn)項目一般會涉及編程的方方面面,從邏輯建模到函數(shù)編寫,從類定義到變量初始化等。如果能夠?qū)⒁粋€實戰(zhàn)項目用代碼完整實現(xiàn),那么對于編程能力的提高是有巨大幫助的。在這期間,學(xué)生不僅能夠鞏固語法基本使用方法,而且能夠靈活使用,甚至于巧用編寫出更為簡潔精煉的代碼。這不僅能夠磨礪調(diào)試技巧與方法,而且能夠培養(yǎng)編程調(diào)試的耐心和信心。
教師在課堂上應(yīng)該有目的將學(xué)生盡量從枯燥的編程語法死記硬背當(dāng)中解放出來,以項目驅(qū)動方式帶領(lǐng)大家在實戰(zhàn)中應(yīng)用編程語法,例如可以采用案例教學(xué)法[10]、任務(wù)導(dǎo)向法[11]等。所謂熟能生巧,用得多了自然就記住了,編程也會越來越順手。實踐得多了,再難學(xué)習(xí)的語言也能夠從容應(yīng)對。
四、結(jié)語
在科技發(fā)展日新月異的時代背景下,我們已經(jīng)進入了終身學(xué)習(xí)時代。如果要及時跟上某一技術(shù)領(lǐng)域的發(fā)展而不被時代淘汰,就很有必要學(xué)習(xí)、掌握該領(lǐng)域的最新最熱門的編程語言。高校編程語言教育相比時代發(fā)展,雖然有一定的滯后性,但是如果能夠采用上述三項對策并不斷總結(jié)經(jīng)驗,積極采用新的教學(xué)方法,相信對學(xué)生的編程學(xué)習(xí)將會有切實的幫助,能夠真正提高學(xué)生的動手實踐能力,讓學(xué)生在快速變化的時代中始終能夠游刃有余地應(yīng)對編程需求,更好地適應(yīng)未來社會對人才的要求。
[ 參 考 文 獻 ]
[1] 張偉,王方,胡正發(fā),等.面向新工科創(chuàng)新人才實踐教育模式探索:以電子科學(xué)與技術(shù)專業(yè)為例[J].大學(xué)教育,2019(3):140-142.
[2] 葉華.基于能力培養(yǎng)的“C語言程序設(shè)計”課程教學(xué)改革探索[J].新課程研究(中旬刊),2012(1):107-108.
[3] 毛莉,朱麗娜,杜威.C語言程序設(shè)計課程改革分析與探索[J].大學(xué)教育,2013(22):81-82.
[4] 段湘煜.高校計算機編程課程教學(xué)改革探討[J].學(xué)園,2017(18):47.
[5] 謝美萍,陳媛.計算機編程課程教學(xué)改革探討[J].大學(xué)教育,2016(4):110-111.
[6] 孫杰,秦建勇,樊春年,等.面向工科專業(yè)的C語言程序設(shè)計課程教學(xué)改革探索[J].計算機教育,2016(11):73-75.
[7] 尹波,孟愛國,朱前飛,等.面向編程思維能力培養(yǎng)的C語言教學(xué)改革研究[J].計算機時代,2016(11):67-69+72.
[8] 陶虹平,張小青.促進計算思維落地:計算機編程上機實踐教學(xué)改革[J].教育教學(xué)論壇,2018(48):78-79.
[9] 姚秀娟,薛坐遠.項目教學(xué)法在高?!犊删幊炭刂萍夹g(shù)》課程教學(xué)中的應(yīng)用研究[J].高教學(xué)刊,2019(3):97-99.
[10] 吳海珍,蔣加伏.面向編程能力培養(yǎng)的VB語言教學(xué)改革[J].湖南師范大學(xué)教育科學(xué)學(xué)報,2005(6):120-122.
[11] 秦攀科,葛炳輝,劉濤,等.任務(wù)導(dǎo)向與翻轉(zhuǎn)課堂在網(wǎng)絡(luò)編程教學(xué)中的應(yīng)用[J].計算機教育,2019(4):4-7.
[責(zé)任編輯:陳 明]