程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> [你必須知道的.NET]第二十回:學習方法論

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

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

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 英文,無可避免。

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

關於英文的學習和成長,我並不寄希望於在什麼英語速成班裡走回頭路,學校苦干這麼多年也每隔名趟,所以下手還是務實點兒,我推薦幾個好的英文網站和大牛博客,算是提高技術的同時提高英語,一箭雙雕,一舉兩得:

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/

當然這裡羅列的並非全部,MSDN、asp.net自不必說,可以有選擇的浏覽。

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

好了,啰裡啰唆,可能是經驗,可能是廢話。正如一開始所說,作為一個過來人,我只想將自己的心得拿出來交流,絕沒有強加於人的想法。除了推薦的幾本作品,你可以有選擇的參考,其他的甚至可以全盤否定。心懷坦誠的交流,說到底就是希望更多的人少走我曾經曲曲折折的彎路,那條路上實在是幸福與心酸一股腦子毀了一段青春。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved