1. 程式人生 > >C++ Java學習路線

C++ Java學習路線

(一)語言入門:
《C++ Primer》
最新版本:第三版(第四版國外已上架,國內一些網上書店也在預訂中)
適合有豐富C經驗,缺乏C++經驗的。不過我個人一直認為此書帶著過於強烈的C語言的痕跡,對於C++的學習未必是好事。

《The C++ Programming Language》/《C++程式設計語言》
最新版本:第三版特別版
簡稱TC++PL,有其他語言的豐富經驗的。(也有人簡稱之為“TCPL”,但需與另一本《The C Programmer Language》區分開來)

《Essential C++》
《Accelerated C++》
這兩本薄一些,都是不錯的選擇。《Accelerated C++》本人沒有讀過,從各方面的評價來看,完全值得推薦。

以上幾本書都有相應的中文版,而且翻譯的質量都不錯。上面的書未必都需要讀一遍,但無論如何,TC++PL是應該閱讀的。

(二)進階A:
這個路線側重於語言本身

《Effective C++》
最新版本:第二版(第三版國外已上架,國內一些網上書店也在預訂中)
簡稱EC。C++程式設計師必讀!很多時候,我們說C++聖經不是指TC++PL,而是這一本。《The Pragmatic Programmer》一書中寫到:“一旦你發現自己要參與C++專案的開發,趕快跑(不要走)到書店去購買Scott Mayer的《Effective C++》,可能還要《More Effective C++》”。

《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 程式設計規範》
個人認為此書應為C++程式設計師必備的案頭書。幾乎Effective系列和Exceptional系列都在這裡得到了總結。最新的模版、異常的業界經驗都在這裡的到了體現。可能的唯一缺陷就是對一個新手而言,關於“為什麼這麼做”的問題,解釋的不夠。
我的看法是:如果你不理解其中的條款,記憶,並且照做;如果你理解其中的條款,我猜你一定會同意書中的觀點。我認為這本書中的內容至少在2009年以前都不會過時,人們將廣為傳誦它制定的101條戒律。
還不知道他的簡稱,也許“101”會成為一個候選者?

提到《Effective C++》,那麼另外三本書一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新書《Exceptional C++ Style》也是值得一看的好書。
上述幾本書,一本也不應該放過。
個人建議上述書籍按順序閱讀。並且,在將來反覆閱讀這幾本書。

(三)進階B:
這個路線側重於程式庫。

《The C++ Standard Library》/《C++標準程式庫—自修教程與參考手冊》
聽說過STL嗎?這本書會教你最基本的,也是最重要的STL的使用。這本書,應該是必讀的。

《Effective STL》
會使用STL還不夠,還必須知道什麼時候選擇什麼STL元件,這是STL使用的必讀書。

《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》/《泛型程式設計與STL》。
這本書理論性較強,但是真的很嚴謹,而且並不是非常難懂。理解其中對於Concept的解釋,將是非常重要的。

《C++ STL》
這不是講述使用程式庫的,而是講述程式庫實現原理的。腸胃不好的,需要慢慢吸收。

這個路線的書,仍然是建議按順序閱讀。
進階A、進階B兩個路線應該是可以並行的。

其他進階參考書
提出這些參考書,只是避免爭議,也為開闊視野,筆者並不曾完全讀過所有的。

《Thinking in C++》/《C++程式設計思想》
這本書及其中文版傳言好壞都有,沒有認真看過,不做評價,如果確有興趣,不妨嘗試一下該書。

以下幾本書基本上涉及的都是語言本身,大體上可以按照以下的順序閱讀。

《C++必知必會》
如果早一年,這本書將是重量級的,然而它被101和《Exceptional C++ Style》蓋過一頭。

《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程式設計陷阱》
這又是一本我未曾讀過,而且廣受好評的書。

《STL 原始碼剖析》
這本書我剛到手,就被人"借"走,以至於到現在也沒有看過。看過這本書的朋友,可以給一個合適的評價。

高階:
《The Design and Evolution of C++》/《C++語方的設計和演化》
簡稱D&E,內容並不艱深,Bjarne的書,僅此,就值得一讀。
前段時間,互動網曾8塊一本(人民幣)賤賣此書,現在好像沒了。

《Inside The C++ Object Model》/《深度探索C++物件模型》
C程式設計師讀後一定會覺得C++原來並不神祕。

《C++ Template》
在閱讀STL、Boost或者Loki的原始碼之前,請仔細閱讀本書,它可以減輕一些閱讀的煩惱。這本書是討論C++模版的權威。

