For investors
股價:
5.36 美元 %For investors
股價:
5.36 美元 %認真做教育 專心促就業(yè)
C++是一門引起無數(shù)爭議的語言。
眼下最常聽到的聲音則是C++將趨于沒落,會被某某語言取代。
我很懷疑這種論調(diào)的起點是商業(yè)宣傳,C++的真實趨勢應(yīng)該是越來越傾向于精英化。
精英化是指在可用可不用C++的領(lǐng)域中,C++將逐漸退出,
而所有剩下必須用C++的領(lǐng)域通常都是附加值比較高,難度較高的領(lǐng)域,比如:操作系統(tǒng),數(shù)據(jù)庫,大型網(wǎng)站后端等。
這一過程造成的現(xiàn)象就是在TIOBE上,C++的份額逐步下降。
但就像經(jīng)濟上擠泡沫一樣,這倒不是C++衰落了,而是原本人們對C++的期望過高了。
早在1995年,美國的調(diào)查機構(gòu)就曾經(jīng)預(yù)測:“終端用戶”編程從從業(yè)人員比率上將占94%,而“基礎(chǔ)結(jié)構(gòu)”編程從業(yè)人員只占1.5%不到。
(參見《軟件成本估算:COCOMOII模型方法》)
C++本來就不適合“終端用戶”這種涉眾很多的項目,比如物流程序,而適合對性能要求較高的基礎(chǔ)結(jié)構(gòu)項目,比如OS,大型數(shù)據(jù)庫等。
(根據(jù)Google的測試,C++的performance遠高于其他語言)
只是當年OO很火的時候,大家又沒有什么別的選擇,就一窩蜂的用,實際上很多程序確實不適合用一個沒有垃圾收集的程序來寫。
這里有一份統(tǒng)計列表,大家可以自己看看,當前C++的主戰(zhàn)場是那里。
The Programming Languages Beacon(這個表告訴我們:IT行業(yè)的骨頭是C/C++做的)
這導致的結(jié)果就是修煉C++的程序員必須往高端走,你要么找不到工作,要么就找到很好的工作。
而不像其他語言,大差不差還能混口飯吃。
這個趨勢不好絕對化,但估計在未來會被強化。TIOBE上C++的份額跌得越多,這個趨勢強化的越厲害。
短時間完全看不到C++退出歷史舞臺的可能性,只要硬件還是軟件的基礎(chǔ):
例1:網(wǎng)站A和網(wǎng)站B類似,用C++可以讓速度提升30%,你感覺這個網(wǎng)站會選擇語言的易用性,還是會選擇速度?
例2:公司A要開發(fā)一個新的軟硬結(jié)合的產(chǎn)品,你感覺他會先開發(fā)一個虛擬機,再開發(fā)產(chǎn)品,還是會直接基于硬件上封裝驅(qū)動后開發(fā)程序?
兩個關(guān)鍵缺陷
這兩個關(guān)鍵缺陷分別是語言的過度復(fù)雜和標準庫的過度蒼白。
C++語言過于復(fù)雜在業(yè)界是共識。
一個指針就使C++比關(guān)鍵字數(shù)目相同的語言復(fù)雜許多,導入模板后各種應(yīng)用精巧的應(yīng)用使這門語言進一步復(fù)雜化,個人感覺C++0x使這復(fù)雜性又升華了。
Google在公布的C++ Coding Rule開篇就說:
As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain.
這里也就不多說了,但貼幾個好玩的句子:
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." —— Bjarne Stroustrup(Stroustrup還是挺搞的,意譯下:C語言讓人很容易開槍走火打到自己的腳,C++讓走火發(fā)生的可能性降低,但一旦走火,你的腿就沒了。)
"IMO, good C++ code is better than good C code, but bad C++ can be much, much worse than bad C code." —— John Carmack.
C++標準庫的蒼白倒值得多說一點不知道沒用過C++的人是否能想象,這個世界上還有一門語言的標準庫里甚至不覆蓋正則表達式和XML. C++就這樣,并且還將持續(xù)這樣。我專門查了一下,C++0x里好像終于有正則了,但還沒有XML的庫。
(不用提醒,我也知道boost里有,但boost不是標準庫。)
C++本身不缺庫,并且還都是大佬級的,如:OpenCV,OpenMP,ACE,MPICH2等。
隨便那一個都是一方諸侯,如果你沒用過OpenCV和OpenMP這些東西,第一次用一定會有點震撼,但關(guān)鍵是標準庫不太行。
從這個角度看C++0x方向走錯了:錦上添花的事做了不少,雪中送炭的事上不太給力。
感想C++語言已經(jīng)無法簡化,如果編譯器能夠提供可定制編譯也許對這個語言會有幫助。
比如:設(shè)定某個選項后,C++就變成了有對象的C.設(shè)置某個選項后,多重繼承就不支持了。
也許有編譯器可以這樣,但我確實還不知道。
再不行,自己定個規(guī)則使用C++的特定子集吧。
【免責聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責。如涉及作品內(nèi)容、版權(quán)和其它問題,請在30日內(nèi)與聯(lián)系我們,我們會予以更改或刪除相關(guān)文章,以保證您的權(quán)益!