1. 程式人生 > >為什麼學C++比C 的長期風險低

為什麼學C++比C 的長期風險低

    語言之爭是程式設計師永遠不會疲倦的閒暇話題,初學者的語言選擇也是大家所津津樂道的。回望近年來,隨著微軟.net戰略的來勢洶洶,不少初學者都喜歡以C#作為自己的第一門語言。在這樣的大環境之下,討論C++還有什麼意義麼?

 

    在瞎扯這個問題之前,我們先來看看為啥初學者都選擇C#。估計原因很簡單,就是入門容易。當然,這容易是相對於C++而言的。如果學C++,你肯定要看《C++ primer》這本經典吧?泛型程式設計,也是需要了解的,所以《C++標準程式庫》這書也不能放過吧?這兩本書,頁碼加起來不下1600頁,杯具的是,即使你將這兩本書讀得滾瓜爛熟,你也寫不出一個最簡單的視窗程式。如果你想寫Windows的視窗程式,那麼你還要再看一本《Windows 程式設計》,這又是一本厚達1300頁的鉅著。不過,噩夢遠遠還沒有結束,因為學完了這些,你的C++水平還是處於一個相對低階的水平。為了跨越這個階段,你還必須要看《Effect C++》,《More Effect C++》,《Effect STL》等等進階名作。當你已經將如上的資料爛熟於心的時候,此時你才不是菜鳥,當然也不會是個老鳥,但已經能夠憑著這點小資本到人才市場碰碰運氣了。如果你還想在繼續往上提升,那麼這就和你專注的領域有關了,專注於系統的,什麼《作業系統原理》不能放過吧?專注於編譯器的,《編譯原理》這些不可或缺吧?專注於底層的,一大堆的CPU的datasheet你是不能視而不見吧?只有精通了某個領域,你才能是老鳥。

 

    反觀C#,入門就相對簡單。初學者,只要看完半本《C#高階程式設計》,就能寫出一個最簡單的視窗程式。什麼,你看了一半還不會寫?那你不適合做程式設計師,回家洗洗就睡了吧。不過,即使初學者用C#寫出了一個簡單的視窗程式,他對對於作業系統可能還是一無所知的。當然,這裡並沒有任何貶低C#的意思,因為.net本來就是號稱多平臺(雖然目前還只是在Windows),所以它必須要隔離作業系統的特性,如果初學者還要知道作業系統的特性才能寫程式,那就是對.net的最大侮辱了。當然咯,任何一門語言想要精通,都不是兩三天的事情,對於C#來說自然也是如此。但,C#的入門,遠遠比C++要簡單,這是不爭的事實。

 

    假設五年之後都能達到高手的階段,那麼C++和C#的進階曲線將會如下:


 
    入門簡單,這個最基礎的因素決定了初學者為什麼選擇了C#。不過這對於他們是無可指責的,因為現在的公司,都不願意花錢去培訓新人,你是打算學2個月的C#就能找到工作呢,還是想花個2年時間學C++才能上崗?我想大部分人都應該選擇是前者。於是,直接結果就是,學C#的初學者幾何性地倍增。菜鳥不可能永遠是菜鳥,他們也會有成為高手的一天。因為初學者的基數很大,所以成為高手的數量會不少,這對於現在已經是C#的高手,不可謂不是一個衝擊。但對於C++的高手而言,雖然也是有所衝擊,但這衝擊卻比C#要小,因為C++的新生血液實在太少了。這個看似可悲的狀況,卻成了C++長期風險低於C#的一個理由。

 

    C++還有一個最重要的特性,就是在某些領域具有不可替代的作用。驅動是要用C++吧?啟動程式碼是要用C++吧?就連.NET的的底層,也和C++脫不了關係。也許有人說,不是還有彙編麼?開玩笑,你用匯編寫一個框架試試,等寫出來,黃花菜也涼了。那麼C呢?呃,這個我不否認,C++很多地方都能用C來寫,甚至某些地方都只能用C。但C和C++就是一對孿生兄弟,學的是C++,寫的是C,這會有什麼困難麼?所以為什麼C和C++兩種語言的分隔不是用逗號,而是用斜槓:C/C++。在這個領域裡面,還有能威脅到C++的統治地位的麼?但對於C#來說,情況卻大為不同了。先不說很多領域和JAVA重合,即使在JAVA無計可施的地方,.net的其它成員也能對C#產生威脅。C#是基於.net的,C#能做到的,也就意味著.net能做到,更深一層也就代表VB.NET或是F#或是其它的X#也能做到,即使今天不行,那明天呢?雖然說在這些領域C#目前正如日中天,但誰能知道明天會怎樣?微軟不是還弄出了個F#麼?雖然現在它幹不了啥事,也暫時威脅不到C#的地位,但誰能知道明天微軟會將它擺在哪個位置?C#剛出來的那時候,不也是如此麼,誰能預言F#的未來達不到C#的高度?所以學習C#,不僅要面臨本語言後繼者的競爭,還要堤防別的.net成員來勢洶洶的攻勢,而C++所擅長的領域,卻是死水一潭,唯我獨尊。C#的欣欣向榮,C++的不思進取,看似很美好的背後,卻賦予了C++長期風險低於C#的另一個理由。

 

    看起來,C++似乎和雞肋異曲同工。在很多大型應用中,無法施展拳腳;但在不少領域,卻又是不可或缺頂樑柱。只是,說C++是雞肋,非常不恰當,也許說成是巨人更為合適。C#之所以看得遠,是因為站在了C++這個巨人的肩膀之上,如果沒有了C++這個巨人作為墊腳石,那麼落入平地的C#只能看到眼前冰山一角。不過無可反駁的是,只要站在了巨人的肩膀之上,就絕對能夠比巨人看得更遠,所以C#能將觸角延伸到很多C++無可企及的領域。但懂得站在巨人肩膀之上的,卻不僅僅是隻有C#,還有和它一同出現的.net兄弟姐妹,所以C#的站位並不是牢不可破。做巨人很辛苦,因為他沒有站在肩膀上的人們那麼光彩亮麗引人奪目,就像幕後人員和舞臺明星一樣,大家喜歡的永遠都是明星。也正是因為沒有太多的人去爭當巨人,反而造成了巨人的地位能夠長期穩定,這也就是為什麼學C++的長期風險相對會低很多的原因。

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智慧的隊伍中來!https://www.cnblogs.com/captainbed