《Modern C++ Design Generic Programming and Design Patterns Applied》/《C++設計新思維——泛型程式設計與設計模式之應用》
簡稱MCD。在閱讀MCD之前,建議先閱讀一下《C++ Template》。

《物件揭祕:Java、Eiffel和C++》
你對C++不滿嗎?這本書可以部分地幫你完成抱怨的目標。也許它還可以讓你不迷信C++。

最後,一份C++標準文件也是應該加以咀嚼的。
還有一些書籍,並不能簡單的歸於C++,也難以在純粹的書本學習中加以掌握。《Design Patterns》/《設計模式》一書就歸於此類。

所有上述的書籍,要麼談論C++語言本身,要麼談論STL的,要麼兼而有之(當然嚴格講STL也是C++語言非常重要的一部分)。偶爾,某些書中條目也會涉及實際工程。這些書並不是C++軟體開發的全部,但是他們很重要。閱讀這些書,未必需要化費太多的精力,有時候是會困難,但也有時候會很快速。
最後,程式語言並非計算機科學技術的全部,尤其對於在校的學生來說,打好基礎、開闊視野都是非常重要的。













1. 《C++ Primer》Lippman寫的,經典中的經典,C++入門的寶典,讀完這本書,基本語法過關,部分技巧掌握。 
2.《The C++ programming language》C++的創始人Bjarne Stroustrup寫的,這本書的權威性毋庸置疑,而且這裡面講到了一些比較底層的東西,如果你看過了《C++ Primer》的話,這本書可以跳著看,懂的就跳過。 
3.《Effective C++》 Scott Meyers頂級大師用活潑幽默的語言寫的書,這本書中講到了許多應該注意的問題,這是十分值得購買的書。(Lippman曾把程式設計師分為看過effective c++的和沒看過的兩類。由此可見此書的重要性) 
4.《More Effective C++》上書的姊妹篇,這本書裡講到了許多關鍵性的技術,對提高程式的效率是非常有幫助的。 
5.《Advanced C++》這是一本神奇的書,裡面講到了許多連C++設計者都沒想到的妙法,解決了許多看似不可能解決的問題。Scott Meyers曾隆重推薦過的書。 
6.《Inside the C++ Objects Model》又是Lippman的大作!這本書講到了他在開發第一個C++編譯器時的許多想法,徹底解析了C++底層機制是如何實現物件模型的,看過這本書,你對C++的瞭解會有質的飛躍!從這刻起,你有權力說你是一個C++程式設計師了! 

光學C++語言基本上看完上述的書就是高手了,其他經驗要在實踐中累積,這是我個人的經驗。另外,你學了C++還要開發程式,開發軟體,無疑要使用MFC之類的東西 
《API Programming》和《MFC Windows 程式設計》兩書值得一看。這兩本書能迅速提高你的實踐水平。













【學習基本路線圖】

        順序:基本原理(進位制轉換啊什麼的) -->  C(學習能力強的可以從C++開始)  -->   API -->  C++語法  -->  作業系統原理  -->  MFC   -->  資料庫  --  資料結構  --  硬體  --  領域程式設計(根據你自己以後的行業特點的專業性程式設計)
        
       最後從資料庫開始可以交叉進行。

