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