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