架構師素養及從小菜進階架構(CTO)的書籍【轉】

CTO要了解無線技術/搜索/大數據/數據庫等。html

-- 一般定義架構有幾個層次,這包括業務架構、產品架構、應用架構和技術架構:
 1.業務架構:描述一個企業圍繞一個行業作了哪些業務,例如支付行業的收單、退款、出款、充轉提等能力,這與公司對外和對內定義的產品無關。
 2.產品架構:描述對外和對內定義的可銷售的產品,例如微信的條碼支付、掃碼支付、公衆號支付等。
 3.應用架構:描述提供了哪些系統和服務來實現對外和對內的產品架構,從而支持公司的業務架構,例如微信內部的訂單系統、支付系統、帳務系統和對帳系統等等。
 4.技術架構:一般涉及採用什麼的技術棧,以及各個技術棧之間如何分工和協做的,具體會細分爲數據架構視圖、服務化架構視圖、緩存架構視圖、消息架構視圖、安全架構視圖、性能架構師視圖等等。

做爲通用架構師應該有衆多的能力,這涉及到方向、戰略、策略、決策、影響力、規劃等。

對於技術人員在職位上的晉升,咱們一般經過點線面體來類比,這也是從工程師到架構師的晉級過程:
 點:可以獨立負責一個模塊的開發。
 線:可以根據設計,同時負責一個項目中多個模塊的開發,甚至獨立負責一個項目的開發。
 面:在所在領域內,能夠負責一個產品的整個研發過程,並對業務和技術要有前瞻性。
 體:可以負責一個產品線的研發過程,而且可以開拓某個行業。

架構能力,咱們一般經過深度、廣度和高度上來衡量:
 1.廣度:要有全棧的技術知識,針對所在領域的技術要有全面的瞭解,可以評估各類技術的優缺點,要能根據優缺點來作技術選型的決策。
 2.深度:要針對所在領域的核心技術有必定的造詣,閱讀過源碼,針對產生的 Bug 要有可以迅速定位的能力,或者曾經貢獻過核心代碼。
 3.高度:可以理解業務的本質,可以識別業務的風險,並作出合理的應對,對業務和技術都要具備前瞻性。要理解業務的本質,對業務的特殊性有所把控,要能抽象事務也要能具象事務。要能用技術服務業務,或者推進技術的更新換代,或者推進業務創新,從而直接產生價值。

  管理模式:架構師要理解和適應各類管理的方法,一般有傳統的多層企業管理、扁平化的企業管理、矩陣式管理,通常狀況下,扁平化管理的效率較高,溝通成本較低,適合初創企業,在這種管理模式下,架構師也比較容易發揮其價值。可是在多層的企業管理和矩陣式管理中,因爲層次較多,溝通成本增長,一項事情從上面傳達到下面要經歷多箇中層領導,中層領導須要一層一層往下傳達,傳達過程其實也是一種成本,對於每一個任務和項目須要溝通確認達成一致,才能保證項目傳達的方向的正確性,因爲層次多了,溝通成本增長,再因爲中層領導區分戰略思惟,或者有戰略思惟沒有落地經驗,就會致使底層的人有可能沒有徹底得到上層人交給的任務,在下面就有可能「憋死了」,這些都是管理上的通病,架構師必須理解所處的環境,已經產生的問題,針對這些問題來提供合理有效的解決方案,畢竟組織架構也屬於架構的一部分。java

> 架構師素養程序員

  分享一個架構師的成長階段。第一個階段應該是習慣養成階段,應該注重於培養良好的編碼和設計習慣,注重代碼量和代碼質量,注重抽象;第二個階段應該是培養模塊和系統設計能力,在關鍵系統設計上總結方法積累經驗,懂得資源(網絡IO、磁盤IO、內存、CPU等等)如何最優化利用,系統如何分層,掌握可用性、高併發、高性能的一些方法論和設計技巧;第三個階段是培養業務思惟,能站在業務需求角度思考系統架構的合理性和架構演進方向,能發現影響業務發展的系統瓶頸;第四個階段架構師應具有產品思惟。
十位值得關注的Java頂級專家- http://blog.csdn.net/FL63Zv9Zou86950w/article/details/78639669web

專訪架構師陳波:微博近幾年的架構演進之路和架構師的技能素養- http://geek.csdn.net/news/detail/199899?ref=myread
我的對架構的理解是這樣的:
  從開發人員的角度,架構是系統總體結構的規劃設計,也是系統實現的一個草圖,主要包含抽象出來的模塊、交互協議及設計決策。由於架構的模塊、協議、決策是抽象層面的規劃,因此具體實現跟業務相關,要考慮業務的需求與特性,還跟業務發展階段相關,要考慮業務當前的規模及發展階段,選擇合適的實現方案,必要時對當前的架構作適當的修改和演進。因此,架構是設計出來的,更是演進出來的;另外沒有最好的架構,只有更適合(當前業務場景和階段)的架構。

關於架構師如何定義:
  架構師負責設計系統總體架構,肯定系統實現的行動綱領,使設計的項目儘可能高性能、高可用、易實現,而且在上線後運維方便,在新功能加入時擴展性良好。

架構師的能力要求:
 1.較強的代碼能力,對平常問題有豐富的閱歷及解決之道,設計不是空談,須要實踐,代碼能力、解決問題的能力是系統實踐的一個副產品;
 2.較好的抽象能力,業務需求在架構師消化後,須要轉化爲設計藍圖,這中間須要大量的抽象。
 3.良好的溝通和組織能力,架構設計出來,須要組織討論、頻繁溝通,讓項目組成員理解架構組成及設計取捨的緣由,明白架構設計中的how和why,在遇到疑問、反對、建議時,能進行良好的溝通並有序的推動。
 4.較好的團隊協做能力和領導能力,架構師須要獲得項目組成員的承認,在關鍵時刻對技術的選擇做出及時、有效的決定,併爲決定負責。

架構師的主要職責:
 1.把業務需求轉換爲實現架構,定義每一個組成模塊的外部特性,好比它的依賴、性能、異常處理等,並肯定模塊之間如何通訊,最終造成能夠指導業務開發的行動圖。
 2.組織討論,組織更多的人來了解、討論架構,可以讓你們理解架構總體方案、模塊特性及邊界、決策權衡點,進而能夠自行進行組件服務的設計及實現;
 3.協助項目經理制定開發計劃和控制項目進度;
 4.肯定系統的基礎架構、實現技術,必要時組織技術調研和攻關。redis

Java架構師之路:Java程序員必看的15本書的電子版下載地址- http://blog.csdn.net/qq_37810594/article/details/72810316?ref=myread算法

  高效的程序員:
  熟悉不一樣的代碼結構和設計模式。有一套本身的工具或者方法論了(帶有Debug功能的編輯器)。高效率的程序員都把時間花在製做工具上。好一點的編輯器.系統性的思考方式.

  適合CTO修煉的書籍:《六頂思考帽》-思惟訓練;《少有人走的路》-心理修煉;《創新者的窘境》《創新者的解答》-企業戰略修煉;《定位》-自我定位修煉的書籍;《卓有成效的管理者》-管理方面的修煉;《麥肯錫方法》-工做方法方面,提升工做效率;《一網打盡》-企業文化。spring

CTO首席技術官職責:發展戰略,技術總監,團隊提高,團隊建設,項目管理,產品管理等。sql

> 成爲架構師:http://codebay.cn/post/939.html
  小團隊通常 10 人左右,其中經常是技術最牛的人作架構師(或 TL)。因此,架構師在廣大碼農中的佔比大概平均不到 10%。而架構師也能夠分爲初級、中級、高級三檔,江湖上真正高水平的軟件架構師就更少了。
  因此,大部分(超過九成的)碼農幹上許多年,仍是作不了架構師,這是什麼緣由形成的呢?
1:碼農分爲真的能寫代碼的,以及自認爲能寫代碼的。
2:真的能寫代碼的碼農又分爲自認爲寫的不錯的,以及真的還不錯的。
3:真的能寫不錯代碼的碼農又分爲會鑽研會不斷優化的,以及安於現狀的。
4:會鑽研的碼農又分爲喜歡廣度瞭解新技術走馬觀花的,以及深刻鑽研用到知識的。瞭解廣度的碼農又有少部分願意深刻某些技術,喜歡深刻研究的又每每缺少廣度知識。
5:極少深度廣度都關注的碼農又分爲爲技術而技術和爲業務而技術的。純爲技術而技術的碼農在國內的軟件行業需求太少,且需求的每每不是應用軟件領域了。
6:爲業務而技術的深度廣度都瞭解的碼農,又須要有良好的溝通能力。
7:而溝通好的,又有一部分當 PM 去了。
8:而後剩下的,又有一部分慢慢脫離實際開發(再也不作任何實現)或者開始依靠拿各類中間件搭積木來做爲「架構」手段。
9:除去這些,剩下對業務有必定了解,對技術廣度上有多種涉獵,深度上對部分技術研究完全,還有很重要的一點,考慮問題足夠細緻全面。
10:細緻全面善於溝通,技術上深度廣度都沒問題, 又喜歡這個工做,還會不時作底層實現,從業務和開發兩個角度出發,搭出「架構」來是爲了開發效率,爲了運行效率,爲了開發質量,爲了業務靈活和運行穩定,爲了維護方便等等這樣的人,我的認爲能夠稱爲「架構師」。
  而真能知足這種需求的,別說題主的 10% 的比例,1% 能不能達到我也持懷疑態度。其實如今的「架構師」大多數都停留在 8 這個層次,甚至不少在 5 這個層次就當上 title 上的架構師了。
  總之,成爲架構師,不只僅是工做上的簡單積累,更須要主動接納工做外的大量知識,同時,對性格上對於非技術能力上也有必定的要求,不只如此連思惟方式都很重要,外加職業發展中又有不少岔路,最後走到架構師這根樹枝上的就寥寥可數了。

金字塔結構
  自古以來,金字塔結構(人羣分個三六九等、高中低三檔)在人類社會的各行各業中廣泛存在,這是客觀規律。恐怕再過千萬年,也是如此。
人類社會爲何廣泛、長期存在金字塔現象?其餘動物,好比螞蟻、大雁社會,有嗎?這個問題就很深了,刨根問底有難度,也許應該問上帝。
金字塔結構 / 現象從根本上決定了大多數人作不了軟件架構師。不光軟件工程行業如此,能作技術領導的始終必然只是位於中上層的少數人。

英文水平差
  聽說中國有 700 萬碼農,英文很差彷佛是一個比較廣泛的現象。英語,尤爲讀寫很差,把合格的架構師候選人選砍掉一大半。

小富即安的心理
  不少碼農每個月拿到萬把塊錢,就問心無愧了,再也不有更高的追求。求穩求安定,這符合大多數人的心理。不滿於現狀,堅持不斷學習,努力提升本身的開發技術和管理水平,擁有強烈進取心,想一朝一日作編程高手、軟件架構師的人畢竟是少數。

二三流企業的壓制
  架構師不是隨便什麼人能夠作的。在一個企業團隊裏,架構師做爲研發和管理骨幹,具備特殊的地位和權利。

知識結構的缺陷
  架構師,程序員, 產品經理的區別,大概就是建築行業裏建築師,建築工人,甲方業主的區別。產品經理說我要建這麼這麼一棟樓,架構師說好吧,我來幫你看看是作成磚木結構仍是 框架結構,房型怎麼設計,水電氣怎麼佈局,預算多少,而後程序員上陣,按照圖紙把樓建起來。運營是大樓的物業管理,負責營運大樓。
  軟件開發愈來愈成爲傳統行業(即使在互聯網企 業),一個成熟的軟件團隊內部天然會分化出這些角色,各展所長。但很是不一樣的是,建築工人不多能自發成長爲建築師,後者都是科班出身,由於建築學科已經高 度發達,須要掌握結構力學,美學等技術,如今軟件行業尚未這麼高的成熟度,程序員和架構師接受的都是同樣的計算機教育,因此程序員能夠自學升級到架構 師,走一條不一樣的升級打怪路線。

那麼,架構師是什麼人呢?
  按所工做的不一樣軟件層分,有網絡架構,系統架構,數據架構,業務架構,應用架構,平臺架構。
  按所解決的問題領域分,有電商架構,支付架構,搜索架構,安全架構,性能架構,遊戲架構,多媒體架構,等等等。
  按其工做的深度來分,有集成架構,業務架構,模塊架構,框架架構,中間件架構,軟件架構,引擎架構,服務器架構,甚至編程語言架構。
是否是太亂了?比如在設計師的世界觀裏一切東西都須要設計。軟件也須要精心設計,在優秀的程序員眼裏,每一行代碼都須要架構!都體現了架構。
爲了解決問題,程序員天然須要架構,他們中的佼佼者被冠以架構師的名號,得到了必定的話語權,逐步成爲一個職業分工,我想,這就是架構師的原本面目。

成爲架構師,須要經驗和眼界
老碼農分爲兩種:游擊隊和板凳王
坐穿板凳有利於積累經驗,而不利於開拓眼界
遊遍四海有利於開拓眼界,而不利於積累經驗
碼農的生活是高壓的,惟有熱情能夠驅使你一邊吃着蘋果,一邊又去摘梨
然而,又有多少熱情沒有隨時間而冷卻呢?shell

 

