標籤:

怎麼算是掌握一門編程語言

學習過的編程語言也不少,那幾門在市場上主流的編程語言,也能夠拿起鍵盤便寫。回首往昔,自己對那些編程語言又算是了解到幾分呢?是否只摹其形,未解其意呢?

自己了解這門語言的前塵往事么,知道其出現解決了哪些問題,而原來的主流語言因為什麼原因沒有辦法解決這個問題呢?這之後,還有哪些問題依舊沒有得到解決呢?

最重要的是,你是否知道在何時何地選擇這門語言才是最優解。

你是否能夠以你自己的思想去描繪這個編程語言的世界,是否一切你都了如指掌。

編程語言的歷史,就是從機器思維到人類思維轉換的歷史。這是因為人力成本比機器成本要高得多,如果成本反過來的話,想必現在程序員人手一本的是《彙編編程大全》,《機器碼從入門到轉行》.....

編程語言的發展趨勢,我認為主要有以下幾點,對分散式的支持,對多線程的支持,以及對模塊化的支持。這些都是一門編程語言要達到應用廣泛所必不可少的條件。因為這三者都是大型項目所必備的基礎條件。

既然都是圖靈完備的語言,那麼用C語言和Python完成同樣的功能也是可以的,那麼我們什麼時候會選擇C語言,什麼時候會選擇python呢。《黑客與畫家》中提到過,熟練的開發者一定時間內開發的代碼行數是基本不變的,意思就是,一定時間內,你寫100行C語言代碼與Python代碼的時間都是一樣的。但相信你也知道,100行python代碼與C語言代碼所能實現的功能,是有好幾個層級的差別的。為什麼會這樣呢,因為C語言的抽象層級比較低,更接近於機器,而Python的抽象層級比較高,更接近與人的思維。舉個簡單例子,C語言至今仍然保留著為位域,這典型的就是過多的考慮了機器的需求,以當時的機器來看,這確實是合適的選擇,說不定就能省下幾十kb的內存呢。但對現在的實際情況來說,這不是迫切的問題,有這個時間去考慮這個數據存放需要幾個位,說不定早就用python把功能寫完了。「人生苦短,請用python」。

當我們在談論一門語言比較容易時,我們究竟在談論什麼?人們常說的php入門比較簡單,那麼其簡單是簡單在什麼地方呢?就拿在web開發應用方面比較廣泛的php與java做比較吧。php比java簡單在哪些地方呢,(不採用任何開發框架)以開發一個動態網頁舉例,假如採用java開發,你必須先要了解servlet+jsp吧,雖然也可以直接在servlet中生成html,或者在jsp中嵌入java代碼完成對應的功能。而php中也有對應的模板,雖然這模板功能比java的是要簡單一些,但是也確實稱不上優勢很大,還遠不到飛龍騎臉的地步。

我個人覺得,php之所以比java更流行的原因就是上手簡單,滿足大部分普通用戶的需求。php本身是弱類型的,比java的強類型寫起來就要舒服不少,不需要做那麼多的類型轉換,也更符合大家的思維習慣。應該是機器來迎合人,而不是我們去適應機器。同時,php本身內置的輪子多,基本上不需要重複造,不像java需要導入各種各樣的jar包,手動導入jar包也沒有引入php文件直觀。php的部署比java更加簡單方便。基本上只要拷貝文件到對應的目錄就可以了,不像java需要各種重啟,還需要了解tomcat以及jar包war包等各種知識。總而言之,用java也許你半年才能寫出像樣的web應用,但是用php一般不到一個月你就可以寫出能夠正常使用的應用了。不過,java在分散式方面的優勢對php來說是碾壓性的。有人會說,java的效率比php高,在php5的時候確實是,在php7來說,差距已經越來越小了。何況,大部分時候效率瓶頸本身就不在語言上,更多時候是在資料庫IO上,以及架構上,還有代碼本身邏輯是否合理。重要的從來都不是語言,而是使用語言的那個人。

有點走歪了。那麼怎麼樣才算是掌握一門編程語言呢,在我看來應該滿足以下幾個條件。

  1. 熟悉語言的合適場景,知道語言的優劣勢
  2. 掌握常見的類庫或者擴展,知道哪些輪子是常見的,不需要自己造
  3. 會造自己的輪子
  4. 熟悉語言的性能分析以及優化

在現在的我看來,滿足這幾個條件就可以說自己掌握了這門編程語言了。看著條件雖少,但是要滿足還需要很多的基礎知識來做鋪墊。既要用時間去堆疊經驗,也要用大腦去思考躍進。

祝大家每個人都能有一門自己的本命語言~~

推薦閱讀:

如何編寫優質的API文檔?
C語言基礎:函數的聲明與定義
前端開發學習路線分享,學前端要學哪些內容?
如何實現feed流
Rebol/Red,讓編程回歸人性

TAG:編程語言 |