我從去年11月份開始自學C++(本人現在做C#開發),現在把我這10來個月學習體會寫出來和大家分享。
1。關于要不要學習C++?(結論:要學,一定要學?。?br />如今在網上很多為要不要學C++爭的不可開交,因為現在JAVA,C#,。NET都炒的很火,特別是JAVA,大有炸平廬山,停止地球轉動之勢。用林銳同志的話說,其實JAVA只是C++外甥,跑到舅舅身上撒了一泡尿而已。首先,我們從JAVA 的來歷上來說,JAVA的設計初衷是用來給家用電器設計程序使用的,最初設計者想用C++,但覺得C++太復雜,就在C++的基礎上做了一些簡化,設計出了JAVA,它的設計思想是跨平臺,所以必須先在運行平臺上安裝虛擬機,然后把源程序編譯成中間語言在運行。這是一個優點,但我們說任意優點都是建立在缺點上的,JAVA的缺點就是運行速度慢,這對于某些系統來說是致命弱點。況且,JAVA中沒有指針,對于制作系統軟件來說,這更是無法饒恕的。再來看C++。C++產生于美國貝爾實驗室,就是發明電話那個公司。設計初衷是用來改進C的開發效率,C是面向過程的語言,開發效率底,貝爾實驗室有大量的C程序員,所以只要在開發效率上提高一點點,就可以節約數目龐大的成本。C是什么東西?是用來代替匯編編寫操作系統的語言,用C++代替C,可以得出兩個結論:第一,C++必須具有同C相當的執行速度;第二,C++必須比C具有較高的開發效率。執行速度方面,C++的設計者的思想就是在改進開發效率的同時盡量不增加C++的系統開銷,當然有些地方非增加開銷不可,也把開銷控制在最小程度內。具非權威研究報告,C++比C的執行開銷多出不到10%。開發效率方面,C++引進了面向對象機制,庫機制,最大程度上實現了代碼重用,這是軟件開發人員的福音。C++在改進C的開發效率的同時,對C的缺陷做了一些修補。C的優點在C++中都得到了很好的保留,C的缺點在C++中都有了改進,有了更好的解決辦法。而且,為了現有的大量C程序維護,C++還全面兼容了C??v觀當今程序語言家族,我覺得只有C可以C++相提并論,門當戶對,其它語言都無法和C++相提并論。無論從什么角度來說,C++都算的上語言中的老大。
如今,網上有很多關于C++的爭論,其實爭論的人都是一些不知情的人,絕大多數是學校里的學生,我也曾經這樣。在學校里的時候,不知道究竟應該學習什么,要是遇到好的老師還可以,遇到垃圾老師,垃圾學校那就更糟糕。如今,什么MCSE,CCNA,CIW等等認證漫天飛,把人搞的昏頭昏腦,其實這都是認證公司炒的。社會上需要的是有真才實學的人,而不是需要證書。
我從大二開始學習編程,一開始學習VB,后來學習DELPHI,再后來學習C#,再后來學習C++,繞了個大圈子,最后還是繞回來了。而且重新學習數據結構,操作系統,學習軟件工程,學習大學本科的基本課程,重新讀外國的程序設計名著,而這些以前在大學是不屑一顧的。勸如今還在學校的師弟師妹們,努力學習C++。
2。為什么要學習學習C++
1)C++的程序員身價普遍較高,當然,前提是你必須是高手。我所在的城市,那些公司根本就招不到合格的C++程序員,一方面C++程序員要求高,學習C++的人越來越少了。當然,懷著這個目的,你或許永遠無法成為C++高手,但我把這個原因放在最前面,可以給大家一個很明確的激勵,當你接觸C++后,發現從學習中獲得樂趣比高的工資更有動力;
2)C++的優勢是用來開發大型軟件,從中可以學到很多優秀的軟件設計思想。C++不是軟件開發的首選工具,一般說來,大多人更愿意學習和使用VB,為什么,簡單。簡單的另一個方面是功能的局限。微軟公司恨不的所有人都學VB,只有他一家會C++。容易上手,大家都喜歡學,喜歡用,很多人拿一本200頁的書,看個兩三個星期,就覺得自己是個程序員了,可以開發軟件了,而且覺得做出來的東西很不錯。當軟件規模大到一定程度的時候,其他語言就越來越無法駕馭,這時C++的優勢就體現出來了。你說做個成績管理系統,人事查詢系統,用VB,DELPHI,C#,JAVA都行,但是例如銀行,電信,保險,操作系統,數據倉庫,圖形處理,編譯系統,較底層的軟件時,其他工具幾乎是無法完成的。就說C++的指針,JAVA沒有,在遇到數據量交大的數據排序,搜索,動態內存分配時,它就沒有辦法了。所以說,學習C++,不僅僅是學到的一種語言,還學習了優秀的軟件設計思想。
3)學習C++可以學習到計算機底層的理論,即使不是用C++開發,對計算機運行機制的理解,對建制穩定的系統,對運用其他語言,也是一種促進。這一點,我是在學習過程中體會到的,所以,要說出個大家可以接受的理由來較難,大家以后學習就知道了。
3。怎樣學習C++?
首先,我們必須承認,學習要講究方法,有捷徑。其次,我們還得承認,學習要下苦功,要務實。上小學的時候,書上有個故事,是關于王羲之學習書法的:王獻之問他父親王羲之,學習書法的秘訣是什么,他父親把他帶到后院,指著18口大水缸說,你如果把這里的水都寫完了,就知道書法的秘訣在那里了。這個故事相信很多人都還記得。前幾天看梁肇新(豪杰公司老板)的《高手箴言》,他說如果你如果愿意利用5年時間來成為高手,那么你只要兩三年就會成為高手,如果你想一年成為高手,那么你5年也成不了高手。學習要切忌浮躁,要腳踏實地。我曾經很浮躁,結果一直呆在菜鳥堆里,當半年前我靜下心來學習C++,才感覺有真正的進步?,F在做WEB開發,雖然我從來不看WEB開發的書,但是我的同事遇到問題時,我經常能一下說出問題的所在。因為你看問題的角度變了。所以,學習C++的第一個方法是:切忌浮躁。其實學任何東西都一樣,欲速則不達。從基本數據類型看起,從基本流程控制語句寫起。
其次,教材很重要,要看經典名著。
其次,教材很重要,要看經典名著,而且如果英語好,最好看原版英文教材。
經典之所以成為經典,是因為經歷了考驗沉淀下來的東西。去年9月份,當我打算轉向C++的時候,曾向我一位同事咨詢,他向我推薦了《C++編程思想》,還說叫我一定要讀。當我讀完前面三到四章的時候,就發覺自己找到了感覺。接下來,我一口氣讀完了整本書,當然其中很多東西還是無法真正理解,這是一本很深邃的書。廢話少說,我現在把我自己看過的C++參考書籍列出來:
1)《C++入門經典》,原名《The C++ Language Begeining》,作者Ivor Horton 此書淺顯易懂極適合入門,書中包括最基本的程序設計知識,例如基本數據類型,流程控制語句,函數設計。即使沒有任何程序設計基礎的人,看著也不覺得累。書中一些很有特色的事例,能促進和加深讀者的理解。但此書的代碼風格實在有些糟糕。
2)《C++編程思想》,原名《Thinking in C++》,作者Bruce Eckell, 此書的名氣就不在這里說了.此書最新版本(第三版)開頭部分增加了幾章講C語言的部分,然后把讀者逐漸引向C++,在討論語言的一個特性時,往往總是先講解在C中的解決方法,然后討論這中方法的局限和不足之處,再討論C++中的解決方法.據我的感受,此書作者的初衷是引導C程序員走向C++,但后來發現大多數新生代程序員,非美國的程序員不一定懂C,于是就在第三版中加入了介紹C的部分. 此書最大的特點是, 作者善于透過語言現象,看看屏風后面究竟發生了什么(例如,顯示出生成的匯編語言).消化好這本書,C++水平上一個大臺階;
3)《C++高效編程》,原名《Effect C++》。此書重點探討C++的一些技術死角,我只看過其中很少的一些章節,在此不作過多評論;
4)《C++ Primer》,作者Stanley B.Lippman,此書還沒有讀過,接下來讀這本書。我在網上找了一點對此書特點的描述:對C++基本概念和技術全面而且權威的闡述,對現代C++編程風格的強調,使本書成為C++初學者的最佳指南;對于中高級程序員,本書也是不可或缺的參考書。第4版不再強調低層編程技術,而把中心轉向標準庫的使用。書中很早就開始介紹標準庫,示例也已經重新改寫,充分利用了標準庫設施。我們也對語言主題敘述的先后次序進行了重新編排,使講解更加流暢;
5)《C++編程語言》,原名《C++ Program Language》,作者乃C++的發明者被譽為C++之父的Bjarne Stroustrup,此書我只讀了一部分,說實話,有些難。此書的作者就是C++的創始人,發明者,知識非常淵博,其思想深度遠遠在前面幾位之上。如果你想知道C++究竟能做什么,C++那些希奇古怪的特性為什么那樣設計,那你就去參考這本書。另外,閱讀此書時,你還會為作者那種深邃的思想,博大的胸懷感覺到一種發自內的快樂,舒暢。書中還講到了很多大型系統設計的方法和技巧。總之,不讀此書,是作為程序員的一大遺憾。我建議先閱讀《C++編程思想》,再參考此書。因為《C++編程思想》的作者說,他寫這本書的目的就是為了大家能夠參考《C++編程語言》這本書;
6)《C++高質量編程》,作者林銳。此書不屬于經典名著,但我也比較推薦這本書。作者不象國內其他作者那樣迂腐功利,而是從一個程序員的角度,介紹他在以往開發過程中遇到的問題和積累的經驗,這本書很薄,但其中的思想方法很有用。且語句詼諧幽默,閱讀起來很輕松;
任何一本書,都有他的可取之處;任何一本書,都無法解決在學習中遇到的所有問題;任何一本書,都無法替代人的智慧和經驗。但是好的教材,可以起到好的指導效果,可以使學習少走彎路。但我不怎么建議看比較薄(600頁以下)的書,因為對于C++來說,這樣的篇幅根本就說不清楚,也不建議看國內作者的教材,你發現大多是從上面所說的書中抄下來的。
4。C++和VC的區別
目前我們所說的C++,通常意義上指標準C++,就是美國C++標準委員會發布的C++。它定義了一些基本的語言規范語言特性,定義了一個框架,還有一個標準庫。雖然產生于UNIX下,但它不屬于某一個平臺,某一個廠商,某一個編譯器。它是一種統稱,一種概念。VC是微軟公司在WINDOWS平臺下的一種開發工具,本質上和VB,C#沒有什么區別,只是較之底層一些。VC支持標準C++,但不百分之百支持。一般來說,學習C++可以使用VC的編譯環境,但是必須要使用標準庫。還有其他一些C++編譯器例如C++ BUIDER,就是Borland公司生產的WINDOWS下的C++編譯器,GCC是LINUX下的常用的C++編譯器。估計在蘋果機下也有相應的C++編譯器,因為C++處理圖形系統是其特長。
要學習C++,就不要從VC學起,學習VC無法學到真正的C++編程思想,而你只是學會了使用類庫而已。C++的特性是什么?C++本質是什么?C++的精華是什么?我覺得總結成一句話:利用面向對象的思想,解決大型系統的開發問題。
5。學習C++的重點
如果你學習過C或者了解C,那么在學習C++的時候更容易受C的影響,記住,C是面向過程的語,C++是面向對象的語言。如果你學習過C,那么學習C++的重點是掌握C++的新特性,C與C++的區別,C++的面向對象特性,嘗試用C++的風格去編寫程序,用C++的技術去解決問題。或許你認為C很不錯,但在C++可能有更好的解決辦法;
如果你學習過JAVA,C#或DELPHI,那么你應該對面向對象機制很熟悉。但是,C++中的面向對象機制和上述幾種語言有所區別,例如多重繼承。最好嘗試在沒有用戶界面的環境下編寫程序,還有,指針是C++的精華之一,所以必須掌握;
如果你沒有編程基礎,那就直接從C++學起,這樣就沒有其他語言的干擾和影響。祝賀你,一開始就接觸了這樣一種偉大的語言;
我覺得,C++的重點可以用三個詞來描述:指針,面向對象,標準庫。
最后,在這里同所有學習C++的程序員共勉,不要擔心學習C++會被淘汰,我所在的單位還有大量的Informix程序員,而且日子過的很舒服。我小時候學書法,老師常對我說一句話就是:字寫的好,哪怕拿一根筷子在嘴巴里咬幾下,都寫的好看,而不在于用什么筆。用C++之父Bjarne Stroustrup的話來說:只要你在使用電腦,你就直接或間接使用了C++。
讓我們共同學習,共同進步,相互交流,相互促進。