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