Java進階之路——從初級程序員到架構師,從小工到專家- https://zhuanlan.zhihu.com/p/27991030
對分佈式存儲,雲計算及並行編程有必定研究。
搜索、推薦、廣告等.企業級架構-跨越業務和 IT 之間的鴻溝.
職業道路不用太嚴肅,要乾點好玩的事情,走不同的路。
有多年NIO領域的設計、開發經驗,對HTTP、TCP長鏈接技術有深刻研究與領悟。數據庫

> 成爲Java架構師必需要懂的知識- http://www.jianshu.com/p/925d9aa27be4
Java架構師要掌握哪些技術:一個是基礎技術,另外一個就是組織能力和提出解決方案能力了。
  熟練使用各類框架,並知道它們實現的原理。Jvm虛擬機原理、調優操做,懂得jvm能讓你寫出性能更好的代碼;池技術也是要掌握的,對象池、鏈接池、線程池都要會;Java反射技術,寫框架必備的技術;Java各類集合對象的實現原理,瞭解這些可讓你在解決問題時選擇合適的數據結構,高效地解決問題,寫出代碼;nio,注意「直接內存」的特色,使用場景。
  熟練使用各類數據結構和算法,數組、哈希、鏈表、排序樹等等都是;熟練使用Linux操做系統,也是必備的;熟悉各類協議,好比tcp協議,建立鏈接三次握手和斷開鏈接四次握手的整個過程,不瞭解就無法對高併發網絡應用作優化,http協議,session和cookie的生命週期與關聯;熟悉系統集羣、負載均衡、反向代理、動靜分離,網站靜態化;懂得分佈式存儲系統nfs,fastdfs,tfs,Hadoop瞭解他們的優缺點,適用場景,以及分佈式緩存技術memcached,redis,提升系統性能必備.

   一個軟件架構師首要的和最重要的是他的遠見。若是一個架構師擁有一些軟件開發經驗,那會更好,但大多時候,他們面對的是一個多語言的複雜環境。在第一行代碼開始編寫以前,架構師須要制定出業務需求如何轉變成解決方案。這不只僅須要業務環境的相關知識,從業務操做到客戶環境,他還須要向公司上級勾畫出一個使人信服的系統。若是有些問題不事先考慮,如擴展性,訪問延遲問題,安全問題,系統開始開發時就會忽略這些。而資深程序員瞭解本身的團隊,瞭解他們的能力。資深程序員知道如何管理工做進度,確保開發中的軟件如何實現架構設計的目標。

>   架構要在理想和現實之間折中,保證架構的設計實用可行「接地氣」,且又不過於「山寨」。具體總結爲如下幾點:
  1. 要端到端地審視系統
由於不管在課本教學仍是文章介紹中,講解分析每每只是集中在一個系統的某一個小塊地方,會加以簡化與假設。但在現實中,系統則應該從端到端來處理,所以用這個模式來考慮問題,會獲得一個比較合適的結果。不然可能會只看到局部,而丟掉全局的把控。谷歌的Jeff Dean也曾闡述過這一問題,強調要理解整個系統是如何串在一塊兒的。
  2. 對複雜性的理解和控制
由於只要是一個系統,到最後都會變得至關複雜,有各類緣由致使它愈來愈複雜。對此我有一些經驗,好比儘可能把複雜性控制在一個地方,而後再經過一些分層次、模塊之類的方法來將其隔離開來。我以爲對於作架構來講,很重要的一個工做就是對複雜性的控制,由於全部的系統到最後若是崩潰的話,基本上都是由於複雜性失控致使的。
  3. 關注分佈式
目前,全部的系統基本上都是分佈式的,因此在設計系統時基本上都是以分佈式爲先,應該假設這個系統就是分佈的。分佈式表明什麼?好比說一個請求可能會失敗,你要作好對失敗的處理,一個請求可能會不在你指望的時間內返回,會有一些超時的設計,可能涉及資源競爭。總而言之,各類在單機和單個程序內不會發生的錯誤,在這個產品裏面都會出現,因此在設計的時候,必定要把這些因素考慮在內。
  4. 性能
雖然Donald Knuth曾說過一句很有名的話,就是「全部未成熟的性能優化是全部罪惡的根源」,意思是過早地作優化對整個系統是不利的。可是,還有一點我以爲可能沒有說太清楚。全部的系統設計其實都應該有一些性能的考慮在內。雖說不要過早作優化,可是應該定好幾個標線。與此相關的還有Jeff Dean在一個PPT裏列出來的:你應該對各個硬件和軟件的各類延遲、各類吞吐量,有一些量化的理解,不管是硬盤、SSD、內存,仍是CPU Cache,都應當有一個量級上的理解,以此保證你對這個性能的預估不會差得太離譜。由於若是架構開始出錯,性能設計存在瓶頸,最後將極難推廣。
  5. 技術之外的其餘因素
其實在我看來,架構是幾個因素的綜合考慮,包括:

  技術,也就是目前有哪些技術能夠用;
  人員分配,你如今有哪些技術人員能夠用。由於不一樣的工程師可能使用的技術不同,舉例來講,有些熱門語言,好比Erlang VM上的Elixir,還有Spark、Scala等的適用人羣和像是Python、PHP,或者Golang、C++等語言是不同的。
產品,不一樣的產品對人和技術的要求可能也不同;
時間表,你打算什麼時候發佈你的產品?
架構須要從這幾個角度全面考慮,找到一個折中的點,也就是可行的位置。有時在這幾點受限的狀況下,多是很難找到這個各方面都滿意的平衡點。我認爲架構師須要從這些因素排選,好比說某產品不行,就要砍掉一些功能;這些人員、這些技術不合適,可能就須要換技術或人;時間表若是知足不了就日後延遲——這是一個動態的過程,經過調整這幾個因素來尋求平衡。
  程序員更可能是考慮一個局部的問題,而架構師可能更側重全局考量。程序員眼中更傾向於一個點化的世界,能夠有不少假設,但架構師每每不能有那麼多假設,他須要根據實際狀況來考慮問題,包括所掌握的人力資源、技術限制、時間安排等——在這些因素的約束下,選擇將受限,一切也再也不那麼理想化。
  另一方面,架構師對知識瞭解的廣度和深度,可能比程序員要高一些。由於架構師的某些決策,有時甚至會對他人的最終結果產生影響。若是程序員寫了不少代碼,那個代碼卻沒法作出產品,這無疑是時間的浪費,而我以爲在這一方面,架構師應該承擔更多責任。
  最後,架構師須要跳出技術——這是我想要給你們分享的一個建議,即不徹底只看技術,而是要綜合考量包括技術和技術之外的因素,將其想象成一個相似於數學優化的問題。換一個角度來講,就是給你一些材料好比技術和人員,你要得到結果包括產品和團隊,而這個時候不少狀況是不理想的、有限制的,包括預算和時間的限制,因此你要思考如何靈活處理這個問題,包括調整各類輸入、限制,甚至是輸出,從而得到更優或者至少是可行的方案。架構師的世界,不只僅是技術,一般囊括人員、溝通、產品等各類因素。把這些因素都考慮進去,纔是一個完整的架構設計。

