肖祥省
(海南廣播電視大學 信息辦,海南 海口 570208)
?
編程語言選擇與C/C++程序設計分層次教學探索
肖祥省
(海南廣播電視大學 信息辦,海南 海口 570208)
編程語言教學一直是在校生程序設計課程薄弱環(huán)節(jié),大學生在校期間至少要掌握一門編程語言,C/C++作為本科生必修課程,其教學效果直接影響學習者的編程愿望、后續(xù)語言學習速度與質(zhì)量。就如何根據(jù)學生所學專業(yè)、數(shù)學基礎(chǔ)及個人興趣等選學編程語言和探索C/C++語言程序設計的分層次教學方式,為學生學好編程語言和提高其使用興趣創(chuàng)造有利條件。
編程語言;派生語言;分層次教學;開發(fā)平臺
隨著計算機硬件飛速發(fā)展和性價比提高,促使計算機應用領(lǐng)域越來越廣,所需編寫的程序種類和數(shù)量也越來越多,為了適應開發(fā)各種不同形式與領(lǐng)域的應用程序,人們創(chuàng)造了多種編程語言。即每種語言都有其各自適用范圍,而課堂教學受教學時間限制不可能對所有編程語言面面俱到。另外,學過的編程語言越多,對從事軟件開發(fā)的人來說有一定幫助,但不能說其編程水平就越高。以下所述語言均指計算機編程語言。
編程是程序員必備技能,與所用編程語言和應用對象密切相關(guān)。在加入程序員這個行列或?qū)W習編程語言前,需要對編程語言有一個大致了解,這對剛?cè)胄械膶W生和從事編程語言教學的教師來說都很重要,因為學會并能熟練使用一門編程語言要花費大量時間和精力。要學會一門編程語言不難,難在能熟練使用和運用它去處理實際問題。根據(jù)筆者體會、長期觀察和統(tǒng)計分析發(fā)現(xiàn),學會首門編程語言所花費時間一般要大于掌握一門語言后再學其他3門高級語言所需要的總時間,即掌握首門語言可以成為學習其他語言的基礎(chǔ)。掌握首門語言并能熟練使用一般要經(jīng)歷一年以上時間,學了不用或不能派上用場就會至少造成一年的時間浪費。人一生能有多少年,程序員職業(yè)生涯又有多少年?但有些教育單位未考慮這些,先后為學生設置C、VB、JAVA、C++等幾門編程課。由于首門語言編程需要一年的時間去磨練,所以說一旦選錯對象就有可能永遠落后于人,以后對學編程產(chǎn)生無用的感慨,部分人未能學好而永遠與編程無緣。另外,很多人學而不精,掌握了多種編程語言仍不能動手編程或不能派上用場,有些人最后被迫放棄對編程語言的學習和提高,這對學習者來說既是損失,也是遺憾。當然,沒有建立編程理念,是不可能把許多重復的人工計算或比較過程讓程序去處理,也就不可能把人從繁重的體力勞動中解放出來。
編程語言的選擇涉及到編程語言學習和應用編程兩個方面選擇,而不是單指某一方面,在此偏重于前者,旨在為初學者和教學者提供方向和實施方法依據(jù)。對編程語言的分類方法有多種,故會產(chǎn)生不同的分類結(jié)果:
(一)按編程語言等級
用于計算機編程語言總的來說可以分成機器語言、匯編語言和高級語言三大類。通用編程語言是指后兩類,且先有匯編語言,后有高級語言。 高級語言是絕大多數(shù)編程者的首選語言。和匯編語言相比,它不但將許多機器指令合成為單條指令,并且去掉了許多無關(guān)的細節(jié),如堆棧、寄存器使用等,這樣就大大簡化了程序中的指令。同時,由于省略了很多細節(jié),編程者也就不需要有太多硬件知識。高級語言是相對于匯編語言而言,它并不是特指某一種具體語言,而是指許多種語言,如C、C++、Java[1]等。
(二)按程序執(zhí)行方式
高級語言所編制的程序是不能直接被計算機識別和執(zhí)行的,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行,根據(jù)轉(zhuǎn)換方式可將它們分為:解釋式和編譯式兩種。腳本語言是一種解釋式語言,是以文本方式存放的語言,如Vbscript、Javascript、Perl、Python等。C、 C++、Delphi等屬于編譯式語言。
Java和C#很特殊,其程序也需要編譯,但沒有直接編譯成機器碼,而是編譯成偽碼或中間碼,然后用解釋方式執(zhí)行字節(jié)碼,即是以上兩者結(jié)合體。
結(jié)構(gòu)化查詢語言(Structured Query Language—SQL)是為關(guān)系數(shù)據(jù)庫管理系統(tǒng)開發(fā)的一種查詢語言,可以將其歸類到腳本語言之列。
(三)按應用程序?qū)崿F(xiàn)方式
有面向過程和面向?qū)ο笳Z言之分。C、Pascal等語言是面向過程的編程語言,C的開發(fā)通常會定義大量函數(shù)和結(jié)構(gòu)體。面向?qū)ο蠓椒?Object-Oriented Method)是一種把面向?qū)ο蟮乃枷霊糜谲浖_發(fā)過程中,指導開發(fā)活動的系統(tǒng)方法,簡稱OOP (Object-Oriented Program)方法。Java、C++屬面向?qū)ο蟮木幊陶Z言,也能編寫面向過程的程序。總的說來,面向過程編程以業(yè)務的處理流程來思考,重在每個步驟功能的實現(xiàn);面向?qū)ο缶幊桃詫ο蟮膶傩院托袨閬硭伎?,重在抽象和對象間的協(xié)作問題,但每個行為的實現(xiàn)流程又用到了面向過程的處理思路,即面向?qū)ο蟀嗣嫦蜻^程;反之,則不成立。
按照使用方式分為過程式語言和非過程式語言;按照應用范圍分為通用和專用語言;按照組成性質(zhì)分為順序語言、并發(fā)語言和分布式語言。
TIOBE每月對編程語言進行排行,2014年7月編程語言用戶占有率排行榜[3]詳見表1。前三甲是C、Java、Objective-C;后兩名的占比與第一名差別分別是1.457%、6.851%,即用戶數(shù)差別較明顯;用戶數(shù)超過4%的共有6種編程語言,后3者依次是C++、(Visual)Basic、C#。Basic由去年的第7名躍升到第5名,其原因可能與Excel編程有關(guān);而PHP由去年的第5名降為第7名。Javascript和Transact-SQL與去年相比均有小幅度上升,但都在第8名Python之后。從排行榜中,我們還可以看到另一有趣現(xiàn)象:前6名有5種是C和其派生語言。今年9月前5名排名不變,但C#取代Basic的位置,即前6名全部是C和其派生語言,這足以說明C的強勢。
從前面排行榜可知,能用于計算機編程的語言較多,而能用于軟件開發(fā)的平臺就更多。因為,一種編程語言可能有多個編譯環(huán)境、即開發(fā)平臺。例如C或C++語言的編譯環(huán)境有Microsoft Visual Studio,Borland C++,Embarcadero CodeGear RAD Studio 2010, Borland C++ Builder,Turbo C,Watcom C++ ,GNU DJGPP C++,Lccwin32 C Compiler,Microsoft C,Eclipse,GCC等,同一個平臺又有多個版本供用戶選擇。這些編譯環(huán)境既與操作系統(tǒng)和編程語言相關(guān),又對編程效率和后期維護成本影響較大。在前面列出的編程環(huán)境中,有些是專為C語言編譯服務的,而有些可同時支持多種語言的編譯,前者如Turbo C,后者如Microsoft Visual Studio、Embarcadero CodeGear RAD Studio 2010。
目前,流行的計算機軟件開發(fā)平臺有:Microsoft Visual Studio、GCC、Eclipse;現(xiàn)有的手機開發(fā)平臺有:Mac OS(蘋果的)、Linux(很基礎(chǔ),安卓就是基于他派生的)、BlackBerry(黑莓)、Windows Mobile(微軟)、Android(安卓)。
為了學好編程,除了知道其排行情況外,還有必要對各語言的學習難易度程度和適用領(lǐng)域進行了解,從而根據(jù)自己的愛好和特長確定學習目標。
編程語言學習難易度:高級語言比匯編語言簡單、易學;結(jié)構(gòu)化語言比面向?qū)ο笳Z言簡單、易學;腳本或解釋式語言比編譯式語言簡單、易學;面向?qū)ο笳Z言中:C++ 和 Visual C++比其他同類語言要復雜些,其余的語言難易度差異不大。
目前流行且用戶數(shù)最多的前四種語言學習難度從易到難依次是Java、C 、Objective-C 、C++,其他三種都是從C派生出來的,選學C是不錯的選擇,有句話形容C語言是計算機中的英語。很多人是先學C再學其他語言,但是為了就業(yè)可以先學Java,因為C的語法和書寫格式與其相似,學會它再學C就容易多了??傊?,會一門語言后,再學其他同宗的派生語言就不難了。另外,學SQL與其他高級語言的選擇并不沖突,在數(shù)據(jù)庫類的應用系統(tǒng)他們是緊密結(jié)合的,但不能作為一門獨立的編程語言去學習。
對多數(shù)人來說,掌握一門編程語言并能熟練使用已屬不易,要同時掌握多種編程語言和開發(fā)平臺就更難。但軟件開發(fā)往往是多種語言和多方面知識的結(jié)合,編程語言和開發(fā)平臺又無時無刻不在變化。故學習新的編程語言之前,必須慎重考慮,否則語言掌握了也不一定能派上用場。因為有些編程語言在慢慢地退出舞臺,又有新的編程語言漸漸流行。前者如Fortran、Foxpro、Basic、Pascal,后者如Java、C#。即在開發(fā)一個大型應用系統(tǒng)或?qū)W習一種新的編程語言前必須考慮所選語言發(fā)展趨勢和歷史背景,否則所開發(fā)項目有可能提前退役;另外,任何一種語言有其特別適用場所,也有其不能勝任方面,故語言更新在所難免。前提是必須掌握和靈活運用一門編程語言后才能快速自學,否則事倍功半、都是半桶水,任何編程都無法勝任。與其這樣漫無目的學多門語言,還不如選擇一門實用的語言學好、學精,學以致用才能提高其編程水平和自學其他語言能力。
自計算機誕生以來,其操作系統(tǒng)、編程語言和開發(fā)平臺經(jīng)歷了無數(shù)次變革,對長期從事軟件開發(fā)、又使用過多種編程語言的人來說,深刻體會了每次操作系統(tǒng)、編程語言或開發(fā)平臺變遷所帶來的痛苦。雖然各種語言都能用于編程,但開發(fā)效率、維護成本、延續(xù)時間和系統(tǒng)性能差異較大,其開發(fā)成果不同語言之間難以共享,主要原因是各種語言的語法、關(guān)鍵字和書寫格式等互不兼容。雖然有部分語言可以編譯成庫文件供共享使用,但基本上是同一類語言或基于用同一公司的開發(fā)平臺編譯。在筆者所用過的多種語言中,個人感覺只有C及其部分派生語言的源代碼能夠供多個系統(tǒng)和多個開發(fā)平臺借用(注意:不是共享),而Basic、Foxpro和Power Builder等成果則只能用于當前項目和操作系統(tǒng),用它們所編的程序和源代碼即將成為垃圾,筆者建議盡早取消開設此類語言教學課程。希望跨系統(tǒng)的編程或所開發(fā)的產(chǎn)品能運行在多個操作系統(tǒng),就更應該選擇C/C++或Java語言。有些人說C已走進墳墓,但筆者認為C是最有生命力的編程語言:從前面分析的用戶占有率和42年的發(fā)展歷史亦說明了這點,還有各個操作系統(tǒng)均有其編譯環(huán)境,并且操作系統(tǒng)和驅(qū)動程序的開發(fā)都離不開C,以前的代碼稍加修改即可用在其他平臺或其派生語言中,又是C++、Objective-C 、C#和Java的祖先。但其也有明顯不足:只能面向過程、無法勝任圖形界面和面向?qū)ο蟮某绦蜷_發(fā)。
經(jīng)過以上對比,相信大家對編程語言有了一定認識,具體選用則應考慮自身所學專業(yè)、特長和興趣志向等因素:想從事企業(yè)應用開發(fā)工作,可以選擇Java、C#或PHP;想從事電子、通訊領(lǐng)域開發(fā)工作,可以選擇C++、Objective-C或C;想從事加密、解密、操作系統(tǒng)底層開發(fā),應該選擇C或C++。
編程語言在領(lǐng)域運用沒有絕對界限;各種語言都有其適用范圍,沒有一種語言能包打天下;一個軟件系統(tǒng)中,可能是多個編程語言的結(jié)合;一個軟件工程師,往往需要掌握一門以上編程語言和幾種開發(fā)環(huán)境,但沒必要把所有語言和流行開發(fā)平臺都學會,也不能時刻跟著市場走,專學熱門語言[4]和開發(fā)平臺。從效益最大化方面考慮宜選用C及其派生語言,開發(fā)平臺宜選擇Eclipse。語言只是工具,開發(fā)平臺是環(huán)境,能靈活應用才是目的。
可供選擇的編程語言多,但C/C++已確定為在校大學生必修課程,為了不影響學生今后發(fā)展和對編程產(chǎn)生恐懼,應以引進門和培養(yǎng)編程思路、興趣為主,有必要根據(jù)學生層次、所學專業(yè)、興趣、將來的工作對象、數(shù)理邏輯能力差異分層次教學,沒必要讓所有的人完整地掌握C++語言的各個方面,即使是資深程序員也很難掌握和熟練使用其全部功能。為此把C++分為五個教學層次:一是完整的C++;二是去掉模板和指針的C++;三是完整的C;四是去掉指針的C;五是最簡化的C,即去掉指針和自定義數(shù)據(jù)類型的C。各層次學習難度從前到后逐漸降低,具體選擇方法詳見表2。
表2:分層次教學內(nèi)容與專業(yè)、基礎(chǔ)、興趣之間關(guān)系
表2是對C/C++學習層次和學習者進行了分類,前三個層次僅適用于在校本科生。另外,在學編程之前,應先學計算機文化基礎(chǔ)[2]。這樣設計教學層次的理由有:1.Java和C#是C++語言去掉指針和模板的語言,并沒有影響他們被廣泛應用;去掉了指針的C語言其學習難度系數(shù)等同于PASCAL,也不會影響其使用C語言編寫普通應用程序,雖然C文件操作用到了指針,僅在定義時用到,其后使用無實際的指針運算和類型轉(zhuǎn)換;對于不從事軟件加密、解密和與機器硬件打交道的人來說,沒必要學指針這個深奧、難懂的內(nèi)容;省略指針、結(jié)構(gòu)體和枚舉等自定義數(shù)據(jù)類型,C的學習難度即與簡單易學的Basic和Foxpro等同,其差異僅是運行模式的不同;需要與硬件打交道或軟件加密、解密、自動控制的人是少數(shù),有一定語言基礎(chǔ)和興趣后再補學指針部分或C++也就容易多了。據(jù)觀察或分析他人的源代碼:發(fā)現(xiàn)有些用C語言開發(fā)的人僅掌握第五層,仍能寫出一定規(guī)模的應用系統(tǒng),這進一步驗證了分層教學的意義。
進行數(shù)據(jù)庫應用系統(tǒng)開發(fā),需要學C++、C#或Java,有了前三個層次之一的基礎(chǔ),再學他們就輕而易舉了。無論首門編程語言選哪種,課時設置均應分為三個部分:理論教學、上機操作和綜合實訓。首門編程語言教學總課時應不少于80。理論教學與上機操作宜同步進行;綜合實訓是為了提高其語言應用和編程能力而設計的,可以是具體的項目開發(fā),也可以是開源系統(tǒng)的源代碼或?qū)崿F(xiàn)流程的分析,以及這兩者的結(jié)合。當然不同的人會有不同見解,故本結(jié)果僅作為學生或教學單位選擇首門編程語言的參考,至于你的決策,自然會仁者見仁,智者見智。
開發(fā)平臺教學首選Eclipse ,其次是微軟的Visual Studio,再次是GCC。主要原因Eclipse是開源系統(tǒng),能運行于多個操作系統(tǒng),而后兩者只能用于單一的操作系統(tǒng)。在課堂教學中,應集中精力對語言知識結(jié)構(gòu)進行詳細闡述,但不應把太多時間放在對語句語法的講解上。以應用為主,當遇到實際編程時,需對所要解決的實際問題進行深入剖析,積極引導學生如何把問題轉(zhuǎn)化為解決思路和如何選擇正確的算法或?qū)崿F(xiàn)過程。
限于篇幅和時間,有些地方未能更詳細地加以說明,也難免存在不足,望指正。
[1]陽雪峰,陳文臣.Java Web2.0 :基于Spring、Struts、Hibernate輕量級架構(gòu)開發(fā)[M].北京:機械工業(yè)出版社 ,2009.
[2]肖祥省,楊秋黎等.計算機文化基礎(chǔ)[M].北京:人民郵電出版社,2005.
[3]TIOBE編程語言排行榜[EB/OL].http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
[4]計算機編程語言選擇的困惑[EB/OL].http://express.ruanko.com / ruanko-express_1 / webpage / tech-overnight_1.html
(責任編輯:趙 峰)
Research on the Choice of Programming Language andC/C++ Hierarchical Teaching
XIAO Xiang-sheng
(Information Office,Hainan Radio & TV University,Haikou 570208,China)
Teaching of programming language is always the Achilles’ heel in the program design course at university education.Students need to master at least one programming language during the period of undergraduate study.With C/C++’s compulsory and fundamental role in undergraduates’ programming study,the teaching quality of C/C++ course directly affects students' interest in programming,speed and quality of learning more programming languages subsequently.This paper addresses how to select proper programming language according to student’s major,quantitative foundation and individual’s interest and explores the hierarchical teaching of C/C++ program design to create favorable conditions for students mastering programming language and growing interest in practicing it.
programming language; derivation language; hierarchical teaching; development platform
2014-11-18
肖祥省,男,漢族,湖南邵陽人。碩士。海南廣播電視大學信息辦高級工程師。主要研究方向:網(wǎng)絡信息安全、軟件設計。2015年第1期
TP312;G426
A
1009-9743(2015)01-0138-05
10.13803/j.cnki.issn1009-9743.2015.01.031