為什么我們不再發(fā)明編程語(yǔ)言了?
上個(gè)世紀(jì),數(shù)百種編程語(yǔ)言被發(fā)明出來(lái),但是進(jìn)入21世紀(jì),當(dāng)我們都進(jìn)入互聯(lián)網(wǎng)時(shí)代時(shí),只剩那么寥寥幾個(gè)了。
如果你翻一下TIOBE得編程語(yǔ)言排行榜,就會(huì)發(fā)現(xiàn)20年來(lái),上躥下跳的就是那幾張老面孔:C , Java, Python ,C++ , C#, JavaScript......

80年代后期,平均每個(gè)月就會(huì)出現(xiàn)一種新語(yǔ)言,現(xiàn)在,平均每年出現(xiàn)一個(gè)就不錯(cuò)了。
我有點(diǎn)好奇,就去扒了扒其他編程語(yǔ)言的出現(xiàn)時(shí)間,把他們分成了分為中生代、新生代和 老年代。
先看中生代的家伙們,20多歲,30出頭,正是編程的中堅(jiān)力量。
- Python : 1991
 - Visual Basic : 1991
 - PHP : 1995
 - Ruby : 1995
 - Java : 1995
 - JavaScript : 1995
 - C# : 2000
 
(1995年還真是神奇的一年啊,幾位大佬同時(shí)誕生。)
再看這些老前輩,尤其是C語(yǔ)言,老而彌堅(jiān),屹立50年不倒,把系統(tǒng)級(jí)編程吃得死死的。
- Lisp : 1958
 - Pascal : 1970
 - C : 1972
 - Objective-C : 1984
 - C++ :1985
 - Object Pascal : 1986
 
新生代則活力無(wú)限, 鋒芒畢露,對(duì)老家伙們虎視眈眈。
- Go : 2009
 - Rust : 2010
 - Kotlin : 2011
 - Elixir : 2011
 - Julia : 2012
 - TypeScript : 2012
 - Swift : 2014
 