> 我的以爲架構師須要具備如下幾特色:
 1.知識廣度:須要知道主流技術爲何誕生,能解決什麼問題?若是同一種業務用不用的技術來實現,會有什麼哪些優缺點?好比:流行的ORM框架Mybatis 和 hibernate ,他們之間的優缺點是什麼?要有清晰的認識會能在技術造型時作出正確的決定。
 2.抽象能力:對業務和技術進行抽象。業務抽象就是對需求進行分析後,可以創建完美的實體類以及他們之間的聯繫。技術抽象是對總體架構進行一個分層,各層之間的交互。這相當重要,若是技術抽象能力不足,這會致使整個系統的架構不靈活,難以維護和擴展。
 3.知識的深度:至少是某個領域的專家,好比消息隊列,activeMQ熟悉其源碼,知道其實現。
 4.優秀的學習能力:對新的技術和前沿性的技術進行學習,使用它來解決工做中的業務問題。

那麼你該如何去作呢?我以爲能夠從如下幾個步驟開始:
 1: 紮實的JAVA 基礎,Think in java上介紹的內容都能理解,作到這一步恭喜成爲了程序員。
 2:熟練使用主流框架,如:mybatis,spring 等。
 3:研究過至少一種以web框架的源碼,如spring mvc ,struts 等。
 4:架構過或者參與太高併發系統設計,知道如何應對突發狀況。
 5:對本身所處的業務可以根據本身的知識維度,提出優化建議或者預測其風險點。
  Java 工程化、高性能及分佈式、高性能、深刻淺出。性能調優、Spring,MyBatis,Netty 源碼分析和大數據等

 

> 小菜進階架構的書籍

引用:http://blog.csdn.net/hongshan50/article/details/7047667

做爲Java程序員來講,最痛苦的事情莫過於能夠選擇的範圍太廣,能夠讀的書太多,每每容易無所適從。我想就我本身讀過的技術書籍中挑選出來一些,按照學習的前後順序,推薦給你們,特別是那些想不斷提升本身技術水平的Java程序員們。

  要好多年才能懂得,最好不是去震驚世界,而是要像易卜生所說的,生活在世界上。
技能,是爲了從事某項工做或活動所須要學習的專門知識與訓練的成果。程序員可以寫程序,只能算是技能過關吧,而能寫好程序,纔算具有了程序員的基本能力。而架構師,如其名,架構顯然不是一種技能,而是一種能力,綜合應用多種技能的能力。架構師也許不像在工程師階段寫大量代碼,但實際是須要具有代碼能力的,但僅此一項能力遠遠不足。在我本身的經驗中,至少還須要溝通、管理和領導能力。

《領域驅動設計》 《企業應用架構模式》 《領域特定語言》 《恰如其份的軟件架構》 《面向模式的軟件架構》
1、Java編程入門類

對於沒有Java編程經驗的程序員要入門,隨便讀什麼入門書籍都同樣,這個階段須要你快速的掌握Java基礎語法和基本用法,宗旨就是「囫圇吞棗不求甚解」,先對Java熟悉起來再說。用很短的時間快速過一遍Java語法,連懵帶猜多寫寫代碼,要「知其然」。《Java技術手冊》

一、《Java編程思想》

在有了必定的Java編程經驗以後,你須要「知其因此然」了。這個時候《Java編程思想》是一本讓你知其因此然的好書,它對於基本的面向對象知識有比較清楚的交待,對Java基本語法,基本類庫有比較清楚的講解,能夠幫你打一個良好的Java編程基礎。這本書的缺點是實在太厚,也比較羅嗦,不適合現代人快節奏學習,所以看這本書要懂得取捨,不是每章每節都值得一看的,挑重點的深刻看就能夠了。

二、《Agile Java》中文版

這本書是出版社送給個人,我一拿到就束之高閣,放在書櫃一頁都沒有翻過,可是前兩天整理書櫃的時候,拿出來一翻,居然發現這絕對是一本好書!這本書一大特色是以單元測試和TDD來貫穿全書的,在教你Java各類重要的基礎知識的過程當中,潛移默化的影響你的編程思惟走向敏捷,走向TDD。另外這本書成書很新,以JDK5.0的語法爲基礎講解,要學習JDK5.0的新語法也不錯。還有這本書對於內容取捨也很是得當,Java語言畢竟類庫龐大,能夠講的內容太多,這本書選擇的內容以及內容的多寡都很得當,可讓你以最少的時間掌握Java最重要的知識,順便培養出來優秀的編程思路,真是一本不可多得的好書。

雖然做者本身把這本書定位在入門級別,但我不肯定這本書用來入門是否是稍微深了點,我本身也準備有空的時候翻翻這本書,學習學習。


2、Java編程進階類

打下一個良好的Java基礎,還須要更多的實踐經驗積累,我想沒有什麼捷徑。有兩本書值得你在編程生涯的這個階段閱讀,培養良好的編程習慣,提升你的代碼質量。

一、《重構 改善既有代碼的設計》

這本書名氣很大,不用多介紹,能夠在閒暇的時候多翻翻,多和本身的實踐相互印證。這本書對你產生影響是潛移默化的。

二、《測試驅動開發 by Example》
本書最大特色是很薄,看起來沒有什麼負擔。你能夠找一個週末的下午,一邊看,一邊照作,一個下午就把書看完,這本書的全部例子跑完了。這本書的做用是經過實戰讓你培養TDD的思路。

3、Java架構師之路
《架構之美》《面向模式的軟件架構》《領域驅動設計》《實現領域驅動設計》《軟件框架設計的藝術》
到這個階段,你應該已經很是嫺熟的運用Java編程,並且有了一個良好的編程思路和習慣了,可是你可能還缺少對應用軟件總體架構的把握,如今就是你邁向架構師的第一步。

一、《Expert One-on-One J2EE Design and Development》

這本書是Rod Johnson的成名著做,很是經典,從這本書中的代碼誕生了springframework。可是好像這本書沒有中譯本。

二、《Expert One-on-One J2EE Development without EJB》

這本書由gigix組織翻譯,多位業界專家參與,雖然署名譯者是JavaEye,其實JavaEye出力很少,實在是忝居譯者之名。

