如何正確學(xué)習(xí)C++應(yīng)用程序
C++應(yīng)用程序應(yīng)當(dāng)以更理性的態(tài)度來(lái)看待自己的工作,C++社群的規(guī)模、強(qiáng)悍和創(chuàng)造力,仍然是很多其它新興語(yǔ)言社群難以相比的,好了下文就給大家進(jìn)行詳細(xì)說(shuō)明,希望大家能夠喜歡。
考慮到這一點(diǎn),在開源領(lǐng)域中兩兄弟的這種差距就令人感到非常震驚。如果說(shuō)在2000年以前,由于C++在工業(yè)界的統(tǒng)治地位,這種差距對(duì)C++的影響還不大的話,今天,C++在開源領(lǐng)域里薄弱的基礎(chǔ)就非常要命了。
現(xiàn)在在開發(fā)者社群中,“C語(yǔ)言萬(wàn)壽無(wú)疆,C++無(wú)壽無(wú)疆”的說(shuō)法得到不少人的支持,其根本原因之一就在于C++在開源運(yùn)動(dòng)中的地位遠(yuǎn)遜于C。究其原因,歸根到底是因?yàn)榫帉懜哔|(zhì)量。
可復(fù)用而又拳拳服膺的C++程序庫(kù)實(shí)在是一件太困難的事情。一方面,大量的C++應(yīng)用程序質(zhì)量不佳,而且經(jīng)常以一種粗暴的方式要求使用者改變自己程序的風(fēng)格,另一方面,一旦有人完成了一個(gè)可用的C++項(xiàng)目或者程序庫(kù)。
他必須具有極其彪悍的意志才能夠咬著牙把這樣的項(xiàng)目奉獻(xiàn)給開源社群——不僅因?yàn)槭チ丝赡艿慕疱X上的回報(bào),更因?yàn)榭赡芤鎸?duì)著暴風(fēng)雨般的批評(píng)和鄙視??傊?,諸多的原因使得開源文化未能在C++中深深扎根。然而,畢竟C++是一種稱霸一時(shí)的語(yǔ)言,C++社群的規(guī)模、強(qiáng)悍和創(chuàng)造力,仍然是很多其它新興語(yǔ)言社群難以相比的。
特別是在標(biāo)準(zhǔn)C++制定之后,C++編程風(fēng)格有了明確的指導(dǎo)思路,開源項(xiàng)目也就大大繁榮起來(lái)。雖然時(shí)間還不長(zhǎng),但是已經(jīng)有一些令人欣慰的成果。這些成果也就構(gòu)成了寫作本文的基本動(dòng)機(jī)和素材。就重要性而言,開源程序庫(kù)和工具集對(duì)于C++甚至比對(duì)C還要重要得多。因?yàn)閷?shí)踐證明,沒(méi)有良好的基礎(chǔ)設(shè)施支持,C++開發(fā)成功的可能性異乎尋常的低。
其根本原因是,用C++寫優(yōu)秀的程序庫(kù)非常非常難,而一旦有了這樣的程序庫(kù),在其基礎(chǔ)上寫應(yīng)用程序就相當(dāng)容易了。同時(shí),C++的特點(diǎn)又要求基礎(chǔ)設(shè)施的源代碼必須開放,因此,C++程序庫(kù)對(duì)于開發(fā)者來(lái)說(shuō)意義非常重大。
我們可以更進(jìn)一步探究開源C++程序庫(kù)對(duì)于C++應(yīng)用程序的重要意義。用C++編寫可復(fù)用程序庫(kù)時(shí)所需要的思想方法和技術(shù)風(fēng)格,與用C++編寫應(yīng)用程序時(shí)所需要的思想方法和技術(shù)風(fēng)格之間存在相當(dāng)大的差異和差距。前者所需要的高超技術(shù)、豐富經(jīng)驗(yàn)和良好的權(quán)衡能力,是很少有人能具備的。在所有程序設(shè)計(jì)語(yǔ)言中,你恐怕找不出第二種語(yǔ)言像C++那樣。
對(duì)于程序庫(kù)作者的要求如此之高,以至于遠(yuǎn)遠(yuǎn)超過(guò)了一般“熟練”C++開發(fā)者的平均水平。在Lisp中,語(yǔ)言、庫(kù)和程序根本就是一回事,每一個(gè)程序員寫的代碼都可以看成是語(yǔ)言本身的擴(kuò)充。
在Java、C、Perl、Python、Ruby中,一個(gè)優(yōu)秀的應(yīng)用程序開發(fā)者在積累一定經(jīng)驗(yàn)之后,不難寫出高質(zhì)量的可復(fù)用代碼。而在C++中,這種事情是非常罕見的,即使是天資卓越、經(jīng)驗(yàn)豐富的大師級(jí)人物,也需要花費(fèi)多年的打磨,歷經(jīng)幾次反復(fù),才能夠最終推出受到一致認(rèn)可的可復(fù)用程序庫(kù)。
此道之難,難于上青天,以至于Andrei Alexandrescu感嘆道,十幾歲的少年天才滿目皆是,滿鬢斑白的優(yōu)秀程序庫(kù)設(shè)計(jì)者鳳毛麟角。而在另一個(gè)地方,一本C++可復(fù)用技術(shù)圖書的作者總結(jié)道,所謂可復(fù)用的C++程序庫(kù),不可能是設(shè)計(jì)出來(lái)的,只可能是復(fù)用出來(lái)的。
然而,一旦這樣的程序庫(kù)構(gòu)造出來(lái)并且為人們熟悉,那么就會(huì)大大地簡(jiǎn)化應(yīng)用程序的開發(fā)。這也就是為什么在2000年后,Bjarne Stroustrup無(wú)數(shù)次地呼吁社群專注程序庫(kù)的開發(fā)。他很清楚,只有程序庫(kù)能夠救C++,只有程序庫(kù)能夠發(fā)展C++。
現(xiàn)在我們知道,用來(lái)寫C++程序庫(kù)所需要的技術(shù),與用來(lái)寫C++應(yīng)用程序所需要的技術(shù)存在很大的差別。這已經(jīng)比較糟糕了。更糟糕的是,一般的C++開發(fā)者根本分不清這中間的差別,他們?cè)陂_發(fā)中往往既不是一個(gè)稱職的程序庫(kù)開發(fā)者,也不是一個(gè)單純的應(yīng)用開發(fā)者。
他們一邊想著完成手頭的工作,一邊琢磨如何能夠?qū)懗龈哔|(zhì)量的基礎(chǔ)庫(kù)和框架,為萬(wàn)世開太平。如果說(shuō)C語(yǔ)言是一把輕快的小匕首,遇誰(shuí)都是進(jìn)身猛刺,血濺一尺,那么這種C++的使用方式無(wú)異于左手打鐵鑄兵,右手揮劍刺秦,這種精神分裂的狀態(tài)直接將很多項(xiàng)目變成了既超期超支又質(zhì)量低劣的垃圾。
認(rèn)識(shí)到這樣的事實(shí)之后,C++應(yīng)用程序應(yīng)當(dāng)以更理性的態(tài)度來(lái)看待自己的工作。大部分情況下,你所需要做的是尋找一些可以互相合作的、穩(wěn)定可靠的開源程序庫(kù),然后在其基礎(chǔ)之上,面向目標(biāo)。
使用盡可能簡(jiǎn)樸的技術(shù),專心專意地進(jìn)行應(yīng)用開發(fā)。把那些復(fù)雜精妙的語(yǔ)言技巧和“可復(fù)用”之類的想法扔到Java國(guó)去。唯其如此,你才可能更高效地開發(fā)出好的應(yīng)用軟件,而且會(huì)逐漸積累和重構(gòu)出真正可復(fù)用的軟件。
【編輯推薦】


















