“高階”的程式語言是否真的高階?

edithfang發表於2015-03-05
我看到了許多剛接觸Ruby、Python和Javascript的新手程式設計師抱怨這些語言太低端,就好像是在以某種方式欺騙系統一樣。他們認為他們沒有學習到那些真正“高階”的程式語言。某些語言是否真比另外一些語言更高階?我們一起來研究一下。

從電頻層面上看

眾多的程式語言在方方面面都有所不同。

但從低階的機器語言到我們大多數人使用的高階語言,都離不開電頻這項技術。低使用性的機器語言並沒有表現得比那些高階程式碼更高階或者先進。低使用性是眾多語言設計者在完成特定設計目標的長期選擇結果。

讓我們繼續深入,這裡有一個用機器語言程式設計的例子:



這段程式碼一旦被數字處理器解析為電子訊號後就能直接運算元字感測器和電動機了。在#之後的那些人可讀懂的東西會被電腦忽略——它們之所以被程式設計師放在這裡是為了讓其他人讀到這段程式碼後能知道其究竟在幹什麼。感謝上帝,我們不用必須像這樣來編寫程式碼。



程式要控制電腦的話最後都會轉變成機器語言的。但是我們創造了程式語言用來取代那些直接用二進位制、十六進位制或者十進位制程式碼來編寫的機器語言(如早期的電腦科學家像阿蘭·圖靈和他朋友所做的那樣),它幫助我們以更快更容易的方式將自己的想法轉化成機器指令。有許許多多種方式都可以生成你在上面所看到的那段機器語言,因此就會有許許多多種程式語言,但是它們全部都會在某處轉化為電頻頻譜。

從這個角度來看,語言的選擇其實就是對讓電腦幫助你生成機器語言的方式的選擇。那麼,高階和不高階,區分的依據何在?

從設計角度上看

今天所有的程式語言都是人們為了完成某種用途而設計出來的。這種理解是至關重要的,因為它們的設計目標決定了當程式通過它們執行時使用者將得到的體驗。

讓我們通過設計目標來對比兩種程式語言C和Ruby。

  •             C的目標:接近於機器語言,但能夠移植在許多機器架構上。
  •             Ruby的目標:美麗、簡單以及令開發充滿快樂。


雖然最終都會生成機器語言,但不同的設計目標使這些語言的使用體驗徹底不同。由於C語言結構更接近於機器的實際工作,因此它的機器程式碼在計算機執行時會更加高效、快速。這裡有一個記錄了各種視覺化程式語言在處理某個簡單文字的速度的圖表,隨著文字尺寸大小的變化,程式語言在處理速度上發生了變化:(縱軸為處理花費的時間,橫軸為文字的大小)



由於執行時間很容易衡量(人們喜歡優化他們能夠衡量的東西),象C一樣“快速”的語言在人們精神層面上就會認為是高階的程式語言。
這其實是虛假的,這與不精確的速度測量密切相關。

速度的測量

C和那些底層語言在計算機硬體遲緩以及系統資源受限的時代是不可或缺的。毀滅戰士、雷神之錘以及其它的第一代3D遊戲的出現才突破了只能使用注重機器執行速度的語言的限制。

然而在今天,相對於我們在計算機上需要的大部分東西,計算能力是廉價和充足的。在軟體開發中真正受限的是開發人員的時間和精力。象Ruby那樣的語言可以讓程式設計師用更少的程式碼做更多的事情,使開發更加快速。增加開發速度意味著可以更快的找出你所做的是否是真正的需求,可以更加簡單的新增使用者要求的功能以及可以使用更少的開發人員更輕鬆的完成專案。

下圖是多種常見語言的程式碼複雜度排列:(黑色短橫線為平均複雜度,紅色字為最熱門的一些語言,黑色字為較冷門的一些語言)



這張圖可以讓我們清楚知道哪些語言學起來更簡單,幫助初學者找到易於開始的位置,另外這也可以解釋為什麼有些人認為某些語言很低端。到這裡,你認為哪種方法更“高階”呢?

多元化

這是一個錯誤的命題,因為問題的答案取決於你的需要。科學家、統計學家和資料分析師仍然需要一門象C語言那樣注重機器執行速度的語言來幫助處理他們的工作。大多數網路開發者需要象Ruby或者Python那樣注重開發速度的語言來快速滿足他們的業務和客戶目標。在每個情景中,“最好”的語言都是不同的。



需求的多樣性支撐了一個在不同設計目標下,程式語言多元化的重要性的強力論證。程式設計中永遠不會有一門人人都採用的世界語,甚至是機器語言也非潛在的通用語言,因為每臺電腦的架構都採用了略有不同的機器語言。對於對軟體有不同需求的我們來說,這是一件好事。

獨立的認識

在新手程式設計師閱讀到這篇文章的時候:我希望它可以幫助你對所學習和所書寫的語言程式碼有自己獨立的認識。對於C語言,你需要知道它更貼近於機器語言而不需要了解它是看起來更“高階”的語言。我們創造程式語言的目的是為了減輕自己的負擔,能夠更加快速方便的創造想要的東西。

如果你要選擇學習C語言,你選擇的目的應該是它擅長對Arduino和嵌入式微控制器程式設計或者是它能夠快速編譯機器演算法,而不是你認為它比你已經學過的語言更加“高階”。 讓你想從事的專案來決定你要選擇學習的語言。因為畢竟它們都只是機器語言中的其中一種方言。

合適的選擇

我所認識的最高階的那些程式設計師從從事程式設計工作開始就愛做一些很淺顯的事(他們中的很多人如今仍然保持這種習慣)。他們會自己做一些很簡單的遊戲,或者做一些搜尋和視覺化的實驗。他們所做的每件事情都來自於他們對此的興趣,編碼對他們來說就像是在玩耍一般,這非常的有趣。

不斷重複對相關問題的反饋是掌握任何技能的關鍵。無論你選擇的語言或專案是什麼,請確保花費大量時間來學習它並聽從指導者的建議反饋。程式碼語言產生的真正目的是為了幫助別人建立或者完善那些很棒的東西。無論什麼語言,你的選擇應永遠是能夠為你提供最快捷、最有效幫助的那一種。

本文翻譯自The Myth of‘Serious’Code
相關閱讀
評論(1)

相關文章