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