这是本人在选定前端工程师为方向后,结合网上的一些学习方式而设计的适合自己的学习方法! (总结自evernote笔记)
学什么? 明确学习路线,和初步的技术生涯规划! 对我自己而言,就是以前端技术为基础,包括一般的页面优化,网站优化为基础,深入对html5,javascript,css3的理解,深入浏览器技术等。(技术生涯规划v0.1) 怎么学? 无论什么行业,如果想成为专家,专精某个或者某几个方面是必要的。 1)听看 第一步是听视频或者看视频。这是对某个方面知识快速了解的好办法,因为视频相比书籍文档更精彩一些,而且花费的时间相对比较少,注意力更集中一些。 入门部分,无需过度深入,先对技术有个概念性的了解,策划一个明确的技术加强路线!2)读 读是专精某个领域知识中最重要的一步,读书、读文档、读代码都算是这部分。 1、先说说读书。读书首先是选对书,选书也难也不难。如果你身边有高人,可以请教高人。如果感觉没有高人,那么可以参考china-pub的排行榜,然后结合douban.com上的网友点评来选购,如果还没头绪,给我留言好了。计算机方面的书籍我建议选下面几个出版社的:人民邮电(知名品牌是图灵)、 电子工业、机械工业、清华大学出版社、东南大学出版社。不能说他们出版的一定是精品,但是精品基本上都被这几个出版社出了。 2、精读的书目不要多,一次应该限定在两三本左右。读书时应该备有以下工具:一个本子,一支荧光笔,一支签字笔。本子用于记录自己的心得体会,感觉比较精彩的内容可以标记出来。另外应该定期把笔记总结到网上(比如google docs中)。 3、如果涉及到代码,也应该把示例代码的运行环境准备好 。 精读时应该尽量理解每个章节,章节后面如果有习题就应该把习题做完,然后再学后续内容。如果有相关示例代码,也最好把代码自己录入然后调试运行一 下。前面之所以提到选对书,就是因为如果你书选的有问题,那么精度这一步就很难进行下去,翻译的质量直接影响到你学习质量。精读时的进度也不要太快,免得自己理解不深。如果有可能,最好中英文比对一下(现在网络上可以搜到很多书的英文版ebook),这样不仅可以学习英文,而且最重要的是一些中文中比较难理解的,阅读英文部分可能会容易看懂,这个好像有些难理解,但是就我个人翻译的经验,一般来说翻译会把译者的想法带入,所以很可能造成一些歧义。 精读部分还包括读文档,因为很多比较新一些的知识还没有书籍,只有论文或者电子文档,还是建议把文档打印出来阅读。 读代码也是很重要的一点,如果不是天才,那阅读经典代码就跟阅读经典名著一样,对于编程语言的学习是非常必要的。选择一个好的阅读项目跟选书一样要精心,我建议先从比较精短的示例开始阅读。 当掌握比较基本的知识以后,应该转向选择一些比较经典的开源项目。 3)写 这里的写不是指前一步中写写书上的示例代码,而是说把前面两步学到的知识应用到实际项目中,这一步是最重要的。 再加强说明一次,把学到的东西应用在自己的实际项目当中,不管项目大小,这一步是自学过程中最重要的。 跑题一下说说,我看到过很多培训,内容很好,讲的也不错,但是最后收效甚微。问题不是讲师的水平不够,而是听众只是听了,没有用起来。光看是看不成高手的。 有些朋友会问了,我真不知道写什么,能给点建议么?我的建议是先从小应用开始,然后在写一个比较实用的程序。 什么是小应用呢?比如我喜欢看网络小说,就可以编一个浏览器一样的程序,打开以后它就直接访问小说网站。或者喜欢炒股的,可以编一个股票信息收集, 把网上的股票信息抓取下来。或者有一些自己需要的功能,比如定期抓取屏幕存成图片文件(这个对于测试人员比较有用),或者就是编一个程序它可以播放视频音频。小应用的意思是自己觉得好玩,功能上也不是很复杂,比较容易实现的。 写过一些小程序以后,有感觉了,那就应该把学到的东西用到自己实际项目当中,比如我学Lua,就用Lua加Sqlite数据库编写了以前需要手动实现的功能,也用Lua实现了对C++代码的解析生成html帮助文档。也许你工作项目未必需要这个知识,但是可以在一些边缘项目中使用,力争多用多写,熟能生巧,编程其实就是手熟罢了。 如果就是不知道该如何写一个小程序,那么有几种可能,一个是你想的功能太复杂,这个好解决,另找一个题目就是了;另一种可能是你精读的不够,我建议你把书再仔细读一遍,把书上的例子好好再次写写;如果题目也不复杂,精读也读了,还是不知如何下手,那劝你还是换一个行当好了。三百六十行行行出状元,不是一定要做程序员这一行的。 4)说 说,就是分享。分享的过程其实也是提高的过程。 一般来说,IT公司都有一个分享学习机制,程序员对自己专长的方向研究一段时间以后,整理成ppt,然后演示给大家看。也有一些兴趣组比如Python本地用户组也有类似线下分享交流的机会。如果有这样的机会,建议大家踊跃作为讲师参加。当你写讲稿或者演示的时候会突然发现某些方面其实还很薄弱,当听众提问交流的时候也会发现自己某些地方可能了解的不是那么透彻,这其实也是在学习。分享不仅仅锻炼口才,而且会给人你在这个领域比较精深的感 觉,而且从分享过程中你会发现很多以前没注意到的问题。 分享也是推广的过程,比如你看好C#语言,但是公司可能觉得没有这方面人力或者了解不够,你的传道会让大家对这方面知识了解的多一些,相关疑问也可以找你来答疑,这样也是提升人气值的好办法。 广博篇 一个优秀的程序员,不仅仅要有几样拿手的专业领域,还应该博彩众家之长,了解一下软件工程、架构设计等等方面的知识,还要及时跟踪了解国内外技术动态。 首先,应该像英语学习中的泛读一样,通读一些感兴趣的经典的书籍,比如《程序员修炼之道》《设计模式》《代码大全》《深入理解计算机系统》《快速软件开发》《Unix编程艺术》《编程珠玑》等等。这些书不像精读书可以立刻用到实际。但是这些经典书籍中的思想是可以一直影响整个编程生涯。其实这些书才是真正值得精读的。只不过没办法立刻见效,所以把它们作为广博篇中的提高级书目。 选书一定要小心,烂书就跟老鼠屎,会恶心你很长时间并且降低你学习的积极性。如何选一本好书参考前面精读部分。 想了解技术动态,订阅技术牛人的blog是非常重要的,比如我对redis很感兴趣,于是就订阅了redis作者antirez的博客,他有时候会对一些项目中比较重要的设计做解读。另外比如infoq.com,可以订阅他们的rss来跟踪最新的文章。我建议大家申请一个google账户,使用 google reader作为rss阅读器。在google reader中订阅很方便,直接加入博客地址就可以了。 想跟踪最新潮最酷炫最流行最时尚的编程技术,下面几个来源不可错过。一个来源是reddit的programming讨论区
另外一个来源是DZone的首页http://feeds.dzone.com/dzone/frontpage,DZone新闻有一个很有意思的特点是可以看到顶和踩的数量,一般顶数量比较高的,可以阅读。 再有一个是美味书签的programming 和development ,这两个tag基本上涵盖了编程相关的链接(未必是新文章),可以作为参考。 最后一个新闻来源是HackerNews,也就是HN ,HN与reddit programming有些类似,可以作为一个补充。这几个来源更新非常快,基本上每天都可以看到上百条更新。我建议是不用每条都看,标题感兴趣的看一看,或者发现同时在几个源都出现的也可以看看。每天有个二三十分钟看完前面几个新闻来源,对于新技术动态或者各种技术八卦那就是了如指掌了。
如果你发现某个博客文章写得质量非常高,建议你可以订阅这个博客,一般来讲这样的博客质量都是水准以上的。我大部分的技术博客都是这么搜集来的。 另外现在博客上基本都有twitter地址,也可以follow这些技术牛人的twitter,由于推特的局限,相比博客的学习价值要更低一些,但是交流的时效性比较高。 邮件列表讨论也是一种很不错的讨论方式(相比论坛而言),比如python-cn,toplanguage都是很好的中文技术类邮件讨论组。 关于广博篇,本来还想展开一些,写写如何解决问题,但是这些内容在以前的博客中都有涉及。