• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當(dāng)自強(qiáng)而不息

            【ZT】我的編程語言觀


            作者:leezy_2000

                        關(guān)于編程語言的爭論雖然此伏彼起,但事實(shí)上很少有人真的在做編程語言的比較,同時(shí)許多無價(jià)值或錯(cuò)誤的觀點(diǎn)卻在真實(shí)的誤導(dǎo)著許多程序員的認(rèn)識(shí),為此我決定寫這篇文章。

            一、前提

            本文后述觀點(diǎn)是基于這樣一種前提:只關(guān)注語言特性,而忽略標(biāo)準(zhǔn)庫和其他各種商業(yè)框架(雖然這些更大程度上決定著人們對語言的選擇)。這必將使這篇文章的觀點(diǎn)更具有理論意義,而非現(xiàn)實(shí)意義。但語言特性是編程語言的根本,無論是做語言比較,還是評論語言,都應(yīng)該以此為出發(fā)點(diǎn),否則將導(dǎo)致討論范圍的無限增大,進(jìn)而導(dǎo)致討論的無結(jié)果。為避免有人找碴,必須預(yù)先聲明的一點(diǎn)是,由標(biāo)準(zhǔn)庫實(shí)現(xiàn)的語言特性將被看作語言特性,進(jìn)而列入考慮的范圍。同時(shí)這里說的編程語言是指一些通用目的的高級編程語言,比如C/C++,Java,Python,Perl等。

            二、80% 與 20%

            我學(xué)習(xí)不同的編程語言時(shí),更多的時(shí)候是感覺到其間的共性。于是我對此進(jìn)行思考,發(fā)現(xiàn)這種共性的存在具有必然性。

            軟件的根本特性是復(fù)雜性,對此Dijkstra告訴我們,“掌握復(fù)雜性的技巧早在古代就有了:divide et impera(分解和規(guī)則)”。當(dāng)我們具體進(jìn)行分解和設(shè)定規(guī)則時(shí),我們要用到一些分析和設(shè)計(jì)方法。當(dāng)代兩大主流分析和設(shè)計(jì)方法是結(jié)構(gòu)化和OO。結(jié)構(gòu)化設(shè)計(jì)方法的三種基本結(jié)構(gòu)是順序,分支和選擇。OO的三大基本特性是封裝,繼承和多態(tài)。各種設(shè)計(jì)語言通常都支持這兩種分析和設(shè)計(jì)方法,其基本語言特性也必然涵蓋上述六個(gè)要素。所以從這個(gè)角度看不同編程語言必然具有相當(dāng)多的共性。

            可為佐證的首先是《The Art of Computer Programming》這本書。這本書中的算法用低級語言描述的,但其內(nèi)涵被大多掌握不同編程語言的開發(fā)人員所分享。有人評論說,當(dāng)今軟件開發(fā)人員所掌握的絕大多數(shù)計(jì)算機(jī)程序設(shè)計(jì)的知識(shí)都來源于此,這意味著相當(dāng)多程序設(shè)計(jì)知識(shí)可以具體實(shí)現(xiàn)在各種編程語言中。

            另一個(gè)是《設(shè)計(jì)模式》,你很難說那個(gè)設(shè)計(jì)模式是專屬于那種語言的,大多的設(shè)計(jì)模式可以用各種編程語言來實(shí)現(xiàn)的。雖然具體的實(shí)現(xiàn)上會(huì)因?yàn)檎Z言特性而做相當(dāng)?shù)恼{(diào)整。應(yīng)該可以說不同的編程語言在某個(gè)確定的設(shè)計(jì)模式面前,體現(xiàn)的也是共性。

            把上面的內(nèi)容總結(jié)一下就是:很多的場合下,不同的語言是可以互換的。互換的基礎(chǔ)是不同種語言間的共性,而存在這些共性的基本原因是不同的編程語言要支持的根本思想中大部分是相同的。

            故老相傳,學(xué)到高處,語言間切換是很容易的,很多人的經(jīng)歷也驗(yàn)證了這句話。上面說的正是這句話的所以由來。

            這里沒有把各種語言等同起來的意思,但編程語言的個(gè)性同共性相比反倒是較小的部分。它們往往成為關(guān)注的焦點(diǎn),同時(shí)也是存在這么多編程語言的一個(gè)主要原因。

            大多數(shù)人對此的體驗(yàn)大概來自基本語法,事實(shí)上這是讓人非常懊惱的一個(gè)方面。基本語法的不同起源于什么無從考證,但根本事實(shí)是這種不同在浪費(fèi)學(xué)習(xí)者的時(shí)間。我們來做個(gè)類比大家就知道這種浪費(fèi)有多么不值得,UML出現(xiàn)前,OO表示法主流上有三種,他們表達(dá)意思差不太多,但他們不一樣。學(xué)習(xí)的人,工作的人要為同一件事花近三倍的力氣(要不然別人用另外的表示法寫的文檔你怎么看的懂),現(xiàn)在這些人得到了解放。但在編程語言領(lǐng)域這種糟糕的事仍然在繼續(xù),差不多每個(gè)人都要記住好多種if語句,雖然事實(shí)上它們可以統(tǒng)一。

            拋卻基本語法不談,其它的方面是真的不多。即使把C++和Python這兩種差別非常巨大的語言放在一起進(jìn)行類比。一時(shí)間能想起的主要差別也只有:①Python內(nèi)置了list及tuple等一些數(shù)據(jù)結(jié)構(gòu)作為內(nèi)置類型(當(dāng)然還有與此相關(guān)的操作)。而C++中要用基本類型對此進(jìn)行定義。②Python支持函數(shù)生成器和函數(shù)嵌套定義。而C++不支持。③Python是動(dòng)態(tài)類型語言,先天具有范型能力。而C++要通過模板的概念支持范型。這不是一個(gè)完整的列表,如果愿意,這個(gè)列表確實(shí)可以變長,但另外一張反映共性的標(biāo)通常會(huì)更長。

            (注:我沒有參考相應(yīng)的書籍把兩者的語言特性一一羅列,并徹底的比較其異同,僅是把平常使用時(shí)經(jīng)常用到的語言特性想了一下,寫了上面的東西。如果那位使用過兩種以上的語言,我也建議能用這種方式來確定兩種不同語言的常用部分有多大的重疊度。)

            這也正是題目所說的80%和20%的根本含義。不同的語言雖然看起來差別很大,但共性要大于個(gè)性。至于是不是4:1的關(guān)系,老天知道,那位感興趣,可以統(tǒng)計(jì)出一份數(shù)據(jù)來。

            三、結(jié)論

            (事先聲明,這里是從學(xué)習(xí)的角度來下這個(gè)結(jié)論,而非混飯的角度)

            好多年前就有這句話:編程語言并不重要,設(shè)計(jì)思想才重要。這幾年在托鼠標(biāo)即是編程的大潮中,這句話逐漸被遺忘了。

            在這篇文章的結(jié)尾,我想對這句話進(jìn)行一些詮釋。編程語言不是不重要,光有想法,基本語法都搞不清楚的人肯定什么都做不出來。但而后呢?不停的學(xué)習(xí)新的語言,接觸新的語法么?從上面的分析看,如果你這樣做,那意味著你在做重復(fù)勞動(dòng),并且沒有實(shí)際的進(jìn)步。真的程序員不該如此墮落,總要學(xué)些思想性的東西吧。總不能去研究怎么才能把一個(gè)鈕拖到另一個(gè)地方的路徑縮到最短吧?

            學(xué)習(xí)編程語言,熟悉基本語法后,一定要關(guān)注某些語言特性背后所承載的東西。但

            單知道這兩樣仍然是不夠的,還要知道什么時(shí)候這些被承載的東西適合使用。這是遠(yuǎn)比前兩者更難的東西。

            為避免結(jié)論過于抽象,舉個(gè)例子來描述這三重境界:比如說學(xué)習(xí)模板的時(shí)候,第一步是要把基本語法搞清楚,要能夠確保寫出來的模板類、模板函數(shù)沒有語法錯(cuò)誤,能夠通過編譯。第二步要去理解范型這種思想,去思考范型存在的根本目的是什么?第三步是能夠在碰到具體問題時(shí),來正確的取舍是否需要使用這種特性,用的話又怎么去用。

            四、尾聲

            程序員作為一個(gè)籠統(tǒng)的稱呼,其真正的含義正在分化。Bjarne Stroustrup自稱:“是的,我是一個(gè)程序員”。而一個(gè)只會(huì)拖拖鼠標(biāo),完成指定功能的新手,通常我們也稱之為程序員。但事實(shí)上這同一個(gè)稱呼,其內(nèi)在含義是不一樣的。

            可視化編程和RAD的快速發(fā)展所產(chǎn)生的一個(gè)明顯后果就是,所謂的軟件藍(lán)領(lǐng)離我們是如此之近。并且越來越多的人以閃電般的速度切入這個(gè)隊(duì)伍。這又是怎么樣一場絢麗卻虛假的繁華。于是許多妖言應(yīng)勢而生,最為讓人哭笑不得的莫過一句“程序員是吃青春飯的”。這未免太小覷程序員這個(gè)職業(yè)了,這句話成立的前提是做程序員沒什么難度,不需要什么積累,主要是力氣活。誠然如果程序員只是一個(gè)拖鼠標(biāo)的職業(yè),那么年富力強(qiáng)者具有先天的優(yōu)勢。但很不幸大多時(shí)候他不是,或者說不應(yīng)該是。

            在這里我姑且漠視許多公司對軟件藍(lán)領(lǐng)的呼喚,單從個(gè)人發(fā)展的角度提醒一句,實(shí)踐實(shí)用主義的同時(shí),莫要忘了什么是編程的根本,莫要忘了提升自己的境界。


            posted on 2007-09-12 15:02 lovedday 閱讀(489) 評論(0)  編輯 收藏 引用 所屬分類: ▲ Software Program

            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評論

            精品午夜久久福利大片| av色综合久久天堂av色综合在| 久久精品男人影院| 欧美激情精品久久久久久久九九九| 久久无码高潮喷水| 91精品国产高清91久久久久久| 精品国产91久久久久久久a| 亚洲国产成人精品无码久久久久久综合 | 超级碰碰碰碰97久久久久| 久久精品国产AV一区二区三区| 久久久精品人妻一区二区三区四| 久久综合狠狠综合久久激情 | 久久久国产亚洲精品| 久久99国产一区二区三区| 亚洲国产精品无码久久SM| 久久亚洲中文字幕精品一区| 久久99精品久久久久子伦| 欧洲性大片xxxxx久久久| av无码久久久久不卡免费网站| 香蕉99久久国产综合精品宅男自| 久久99毛片免费观看不卡| 伊人久久综合成人网| 亚洲精品综合久久| 久久精品中文字幕有码| 久久久久久久99精品免费观看| 7777久久久国产精品消防器材| 亚洲国产日韩欧美久久| 久久久久亚洲av毛片大| 九九久久精品无码专区| 久久精品国产欧美日韩| 久久国产成人午夜AV影院| 国产99久久久国产精品~~牛| 久久国产亚洲精品无码| 久久精品无码一区二区无码 | 久久91亚洲人成电影网站| 99久久99久久精品国产片果冻| 亚洲а∨天堂久久精品9966| 一级做a爰片久久毛片免费陪| 久久毛片免费看一区二区三区| 国产精品狼人久久久久影院| 国产成人AV综合久久|