[你必须知道的.NET]第二十回:学习方法论
| 本文,源自我回答剛畢業(yè)朋友關于.NET學習疑惑的回復郵件。 本文,其實早計劃在《你必須知道的.NET》寫作之初的后記部分,但是因為個中原因未能如愿,算是補上本書的遺憾之一。 本文,作為[《你必須知道的.NET》]系列的第20回,預示著這個系列將開始新的征程,算是[你必須知道的.NET]2.0的開始。 本文,作為一個非技術篇章,加塞兒到《你必須知道的.NET》隊伍中,我想至少因為回答了以下幾個必須知道的非技術問題:.NET應該學習什么? .NET應該如何學習? .NET的學習方法? 本文,不適合所有的人。 |
關于這個問題,也有不少剛剛入行的朋友向我問起。我想可能一千個人就有一千個答案,我不能保證自己的想法適合于所有的人,但是這確實是我自己的體會和經歷,希望能給你一些參考的價值。同時,我也嚴正的聲明,我也是個學習者,也在不斷的追求,所以這里的體會只是交流,并非說教。
作為同行,首先恭喜你進入了一個艱難困苦和其樂無窮并存的行業(yè),這是軟件的現(xiàn)狀,也是軟件的未來。如果你想迅速成功,或者發(fā)家致富,顯然是個難以實現(xiàn)的夢想。老Bill和李彥宏在這個行業(yè)是難以復制的,所以做好長期艱苦卓絕的準備是必須的。至少,我身邊的朋友,包括我自己都是經歷了這個過程,而且依然在這個過程中,累并快樂著。所以,如此辛苦,又沒有立竿見影的“錢”途,想要在這個領域有所發(fā)展,只能靠堅持和興趣了。二者缺一不可,對于剛剛畢業(yè)的你來說,這個準備是必須有的。這是我的第一個體會,可能比較虛,但是這個在我看來卻是最重要的一條。
第一條很關鍵,但是除了在思想上做好準備,還有應該就是你關心的如何下手這個問題了?從自己的感覺來說,我覺得比較重要的因素主要包括:
1 基礎至上。
其實早在兩年前,我也存在同樣的疑惑,很多的精力和時間花費在了追求技術技巧、技術應用和技術抄襲的自我陶醉狀態(tài)。歷數(shù)過去的種種光輝歷程,很多寶貴的人生都花在交學費的道路上了。所以,當我把全部的精力投入到基礎和本質研究的課題上時,竟然發(fā)現(xiàn)了別樣的天地。原來再花哨的應用,再絕妙的技巧,其實都架構在技術基礎的基礎上,沒有對技術本質的深刻理解,談何來更進一步了解其他。這種體會是真實而有效的,所以我將體會、研究和心得,一路分享和記錄下來,于是就有了《你必須知道的.NET》這本書的誕生,我切實的覺得從這個起點開始,了解你必須知道的,才能了解那些更廣闊的技術領域。
所以,如果能夠堅持,不放棄枯燥,從基礎開始踏踏實實的學習基礎,我想你一定會有所突破。而這個突破,其實也有著由量到質的飛躍,以.NET為例,我認為了解CLR運行機制,深刻的認識內存管理,類型系統(tǒng),異常機制,熟悉FCL基本架構,學習c#語言基礎,認識MSIL、元數(shù)據(jù)、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嗎?
不管對業(yè)界對OO如何詬病,不管大牛對OO如何不懈,那是他們折騰的事業(yè)。而我們的事業(yè)卻無法遠離這片看似神秘的王國,因為但凡從項目和產品一路廝殺而來的高手,都理解OO的強大和神秘。站在高高的塔尖來看軟件,玩來玩去就是這些玩意兒了。所以,在我看來OO其實也是軟件技術的必要基礎,也是技術修煉的基本功之一,因此我也毫不猶豫的將對面向對象的理解納入了《你必須知道的.NET》一書的第一部分范疇。
然而,實話實說,OO的修煉卻遠沒有.NET基礎來得那么容易,苦嚼一車好書,狂寫萬行代碼,也未必能夠完全領悟OO精妙。說得玄乎點兒,這有些像悟道,想起明代前無古人后無來著的心學開創(chuàng)者王陽名先生,年輕時每天格物修煉的癡呆場景,我就覺得這玩意兒實在不靠譜。其實,很少有人能完全在OO面前說徹悟,所以我們大家都不例外。但是因為如此重要,以至于我們必須找點兒東西或者思路來摩拳擦掌,了解、深入和不斷體會,所以我對面向對象的建議是:始終如一的修煉,打好持久戰(zhàn)。
如何打好仗呢,不例外的先推薦幾本經典作品吧:
- 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,敏捷軟件開發(fā):原則、模式與實踐,對于設計原則,無出其右者。
- 張逸,軟件設計精要與模式,國內作品的優(yōu)秀作品,園子里的經典之作。
有了好書,還是遠遠不夠的。所以,還得繼續(xù)走王陽明的老路,今天格一物,明天格一物,看見什么格什么。用咱們的專業(yè)術語說,就是不斷的學習和實踐他人的智慧結晶,看經典框架,寫熟練代碼。我的一位偶像曾語重心長的告訴我,做軟件的不寫上千萬行代碼,根本就沒感覺。按照這個標準衡量一下自己,我發(fā)現(xiàn)我還只是小學生一個,所以廢話少說,還是去格物吧。
那么OO世界的物又是什么,又該如何去格,在我看來大致可以包括下面這些內容,但是分類不按學科標準:
- 面向對象的基本內容:類、對象、屬性、方法、字段。
- 面向對象的基本要素:封裝、繼承、多態(tài),我再外加一個接口。
- 設計原則:接口隔離、單一職責、開放封閉、依賴倒置、Liskov替換,沒什么可說的,這些實在太重要了。
- 設計模式:也沒有可說的,實在太重要了。
- Singleton
- Abstract Factory
- Factory Method
- Composite
- Adapter
- Bridge
- Decorator
- Facade
- Proxy
- Command
- Observer
- Template Method
- Strategy
- Visitor
- 分層思想:例如經典的三層架構
- 模塊化
- AOP
- SOA
- ORM
- ......
這些OO領域的基本內容,看起來令郎滿目,其實互相聯(lián)系、互為補充,沒有獨立的分割,也沒有獨立的概念,了解這個必然牽出那個,所以修煉起來并不孤單,反倒在不斷的領悟中能夠竊喜原來軟件也可以如此精彩。
3 舍得,是門藝術。
有了技術基礎,懂得修煉OO,下面就是舍得的問題了。舍得舍得,不舍怎得?
.NET技術有著近乎夸張的應用范疇,從Windows GDI應用,到ASP.NET Web應用,到WCF分布式應用,到Window Mobile嵌入式應用,到ADO.NET數(shù)據(jù)處理,到XML Webservice,.NET無處不在。所以,對于.NET技術的學習,你應該有個起碼的認識,那就是:我不可能了解.NET的整個面貌, 還有個起碼的問題繼續(xù),那就是:我還要學嗎?
當然不可能了解所有,因此你必須選擇和舍得,選擇有方向,舍得有興趣;我還要學嗎?當然要學,但是應該首先清楚如何學?在這么多眼花繚亂的技術應用中,有一個基礎始終支撐著.NET技術這艘航母在穩(wěn)步前行,不管是什么應用,不管是什么技術,不管是什么框架,CLR總是.NET技術的心臟。通過表面來傾聽心臟的聲音,才能更好的了解機器的運轉,順著血管的脈絡了解框架,才能明白機制背后的玄機。層出不窮的新技術和新名詞總是能吸引你的眼球,但是永遠不要只盯著那塊蛋糕,而掉了整個禮物,所以對.NET的學習一定要打好基礎,從了解CLR底層機制和.NET框架類庫開始,逐漸的追求你的技術選擇。
善于分辨,不盲從。每天上cnblogs、MSDN和其他的訂閱技術文章,是我的習慣,但是如果每篇都讀,每篇都看,那就基本沒有其他的時間,所以你必須有分辨的能力,和抵抗誘惑的心態(tài)。找準自己的方向,并且堅持下來,是難能可貴的。
在這方面,沒有參考,也沒有推薦,全屏自己的慧眼。眼光,是個關鍵。
4 讀幾本經典的作品。
這一點其實并不需要多說,推薦的幾本作品值得花點兒功夫來學習,因為這的確是最初的開始,走在路上從起跑線就走錯了方向,大致快速追上是比較難得。所以經典的作品就是一個好的起點,我也會不時的在個人博客中推薦更好的專著,希望你繼續(xù)關注J
5 遵守規(guī)范,養(yǎng)成良好的編程習慣。
其實這是個看似無足輕重的小事兒,我經常看到自以為天下無敵的高手,胡亂的在編輯器中揮灑天賦,一陣高歌猛進,但最后自己都不知道當初的本意是什么。軟件是個可持續(xù)的資源,于人于己都遵守點兒規(guī)則,出來混是要有點兒職業(yè)道德。對自己而言,良好的編程習慣正是一個良好學習習慣的開始。看著自己的代碼,感覺像藝術一般優(yōu)雅,大致也就是周杰倫聽到東風破時候的感覺吧,怎一個爽字了得。
推薦一本這方面的書:
- Krzysztof Cwalina,Brad Abrams , .NET 設計規(guī)范--.NET約定、慣用法與模式
6 學習,講究方法。
具體的學習方法,實在是因人而異,我從來不主張學習他人的方法,因為人性是難以復制的東西。自己的只有自己最清楚,所以你可以模仿他人的技藝,但是用于無法刻畫其靈魂。關于學習方法這檔子事兒,我向來不喜歡參考他人,也更不喜歡推薦。
但是,即便如此,絲毫不減弱學習方法的重要性,懂得了解自己的人是真正的智者,所以挖掘自身潛力永遠是擺在自己眼前的課題。尋找一套行之有效的方式方法,非常的重要,但是不要學著模仿,這方面我覺得只有創(chuàng)新才能成功。
如果實在沒有自己的方法,我就覺得沒有方法就是好方法,苦練多看,永遠不過時。
7 找一個好老師。
如果有幸能有一位德高望重而又樂于奉獻的師長指導,那的確是人生之幸運,但是這種概率實在是太小了。我沒有趕上,所以大部分人也沒法趕上。沒辦法,還是需要好的老師,那么哪兒有這樣才高而又德厚的人才呢?
答案是互聯(lián)網。google,baidu,一個都不能少。
MSDN是個好工具,博客園是個好地方,《.NET禪意花園》是個好開始。
8 英文,無可避免。
前面說過,要不斷的修煉和格物,要學習好的作品,認識好的框架。很不幸的是,這些好事兒全被老外占了,因為本來就是從他們那里開始的,所以也不需要泄氣。中國人自古都是師夷長技以制夷的高手,希望軟件產業(yè)的大旗別在我們手上倒下。但是,話說回來,英文就成了一個必須而又傷神的攔路虎,但是沒辦法使勁的嚼吧。多看多寫多讀,也就能應付了。
關于英文的學習和成長,我并不寄希望于在什么英語速成班里走回頭路,學校苦干這么多年也每隔名趟,所以下手還是務實點兒,我推薦幾個好的英文網站和大牛博客,算是提高技術的同時提高英語,一箭雙雕,一舉兩得:
- http://www.gotdotnet.com/
- http://codeproject.com/
- http://www.asp.net/
- http://codeguru.com/
- http://www.c-sharpconer.com/
- http://blogs.msdn.com/bclteam/
- http://blogs.msdn.com/ricom/
- http://samgentile.com/blog/
- http://martinfower.com/bliki
- http://blogs.msdn.com/kcwalina/
- http://www.pluralsight.com/blogs/dbox/default.aspx
- http://blogs.msdn.com/cbrumme/
總結
以上是生活随笔為你收集整理的[你必须知道的.NET]第二十回:学习方法论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 余额宝怎么了?收益不如1年期的定期存款,
- 下一篇: 中信信用卡账单分期可以提前还款吗