以上兩本書都是Rod Johnson的經典名著,Java架構師的必讀書籍。在我所推薦的這些書籍當中,是我看過的最仔細,最認真的書,我當時讀這本書幾乎是廢寢忘食的一氣讀完的,有小時候挑燈夜讀金庸武俠小說的勁頭,書中所講內容和本身的經驗知識一一印證,又被無比精闢的總結出來,讀完這本書之後,我有種被打通經脈,功力爆增的感受。

可是後來我看過一些其餘人的評價,彷佛閱讀體驗並無我那麼high,也許是由於每一個人的知識積累和經驗不一樣致使的。我那個時候恰好是經驗知識積累已經足夠豐富,可是尚未系統的整理成型,讓這本書一梳理,馬上造成完整的知識體系了。

三、《企業應用架構模式》

Martin的又一本名著,但這本書我只是泛泛的看了一遍,並無仔細看。這本書彷佛更適合作框架的人去看,例如若是你打算本身寫一個ORM的話,這本書是必定要看的。可是作應用的人,不看貌似也無所謂,可是若是有空,我仍是推薦認真看看,會讓你知道框架爲何要這樣設計,這樣你的層次能夠晉升到框架設計者的角度去思考問題。Martin的書我向來都是推崇,可是歷來都沒有像Rod Johnson的書那樣很是認真去看。

四、《敏捷軟件開發原則、模式與實踐》
Uncle Bob的名著,敏捷的經典名著,這本書比較特別,與其說是講軟件開發過程的書,不如說講軟件架構的書,本書用了很大篇幅講各類面向對象軟件開發的各類模式,我的覺得看了這本書,就沒必要看GoF的《設計模式》了。

4、軟件開發過程

瞭解軟件開發過程不單純是提升程序員我的的良好編程習慣,也是加強團隊協做的基礎。

一、《UML精粹》

UML其實和軟件開發過程沒有什麼必然聯繫,倒是軟件團隊協做溝通,撰寫軟件文檔須要的工具。可是UML真正實用的圖很少,看看這本書已經足夠了,徹底沒有必要去啃《UML用戶指南》之類的東西。要提醒你們的是,這本書的中譯本翻譯的很是之爛,建議有條件的看英文原版。

二、《解析極限編程 擁抱變化》XP

這是Kent Beck名著的第二版,中英文對照。沒什麼好說的,必讀書籍。

三、《統一軟件開發過程》UP

其實UP和敏捷並不必定衝突,UP也很是強調迭代,測試,可是UP強調的文檔和過程驅動倒是敏捷所不取的。無論怎麼說,UP值得你去讀,畢竟在中國真正接受敏捷的企業不多,你仍是須要用UP來武裝一下本身的,哪怕是披着UP的XP。

四、《敏捷建模》AM

Scott Ambler的名著,這本書很是的progmatic,告訴你怎麼既敏捷又UP,把敏捷和UP統一塊兒來了,又提出了不少progmatic的建議和作法。你能夠把《解析極限編程擁抱變化》、《統一軟件開發過程》和《敏捷建模》這三本書放在一塊兒讀,看XP和UP的不一樣點,再看AM是怎麼統一XP和UP的,把這三種理論融爲一爐,造成本身的理論體系,那麼你也能夠去寫書了。

5、軟件項目管理

若是你忽然被領導提拔爲項目經理,而你徹底沒有項目管理經驗,你確定會內心沒底;若是你以爲本身管理項目不善,很想改善你的項目管理能力,那麼去考PMP確定是遠水不解近渴的。

一、《快速軟件開發》

這也是一本名著。能夠這樣說,有本書在手,你就有了一個項目管理的高級參謀給你出謀劃策,不再必擔憂本身不能勝任的問題了。這本書不是講管理的理論的,在實際的項目管理中,講這些理論是不解決問題的,這本書有點相似於「軟件項目點子大全」之類的東西,列舉了種種軟件項目當中面臨的各類問題,以及應該如何解決問題的點子,你只須要稍加變通,找方抓藥就好了。

6、總結

在這份推薦閱讀書籍的名單中,我沒有列舉流行的軟件框架類學習書籍,例如Struts,Hibernate,Spring之類,也沒有列舉AJAX方面的書籍。是由於這類書籍容易過期,而上述的大半書籍的生命週期都足夠長,值得你去購買和收藏。

 

1. Java語言基礎
    談到Java語言基礎學習的書籍,你們確定會推薦Bruce Eckel的《Thinking in Java》。它是一本寫的至關深入的技術書籍,Java語言基礎部分基本沒有其它任何一本書能夠超越它。該書的做者Bruce Eckel在網絡上被稱爲天才的投機者,做者的《Thinking in C++》在1995年曾獲SoftwareDevelopment Jolt Award最佳書籍大獎,《Thinking in Java》被評爲1999年Java World「最愛讀者歡迎圖書」,而且贏得了編輯首選圖書獎。做者從1986年至今,已經發表了超過150篇計算機技術文章,出版了6本書(其中4本是關於C++的),而且在全世界作了數百次演講。他是《Thinking in Java》、《Thinking in C++》、《C++ Inside & Out》《Using C++》和《Thinking in Patterns》的做者,同時仍是《Black Belt C++》文集的編輯。他的書被讀者稱爲「最好的Java參考書……絕對讓人震驚」;「購買Java參考書最明智的選擇」;「我見過的最棒的編程指南」。做者的非凡才華,極其跨越語言的能力,使做者被選爲Java發展10年間與Java關係最密切的10我的物之一。
    《Thinking in Java》講述了Java語言的方方面面,不少Java語言的老手都評價「這是一本將Java語言講得至關醜陋的書」。該書談及了java語言的不少細節,每個方面都是至關深入的。經過本書你能夠看到「醜陋的」java語言。
    網絡上關於java語言講解的視頻不少不少,其中不凡是有垃圾。《 翁愷—JAVA語言》多是你學習java語言基礎的惟一選擇,該講座基本按照《Thinking in Java》這本書講解,其中不凡是有翁老師的不少有意思的笑話。我很幸運學習就是今後視頻開始的。內容包括30講,我總共看了3遍。
    不過,對於初學者我不太推薦使用《Thinking in Java》,我比較推薦Prentice Hall PTR 的《Core Java 2》國內稱爲《Java 2 核心技術》,目前是第七版。網絡上你們均可如下載到電子版。Oreilly的《Java in a nutshell》也是一個不錯的選擇。讀完以上兩本後,你能夠看看 翁愷老師的視頻,接着能夠研究《Thinking in Java》了。
 
