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