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