2. Java數據結構
    市面上關於Java數據結構的書自己就不多不多。大體有APress 的《Java Collections》,Jones 和Bartlett 的《Data Structures in Java》、《Object-oriented Data Structures Using Java》以及Prentice Hall 出版的《Data Structures and Algorithms in Java》 (Dec 19, 2005)還有一本就是《Data Structures And Algorithms With Object-oriented Design Patterns In Java》。很幸運個人第一本英文書就是APress 的《Java Collections》(本書在國內可能根本就沒有中文版――只能下載英文版了),很不錯,講得頗有條例、很簡單,是一本完徹底全Java Collections API介紹的書籍,其中不凡是有擴展API的例子。這是我推薦你學習java數據結構的惟一一本好書。其它的Jones 和Bartlett的那兩本國內好像有一本中文版,想看你也能夠看看。
    在學習完API後,你能夠看看java.util包中對應的類了。不過只有在學習過設計模式後你纔有可能徹底理解整個Java Collections Framework。Java Collections Framework使用了不少著名的設計模式如:迭代器(Iterator)模式,工廠方法模式、裝飾器模式、適配器模式等等。經過研究java.util包中數據結構的源代碼,你能夠知道臭名昭著的Properties類的設計了,同時可能基本具有設計簡單的數據結構的能力了。
    所謂學習無止境,學習完Sun提供了Java Collections Framework後,你能夠研究Apche的另外一個Java Collections Framework,頗有意思哦。互爲補充的兩個Framework。
 
    在你們學習、研究Java Collections以前,我提示一下Java Collections主要包括如下三部分:接口(Interface)、實現(Implemention)和算法(Algorithm)。
1.      接口主要有List、Set、Queue和 Map。List 、Se t和Queue是 Collection接口的子接口。
2.      實現主要是實現這些接口的具體類。如實現List接口的ArrayList、LinkedList、Stack和Vector;實現Set接口的HashSet、TreeSet 和LinkedHashSet;實現Queue接口的PriorityQueue、SynchronousQueue等等;實現Map接口的HashMap、TreeMap、Hashtable、Properties、WeakHashMap等等。
3.      算法主要是由Arrays類和Collections類提供的,它是整個Java Collection Framework算法的核心。支持各類類型的排序,查找等經常使用操做。
     Java Collections中包含兩個版本的數據結構,主要是原先的支持同步的數據結構和後來不支持同步的數據結構。
     Java Collection Framework在使用Comparator和Comparable接口支持排序。同時提供新舊兩個版本的迭代器Iterator和Enumeraton,以及它們如何轉換等等。
    在java.util包中的Obserable接口和Observer類是考察者模式的核心。
     ……
    
3. Java IO
    市面上關於IO的書籍也僅僅只有Oreilly出版社的兩本,都是Elliotte Rusty Harold的著做。兩本書的風格基本一致,推薦閱讀是初版的《Jvava I/O》,講得比較淺顯,內容相對比較集中,實例也不少。第二版今年5月國外才出版,頗有幸我在網絡上下載了第二版,講得極其詳細――726頁的大塊頭(我化了兩個星期),此次將NIO和IO和在一塊兒,還包括J2ME部分的,不過串口、並口通訊部分好像類庫支持不夠,本身不能實際操做。
    與初版的《Jvava I/O》一塊兒的Oreilly還有一本《Jvava NIO》,也是很不錯的哦。
    你們在依次閱讀完《Jvava I/O》以及《Jvava NIO》後,能夠研究java.io包中的源代碼了。在你們研究源代碼前我給點提示:
     Java的io包主要包括:
1.      兩種流:字節流(byte Stream)和字符流(character stream),這兩種流不存在所謂的誰代替誰、誰比誰高級之說,它們互爲補充,只是側重點不一樣而已。
2.      兩種對稱:1.字節流、字符流的對稱;2.輸入、輸出的對稱。
3.      一個橋樑:將字節流轉變爲字符流的InputStreamReader和OutputStreamWriter。
    其中必須注意:
1.      PipedInputStream和PipedOutputStrem是兩個比較有趣的類。
2.      支持Buffered的流是咱們常用的類。
3.      裝飾器(Decorator)模式在java最著名的應用就是用於io的設計。仔細研究各個Filter流與具體流的關係,多看設計模式的書籍。相信你會有所所獲。
4.      學習好io包,是研究net包,rmi包……的基礎哦!
 
4 . Java數據庫
       數據庫的書籍太多太多了,也是太爛太爛了!這方面的書我基本都研究過,推薦的你就看看Apress的《JDBC Recipes A Problem Solution Approach 》很不錯,國外2005年末纔出版,(國內好像沒有中文版,不過出了中文版也不必定值得看――國內常常將國外的書翻譯得一塌糊塗、不堪入目)不過咱們真的很幸運,網絡上有電子版的。值得一看。推薦我看的第一本比較滿意的――Wiley出版的《Java Database Bible》,講得很不錯!Sun公司本身的關於JDBC API介紹的那一本《JDBC API Tutorial andRefernece》也不錯。我第二本JDBC的就是研究的這套API。
    不過目前這些書都是一些相對比較浮淺的API應用的書籍。有機會我會給你們帶來介紹JDBC API以及JDBC實現內部細節的書!我儘快努力,同時但願獲得你們的支持!
    順便給學習JDBC的朋友一點提示:
     JDBC的學習和使用主要是這套API,其使用過程也是極其簡單,下面是使用JDBC的通常流程:
1.      加載某個數據庫的驅動(Driver類),一般使用Class.forName(「驅動的類名「);
2.      鏈接數據庫――
             Connection con = DriverManager.getConnection(url,username,password);
3.      獲得會話――Statement stmt = con.createStatement();
4.      執行操做――Result rs = stmt.executeQuery(「SQL查詢語句」);
5.      處理結果――
     while(rs.next()){
         String col1 = rs.getString(1);
         ……
     }
    簡單吧!整個JDBC中能夠變化的通常是:
1.        能夠由Connection對象建立Statement、PreparedStatement和CallableStatement建立三種類型的Statement。
2.        能夠建立多種類型的ResultSet:支持單向移動和個自由移動;可更新的和不可更新的;支持不一樣等級的交易的…..
3.        數據輸入的批處理。
4.        結果集中特殊類型(Blob、Clob、Arrary和Ref、Struct)列的操做。
5.        這些特殊類型的錄入數據庫。
6.        javax.sql包中特殊結果集(CachedRowSet、JdbcRowSet、WebRowSet)的操做。
7.        其它的就是一個DataSource了,也很簡單!一個J2EE中的被管理對象
    簡單吧!相信你們很快就會征服JDBC。
 
