【转】我的技术学习方法 — Anytao

原文作者anytao王涛

他的著作《你必须知道的.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 英文,无可避免

  前面说过,要不断的修炼和格物,要学习好的作品,认识好的框架。很不幸的是,这些好事儿全被老外占了,因为本来就是从他们那里开始的,所以也不需要泄气。中国人自古都是师夷长技以制夷的高手,希望软件产业的大旗别在我们手上倒下。但是,话说回来,英文就成了一个必须而又伤神的拦路虎,但是没办法使劲的嚼吧。多看多写多读,也就能应付了。

  关于英文的学习和成长,我并不寄希望于在什么英语速成班里走回头路,学校苦干这么多年也每隔名趟,所以下手还是务实点儿,我推荐几个好的英文网站和大牛博客,算是提高技术的同时提高英语,一箭双雕,一举两得:

  当然这里罗列的并非全部,MSDN、asp.net自不必说,可以有选择的浏览。

  上述1+7条,是一些并非经验的经验,谁都知道,但不是谁都能做到。累并快乐着,永远是这个行业,这群人的主旋律。在技术面前,我嫣然一笑,发现自己其实很专注,这就够了。

关于anytao,我想各位如果看过《你必须知道的.Net》的人都知道吧,园子里的大神之一。他现在创业,一款好的团队系统工具就诞生了,祝福Worktile的市场越来越好,我和我的小伙伴们也在用Worktile做平时的小项目管理,感觉像是打广告似的。本文是他对于技术学习的回答,我们这些菜鸟码农也可以从中获取有用的信息,学习->实践->思考->总结提高,菜鸟也会有春天,等待我们变强的那天!么么嗒

时间: 2024-10-29 07:14:30

【转】我的技术学习方法 — Anytao的相关文章

技术学习方法总结

转载自netfocus 1. 书是学习知识最快的最系统的方法: 2. 看名人Blog是学习正统知识第二个非常有效的方法: 3. 我热衷于微软.NET平台下的web应用开发,对软件设计,软件工程也有一定兴趣: 4. 近一年来以及将来重点关注DDD的理论研究和逐步实践: 5. 知识就是金钱: 6. 学习知识是一个循序渐进的过程,看的书也是有层次的: 7. 只有有恒心和毅力,坚定的意志才能深入了解某门技术或设计或架构,才又机会知道某个领域中哪些问题值得去研究: 8. 当你研究到一定程度,会发现国内与国

计算机科学与技术学习方法

本文转载于:www.baidu.com/p/浪淋淋 只为分享并无它意 计算机科学与技术反思录 计算机科学与技术这一门科学深深的吸引着我们这些同学们,上计算机系已经有近三年了,自己也做了一些思考,我一直认为计算机科学与技术这门专业,在本科阶段是不可能切分成计算机科学和计算机技术的,因为计算机科学需要相当多的实践,而实践需要技术:每一个人(包括非计算机专业),掌握简单的计算机技术都很容易(包括程序设计),但计算机专业的优势就在于,我们掌握许多其他专业并不“深究”的东西,例如,算法,体系结构,等等.非

如何学好一门编程语言或技术?

相信大家都知道,在看一本书的时候,通过该书的目录和索引能够很快的了解本书内容和找到我们需要的页数,因为一本专业的书本往往记录的知识都非常全面,举个例子假如我们初学Hadoop,所以呢就购买了一本<Hadoop编程指南>,打算系统的学习一下这个东东来提高一下自己的逼格和工资水平,那么问题来了,如何才能学好一门语言或技术? 以前也有很多朋友或群友,问散仙如何学好一门编程语言或XXX技术,当然首先我得从非技术的角度来回答你: 1,最重要的就是坚持下来,不要半途而废 2,空杯心态,戒骄戒躁,多向比你强

嵌入式开发需要学习哪些东西

本文转自迅为开发板iTOP-4412开发板实战手册:http://www.topeetboard.com 刚刚读到这篇文章,对于刚入门嵌入式来说挺有用的,献给向我一样正在迷茫,苦于没有头绪,没人指引的学习朋友们.主要讨论下嵌入式技术学习方法,主要是针对嵌入式软件.嵌入式技术是一门边缘科学(又称交叉科学),涉及的内容非常广泛,前几年很多学校,包括一流的大学都在讨论要不要设置这个专业.不是说设置这个专业本身有什么问题,而是因为课程设置不容易安排,如果偏硬件的话那就成了电子工程一类的专业,如果偏软的话

nginx故障及处理

原因: 502 GAT away Php-cgi进程挂掉或者是没有cgi进程 504 timeout Nginx请求不到php-cgi进程,超时 解决方法: 思路: 502错误和php-fpm.conf配置文件有关系,网上很多教程都说了,一般就设置以下几个选项 这个数字只是一个参考,具体多少需要自己去琢磨 504错误和nginx.conf配置文件有很大的关系,网上教程就是说修改缓存的时间,大小等等,其实不然,除了上面的要修改,还有一个关键就是fastcgi_read_timeout这个选项,此选

[总结]视音频技术零基础学习方法

一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术.需要注意的是,本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西. 0.     生活中的视音频技术 平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花八门的电影.(其实专业的影视爱好者一概会把影视文件分门别类的,但我比较懒,一股脑把电影放在了一起) 因为下载的来源不同,这

[总结]视音频编解码技术零基础学习方法

一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术.需要注意的是,本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西. 0.     生活中的视音频技术 平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花八门的电影.(其实专业的影视爱好者一概会把影视文件分门别类的,但我比较懒,一股脑把电影放在了一起) 因为下载的来源不同,这

学习方法:如何在工作内外获得持续的技术成长

成长永远不是一种结果,而是一种累积效应,更是一种习惯,每个人都时刻在累积,但成长力度却相差甚远,原因就在于特定客观环境内,是各种束缚导致自己打破不掉习惯以及打破后不能坚持.要突破就要从工作内外这两个战场下手,工作内是最佳的成长之地,而工作外是工作内所不能提供的试验田,可以有更多的涉猎与想法验证. 成长本质是突破天花板 几乎每个人都遇到了成长受限.成长瓶颈.成长迷茫的问题,每个人的原因背景都不同,比如: 转行做前端,在大公司里,业务与团队环境趋于稳定,找不到成长机会,与同龄人也有差距,心有不甘想要

公开课:Oracle云数据库学习方法与个人技术发展

公开课地址:QQ群 263409098 公开课地址:2017年5月17日20点 公开课内容: 1.云时代的IT技术从业人员该何去何从? 2.云时代的企业到底需要什么样的技术人才? 3.如何成为年薪(30万~100万)的高薪人才? 4.学好Oracle数据库的途径有哪些? 5.学好Oracle数据库的有效方法有哪些? 6.学习Oracle数据库需要什么门槛? 7.0基础学习Oracle数据库需要哪些条件? 8.0基础如何学习Oracle数据库? 9.免费的0基础Oracle入门必备基础视频(本期送