天天看點

.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領域的基本内容,看起來令郎滿目,其實互相聯系、互為補充,沒有獨立的分割,也沒有獨立的概念,了解這個必然牽出那個,是以修煉起來并不孤單,反倒在不斷的領悟中能夠竊喜原來軟體也可以如此精彩。  3 舍得,是門藝術。  有了技術基礎,懂得修煉OO,下面就是舍得的問題了。舍得舍得,不舍怎得?  .NET 技術有着近乎誇張的應用範疇,從Windows GDI應用,到ASP.NET Web應用,到WCF分布式應用,到WindowMobile嵌入式應用,到ADO.NET資料處理,到XMLWebservice,.NET無處不在。 是以,對于.NET技術的學習,你應該有個起碼的認識,那就是:我不可能了解.NET的整個面貌,還有個起碼的問題繼續,那就是:我還要學嗎?  當 然不可能了解所有,是以你必須選擇和舍得,選擇有方向,舍得有興趣;我還要學嗎?當然要學,但是應該首先清楚如何學?在這麼多眼花缭亂的技術應用中,有一 個基礎始終支撐着.NET技術這艘航母在穩步前行,不管是什麼應用,不管是什麼技術,不管是什麼架構,CLR總是.NET技術的心髒。通過表面來傾聽心髒 的聲音,才能更好的了解機器的運轉,順着血管的脈絡了解架構,才能明白機制背後的玄機。層出不窮的新技術和新名詞總是能吸引你的眼球,但是永遠不要隻盯着 那塊蛋糕,而掉了整個禮物,是以對.NET的學習一定要打好基礎,從了解CLR底層機制和.NET架構類庫開始,逐漸的追求你的技術選擇。  善于分辨,不盲從。每天上cnblogs、MSDN和其他的訂閱技術文章,是我的習慣,但是如果每篇都讀,每篇都看,那就基本沒有其他的時間,是以你必須有分辨的能力,和抵抗誘惑的心态。找準自己的方向,并且堅持下來,是難能可貴的。  在這方面,沒有參考,也沒有推薦,全屏自己的慧眼。眼光,是個關鍵。  4 讀幾本經典的作品。  這一點其實并不需要多說,推薦的幾本作品值得花點兒功夫來學習,因為這的确是最初的開始,走在路上從起跑線就走錯了方向,大緻快速追上是比較難得。是以經典的作品就是一個好的起點,我也會不時的在個人部落格中推薦更好的專著,希望你繼續關注J   5 遵守規範,養成良好的程式設計習慣。  其 實這是個看似無足輕重的小事兒,我經常看到自以為天下無敵的高手,胡亂的在編輯器中揮灑天賦,一陣高歌猛進,但最後自己都不知道當初的本意是什麼。軟體是 個可持續的資源,于人于己都遵守點兒規則,出來混是要有點兒職業道德。對自己而言,良好的程式設計習慣正是一個良好學習習慣的開始。看着自己的代碼,感覺像藝 術一般優雅,大緻也就是周傑倫聽到東風破時候的感覺吧,怎一個爽字了得。  推薦一本這方面的書:  Krzysztof Cwalina,Brad Abrams , .NET 設計規範--.NET約定、慣用法與模式   6 學習,講究方法。  具體的學習方法,實在是因人而異,我從來不主張學習他人的方法,因為人性是難以複制的東西。自己的隻有自己最清楚,是以你可以模仿他人的技藝,但是用于無法刻畫其靈魂。關于學習方法這檔子事兒,我向來不喜歡參考他人,也更不喜歡推薦。  但是,即便如此,絲毫不減弱學習方法的重要性,懂得了解自己的人是真正的智者,是以挖掘自身潛力永遠是擺在自己眼前的課題。尋找一套行之有效的方式方法,非常的重要,但是不要學着模仿,這方面我覺得隻有創新才能成功

繼續閱讀