何樹印
筆者在文中所討論的教學(xué)用編程語言,只針對(duì)高級(jí)語言,其按程序的執(zhí)行方式可以分為兩種:編譯型、解釋型。高級(jí)語言種類繁多,并且每年都有許多新的語言誕生,但很多語言應(yīng)用范圍并不廣,這里僅談?wù)撘韵聨追N比較流行的高級(jí)語言。
基于過程的字符界面下的編程
依稀記得最早的教學(xué)語言應(yīng)該是Basic,它的特點(diǎn)是簡(jiǎn)單。初學(xué)者很容易入門,但是由于它本身的缺點(diǎn),有人認(rèn)為用Basic不利于培養(yǎng)優(yōu)良的編程習(xí)慣。Basic是解釋型編程語言,但是它的后續(xù)高版本VB,被做成了編譯型語言。Pascal是編譯型語言,語法嚴(yán)謹(jǐn),層次分明,程序易寫,可讀性強(qiáng),是第一個(gè)結(jié)構(gòu)化編程語言,它具有豐富的數(shù)據(jù)類型和簡(jiǎn)潔靈活的操作語句。發(fā)展到今天,Pascal計(jì)算機(jī)程序教程有很專業(yè)化的課程,并且越來越完善和嚴(yán)格化,所以有人把它稱為最好的教學(xué)語言。二十年前,大學(xué)學(xué)習(xí)DOS下編程時(shí),入門所用語言就是Pascal。當(dāng)時(shí)的教材不多。筆者畢業(yè)后剛從事信息技術(shù)教育時(shí),中學(xué)課本中沒有編程的內(nèi)容,幾乎都是一些普及性的知識(shí)。自然而然地,筆者在課外輔導(dǎo)學(xué)生們進(jìn)行編程時(shí),選擇了Pascal編程語言。對(duì)于它,學(xué)生接受起來有一定的難度。該語言本身雖然被人稱為教學(xué)語言,但是興趣小組的人數(shù),在一個(gè)幾百人的年級(jí)中只有十幾個(gè)人。比如求1至100的和(如圖1)。
這段短小的程序,筆者要講好幾節(jié)課,學(xué)生要記住的東西很多。首先是關(guān)鍵字,記不住就沒法編寫,然后是每一句的意思。也就是說,學(xué)生想明白循環(huán)語句的用法,需要很長(zhǎng)時(shí)間。如今,由于Delphi漸漸淡出了人們的視線,Pascal更是徹底淪為了純教學(xué)語言。所以,有人認(rèn)為應(yīng)該直接教授C語言。C語言程序設(shè)計(jì)結(jié)構(gòu)化,具有豐富的數(shù)據(jù)類型和靈活的控制結(jié)構(gòu),運(yùn)算符豐富、書寫靈活、適應(yīng)性廣,擁有強(qiáng)大的指針操作、豐富的函數(shù)庫。因?yàn)楣δ芴珡?qiáng)大,所以也有人認(rèn)為它不適合初學(xué)者。筆者曾經(jīng)教過幾個(gè)四五年級(jí)的孩子學(xué)習(xí)C語言編程,用的教材是《啊哈C!》,作者用風(fēng)趣的語言把艱澀難懂的概念闡釋得通俗易懂,孩子們都能夠看懂并學(xué)習(xí)下去。也就是說,C語言并不是不能作為教學(xué)語言,只要教師選取好內(nèi)容,它可以像Pascal一樣作為教學(xué)語言。由于Pascal語法嚴(yán)謹(jǐn),因此一些Pascal的源碼,很容易修改成C的源碼,教師可以比較容易地利用Pascal的教學(xué)資源來教授C語言。Pascal和C都是編譯型語言,執(zhí)行效率比較高。同樣是求1至100的和,用C語言可以這樣寫(如下頁圖2)。
面向?qū)ο蟮木幊?/p>
隨著時(shí)代的發(fā)展,面向?qū)ο蟮木幊坛霈F(xiàn)了,面向?qū)ο蟮恼Z言運(yùn)用愈來愈頻繁,如Java。由于面向?qū)ο蟊旧黼y度有點(diǎn)大,入門時(shí)很少有人直接講授面向?qū)ο蟮母拍睢W(xué)生大都是面向過程的編程入門后再去理解面向?qū)ο蟮母拍睢?/p>
說到Windows下的編程,不能不提一下可視化編程。1991年4月,Visual Basic 1.0forWindows版本發(fā)布,這在當(dāng)時(shí)引起了很大的轟動(dòng),許多專家把VB的出現(xiàn)當(dāng)作是軟件開發(fā)史上的一件具有劃時(shí)代意義的事件。對(duì)于可視化編程來說,VB無疑是最容易入門的。后來出現(xiàn)了delphi、VC++。公認(rèn)的可視化編程,比較容易入門的就是VB了。山東省現(xiàn)行泰山版初中教材中,程序設(shè)計(jì)部分用的是VB。有的教師是從其他專業(yè)轉(zhuǎn)過來教授信息技術(shù)課的,感覺困難很大。同樣是上面的程序,它的實(shí)現(xiàn)如圖3所示。
它看上去比較短小,好像比Pascal和C容易理解。但實(shí)際上,因?yàn)橐獙W(xué)習(xí)窗體控件之類的知識(shí),還有就是消息的傳遞,所以雖然結(jié)果看上去直觀了,但是學(xué)習(xí)起來難度并沒有降低多少,甚至更大了。由于VB隱藏了太多的東西,不利于整體理解程序的概念,所以很多專業(yè)人員漸漸地轉(zhuǎn)到了其他方面。雖然后來微軟把它做成了編譯型語言,也增加了面向?qū)ο蟮墓δ埽F(xiàn)在用它的人也漸漸地少了。
圖形化編程
時(shí)間轉(zhuǎn)眼過去了十多年,程序設(shè)計(jì)語言也在飛速發(fā)展,圖形化編程工具的出現(xiàn)為初學(xué)者帶來了福音。其中的代表當(dāng)屬Scratch。用Scratch來引導(dǎo)小學(xué)生學(xué)習(xí)編程,結(jié)果他們很輕松地對(duì)照教材完成了任務(wù),而且很容易地加入了自己的創(chuàng)意。
例如,在C語言中常見的賦值語句i=i+1初學(xué)者就很難搞明白,但是在Scratch中比較容易理解了。用scratch編程求1至100的和,這樣看上去比那些字符直觀多了(如圖4)。
可能在很多專業(yè)人員眼中,Scratch就是一個(gè)玩具,執(zhí)行效率差,數(shù)據(jù)類型不如專業(yè)語言豐富,處理問題不如專業(yè)語言靈活……然而就是這個(gè)玩具,可以讓孩子們把他們想象中的一些東西變?yōu)楝F(xiàn)實(shí),最大限度地激發(fā)了孩子們的學(xué)習(xí)熱情。并且有很多非計(jì)算機(jī)專業(yè)的創(chuàng)客,用這個(gè)工具實(shí)現(xiàn)了他們的創(chuàng)意。
Scratch作為程序教學(xué)的優(yōu)點(diǎn)有很多,但這并不是說傳統(tǒng)的編程軟件不好,它們的專業(yè)性很強(qiáng),都是非常優(yōu)秀的編程工具。這里只是談?wù)撝行W(xué)生學(xué)習(xí)編程入門的工具。如果學(xué)生想更深入地學(xué)習(xí)計(jì)算機(jī)專業(yè)知識(shí),還是需要去研究C語言甚至匯編語言,即使工作中用不到,這些傳統(tǒng)語言的學(xué)習(xí)也有助于對(duì)計(jì)算機(jī)系統(tǒng)本身的工作原理的深入學(xué)習(xí)。
計(jì)算機(jī)編程語言的不斷發(fā)展,就是為了讓人更容易地使用計(jì)算機(jī)。隨著技術(shù)的發(fā)展,計(jì)算機(jī)的速度越來越快,人們?cè)絹碓街匾暣a的可讀性和重復(fù)使用性。除了一些專業(yè)系統(tǒng),一般而言,對(duì)于執(zhí)行的效率需求退到了次要的位置。從匯編語言到C、Basic、Pascal是一種飛躍。橫空出世的Java語言以其顛覆式的面向?qū)ο蟮奶匦匝杆佾@得了開發(fā)者的關(guān)注,C也搖身一變成為了C++,Pascal沒變名字,但也增加了面向?qū)ο蟮闹С帧B、VC、Delphi等可視化編程又是一種進(jìn)步。后來在細(xì)分的專業(yè)領(lǐng)域,人們又開發(fā)出了如PHP之類的語言。Scratch等圖形化編程軟件的出現(xiàn)也是歷史的必然。每一種新的語言的出現(xiàn)并沒有完全淘汰掉原有的語言,原有語言也在不斷地吸收新的思想,也在進(jìn)步。只能說每一種語言都有它最適用的范圍。Scratch也有很多缺點(diǎn),這使得它在使用時(shí)很受限。最起碼現(xiàn)在無法完全替代傳統(tǒng)的編程語言,它的應(yīng)用領(lǐng)域應(yīng)該是在入門、普及上。相信隨著Scratch的完善,它會(huì)有更美好的未來。