- 当时 tags:
- methodology
- tech published: true comments: true
一直想总结一下学习的方法,今天看到Programmer的97件事里,作者叫做Clint Shank的Continuous Learning这篇,感觉比较靠谱,跟大伙分享一下。
阅读书籍、杂志、博客、Twitter和各种网站。如果希望深入了解一个主题,可以加入一些邮件列表。这个比较基本,程序员需要有开放的、稳定的、最新的信息渠道。除了上面提的方式,我比较推荐dzone和reddit上的相关频道,这两个书签网站可以帮你过滤排序每天技术圈的热点和新闻。
如果你确实希望沉浸于一种技术,那么你需要着手写一些代码。这个不说了,如果还认为自己是Programmer的话,写一些代码是最最基本的事情。要了解一种技术,写一些代码,跑一个demo是最最基本的。
尽可能和一位导师,或者一个顶尖的家伙一起工作。尽管从任何人身上学到东西,但是你可以从一个更聪明更有经验的人身上学到完整的(a whole lot more)。这个体会比较深,刚搬进工作室的时候坐在@samson959旁边,虽然只有短短几个月,但是跟着入了门,少走了很多很多弯路。再后来在盛大也从老大身上学到不少东西。这样的机会并不是在哪里都有的。
找一位虚拟导师。这是在上一条无法满足的情况下。在Web上找一位自己喜欢的作家,订阅他们的blog。这条比较有意思,你可以拜一位网上的大牛为师,关注他的博客、Twitter以及Github,关注大牛关注的事情、做的事情。这点很有帮助,最早做前端的时候我关注过当时还在雅虎的陈贤安,后来在盛大关注过新浪的杨卫华,以前他们的博客、Twitter质量不错而且经常更新。不过现在前者转行做了苹果开发的Freelancer,后者也许是太忙了,不好找了。其实就是这样,真正牛的人几乎是没有时间做这样的分享的。技术圈毕竟不是娱乐圈,整天在twitter上大放厥词从早说到晚的往往不是你需要关注的,这需要你有一些辨别能力。
去了解你使用的框架和库。了解他们的工作原理可以帮助你更好的使用他们。如果是开源的,你可以用debugger单步跟所有的代码了解内部的工作原理,你可以看到由优秀的程序员编写和审察的代码。这也是很重要的,好在现在有了github让这变得更简单。我自己曾经花过一些时间在redis上,用gdb单步跟踪来浏览程序确实是学习的好方法,尤其是对于向C这样本身程序结构并非非常清晰的项目,通过调试器来了解程序的组织事半功倍,远远高效于单纯的阅读。
无论合适遇到问题或修正了一个bug,尽可能去了解其后真正发生的事情。可以通过Google去了解网上已经存在的相似问题。这又是很重要的一点,现在除了Google,你还可以直接到StackOverflow上去搜索、提问和解答。
分享一些东西本身就是最好的学习方法。当有人将要听你介绍或问你问题时,你会拥有很大的动力去学习。在盛大的时候,每个部门定期会有分享会,在其他很多公司肯定也有这样的活动。我也曾经去做过这样的分享,真要说收获不是这种活动搞的多成功,而是之前准备的阶段。
参加一个学习小组、本地用户组。这个我没有经验,不过各地的LUG都很活跃,一定是很多人乐在其中的。
参加会议,或者看会议录像、slides。这也很有趣,我参加的第一个活动是08年北京的Perl&PostgreSQL会议,后来在上海参加过KongfuRails,RubyConf还有Apache Road Show。不过会议上能获得什么特别有价值的东西也有限,主要还是开阔眼界,了解社区的动态,了解同行的关注点。我们还可以从InfoQ上看到SpringOne, QCon, StrangeLoop等等会议的视频,既可以了解一些技术,又可以锻炼一下听力。能够收录在InfoQ里的Session质量应该都还是不错的,除此以外,还可以通过Slideshare搜索一些特定主题的slides。
收听podcast。
使用静态检查工具提高你的代码质量。
遵循Pragmatic Programmers中的建议,并每年学习一门新的语言。至少是一种新的技术或工具。这种发散可以给你新的想法,运用在你现在的技术栈中。如果你今年还没有什么想法的话,推荐clojure或者nodejs,一个是函数式一个是全异步。(如果你已经都精通了别说我老土啊)
不要局限在技术中,了解一些你工作的领域知识,可以更好地了解需求,解决业务问题。技术的方向很多,SAP在这方面是个典型。SAP的优势不是基础技术,了解行业了解业务是SAP成功的最重要因素。这点在SAP圈子里容易有更深刻的体会,大部分技术人员更希望能够直接面对客户,了解客户的真实业务,并以此为提升自身价值的途径。
回学校返工。不用说了,从工作岗位回到学校的,一般都有明确的目标。系统地深入地学习还是得在心无旁骛的校园里。