本人也是coding不少年,雖然很失敗,但也總算有點失敗的心得,不過我在中國,大多數程序員都是像我同樣,在一直走着彎路,若是想成爲一個架構師,就必須走正確的路,不然離目標愈來愈遠,正在辛苦工做的程序員們,大家有沒有下面幾種感受? java
1、 個人工做就是按時完成領導交給個人任務,至於代碼寫的怎樣,知道有改進空間,但沒時間去改進,關鍵是領導也不給時間啊。 程序員
2、 我發現個人水平老是跟不上技術的進步,有太多想學的東西要學,Jquery用的人最近比較多啊,據說最近MVC比較火,還有LINQ,據說微軟又有Silverlight了…… 面試
3、 我發現雖然我工做幾年了,除了不停的coding,Ctrl+c和Ctrl+V更熟練了,但編碼水平並無提升,仍是一個普通程序員,但有人已經作到架構師了。 編程
4、 工做好幾年了,想跳槽換個工做,結果面試的考官都問了一些什麼數據結構,什麼垃圾回收,什麼設計模式之類的東西,雖然看過,可是平時用不着,看了也忘記了,回答不上來,結果考官說我基礎太差。。。 設計模式
有沒有,若是沒有,接下來就不用看了,你必定是大拿了,或者已經明白其中之道了,呵呵。 數據結構
若是有,恭喜你,你進入學習誤區了,若是想在技術上前進的話,就不能一直的coding,爲了完成需求而工做,必須在coding的同時,讓咱們的思惟,水平也在不停的提升。 架構
寫代碼要經歷下面幾個階段。 學習
一 、你必須學習面向對象的基礎知識,若是連這個都忘了,那你的編程之路註定是在作原始初級的重複! 編碼
不少程序員都知道類、方法、抽象類、接口等概念,可是爲何要面向對象,好處在哪裏,要解決什麼問題?只是明白概念,就是表達不清楚,而後在實際工做中也用不上,過了一段時間,面向對象的東西又模糊了,結果是大多數程序員用着面向對象的語言作着面向過程的工做,所以要學習面向對象,首先應該明白麪向對象的目的是什麼? 設計
面向對象的目的是什麼?
開發語言在不斷髮展,從機器語言,到彙編,到高級語言,再到第四代語言;軟件開發方法在不斷髮展,從面向過程,面向對象,到面向方面等。雖然這些都在不斷髮展,但其所追求的目標卻一直沒變,這些目標就是:
其中語言的發展,開發方法的發展在1,2兩條上面取得了極大的進步,但對於第3條,咱們不能光期望開發方法自己來解決。
提升軟件質量:可維護性,可擴展性,可重用性等,再具體點,就是高內聚、低耦合,面向對象就是爲了解決第3條的問題。所以要成爲一個好的程序員,最繞不開的就是面向對象了。
2、 要想學好面向對象,就必須學習設計模式。
假定咱們瞭解了面向對象的目的,概念了,可是咱們coding過程當中卻發現,咱們的面向對象的知識彷佛一直派不上用場,其實道理很簡單,是由於咱們不知道怎麼去用,就像游泳同樣,咱們已經明白了游泳的好處,以及游泳的幾種姿式,狗刨、仰泳、蛙泳、自由泳,可是咱們依然不會游泳。。。。
所以有了這些基本原則是不行的,咱們必須有一些更細的原則去知道咱們的設計,這就有了更基礎的面向對象的五大原則,而把這幾種原則更詳細的應用到實際中來,解決實際的問題,這就是設計模式,所以要學好OO,必需要學習設計模式,學習設計模式,按大師的話說,就是在人類努力解決的許多領域的成功方案都來源於各類模式,教育的一個重要目標就是把知識的模式一代一代傳下去。
所以學習設計模式,就像咱們在看世界頂級的游泳比賽,咱們爲之瘋狂,爲之着迷。
三 學習設計模式
正像咱們並不想只是看別人表演,咱們要本身學會游泳,這纔是咱們的目的所在。
當咱們看完幾篇設計模式後,咱們爲之精神振奮,在新的coding的時候,咱們老是想努力的用上學到的設計模式,可是常常在誤用模式,折騰半天發現是在脫褲子抓癢。。。
當學完設計模式以後,咱們又很困惑,感受這些模式簡直太像了,不少時候咱們分不清這些模式之間到底有什麼區別,並且明白了設計過程當中的一個致命的東西--過分設計,由於設計模式要求咱們高擴展性,高重用性,可是在需求提出之初,咱們都不是神,除了依靠過去的經驗來判斷外,咱們不知道哪些地方要擴展,哪些地方要重用,並且過去的經驗就必定是正確的嗎?因此咱們甚至不敢再輕易用設計模式,而是還一直在用面向過程的方法在實現需求。
四 學習重構
精彩的代碼是怎麼想出來的,比看到精彩的代碼更加使人期待,因而咱們開始思考,這些大師們莫非不用工做,需求來了沒有領導規定完成時間,只以設計精彩的代碼爲標準來開展工做?這樣的工做太爽了,也不可能,老闆不肯意啊。就算這些理想的條件他都有,他就一開始就設計出完美的代碼來了?也不可能啊,除非他是神,一開始就預料到將來的全部需求,那既然這些條件都沒有,他們如何寫出的精彩代碼?
Joshua Kerievsky在那篇著名的《模式與XP》〔收錄於《極限編程研究》一書)中明白地指出:在設計前期使用模式經常致使過分工程(over-engineering)。這是一個殘酷的現實,單憑對完美的追求沒法寫出實用的代碼,而「實用」是軟件壓倒一切的要素。
在《重構-改善既有的代碼的設計》一書中提到,經過重構(refactoring),你能夠找出改變的平衡點。你會發現所謂設計再也不是一切動做的前提,而是在整個開發過程當中逐漸浮現出來。在系統構築過程當中,你能夠學習如何強化設計;其間帶來的互動可讓一個程序在開發過程當中持續保有良好的設計。
總結起來就是說,咱們在設計前期就使用設計模式,每每致使設計過分,所以應該在整個開發過程,整個需求變動過程當中不斷的重構如今的代碼,才能讓程序一直保持良好的設計,因而可知,開發過程當中須要一直重構,不然不管當初設計多麼的好,隨着需求的改變,都會變成一堆爛代碼,難以維護,難以擴展。所謂重構是這樣一個過程:「在不改變代碼外在行爲的前提下,對代碼作出修改,以改進程序的內部結構」。重構的目標,就是設計模式,更本質的講就是使程序的架構更趨合理,從而提升軟件的可維護性,可擴展性,可重用性。
《重構-改善既有的代碼的設計》一書也是Martin Fowler等大師的做品,軟件工程領域的超級經典鉅著,與另外一鉅著《設計模式》並稱"軟工雙雄",不可不讀啊。
五 開始通往優秀軟件設計師的路上
經過設計模式和重構,咱們的所學和咱們工做的coding終於結合上了,咱們能夠在工做中用面向對象的思惟去考慮問題,並開始學習重構了,這就像游泳同樣,咱們看完了各類頂級的游泳比賽,明白各類規則,名人使用的方法和技巧,如今是時候回家去村旁邊的小河裏練練了,練習也是須要有教練的,推薦另外一本經典書叫《重構與模式》,引用他開篇的介紹,本書開創性地深刻揭示了重構與模式這兩種軟件開發關鍵技術之間的聯繫,說明了經過重構實現模式改善既有的設計,每每優於在新的設計早期使用模式。本書不只展現了一種應用模式和重構的創新方法,並且有助於讀者結合實戰深刻理解重構和模式。
這本書正是咱們須要的教練,值得一讀。
六 沒有終點,只有堅持不懈的專研和努力。
通過了幾年的堅持,終於學會了靈活的運用各類模式,咱們不須要去刻意的想用什麼模式,怎麼重構。程序的目標,就是可維護性,可擴展性,可重用性,都已經成了一種編程習慣,一種思惟習慣,就像咱們聯繫了幾年游泳以後,咱們不用再刻意的去考慮,如何讓本身能在水上漂起來,仰泳和蛙泳的區別..... 而是跳進水裏,就天然的遊了起來,朝對岸游去。可是要和大師比起來,嘿嘿,咱們還有很長的路要走,最終也可能成不了大師,但不管能不能成爲大師,咱們已經走在了成爲大師的正確的路上,咱們和別的程序員已經開始不同,由於他們不管再過多少年,他們的水平不會變,只是在重複造輪子,惟一比你快的,就是ctrl+c和ctrl+v。
正確的路上,只要堅持,就離目標愈來愈近,將來就必定會是一個優秀的架構師,和優秀架構師的區別,可能只是時間問題。
看完這篇文章,聯繫自身現狀,我以爲,
第1、面向對象的基礎要打牢,如今就是在java的編碼中多學習、多編碼。掌握面向對象。
第2、在深刻學習了面向對象以後,讀設計模式和重構的書籍,最關鍵的是結合項目動手實踐。
第3、專一和堅持,提升效率,節約時間。貫穿整個過程的是多學、多思考、多主動思考。