5. Java 網絡編程
    網絡編程――一個神祕的、充滿挑戰的方向。不過在談Java網絡編程以前首先感謝Sun公司的開發人員,由於它們天才的設想,充滿智慧的架構,使廣大java程序員學習java網絡編程變得異常簡單。
     Java網絡編程方面的書,我推薦O'Reilly的《Java Network Programming》,目前已經第三版了,之前的版本市面上確定有!網絡上早有第三版的電子版,國外2004年出版,706頁哦!講得很全,比較深刻,太深刻的可能因爲Sun有些東西沒有徹底公開,因此也就很差講了,有興趣的能夠下載看看!第二本仍是O'Reilly 1998年出版的《 Java distributed computing 》,基礎部分寫得比較詳細,後面的實例仍是值得研究的。
    在你們閱讀這些書以前,給你們一點提示:
     java網絡編程其實相對比較簡單,入門也很快很快。java網絡編程主要包括兩個部分:1.Socket;2.URL部分。不過第二部分也徹底創建在第一部分的基礎上。
1.        Socket包括客戶端的Socket和服務器端的ServerSocket。還有就是DatagramSocket和DatagramPacket,它對應於UDP通訊協議。 總之,Socket部分是創建其它高級協議的基礎。
2.        URL類是一個網絡資源定位器,一般和具體的網絡協議如HTTP,FTP,Telnet……相關。經過該類能夠鏈接網絡上的資源,經過其openStream能夠以io包中的流(InputStream)的形式讀取網絡資源;經過其OpenConnection方法,能夠打開一個鏈接,在此鏈接上能夠不只能夠完成讀的操做,還能夠完成寫的操做。
     Java的網絡編程大致包括以上兩部分。網絡編程和IO以及多線程部分很是密切,在學習此部分前你們必定對這兩部分了解比較透徹。
    學習了以上部分你能夠研究java.net包中的與此相關的源代碼了!研究全部的源代碼還爲時尚早。在整個net包中包含:ContentHandlerFactory、URLStreamHandlerFactory、URLStreamHandler、URLClassLoader等輔助類,它們構成了java.net網絡編程的框架,經過研究其源代碼,你不只能夠快速理解java.net包,還能夠爲之後擴展該包打下基礎,甚至能夠將此思惟方式運用到本身的項目中。
    到此爲止你對java.net包應該才瞭解60%,還有一部分你能夠使用JDecompiler之類的反編譯軟件打開你JDK安裝目錄下\jdkxxx\jre\lib目錄中的rt.jar,用WinRAR之類的軟件打開它的sun.net包,反編譯全部的文件,它是URL類工做的細節。當研究完該sun.net包,你就會對整個網絡編程很熟悉很熟悉了。
    一切看起來咱們已經對網絡編程很精通了。其實否則,剛剛開始而已,要想深刻,請繼續吧!網絡上不少優秀的網絡編程庫甚至軟件能夠爲咱們「添加功力」。如Apache的HttpCore和HTTPConnection 是兩個和HTTP協議相關庫;JGroups是研究分佈式通訊、羣組通訊的必讀庫;接着咱們能夠研究P2P的軟件包,如Sun公司的JXTA,它多是java平臺點對點通訊將來的標準哦!接着你能夠研究成熟得不得了,使用極其普遍得P2P軟件Azureus! www.sourceforge.net能夠下載到!
    千里之行始於足下!Just do it !(目前我也只研究了net包,其它的會在不久的未來繼續深刻。Sun公司由於某些緣由沒有公開net的其它實現細節,在其容許將其源代碼以文字的形式加以研究,以及容許將其沒有公開的實現寫入書中時,我很但願能出一本java網絡編程的書籍,以飧廣大讀者!!)
6. Servlet和JSP
     Servlet、JSP的書也是滿地都是!值得推薦的也僅僅兩三本。實推Addison Wiley的《Servlets and JavaServer pages :The J2EE Technology Web Tier》,又是一本很厚的哦!國外2003年出版、784頁,講得比較全,例子也不少,特別是第八章Filter,舉了幾個不錯的例子。其它全部我看到的關於Servlet和JSP的書都沒有如此深刻的!(可能有我沒有看到而已)。O’reilly的《Java Servlet Programming》和《Java Server Pages》相對比較好懂一些,能夠讀讀!
    在你們學習Servlet和Jsp以前我仍是要提醒一下:
    本質上說Servlet就是一個實現Servlet接口的、部署於服務器端的服務器端的程序罷了!它能夠象寫其它任何java應用程序同樣編寫,它能夠操做數據庫、能夠操做本地文件、能夠鏈接本地EJB……編寫Servlet程序的通常流程爲:
1.      繼承一個HttpServlet類;
2.      覆蓋其doGet、doPost方法;
3.      在覆蓋方法的內部操做方法參數HttpServletRequest和HttpServletResponse。
4.      讀取請求利用HttpServletRequest。利用HttpServletRequest你能夠操做Http協議的協議頭、能夠獲得請求的操做方法、能夠獲得請求的路徑、能夠獲得請求的字符串、以及和請求客戶相關的信息,更主要的你能夠獲得Cookie和HttpSession這兩個對象。
5.      利用Cookie你能夠操做「甜心」對象或者將其寫入HttpServletResponse中。
6.      向客戶輸出信息能夠使用HttpServletResponse。使用HttpServletResponse能夠寫入各類類型的協議頭、能夠增長Cookie、能夠重定向其它URL、能夠向客戶發送Http協議的狀態碼。
7.      利用HttpSession在會話內完成你想實現的任何功能。
    同時Servlet還提供了一些事件和事件監聽器(簡單的觀察者模式而已)。還有就是過濾器(Filter)和包裝器(ServletRequestWrapper、ServletResponseWrapper)――簡單的流的使用和裝飾器模式的使用。
    學習Sevlet、JSP必然要部署到服務器中,記住一般文件部署的步驟和參數的設置以及在程序中如何使用就能夠了。
    徹底理解Servlet後,學習jsp相對比較容易了!Jsp徹底創建在Servlet的基礎上,它是爲了迎合那些喜歡在Html文檔中嵌入腳本(如:PHP之類的網頁編程語言)的程序員的須要罷了!學起來也至關的容易!
    一切看起來彷佛那麼的風平浪靜,簡單好學!簡單的表象背後有其複雜的機理。要想對Servlet和Jsp完全研究,你得研究Tomcat等開源軟件的具體實現。它無非就是一個服務器,在客戶利用網頁經過HTTP協議向服務器發送請求後,服務器將此HTTP請求轉化爲相應的HttpServletRequest對象,調用你編寫的Servlet罷了,在你的Servlet中你確定操做了此HttpServletRequest了吧,同時操做了HttpServletResponse了吧,服務器就將此HttpServletResponse按照HTTP協議的要求利用HTTP協議發送給你的瀏覽器了!在服務器端的Jsp網頁在被客戶請求後,Tomcat會利用編譯軟件,使用javax.servlet.jsp包中的模板,編譯此jsp文件,編譯後就是一個Servlet!之後的操做和Servlet徹底同樣哦!
    在Servlet和Jsp的基礎上出現了,所謂的高級技術:JSTL,Struts……無非就是一些標籤和MVC模式的使用。
    繼續前進吧!勝利就在前方!!
 