【學習方法】

        1.基本原理:

        這個部分主要理解就行了,至於是不是非要記住十六進位制怎麼轉換二進位制啊,CPU結構圖啊什麼的,完全沒有必要。記住主要是理解,記憶並沒有什麼意 義,有些人略過這些一樣能學會C++,之後回頭再詳細學習效果會更好,更開始就大概知道有這個回事就行了。
        推薦書籍:《微機原理與接**術》作者:牟琦  這本書看到第23頁就行了,知道進位制轉換的大概方法和有這麼一回事就行了。
                       《組合語言》第二版   作者:王爽(只看第一,二,三章)    這是第一本讓我覺得過人也能寫出好書的書,相當經典,彙編領域過人寫的出還真的是不錯,一本80X86領域的就是這本,WIN32的就是羅雲彬的那本 《WIN32彙編程式設計》第三版,現在好像出第四版了,叫什麼玉拙成器什麼什麼的。

        2.C

        既然我們是學習C++,那麼C就是路過的,C是一門面向過程的語言(哲學說法,現在你還不需要懂,不要怕呵呵),而C++是一門面向過程的語言(也 是哲學呵呵,不懂先彆著急,這個要慢慢去領悟),說白了,C++是C的一個超集,對C做了一些有意義的擴充,這個說多了暫時你還不明白,總之這個階段的學 習有些人喜歡從C開始,有些人喜歡直接從C++開始,其實多半都是一樣的,學了C以後你學起來C++更加簡單,因為很多東西都是一樣的,著名的《C++ primer plus》就把C++的學習分成了兩個部分,C部分和C++部分。
        推薦書籍:如果你想快速掌握C和C++的基礎語法,那麼選擇譚浩強的綠本本吧,這本書寫的很簡陋,快速瀏覽一下C和C++的基礎語法還是可以的,真 正掌握就算了吧。
                      還有網上不論青紅皁白推薦的書下面做一下介紹:
                      回覆最多的無非就是兩本: 譚浩強 C 和 K&R C,K&R是C的創始人,他們的書根本不適合新人去看,到不是有多難,他們只是在建立一種標準,而不是一本真正的教程。
                      個人認為真正想學習C的人,看清楚了,真正想學習C的人啊,不是路過的人,應該看一下《C primer plus》,這本書有些羅嗦,但是講的很全面,可以當字典使用。

        3.API
        這部分的話,其實是慢慢積累的,你去Google查一下什麼是API就好了,學習Windows原理的時候你會理解到是個什麼東西的,大概說起來就 是微軟給我們提供了一些封裝好了的函式,我們可以呼叫過來實現一些簡單而且常用的功能,比如MessageBox是彈出一個視窗,你只要在他的引數裡自己 設定大小啊和現實什麼啊就是了。
        推薦書籍:MSDN 微軟提供的字典式的幫助文件,這個是你積累API什麼的最好的老師。

        3.C++
       
         重點來了,如果你前面學習了C,那麼你現在可以先溫習一下C的語法,因為在你沒有學習面向物件之前,C和C++的語法是基本一樣的,注意是基本,迴圈 啊,指標啊,陣列啊,結構啊,函式啊,+—×/%啊什麼的。然後你要開始重要的一步:學習C++自己獨有的特性,類啊,封裝啊,過載啊,多型啊,繼承啊什 麼的,這些都是非常重要的,在你日後寫Windows程式的時候都是經常用到的知識,並且是必不可少的。
        推薦書籍:《C++ primer plus》 第五版中文版 這本書詳細到真是有些羅嗦,C++的每一個角落都不放棄,學習的時候不求掌握所有的特性,但是必須去理解,以後你遇到了不懂的或者比較生疏的可以回頭來 查,這樣學習的才比較紮實。
                       《C++ primer》第四版 這是C++領域裡我讀過最經典的書籍之一了,在這本書裡,你將震驚於大師的技法和教學角度,你會經常感嘆,再感嘆。這本書呢,不是你現在學的,而是等自己 寫出幾個像樣的Windows程式以後,再回頭來看,你才能有所領悟。

        4.作業系統原理
        
        這個其實是學習MFC(下一步要介紹的)必須學習的,如果你用C寫過Windows程式,你會對這個瞭如指掌,但是我們只是學了語法,這部分就必須 去學習,其實很快,我們不必知道的太多,只需要得到必須的就可以了,這部分當年我一天學完的,就是看孫鑫的視訊學會的(只看視訊第一章就行了,第二章講C++特性 的你也可以看看,MFC從第三章開始,以後接著看)。
        推薦書籍:這裡推薦孫鑫的視訊,這部視訊在《深入詳解VC++》這本書的的配套光盤裡,非常經典,不可多得的過人講解的超高水平的視訊,看不懂就多 看幾遍,我當年看了三遍才看懂(光看是絕對看不懂的,自己跟著寫才行)。你只要看第一章就行了。
      
       5.MFC
   
       堅持住,學完這部分你就能寫出真正的WIN32應用程式了,MFC呢就是微軟把你所需要實現的功能進一步封裝起來了(比API),你只需要實現你的功能, 至於程式的框架(最大化按鈕啊,關閉按鈕啊,邊框啊,標題啊,什麼的都給你提供好了,不用你自己用API程式碼實現了),具體的你學完作業系統原理(看完孫鑫的視 頻第一章以後才能理解,現在不多說)。
       MFC雖然給程式設計提供了諸多方便,但是無形中給學習卻增加了難度,這部分要堅持住,多看幾遍孫鑫的視訊,好好的去啃才能有收穫。
       推薦書籍:孫鑫《VC++深入詳解》,主要是視訊比較著名。
                     侯先生(臺灣)《深入淺出MFC》第二版,這本書很老了,但是依然是MFC的經典,但是是你以後真正拿MFC寫出程式了以後,再去看,不然你絕對是看不 懂的,現在不著急看。

      6.最後你們都會有自己的想法了,具體我也教不了你們什麼了,之後你要設計的領域都寫在路線圖裡了,至於更高階的領域,設計模式什麼的,是有一定經驗以後再去加深的。
      這個時候你要做的,就是還要不斷的學習
















