【轉】個人技術學習方法 — Anytao

原文做者anytao王濤html

他的著做《你必須知道的.Net》編程

 

  關於這個問題,也有很多剛剛入行的朋友向我問起。我想可能一千我的就有一千個答案,我不能保證本身的想法適合於全部的人,可是這確實是我本身的體會和經歷,但願能給你一些參考的價值。同時,我也嚴正的聲明,我也是個學習者,也在不斷的追求,因此這裏的體會只是交流,並不是說教。c#

  做爲同行,首先恭喜你進入了一個艱難困苦和其樂無窮並存的行業,這是軟件的現狀,也是軟件的將來。若是你想迅速成功,或者發家致富,顯然是個難以實現的夢想。老Bill和李彥宏在這個行業是難以複製的,因此作好長期堅苦卓絕的準備是必須的。至少,我身邊的朋友,包括我本身都是經歷了這個過程,並且依然在這個過程當中,累並快樂着。因此,如此辛苦,又沒有立竿見影的「錢」途,想要在這個領域有所發展,只能靠堅持和興趣了。兩者缺一不可,對於剛剛畢業的你來講,這個準備是必須有的。這是個人第一個體會,可能比較虛,可是這個在我看來倒是最重要的一條。設計模式

  第一條很關鍵,可是除了在思想上作好準備,還有應該就是你關心的如何下手這個問題了?從本身的感受來講,我以爲比較重要的因素主要包括:架構

1 基礎至上

  其實早在兩年前,我也存在一樣的疑惑,不少的精力和時間花費在了追求技術技巧、技術應用和技術抄襲的自我陶醉狀態。歷數過去的種種光輝歷程,不少寶貴的人生都花在交學費的道路上了。因此,當我把所有的精力投入到基礎和本質研究的課題上時,居然發現了別樣的天地。原來再花哨的應用,再絕妙的技巧,其實都架構在技術基礎的基礎上,沒有對技術本質的深入理解,談何來更進一步瞭解其餘。這種體會是真實而有效的,因此我將體會、研究和心得,一路分享和記錄下來,因而就有了《你必須知道的.NET》這本書的誕生,我切實的以爲從這個起點開始,瞭解你必須知道的,才能瞭解那些更廣闊的技術領域。框架

InsideDotNet

  因此,若是可以堅持,不放棄枯燥,從基礎開始踏踏實實的學習基礎,我想你必定會有所突破。而這個突破,其實也有着由量到質的飛躍,以.NET爲例,我認爲了解CLR運行機制,深入的認識內存管理,類型系統,異常機制,熟悉FCL基本架構,學習c#語言基礎,認識MSIL、元數據、Attribute、反射、委託等等,固然還包括面向對象和設計架構,都是必不可少的基礎內容。你能夠從《你必須知道的.NET》目錄中來大體瞭解到應該掌握的基礎內容,順便廣告了:-)asp.net

  話音至此,順便推薦幾本基礎方面的書,若是有時間能夠好好研究研究:編輯器

  • Don Box, Chris Sells, Essential .NET,一本聖經,深入而又深邃,爲何不出第二卷?
  • Jeffrey Richter, Applied Microsoft .NET Framework Programming,.NET世界的惟一經典,偶像級的Jeffrey是個人導師。
  • Patrick Smacchia, Pracical .NET2 and C#2,.NET領域的百科全書,能夠看成新華字典來讀技術。
  • Richard Jones, Rafael D Lins, Garbage Collection: Algorithms for Automatic Dynamic Memory Management,內存管理方面,就靠它了。
  • Christian Nagel, Bill Evjen, Jay Glynn, Professional C# 2005,c#基礎大全,你們都在看,因此就看吧。
  • Thinking in Java,是的,一本Java書,可是帶來的不只僅是Java,寫書寫到這份上,不可不謂牛叉。
  • Anytao, 你必須知道的.NET,我很自信,沒有理由不推薦,這本書有其餘做品所沒有的特別之處,雖不敢恬列於大師的經典行列,可是推薦仍是經得起考驗。

  我一直主張,書不在多,有仙則靈。上面的幾本,在我看來就足以打好基礎這一關。固然若是有更多的追求和思索,還遠遠不夠,由於技術的腳步從未止步。可是,至少至少,應該從這裏開始。分佈式