新生代只是它們想挑戰(zhàn)中生代的地位,搶班奪權(quán),希望渺茫。
主要有這么幾個(gè)原因:
1. 編程范型沒(méi)有變化
還是老三樣:面向過(guò)程,面向?qū)ο螅?函數(shù)式。
在馮諾依曼架構(gòu)下,恐怕也不會(huì)出現(xiàn)什么新的范型了吧。
現(xiàn)在TIOBE排行前十的中生代語(yǔ)言完美涵蓋了這些范型,例如Java,剛誕生的時(shí)候支持面向?qū)ο?,但是后?lái)補(bǔ)上了函數(shù)式這一課。
像Python、JavaScript一開(kāi)始就支持面向?qū)ο蠛秃瘮?shù)式編程。
2. 開(kāi)發(fā)領(lǐng)域
開(kāi)發(fā)領(lǐng)域有桌面開(kāi)發(fā)、Web開(kāi)發(fā)、系統(tǒng)級(jí)軟件開(kāi)發(fā)、后端開(kāi)發(fā),數(shù)據(jù)分析,人工智能等。
中生代的編程語(yǔ)言不但這些領(lǐng)域看得死死的,還互相擴(kuò)展,侵入對(duì)方的領(lǐng)地。
其中最典型的就是JavaScript這個(gè)屌絲的逆襲,一開(kāi)始不過(guò)是寄居在瀏覽器中的一個(gè)小語(yǔ)言,后來(lái)通過(guò)V8, Node.js竟然進(jìn)入了后端,還用Electron蠶食桌面開(kāi)發(fā)!
Python也是,本來(lái)用它寫點(diǎn)兒小工具,開(kāi)發(fā)點(diǎn)兒小網(wǎng)站,后來(lái)竟然傍上了人工智能這個(gè)大款,從此發(fā)達(dá)了。
3. 生態(tài)系統(tǒng)
Java , Python, JavaScript,C , C#等經(jīng)過(guò)這么些年的發(fā)展,哪個(gè)不是積累了海量的類庫(kù),哪一個(gè)沒(méi)有龐大的生態(tài)系統(tǒng)?想動(dòng)它們,沒(méi)有一場(chǎng)革命是絕對(duì)不行的。
新語(yǔ)言即使很好,但是看看那么多現(xiàn)有的代碼,誰(shuí)敢輕易切換?
4. 時(shí)代的紅利
Java遇到了互聯(lián)網(wǎng),Python遇到了大數(shù)據(jù)和AI, JavaScript遇到了前端開(kāi)發(fā), 時(shí)代的機(jī)遇讓它們爆炸式發(fā)展。
Go的運(yùn)氣不錯(cuò),遇到了云計(jì)算,強(qiáng)勢(shì)崛起。其他幾位想要出頭,那是相當(dāng)難了。
我曾經(jīng)悲觀地認(rèn)為:主流的編程語(yǔ)言已經(jīng)都被發(fā)明出來(lái)了!
以后新出現(xiàn)的語(yǔ)言都是改進(jìn),改良,沒(méi)法鬧革命翻身了。
舉個(gè)不恰當(dāng)?shù)谋扔鳎?C, Java, Python, JavaScript,C# , C++, PHP 就像現(xiàn)在的西方七國(guó)集團(tuán),牢牢占據(jù)著最大的市場(chǎng),然后只要有新人冒出來(lái),就會(huì)受到無(wú)情的打擊。就像現(xiàn)在中國(guó)想技術(shù)突破,被美國(guó)和西方不擇手段地打壓一樣。
圖片
但是也并不絕對(duì),就像中國(guó)一定要向上突破一樣,我看到在系統(tǒng)編程領(lǐng)域,也有一個(gè)新星冉冉升起:Rust。
圖片
Rust雖然沒(méi)有發(fā)明新東西,但是卻融合了多種語(yǔ)言的特性和多種編程泛型,它不但包含了上面說(shuō)的三大編程范式,還集結(jié)了泛型、底層內(nèi)存管理、所有權(quán)等特性,可以說(shuō)是一個(gè)集大成者(這也恰恰是它學(xué)習(xí)曲線陡峭的原因)。
Rust是一門同時(shí)追求安全、并發(fā)和性能的現(xiàn)代系統(tǒng)級(jí)編程語(yǔ)言,有望挑戰(zhàn)C語(yǔ)言的地位。
當(dāng)然,編程語(yǔ)言少,對(duì)程序員來(lái)說(shuō)是好事,程序員可以少學(xué)一點(diǎn)東西,少掉幾根頭發(fā)。
最后再聊聊人工智能時(shí)代的編程問(wèn)題,我在《天才程序員》中看到一個(gè)有趣的比喻,說(shuō)普通的編程就像循規(guī)蹈矩的機(jī)械裝置,機(jī)器會(huì)一板一眼地去執(zhí)行,程序員在邏輯的宮殿中穿行,沿著頭腦中的路線行走,一切都有章可循。
但是訓(xùn)練神經(jīng)網(wǎng)絡(luò)就完全不同,程序員和程序之間更像園丁與田園的關(guān)系。
圖片
豆角為什么突然不長(zhǎng)了?西紅柿為什么不好吃?園丁可能會(huì)換換土壤,可能會(huì)調(diào)整一下作物之間的距離,也有可能把豆角轉(zhuǎn)移到陽(yáng)光充足的地方,或者少用些肥料?成功了!它們又開(kāi)始茁壯成長(zhǎng)了!
園藝技能的長(zhǎng)進(jìn)有賴于數(shù)之不盡的實(shí)驗(yàn)和來(lái)之不易的經(jīng)驗(yàn)。很多新手園丁栽種的第一批作物要么長(zhǎng)不好,要么就死了。但最終,經(jīng)過(guò)不斷試錯(cuò)(和借鑒同行的經(jīng)驗(yàn)),園丁們會(huì)積累更多知識(shí),形成難以言傳的直覺(jué),比如什么有效,什么無(wú)效。此時(shí),如果你帶他們?nèi)バ碌奶飯@,即便那里的土壤和光照條件完全不同,他們也可以很快弄清楚哪些作物更適合在此處栽種。
看到了吧,雖然編程技能必不可少,但是重點(diǎn)變成了收集數(shù)據(jù),不斷訓(xùn)練,不斷調(diào)整,然后“祈禱”程序奏效。
不知道這是程序員的幸運(yùn)呢,還是不幸?

如需轉(zhuǎn)載,請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)。















 
 
 





 
 
 
 