(一)語言入門:
《C++ Primer (3RD)中文版》Stanley B.Lippman, Josee Lajoie
適合有豐富C經驗,缺乏C++經驗的。
 
《The C++ Programming Language》/《C++程式設計語言》Bjarne Stroustrup(c++之父)
簡稱TC++PL
 
《The Design and Evolution of C++》Bjarne Stroustrup 
簡稱D&E
TC++PL和D&E是C++語言聖經
 
《Essential C++》Stanley B. Lippman
《Accelerated C++》
這兩本薄一些,都是不錯的選擇。
 
上面的書未必都需要讀一遍,但無論如何,TC++PL是應該閱讀的。
 
(二)進階A:
這個路線側重於語言本身
 
高效、健壯程式設計
《Effective C++》
簡稱EC。C++程式設計師必讀!很多時候,我們說C++聖經不是指TC++PL,而是這一本。《The Pragmatic Programmer》一書中寫到:“一旦你發現自己要參與C++專案的開發,趕快跑(不要走)到書店去購買Scott Mayer的《Effective C++》,可能還要《More Effective C++》”。
 
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 程式設計規範》
 

提到《Effective C++》,那麼另外三本書一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新書《Exceptional C++ Style》也是值得一看的好書。
上述幾本書,一本也不應該放過。
個人建議上述書籍按順序閱讀。並且,在將來反覆閱讀這幾本書。
 
(三)進階B:
這個路線側重於程式庫。 
 
標準庫 
《The C++ Standard Library》/《C++標準程式庫—自修教程與參考手冊》
聽說過STL嗎?這本書會教你最基本的,也是最重要的STL的使用。這本書,應該是必讀的。
 
《Effective STL》
會使用STL還不夠,還必須知道什麼時候選擇什麼STL元件,這是STL使用的必讀書。
 
模板和泛型程式設計
《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》/《泛型程式設計與STL》。
這本書理論性較強,但是真的很嚴謹,而且並不是非常難懂。理解其中對於Concept的解釋,將是非常重要的。 
 
《C++ STL》
這不是講述使用程式庫的,而是講述程式庫實現原理的。腸胃不好的,需要慢慢吸收。
 
 
網路程式設計
《C++網路程式設計,卷1:運用ACE和模式消除複雜性》,華中科技大學出版社
《C++網路程式設計,卷2:基於 ACE 和框架的系統化複用》,電子工業出版社
 
雜項
《C++程式設計思想(第2版)第1卷:標準C++導引》,機械工業出版社
《C++程式設計思想(英文版 第2版)》,機械工業出版社
《C++沉思錄》,人民郵電出版社
《深度探索C++物件模型》,華中科技大學出版社
《深度探索C++物件模型(影印版)》,中國電力出版社

 
C++工程領域的最高境界:
《設計模式:可複用面向物件軟體的基礎》,機械工業出版社

 
這個路線的書,仍然是建議按順序閱讀。
進階A、進階B兩個路線應該是可以並行的。

















首先是 c++的,我想買這個C ++ Prime 第四版,這本書很多人評論說很好,不知道看過這本書的人覺得怎麼樣?還有更好的書推薦碼?

其次是資料結構的書,我原本想買嚴蔚敏的,但是聽別的朋友說最好是買國外的。

再次是windows程式設計,這個是sdk程式設計。不知道《Windows核心程式設計》適合我不?

最好是MFC程式設計,這個我已經選了孫鑫的視訊了,但是還是缺一本書,不知道 《MFC Windows應用程式設計 》 任哲著這本書如何?《Windows程式設計 第二版》王豔萍的,這本書又如何呢?

 

最後還有就是一本 《VC++技術內幕第四版》的,這本書什麼程度才能看呢?至於《Windows程式設計第五版》電子書我已經有了。

