深入學(xué)習(xí)了STL的內(nèi)部構(gòu)造以及一些C++深層次的機(jī)制與技巧以后,突然浮現(xiàn)出每個(gè)Programmer都要面對(duì)的問(wèn)題。
Why Programming in C++?
比起質(zhì)樸純凈的C,靈活龐大的JAVA和C#,我為什么要選擇C++?
在各大技術(shù)BBS和牛人的BLOG里逛,大家都在為自己喜歡的語(yǔ)言爭(zhēng)論,C#/JAVA的程序員說(shuō),不要重復(fù)造車輪,擁有良好的語(yǔ)言平臺(tái),有豐富全面的庫(kù)比較全,可以將注意力轉(zhuǎn)向更為重要的架構(gòu)方面,軟件工程方面。又何必在語(yǔ)言的表層基礎(chǔ)苦上苦癡迷?C++標(biāo)準(zhǔn)中連最基本的GUI庫(kù)和網(wǎng)絡(luò)庫(kù)都沒(méi)有。包括 C++創(chuàng)始人BJ本人也想將C++發(fā)展成為一個(gè)平臺(tái)(palform)。
C++的STL庫(kù)固然不錯(cuò),但是一個(gè)新手用STL時(shí),一個(gè)小錯(cuò)誤編譯就跳出上K的錯(cuò)誤信息(就算有STLFilt,確實(shí)也以難安裝),最新的C++0x中 能改善這一問(wèn)題的萬(wàn)眾矚目的Concept已被取消,C++又該何去何從?C的程序員(包括Linus大叔)說(shuō),C++簡(jiǎn)直就是邪惡的語(yǔ)言,效率底下,語(yǔ)言繁雜,違反KISS原則,更無(wú)法在底層如操作系統(tǒng)中勝任。大家說(shuō)的好像都有道理,難道C++就是這樣一門高不成,低不就的語(yǔ)言么?
我也用過(guò)C語(yǔ)言和C#語(yǔ)言,而且還在大學(xué)里也拿過(guò)關(guān)于這兩種語(yǔ)言競(jìng)賽一些小小的獎(jiǎng),最起碼能說(shuō)對(duì)這兩種語(yǔ)言還有粗略的了解。
但是我最喜歡、花的時(shí)間最多的還是C++。C++是我學(xué)的第一門語(yǔ)言,一路學(xué)來(lái)吃了不少苦,C++作為語(yǔ)言國(guó)度的一個(gè)聯(lián)邦[EFC++Item1],靈活,彈性大讓我著迷,它像一個(gè)精通太極的大師,容納百川,但卻深藏若拙。它有精妙的技法如SFINAE和tag distributing (技法的復(fù)雜性這也是它被指責(zé)的重要原因)。
它有沉著老練的STL庫(kù),其中有各種數(shù)據(jù)結(jié)構(gòu)和常用算法的靈活精巧的實(shí)現(xiàn)和高度可擴(kuò)充性,有銳意進(jìn)取的boost庫(kù),loki庫(kù),有超重量級(jí)的網(wǎng)絡(luò)通信開發(fā)框架ACE,還有效率較高的Blitz++科學(xué)庫(kù)等。
C#中的各種“高階”功能C++都能實(shí)現(xiàn)(沒(méi)有“基本”兩字,您和我說(shuō)不可能?那就去看看C#的托管機(jī)制是用什么語(yǔ)言寫的吧),雖然您將花費(fèi)更多的時(shí)間學(xué)習(xí)與調(diào)試,但是我覺得中途的樂(lè)趣只有您自己做過(guò)才能深有體會(huì)。
它和C語(yǔ)言工作效率不分伯仲,(您說(shuō)C++效率低下?請(qǐng)問(wèn)您深入用過(guò)C++么?您看過(guò)SGI實(shí)做中內(nèi)存分配的實(shí)現(xiàn)么?)C++也可以毫不費(fèi)力的使用現(xiàn)有的 C代碼(所謂C-Sytle),C++STL中泛型的sort完勝C中的qsort這也是C++程序員津津樂(lè)道的話題。
但哪種語(yǔ)言不是經(jīng)過(guò)無(wú)數(shù)大牛們大師們千錘百煉的產(chǎn)物?爭(zhēng)論哪種語(yǔ)言的好壞只是顯出您的自卑心理。當(dāng)你去說(shuō)一門語(yǔ)言好與不好的時(shí)候,你有想過(guò),你有真正的深入的學(xué)過(guò)它么?你真正的了解這門語(yǔ)言的特性么?
請(qǐng)記住這句話:好手藝人從不會(huì)責(zé)怪他的工具。語(yǔ)言沒(méi)有好壞之分,只有在特定環(huán)境下,具備各自的優(yōu)勢(shì)。
對(duì)于初學(xué)者而言,學(xué)通一門語(yǔ)言是他叩開計(jì)算機(jī)底層原理世界的大門的鑰匙。語(yǔ)言的好壞不重要,關(guān)鍵是看你自身從學(xué)習(xí)這門語(yǔ)言中得到了什么。
若是單單執(zhí)著于語(yǔ)法細(xì)節(jié),把把你的思想全部拘束在孔乙已爭(zhēng)論茴香豆的“茴”的幾種寫法上(像貴國(guó)的等級(jí)考試這類的考察語(yǔ)言偏僻細(xì)節(jié)上),你將會(huì)得不償失。
在學(xué)習(xí)的提高階段,可以通過(guò)大體學(xué)習(xí)其他的語(yǔ)言,來(lái)發(fā)散自己的思維;甚至還可以幫助你更好的理解你所目前熱愛的語(yǔ)言。
還有一些人執(zhí)著爭(zhēng)論哪門語(yǔ)言更有“錢途”的時(shí)候,我建議您嘞,改行吧。 (您說(shuō)我裝清高,什么程序員也要吃飯,現(xiàn)實(shí)也很殘酷之類的。我只能說(shuō),連吃飯都成問(wèn)題的,您也不適合在這個(gè)層面上討論語(yǔ)言的好壞,您還是繼續(xù)學(xué)吧)。
by XGuru 09年12月