[你必須知道的.NET]第二十回:學習方法論

作者: Anytao  來源: 博客園  發布時間: 2008-10-13 10:54  閱讀: 5917 次  推薦: 0   原文鏈接   [收藏]  
 

系列文章導航:

[你必須知道的.NET] 開篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對抽象編程:接口和抽象類

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關鍵字---把new說透

[你必須知道的.NET] 第六回:深入淺出關鍵字---base和this

[你必須知道的.NET] 第七回:品味類型---從通用類型系統開始

[你必須知道的.NET] 第八回:品味類型---值類型與引用類型(上)-內存有理

[你必須知道的.NET] 第九回:品味類型---值類型與引用類型(中)-規則無邊

[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途

[你必須知道的.NET] 第十一回:參數之惑---傳遞的藝術(上)

[你必須知道的.NET] 第十二回:參數之惑---傳遞的藝術(下)

[你必須知道的.NET] 第十三回:從Hello, world開始認識IL

[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現在

[你必須知道的.NET] 第十五回:繼承本質論

[你必須知道的.NET] 第十六回:深入淺出關鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫和重載

[你必須知道的.NET] 第十八回:對象創建始末(上)

[你必須知道的.NET] 第十九回:對象創建始末(下)

[你必須知道的.NET]第二十回:學習方法論

[你必須知道的.NET]第二十一回:認識全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二

 

[你必須知道的.NET]第二十回:學習方法論

 

說在,開篇之前

本文,源自我回答剛畢業朋友關于.NET學習疑惑的回復郵件。

本文,其實早計劃在《你必須知道的.NET》寫作之初的后記部分,但是因為個中原因未能如愿,算是補上本書的遺憾之一。

本文,作為[《你必須知道的.NET》]系列的第20回,預示著這個系列將開始新的征程,算是[你必須知道的.NET]2.0的開始。

本文,作為一個非技術篇章,加塞兒到《你必須知道的.NET》隊伍中,我想至少因為回答了以下幾個必須知道的非技術問題:.NET應該學習什么? .NET應該如何學習? .NET的學習方法?

本文,不適合所有的人。

 
開始正文: 

關于這個問題,也有不少剛剛入行的朋友向我問起。我想可能一千個人就有一千個答案,我不能保證自己的想法適合于所有的人,但是這確實是我自己的體會和經歷,希望能給你一些參考的價值。同時,我也嚴正的聲明,我也是個學習者,也在不斷的追求,所以這里的體會只是交流,并非說教。

作為同行,首先恭喜你進入了一個艱難困苦和其樂無窮并存的行業,這是軟件的現狀,也是軟件的未來。如果你想迅速成功,或者發家致富,顯然是個難以實現的夢想。老Bill和李彥宏在這個行業是難以復制的,所以做好長期艱苦卓絕的準備是必須的。至少,我身邊的朋友,包括我自己都是經歷了這個過程,而且依然在這個過程中,累并快樂著。所以,如此辛苦,又沒有立竿見影的“錢”途,想要在這個領域有所發展,只能靠堅持和興趣了。二者缺一不可,對于剛剛畢業的你來說,這個準備是必須有的。這是我的第一個體會,可能比較虛,但是這個在我看來卻是最重要的一條。

第一條很關鍵,但是除了在思想上做好準備,還有應該就是你關心的如何下手這個問題了?從自己的感覺來說,我覺得比較重要的因素主要包括:

1 基礎至上。

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

所以,如果能夠堅持,不放棄枯燥,從基礎開始踏踏實實的學習基礎,我想你一定會有所突破。而這個突破,其實也有著由量到質的飛躍,以.NET為例,我認為了解CLR運行機制,深刻的認識內存管理,類型系統,異常機制,熟悉FCL基本架構,學習c#語言基礎,認識MSIL、元數據、Attribute、反射、委托等等,當然還包括面向對象和設計架構,都是必不可少的基礎內容。你可以從《你必須知道的.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》一書的第一部分范疇。

然而,實話實說,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領域的基本內容,看起來令郎滿目,其實互相聯系、互為補充,沒有獨立的分割,也沒有獨立的概念,了解這個必然牽出那個,所以修煉起來并不孤單,反倒在不斷的領悟中能夠竊喜原來軟件也可以如此精彩。

 

0
0
 
標簽:.NET 方法論
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()