C和C++有太多的歷史包袱而其它語言并沒有這些,從另一個角度下來講C和C++其實就是現(xiàn)代語言的活字典,也是現(xiàn)代軟件設計的基礎,當然有更古老的語言,但像C和C++影響力這么大的卻無其它語言可以出其左右。
C++和其它語言最大的不同在于它不屬于任何人,任何公司,而Java,C#,Python,Ruby等都是由某個公司或個人控制的,在相對封閉的體系之下設計的語言很容易可以做到易用性,但靈活性和設計思想的廣泛度上與C++這樣的語言不可同日而語。且不說其它語言從C/C++中借鑒的大量的特性,單就語言本身能夠體現(xiàn)的設計思想廣泛性上來講只能說其它語言只作到了”溺水三千 只取一瓢”,像C++可以支持設計風格就有四種:面向過程、基于對象、面向對象、泛型。今日的C++并不是一開始就這樣,最初的C++ 中連stl都沒有,stl最初是HP內部開發(fā)使用的,后來才加入到標準中去,template技術也是后來加入的,反過來stl又引template的出現(xiàn)作了相應修改。由于C++開放的特性,在其被快速、廣泛應用的同時,也出現(xiàn)標準落后于編譯器實現(xiàn)的情況,因為業(yè)界的需求總是先于標準出現(xiàn)的,而商業(yè)化的產品必須滿足這種需求。比較具體的例子如早期的VC++ ,在其MFC庫中加入了很多現(xiàn)在看來冗余的設計比如說List這樣的容器,那是不得已而為之,MFC出現(xiàn)的時候C++本身還不夠完善,如此VC++本身就有了另一種歷史負擔,由于Windows平臺在國內事實上的統(tǒng)治地位,造就了大批C++開發(fā)從VC++開始的進入這個領域的局面,而由于VC++、MFC本身的實現(xiàn)就不夠標準,所以在入門的時候就把人引入了歧途,讓學C++的根本沒搞清楚到底什么是C什么是C++。大多數(shù)人從寫界面開始,所以MFC的影響很不好,另一個角度來講Windows本身所提倡的API風格,編碼風格(匈牙利命名法)完全自成一體,與Unix-like這種提倡,簡潔、明了的設計風格背后的設計哲學完全不同,但現(xiàn)代軟件的歷史其實是C/C++和Unix歷史,所以在沒有搞明白這些之前貿然進入Windows開發(fā)領域反而給更多的人造成的更多的困惑,我不是說Windows不好,而是想說不懂Linux、Unix、C/C++,那更不可能真正的搞懂Windows。因為操作系統(tǒng)理論上很多東西都是由unix發(fā)展過來的。簡單如strcpy這樣的C函數(shù)和StringCopy這樣的函數(shù)名稱在編碼的時候有多少在會去思考它背后的東西呢?
C++這樣的背景正好和GNU以及互聯(lián)網的發(fā)展過程相切合,從軟件工程的角度來講正如《人月神話》所說,C++實際上和Linux一樣,是在一種“大集市”的模式下產生的,從而產生了類似Linux的問題,靈活、強大,但進入的門檻比較高。各種思想在C++ 中全面開花造成C++本身強大的同時復雜度也飆升。但就像Unix-like OS使用一樣,他就是面向技術人員的,而且面向的是喜歡技術的人員,如果你是個比較懶的技術人員那么C/C++絕不適合你,因為它在不停的發(fā)展,也有浩瀚如海的思想和技巧在里面,不時常的琢磨是絕對用不好的。
C++中異常的處理之所以不如Java這樣的語言完善,是因為操作系統(tǒng)的限制,真正的異常處理機制完全是由操作系統(tǒng)提供的,在各種平臺的差異下編譯器沒有辦法作到面面俱到,而Java之所以可以做的更好,之是因為有JVM的存在,C++編譯器不能代替操作系統(tǒng)的工作,但JVM卻可以勝任這個角色。
至于大而全的庫,C++發(fā)展至念已經有很多不錯的庫了,比如說boost,poco,正因為很多人沒搞清楚c/c++是什么,還在思想的混亂中糾結就更不可能對庫有更準確的看法了。如果你真的在使用C++那么學習使用好的庫如boost,那么價值遠大于去學習另一門語言。