2 你夠OO嗎?

  無論對業界對OO如何詬病,無論大牛對OO如何不懈,那是他們折騰的事業。而咱們的事業卻沒法遠離這片看似神祕的王國,由於但凡從項目和產品一路廝殺而來的高手,都理解OO的強大和神祕。站在高高的塔尖來看軟件,玩來玩去就是這些玩意兒了。因此,在我看來OO其實也是軟件技術的必要基礎,也是技術修煉的基本功之一,所以我也絕不猶豫的將對面向對象的理解歸入了《你必須知道的.NET》一書的第一部分範疇。ide

  然而,實話實說,OO的修煉卻遠沒有.NET基礎來得那麼容易,苦嚼一車好書,狂寫萬行代碼,也未必可以徹底領悟OO精妙。說得玄乎點兒,這有些像悟道,想起明代前無古人後無來着的心學開創者王陽名先生,年輕時天天格物修煉的癡呆場景,我就以爲這玩意兒實在不靠譜。其實,不多有人能徹底在OO面前說徹悟,因此咱們你們都不例外。可是由於如此重要,以致於咱們必須找點兒東西或者思路來摩拳擦掌,瞭解、深刻和不斷體會,因此我對面向對象的建議是:始終如一的修煉,打好持久戰。

  如何打好仗呢,不例外的先推薦幾本經典做品吧:

  • EricFreeman, Elisabeth Freeman. Head First Design Patterns,標準的言簡意賅,形象生動,可貴佳做。
  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlisside,設計模式-可複用面向對象軟件的基礎,開山祖師的做品,不獨白不讀。
  • Martin Fowler, Refactoring: Improving the Design of Existing Code,一樣的經典,很拉風。
  • Robert C. Martin,敏捷軟件開發:原則、模式與實踐,對於設計原則,無出其右者。
  • 張逸,軟件設計精要與模式,國內做品的優秀做品,園子裏的經典之做。

  有了好書,仍是遠遠不夠的。因此,還得繼續走王陽明的老路,今天格一物,明天格一物,看見什麼格什麼。用我們的專業術語說,就是不斷的學習和實踐他人的智慧結晶,看經典框架,寫熟練代碼。個人一位偶像曾語重心長的告訴我,作軟件的不寫上千萬行代碼,根本就沒感受。按照這個標準衡量一下本身,我發現我還只是小學生一個,因此廢話少說,仍是去格物吧。

  那麼OO世界的物又是什麼,又該如何去格,在我看來大體能夠包括下面這些內容,可是分類不按學科標準:

  • 面向對象的基本內容:類、對象、屬性、方法、字段。
  • 面向對象的基本要素:封裝、繼承、多態,我再外加一個接口。
  • 設計原則:接口隔離、單一職責、開放封閉、依賴倒置、Liskov替換,沒什麼可說的,這些實在過重要了。
  • 設計模式:也沒有可說的,實在過重要了。
    • Singleton
    • Abstract Factory
    • Factory Method
    • Composite
    • Adapter
    • Bridge
    • Decorator
    • Facade
    • Proxy
    • Command
    • Observer
    • Template Method
    • Strategy
    • Visitor
  • 分層思想:例如經典的三層架構
  • 模塊化
  • AOP
  • SOA
  • ORM
  • ......

  這些OO領域的基本內容,看起來令郎滿目,其實互相聯繫、互爲補充,沒有獨立的分割,也沒有獨立的概念,瞭解這個必然牽出那個,因此修煉起來並不孤單,反倒在不斷的領悟中可以竊喜原來軟件也能夠如此精彩。

3 捨得,是門藝術

  有了技術基礎,懂得修煉OO,下面就是捨得的問題了。捨得捨得,不捨怎得?

  .NET技術有着近乎誇張的應用範疇,從Windows GDI應用,到ASP.NET Web應用,到WCF分佈式應用,到Window Mobile嵌入式應用,到ADO.NET數據處理,到XML Webservice,.NET無處不在。因此,對於.NET技術的學習,你應該有個起碼的認識,那就是:我不可能瞭解.NET的整個面貌, 還有個起碼的問題繼續,那就是:我還要學嗎?

  固然不可能瞭解全部,所以你必須選擇和捨得,選擇有方向,捨得有興趣;我還要學嗎?固然要學,可是應該首先清楚如何學?在這麼多眼花繚亂的技術應用中,有一個基礎始終支撐着.NET技術這艘航母在穩步前行,無論是什麼應用,無論是什麼技術,無論是什麼框架,CLR老是.NET技術的心臟。經過表面來傾聽心臟的聲音,才能更好的瞭解機器的運轉,順着血管的脈絡瞭解框架,才能明白機制背後的玄機。層出不窮的新技術和新名詞老是能吸引你的眼球,可是永遠不要只盯着那塊蛋糕,而掉了整個禮物,因此對.NET的學習必定要打好基礎,從瞭解CLR底層機制和.NET框架類庫開始,逐漸的追求你的技術選擇。

  善於分辨,不盲從。天天上cnblogs、MSDN和其餘的訂閱技術文章,是個人習慣,可是若是每篇都讀,每篇都看,那就基本沒有其餘的時間,因此你必須有分辨的能力,和抵抗誘惑的心態。找準本身的方向,而且堅持下來,是難能難得的。

  在這方面,沒有參考,也沒有推薦,全屏本身的慧眼。眼光,是個關鍵。