對於初學者,應該從《C++ Primer》第四版、《C++ Primer Plus》(第5版),《C++程式設計思想》或者《Accelerated C++》開始,當然《C++入門經典》(第3版)或者《C++大學教程(第五版)》也可以考慮,在書店裡翻看,根據自己的閱讀和學習習慣進行選擇好了。唯一的忠告是:不要選擇國內自編的入 門教程。在學習的同時,可以將《C++程式設計規範》和一本鉅著放在一旁,閱讀對應的相關段落和章節,如果有時間,做對應的習題。掌握基本特性後,可以對照 《C++必知必會》和《C++程式設計規範》,並試著做一做Exceptional系列中難度較小的題目,檢查自己的學習效果。程式設計實踐時可以閱讀《C++高 級程式設計》或者《C++程式設計思想》中的一些段落,當然,其他比較實用的軟體工程書也可以。這期間應該閱讀Effective系列,並挑選難度合適的 Exceptional題自測。經過這樣的錘鍊,你應該已經基礎非常紮實,可以步入C++的殿堂了。
既然java架構師,
首先你要是一個高階java攻城屍,熟練使用各種框架,並知道它們實現的原理。
jvm虛擬機器原理、調優,懂得jvm能讓你寫出效能更好的程式碼;

池技術,什麼物件池,連線池,執行緒池...:;

java反射技術,寫框架必備的技術,但是有嚴重的效能問題,替代方案java位元組碼技術;

nio,沒什麼好說的,值得注意的是"直接記憶體"的特點,使用場景;
java多執行緒同步非同步;
java各種集合物件的實現原理,瞭解這些可以讓你在解決問題時選擇合適的資料結構,高效的解決問題,比如hashmap的實現原理,好多五年以上經驗的人都弄不清楚,還有為什擴容時有效能問題?不弄清楚這些原理,就寫不出高效的程式碼,還會認為自己做的很對;總之一句話越基礎的東西越重要,很多人認為自己會用它們寫程式碼了,其實僅僅是知道如何呼叫api而已,離會用還差的遠。

熟練使用各種資料結構和演算法,陣列、雜湊、連結串列、排序樹...,一句話要麼是時間換空間要麼是空間換時間,這裡展開可以說一大堆,需要有一定的應用經驗,用於解決各種效能或業務上的問題;有時間再補充。

熟練使用linux作業系統,必備,沒什麼好說的 。

熟悉tcp協議,建立連線三次握手和斷開連線四次握手的整個過程,不瞭解的話,無法對高併發網路應用做優化; 熟悉http協議,尤其是http頭,我發現好多工作五年以上的都弄不清session和cookie的生命週期以及它們之間的關聯。

系統叢集、負載均衡、反向代理、動靜分離,網站靜態化 。

分散式儲存系統nfs,fastdfs,tfs,Hadoop瞭解他們的優缺點,適用場景 。

分散式快取技術memcached,redis,提高系統性能必備,一句話,把硬碟上的內容放到記憶體裡來提速,順便提個演算法一致性hash 。

工具nginx必備技能超級好用,高效能,基本不會掛掉的伺服器,功能多多,解決各種問題。

資料庫的設計能力,mysql必備,最基礎的資料庫工具,免費好用,對它基本的引數優化,慢查詢日誌分析,主從複製的配置,至少要成為半個mysql dba。其他nosql資料庫如mongodb。

還有佇列中介軟體。如訊息推送,可以先把訊息寫入資料庫,推送放佇列伺服器上,由推送伺服器去佇列獲取處理,這樣就可以將訊息放資料庫和佇列裡後直接給使用者反饋,推送過程則由推送伺服器和佇列伺服器完成,好處非同步處理、緩解伺服器壓力,解藕系統。

以上純粹是常用的技術,還有很多自己慢慢去摸索吧;因為要知道的東西很多,所以要成為一名合格的架構師,必須要有強大的自學能力,沒有人會手把手的教給你所有的東西。

想成為架構師不是懂了一大堆技術就可以了,這些是解決問題的基礎、是工具,不懂這些怎麼去提解決方案呢?這是成為架構師的必要條件。

架構師還要針對業務特點、系統的效能要求提出能解決問題成本最低的設計方案才合格,人家一個幾百人使用者的系統,訪問量不大,資料量小,你給人家上叢集、上分散式儲存、上高階伺服器,為了架構而架構,這是最扯淡的,架構師的作用就是第一滿足業務需求,第二最低的硬體網路成本和技術維護成本。

架構師還要根據業務發展階段,提前預見發展到下一個階段系統架構的解決方案,並且設計當前架構時將架構的升級擴充套件考慮進去,做到易於升級;否則等系統瓶頸來了,出問題了再去出方案,或現有架構無法擴充套件直接扔掉重做,或擴充套件麻煩問題一大堆,這會對企業造成損失;