“高端”的編程語(yǔ)言是否真的是高端?
某些Ruby、Python和Javascript的新手程序員常常抱怨這些語(yǔ)言太低端,感覺(jué)他們沒(méi)有學(xué)習(xí)到那些真正“高端”的編程語(yǔ)言。本文將詳細(xì)討論“高端”的編程語(yǔ)言是否真的高端?
我看到了許多剛接觸Ruby、Python和Javascript的新手程序員抱怨這些語(yǔ)言太低端,就好像是在以某種方式欺騙系統(tǒng)一樣。他們認(rèn)為他們沒(méi)有學(xué)習(xí)到那些真正“高端”的編程語(yǔ)言。某些語(yǔ)言是否真比另外一些語(yǔ)言更高端?我們一起來(lái)研究一下。
從電頻層面上看
眾多的編程語(yǔ)言在方方面面都有所不同。但從低級(jí)的機(jī)器語(yǔ)言到我們大多數(shù)人使用的高級(jí)語(yǔ)言,都離不開(kāi)電頻這項(xiàng)技術(shù)。低使用性的機(jī)器語(yǔ)言并沒(méi)有表現(xiàn)得比那些高級(jí)代碼更高端或者先進(jìn)。低使用性是眾多語(yǔ)言設(shè)計(jì)者在完成特定設(shè)計(jì)目標(biāo)的長(zhǎng)期選擇結(jié)果。
讓我們繼續(xù)深入,這里有一個(gè)用機(jī)器語(yǔ)言編程的例子:
這段代碼一旦被數(shù)字處理器解析為電子信號(hào)后就能直接操作數(shù)字傳感器和電動(dòng)機(jī)了。在#之后的那些人可讀懂的東西會(huì)被電腦忽略——它們之所以被程序員放在這里是為了讓其他人讀到這段代碼后能知道其究竟在干什么。感謝上帝,我們不用必須像這樣來(lái)編寫(xiě)代碼。
程序要控制電腦的話***都會(huì)轉(zhuǎn)變成機(jī)器語(yǔ)言的。但是我們創(chuàng)造了編程語(yǔ)言用來(lái)取代那些直接用二進(jìn)制、十六進(jìn)制或者十進(jìn)制代碼來(lái)編寫(xiě)的機(jī)器語(yǔ)言(如早期的計(jì)算 機(jī)科學(xué)家像阿蘭·圖靈和他朋友所做的那樣),它幫助我們以更快更容易的方式將自己的想法轉(zhuǎn)化成機(jī)器指令。有許許多多種方式都可以生成你在上面所看到的那段 機(jī)器語(yǔ)言,因此就會(huì)有許許多多種編程語(yǔ)言,但是它們?nèi)慷紩?huì)在某處轉(zhuǎn)化為電頻頻譜。
從這個(gè)角度來(lái)看,語(yǔ)言的選擇其實(shí)就是對(duì)讓電腦幫助你生成機(jī)器語(yǔ)言的方式的選擇。那么,高端和不高端,區(qū)分的依據(jù)何在?
從設(shè)計(jì)角度上看
今天所有的程序語(yǔ)言都是人們?yōu)榱送瓿赡撤N用途而設(shè)計(jì)出來(lái)的。這種理解是至關(guān)重要的,因?yàn)樗鼈兊脑O(shè)計(jì)目標(biāo)決定了當(dāng)程序通過(guò)它們運(yùn)行時(shí)用戶將得到的體驗(yàn)。
讓我們通過(guò)設(shè)計(jì)目標(biāo)來(lái)對(duì)比兩種編程語(yǔ)言C和Ruby。
-
C的目標(biāo):接近于機(jī)器語(yǔ)言,但能夠移植在許多機(jī)器架構(gòu)上。
-
Ruby的目標(biāo):美麗、簡(jiǎn)單以及令開(kāi)發(fā)充滿快樂(lè)。
雖然最終都會(huì)生成機(jī)器語(yǔ)言,但不同的設(shè)計(jì)目標(biāo)使這些語(yǔ)言的使用體驗(yàn)徹底不同。由于C語(yǔ)言結(jié)構(gòu)更接近于機(jī)器的實(shí)際工作,因此它的機(jī)器代碼在計(jì)算機(jī)執(zhí)行時(shí)會(huì)更 加高效、快速。這里有一個(gè)記錄了各種可視化程序語(yǔ)言在處理某個(gè)簡(jiǎn)單文本的速度的圖表,隨著文本尺寸大小的變化,程序語(yǔ)言在處理速度上發(fā)生了變化:(縱軸為 處理花費(fèi)的時(shí)間,橫軸為文本的大?。?/p>
由于執(zhí)行時(shí)間很容易衡量(人們喜歡優(yōu)化他們能夠衡量的東西),象C一樣“快速”的語(yǔ)言在人們精神層面上就會(huì)認(rèn)為是高端的編程語(yǔ)言。
這其實(shí)是虛假的,這與不精確的速度測(cè)量密切相關(guān)。
速度的測(cè)量
C和那些底層語(yǔ)言在計(jì)算機(jī)硬件遲緩以及系統(tǒng)資源受限的時(shí)代是不可或缺的。毀滅戰(zhàn)士、雷神之錘以及其它的***代3D游戲的出現(xiàn)才突破了只能使用注重機(jī)器運(yùn)行速度的語(yǔ)言的限制。
然而在今天,相對(duì)于我們?cè)谟?jì)算機(jī)上需要的大部分東西,計(jì)算能力是廉價(jià)和充足的。在軟件開(kāi)發(fā)中真正受限的是開(kāi)發(fā)人員的時(shí)間和精力。象Ruby那樣的語(yǔ)言可以 讓程序員用更少的代碼做更多的事情,使開(kāi)發(fā)更加快速。增加開(kāi)發(fā)速度意味著可以更快的找出你所做的是否是真正的需求,可以更加簡(jiǎn)單的添加用戶要求的功能以及 可以使用更少的開(kāi)發(fā)人員更輕松的完成項(xiàng)目。
下圖是多種常見(jiàn)語(yǔ)言的代碼復(fù)雜度排列:(黑色短橫線為平均復(fù)雜度,紅色字為最熱門的一些語(yǔ)言,黑色字為較冷門的一些語(yǔ)言)
這張圖可以讓我們清楚知道哪些語(yǔ)言學(xué)起來(lái)更簡(jiǎn)單,幫助初學(xué)者找到易于開(kāi)始的位置,另外這也可以解釋為什么有些人認(rèn)為某些語(yǔ)言很低端。到這里,你認(rèn)為哪種方法更“高端”呢?
多元化
這是一個(gè)錯(cuò)誤的***,因?yàn)閱?wèn)題的答案取決于你的需要??茖W(xué)家、統(tǒng)計(jì)學(xué)家和數(shù)據(jù)分析師仍然需要一門象C語(yǔ)言那樣注重機(jī)器運(yùn)行速度的語(yǔ)言來(lái)幫助處理他們的工 作。大多數(shù)網(wǎng)絡(luò)開(kāi)發(fā)者需要象Ruby或者Python那樣注重開(kāi)發(fā)速度的語(yǔ)言來(lái)快速滿足他們的業(yè)務(wù)和客戶目標(biāo)。在每個(gè)情景中,“***”的語(yǔ)言都是不同的。
需求的多樣性支撐了一個(gè)在不同設(shè)計(jì)目標(biāo)下,程序語(yǔ)言多元化的重要性的強(qiáng)力論證。程序設(shè)計(jì)中永遠(yuǎn)不會(huì)有一門人人都采用的世界語(yǔ),甚至是機(jī)器語(yǔ)言也非潛在的通用語(yǔ)言,因?yàn)槊颗_(tái)電腦的架構(gòu)都采用了略有不同的機(jī)器語(yǔ)言。對(duì)于對(duì)軟件有不同需求的我們來(lái)說(shuō),這是一件好事。
獨(dú)立的認(rèn)識(shí)
在新手程序員閱讀到這篇文章的時(shí)候:我希望它可以幫助你對(duì)所學(xué)習(xí)和所書(shū)寫(xiě)的語(yǔ)言代碼有自己獨(dú)立的認(rèn)識(shí)。對(duì)于C語(yǔ)言,你需要知道它更貼近于機(jī)器語(yǔ)言而不需要了解它是看起來(lái)更“高端”的語(yǔ)言。我們創(chuàng)造編程語(yǔ)言的目的是為了減輕自己的負(fù)擔(dān),能夠更加快速方便的創(chuàng)造想要的東西。
如果你要選擇學(xué)習(xí)C語(yǔ)言,你選擇的目的應(yīng)該是它擅長(zhǎng)對(duì)Arduino和嵌入式單片機(jī)編程或者是它能夠快速編譯機(jī)器算法,而不是你認(rèn)為它比你已經(jīng)學(xué)過(guò)的語(yǔ)言更加“高端”。 讓你想從事的項(xiàng)目來(lái)決定你要選擇學(xué)習(xí)的語(yǔ)言。因?yàn)楫吘顾鼈兌贾皇菣C(jī)器語(yǔ)言中的其中一種方言。
合適的選擇
我所認(rèn)識(shí)的***端的那些程序員從從事編程工作開(kāi)始就愛(ài)做一些很淺顯的事(他們中的很多人如今仍然保持這種習(xí)慣)。他們會(huì)自己做一些很簡(jiǎn)單的游戲,或者做一些搜索和可視化的實(shí)驗(yàn)。他們所做的每件事情都來(lái)自于他們對(duì)此的興趣,編碼對(duì)他們來(lái)說(shuō)就像是在玩耍一般,這非常的有趣。
不斷重復(fù)對(duì)相關(guān)問(wèn)題的反饋是掌握任何技能的關(guān)鍵。無(wú)論你選擇的語(yǔ)言或項(xiàng)目是什么,請(qǐng)確?;ㄙM(fèi)大量時(shí)間來(lái)學(xué)習(xí)它并聽(tīng)從指導(dǎo)者的建議反饋。代碼語(yǔ)言產(chǎn)生的真正 目的是為了幫助別人建立或者完善那些很棒的東西。無(wú)論什么語(yǔ)言,你的選擇應(yīng)永遠(yuǎn)是能夠?yàn)槟闾峁┳羁旖?、最有效幫助的那一種。