4 讀幾本經典的做品

  這一點其實並不須要多說,推薦的幾本做品值得花點兒功夫來學習,由於這的確是最初的開始,走在路上從起跑線就走錯了方向,大體快速追上是比較可貴。因此經典的做品就是一個好的起點,我也會不時的在我的博客中推薦更好的專著,但願你繼續關注J

5 遵照規範,養成良好的編程習慣

  其實這是個看似無足輕重的小事兒,我常常看到自覺得天下無敵的高手,胡亂的在編輯器中揮灑天賦,一陣高歌猛進,但最後本身都不知道當初的本意是什麼。軟件是個可持續的資源,於人於己都遵照點兒規則,出來混是要有點兒職業道德。對本身而言,良好的編程習慣正是一個良好學習習慣的開始。看着本身的代碼,感受像藝術通常優雅,大體也就是周杰倫聽到東風破時候的感受吧,怎一個爽字了得。

  推薦一本這方面的書:

  • Krzysztof Cwalina,Brad Abrams , .NET 設計規範--.NET約定、慣用法與模式

6 學習,講究方法

  具體的學習方法,實在是因人而異,我歷來不主張學習他人的方法,由於人性是難以複製的東西。本身的只有本身最清楚,因此你能夠模仿他人的技藝,可是用於沒法刻畫其靈魂。關於學習方法這檔子事兒,我向來不喜歡參考他人,也更不喜歡推薦。

  可是,即使如此,絲絕不減弱學習方法的重要性,懂得了解本身的人是真正的智者,因此挖掘自身潛力永遠是擺在本身眼前的課題。尋找一套行之有效的方式方法,很是的重要,可是不要學着模仿,這方面我以爲只有創新才能成功。

  若是實在沒有本身的方法,我就以爲沒有方法就是好方法,苦練多看,永遠不過期。

7 找一個好老師

  若是有幸能有一位德高望重而又樂於奉獻的師長指導,那的確是人生之幸運,可是這種機率實在是過小了。我沒有遇上,因此大部分人也無法遇上。沒辦法,仍是須要好的老師,那麼哪兒有這樣才高而又德厚的人才呢?

答案是互聯網。google,baidu,一個都不能少。

  MSDN是個好工具,博客園是個好地方,《.NET禪意花園》是個好開始。

8 英文,無可避免

  前面說過,要不斷的修煉和格物,要學習好的做品,認識好的框架。很不幸的是,這些好事兒全被老外佔了,由於原本就是從他們那裏開始的,因此也不須要泄氣。中國人自古都是師夷長技以制夷的高手,但願軟件產業的大旗別在咱們手上倒下。可是,話說回來,英文就成了一個必須而又傷神的攔路虎,可是沒辦法使勁的嚼吧。多看多寫多讀,也就能應付了。

  關於英文的學習和成長,我並不寄但願於在什麼英語速成班裏走回頭路,學校苦幹這麼多年也每隔名趟,因此下手仍是務實點兒,我推薦幾個好的英文網站和大牛博客,算是提升技術的同時提升英語,一舉兩得,一箭雙鵰:

  固然這裏羅列的並不是所有,MSDN、asp.net自沒必要說,能夠有選擇的瀏覽。

  上述1+7條,是一些並不是經驗的經驗,誰都知道,但不是誰都能作到。累並快樂着,永遠是這個行業,這羣人的主旋律。在技術面前,我嫣然一笑,發現本身其實很專一,這就夠了。

 

關於anytao,我想各位若是看過《你必須知道的.Net》的人都知道吧,園子裏的大神之一。他如今創業,一款好的團隊系統工具就誕生了,祝福Worktile的市場愈來愈好,我和個人小夥伴們也在用Worktile作平時的小項目管理,感受像是打廣告似的。本文是他對於技術學習的回答,咱們這些菜鳥碼農也能夠從中獲取有用的信息,學習->實踐->思考->總結提升,菜鳥也會有春天,等待咱們變強的那天!麼麼嗒

相關文章
相關標籤/搜索