7. 多線程
    一個看起來很神祕,卻很容易上手、很難精通的方向!
    我推薦兩本我感受很好的書籍。首先是我第一本能上手看的這方面的書,Sams 1998年出版的《Java Thread Programming》,寫得暴好,很容易讀懂,我有空還時常看當時的筆記!要知道怎麼好你本身看吧!第二本OReilly三次出版的《Java Threads》,最新是2004版,國內好像有中文版,推薦你仍是看英文版的吧!書中談到了與多線程相關的N個方向,如IO、Swing、Collection等等。
    給你們一點提示吧!java類庫中與多線程相關的類不是不少,主要有:Thread、ThreadGroup以及ThreadLocal和InheritableThreadLocal四個類和一個Runnable接口;關鍵字synchronize、volatile ;以及Object對象的wait、notify、notifyAll方法!
1          Thread是多線程的核心類,提供了一系列建立和操做多線程的方法。
2          ThreadGroup是一個管理Thread的工具類。
3          ThreadLocal和InheritableThreadLocal爲Thread提供了一個相似保險箱功能的存儲線程對象的類!
4          Runnable不用說了吧!
5          synchronize是同步方法和同步塊的核心哦!多個線程調用此方法時,只有一個線程能夠使用此方法,其它方法阻塞,從而保證被操做對象內部狀態完整性。某個線程調用帶有synchronize的方法或塊時會獲得該對象的對象鎖,完成塊中的操做後釋放此對象鎖,從而其它對象能夠繼續操做。
6          wait、notify、notifyAll提供了有效的等待/通知機制。Java語言中每個對象都有一個休息室,任何線程在其操做的對象的狀態不知足的狀況下,在該對象的休息室中休息,釋放對象鎖;當其它線程操做該對象後,喚醒休息室中的線程,它們再檢查條件,當條件知足後,執行相應的操做。
    多線程大體就這麼多基礎的!簡單嗎!這對於一個真正的程序員應該是不夠的,真正對多線程要有所掌握,請您研究java.util.concurrent包吧!大師Doug Lea的做品,原先是一個開源的一致性編程的庫,後來被Sun公司併入java類庫。做者的網站上也有另一個版本的該類庫!值得研究的好東西!Hibernation、OpenJMS等開源軟件都使用了此包!
    
8. 設計模式
    談到設計模式不少人多會推薦GOF的那本,該書在Amzon上是五星級的推薦書籍。不過對於學習java沒多久的、特別是java初學者,我很不推薦這本書。主要是該書的例子基本都是C++的,不少細節沒有講述得足夠清楚。
    我給你們推薦的第一本是閻宏博士的《Java 與模式》,它是第一本中國人本身寫的關於設計模式的書籍,寫的比較有趣,融合了不少中華民族的文化和觀念,例子、類圖都比較多,且相對簡單!很是不錯的入門書籍――又是大塊頭哦!
    其次我推薦Wiley出版社出版的《Pattern In Java》一套三本,我纔看了第一本,好像第二本不怎麼樣,第三本還不錯!
    第三本是中文翻譯版的關於多線程模式的(很可貴的中文翻譯版)中國鐵道出版社2003年出版的《Java多線程設計模式》,將多線程模式講得很是淺顯,配有大量的圖例,每章都有習題,最後有答案!我研究多線程模式就是由它開始的!
    第四本,今年出版的Head First系列的《Head First Design Pattern》,秉承Head First系列圖書的優勢,大量的類圖、豐富的實例、有趣的註解,值得購買!
    其次在J2EE方向你能夠研究閱讀Addison Wesley 2002年出版的《Patterns of Enterprise Application Architecture》,衆多大腕的做品,講企業消息集成的!Sun提供的《J2EE PATTERNS SL500》也很好!晚了推薦那一本Amzon 4星半的《Holub on patterns》,大師的做品,提供了,很值得研究的例子,不過對上面四本不是很熟悉的讀者,最好不要讀它!可能會讓你比較累!
    我學習設計模式通過一段很曲折的路線,前先後後大約看了20本,閻宏博士的《Java 與模式》我看了4遍,還排除我第一次基本沒看懂的看!記得研一時老師給咱們講了GOF的那本,做爲選修課,我和它們計算機系的碩士、博士們一塊兒,到最後一個班40-50我的,不超過3我的明白,我也沒有明白任何一點(基礎差吧――主要我對C++語言一點都不瞭解),憑我不伏輸的性格,我認爲我對java語言理解還能夠,我就借了《Java 與模式》,結果仍是基本沒看懂。頗有幸的是讀研三時,聽過了上交大饒若楠老師關於Java OOP語言的講座,我懂了組合書籍模式等三種設計模式後,對其它模式有了強烈的興趣和要征服它的願望!工做後我買的第一本就是《Java 與模式》,第一遍花了2個月研究了這個1000多頁的大塊頭,後來第三遍15天左右就能夠搞定,筆記記了一大本!今後一發不可收拾。
    選對書、埋頭研究。相信很快就會入門的!
 
    學習Java語言8個簡單的部分,這只是咱們研究Java語言的開始!這些都懂了充其量一個java程序員而已,後面的路很長很長!咱們能夠繼續研究數據庫實現的源代碼、Servlet服務器的源代碼、RMI、EJB、JNDI、面向方面編程、重構、ANT工具、Eclipse工具、Spring工具、JBoss、JOnAS、Apache Geronimo等J2EE服務器!研究了這些你可能會成爲一個出色的J2EE Architecture!你能夠繼續研究剖析器、編譯器、JNODE(java寫的操做系統)……
 
    感謝你們有此耐心,聽我羅羅嗦嗦大半天!感謝你們的閱讀,感謝羣裏的朋友!這篇文章主要應羣裏朋友的呼聲――不知道如何選書、不知道從何看起!大半天的功夫完成趕此文章,字句上不免有失誤,同時因爲能力有限不凡是有錯誤!請閱讀後批評指正!
    上面基本是我研究java語言的順序,以上書籍都是我閱讀過的,不存在替任何出版社宣傳的成分!有的方法可能不適合你,假如你能收穫一點,兩點甚至更多,請你不要吝嗇推薦給你的朋友――共同窗習!
--------------------------------------------------

10本軟件架構師必讀書籍:《軟件架構:基礎,理論與實踐》《面向模式的架構,卷I:模式系統》《設計模式:可重用面向對象軟件的要素》《軟件架構實踐》《開發人員軟件架構》《軟件架構基礎》《大型軟件項目重構:成功實施複雜重組》《軟件系統架構:利用視點和觀點與利益相關者合做》《企業應用架構模式》《軟件架構師的12個基本技能》

相關文章
相關標籤/搜索