天天看點

C++為什麼能重奪年度語言?

目錄

    • 一、爺青回
      • 1、年初依舊很多大新聞,其中一條就是TIOBE把年度程式設計語言頒給了C++。
      • 2、這是什麼概念?那一年Java的流行指數是14%。
    • 二、C++為什麼衰落
    • 三、C++為什麼重新流行
      • 1、C++為什麼重新流行起來了呢?
      • 2、C++究竟做對了什麼呢?
      • 3、根本原因沒有解決,C++究竟憑什麼?我的回答是:時代需求使然。
    • 四、C++該怎麼學
    • 五、“C++王者歸來”系列對談直播

一、爺青回

1、年初依舊很多大新聞,其中一條就是TIOBE把年度程式設計語言頒給了C++。

我特地上TIOBE看了看,意外發現一件非常有意思的事。TIOBE指數行業内的同學都很熟悉,是全球程式設計語言流行度的風向标。TIOBE最早始于2001年,但當年并沒有選出年度語言,而是得等到2003年。2003年對于C++也是特别的一年,C++在TIOBE上的流行指數一度逼近18%,可謂如日中天,是以毫無懸念,第一屆年度語言就是C++。

C++為什麼能重奪年度語言?

不過,這也是C++的頂點。雖然目前還沒有聽說什麼TIOBE“年度語言魔咒”之類的說法,但C++成為年度語言之後一路下滑,到了2017年,C++隻剩下不到5%。

2、這是什麼概念?那一年Java的流行指數是14%。

Java号稱C+±-,替代效應明顯。然而,有意思的地方來了,當人們開始讨論用什麼替代Java的時候,C++居然活了過來,在TIOBE上走出了一條微笑曲線。2022年,C++的TIOBE流行指數上大漲4.6%,這是榜單最大漲幅,19年後再次奪得了年度語言。很多分析文章沒有提到的是,目前C++的流行指數重新回到12%,而上一次還是在2005年。

什麼叫爺青回,這就叫爺青回。

二、C++為什麼衰落

C++有太多問題,太應該衰落了。概括起來也不複雜,就三個字“太複雜”。

C++提供了大量的特性,往好了說寫起來非常靈活,特别适合追求最優解的強迫症,往壞了說是嚴重加重了選擇困難症的病情。即使你用了C++十年二十年,一定還能遇到什麼地方讓你感慨居然還有這麼多不了解的地方。從審美的角度來說,C++不夠協調統一,從學習的角度來說,C++簡直是災難。

指針就是典型。

指針是C++靈活的源泉,指針用得好,C++能玩出花來,但是用不好,C++也能玩出花來,是以,對很多程式員來說,不管是寫,是讀,還是改,指針都是災難的代名詞。

怎麼辦呢?獻祭靈活性換取易用性和一緻性。

譬如Java,Java繼承了C++大量的語言特性,同時手起刀落剁掉了指針。Java簡化了記憶體管理操作,有一項重要的機制叫垃圾回收(Garbage Collection),太重要以緻有一個著名的梗是說,如果你去食堂吃飯,看到有人吃完收拾盤子的,那是C++程式員,吃完直接走的,那是Java程式員。

這裡有個問題。我想自己收拾行不行呢?Java說,對不起,不行,不管你願不願意,我都要替你收拾。大家都不用收拾,是以易用。大家都不能收拾,是以一緻。這裡沒有絕對的優劣,不過,後來無論是開發還是管理,都認為Java這種做法更節省頭發。

于是,C++連同災難性的指針一起,似乎隻能死于選擇太多。

三、C++為什麼重新流行

1、C++為什麼重新流行起來了呢?

這确實是個有意思的問題。有人說TIOBE算法不夠客觀,C++不可能重回2003年。這個說法我隻同意一半。畢竟20年過去了,出現這麼多要革C++的命的語言,著名的前有D語言後有Rust,就算這些後輩再怎麼不給力,總會要分走一些使用者的。

現在C++不僅守住了基本盤,還出現了“回暖”的現象。且不管回暖的力度是不是真的像TIOBE所說的力拔頭籌,但回暖本身是毫無疑問。C++肯定是做對了點什麼,這才是C++重奪年度語言的新聞背後,最需要我們關注和思考的事情。

2、C++究竟做對了什麼呢?

這不是一個很好回答的問題。網上有一個簡單直接的回答:C++一直在更新,不斷吸收程式設計語言的發展成果。譬如C++20,就增加了子產品、概念、範圍和協程四大特性。不少C++er說C++20振奮人心,為這門上了年紀的語言注入了新的活力。

不過,這個說法我同樣隻同意一半。C++20确實引入了一批非常有用的現代化特性,具備和後輩一争高下的基礎。但是,前面也已經說過,C++的根本問題不是在于特性太少,而是在于特性太多,不要說去選擇,光是去了解就已經成為了一種負擔。

3、根本原因沒有解決,C++究竟憑什麼?我的回答是:時代需求使然。

在過去的十幾年,Web開發一直處于絕對的支配地位,已經成為我們評價一門程式設計語言好壞的預設背景。但是,時代已經開始走出被Web支配的日子,區塊鍊、人工智能、元宇宙,且不管這些概念背後到底取得了多少實質性的發展,但要開發這些應用,需求必然會變得空前多樣,我們都需要重新選擇最合适的開發方式。

而C++最不缺的就是選擇。即使到了2023年,能夠直接死磕底層,同時又具備現代程式設計語言特性的程式設計語言,其實仍然為數不多——C++正是其中之一。如果再加入對語言生态積累的考慮,C++幾乎就是唯一的選擇。

有一個說法是,無論你要做什麼,總能在C++裡找到趁手的工具。我想,這才是C++能在這個發展中的時代重奪年度語言的真正原因。

四、C++該怎麼學

C++日久彌新,相信許多人都動過學一學C++的念頭,但是,C++“難學”的名聲在外,又讓許多人打了退堂鼓。C++之是以讓人感覺難學,主要是因為複雜和龐大。複雜是因為C++在設計之初就支援多種範式,而且不斷推出新的語言特性提升競争力,文法越來越複雜。龐大是因為類庫,C++之是以生命力如此頑強,另一個重要原因是擁有一套功能強大的龐大類庫。

複雜的文法和龐大的類庫不但拉高了C++的學習門檻,還拉高了C++教材的編寫門檻,

什麼人才能廣泛地了解這些内容,然後準确地總結成書,還敢打包票說書裡的了解都沒有偏差呢?還真有這麼一個合适人選——Bjarne Stroustrup,沒有誰能比C++之父更懂C++!Bjarne Stroustrup不僅發明了C++,還通過編寫一系列教材打造出一條C++學習路線:

C++為什麼能重奪年度語言?

關于作者:

莫凡,網名木羊同學。娛樂向機器學習解說選手,《機器學習算法的數學解析與Python實作》作者,前沿技術發展觀潮者,擅長高冷技術的“白菜化”解說,微信公衆号“睡前機器學習”,個人知乎号“木羊”。

五、“C++王者歸來”系列對談直播

視訊号“機械工業出版社”觀看直播

C++為什麼能重奪年度語言?
C++為什麼能重奪年度語言?
C++為什麼能重奪年度語言?
C++為什麼能重奪年度語言?

視訊号“機械工業出版社”觀看直播