每年学习一门新的语言
这篇博客来自于周末参加西安Open Party(http://openparty.in/xian)的社区活动时的开放讨论,感谢在场的诸位提供给我的素材。
5年前刚加入ThoughtWorks时,有人告诉我:ThoughtWorker要每年学习一门新的语言,老实说,这句话我不是第一次听到,但在ThoughtWorks,我第一次发现有一群人真的这样作。在加入了这个群体的5年间,我学习了超过5种编程语言,那么学习新的编程语言带给了我什么?
- 构造”T”型知识结构的横向部分,当手上有榔头时,满眼都是钉子,每一种语言背后有它面对的问题域,掌握一种语言,不足以让我们在面对问题时从容的从工具箱中找出最适合的工具。
- 他山之石可以攻玉,即便你没有机会在项目中使用你掌握的新语言,但是完全可以借鉴它解决问题的思路。
- 有趣,这种内在的满足感会不断驱动你。
- 修炼,Roy说ThoughtWorker的使命之一是通过软件塑造21世纪的模范公民,在我看来,21世纪的模范公民需要保持好奇心,保持学习的热情。树立一个目标,每年驱动自己学习不仅仅是学习语言的过程,更是建立学习习惯,修炼自己心性的过程(稻盛和夫说的比我有煽动力多了)
其实明白了这些好处并不能让大多数的人做成任何事情,好比减肥,能成功的人少之又少,这里我想分享一下我学习的各个阶段,也许能帮助感兴趣的人少走些弯路吧
第一个阶段、读书
最直观的学习语言的方法是买一本书来读,通过书中的一些例子和练习题来巩固知识,完善技巧,我自己从没有通过这种方法成功过。
读书的弊端,第一是慢,第二,里面有大量的知识用不到,也就忘记了,第三,难于坚持,很多关于语言的书都是大部头,甚至上千页的,我自己从没有坚持看完过一本。
第二个阶段、翻译书
因为发现了自己读书不能坚持的弱点,我就想了个办法来强制自己读书,那就是翻译书,和出版社签了约,当然不能随便放弃不翻,这样可以强迫自己把书仔仔细细的读一遍,有助于深入学习和理解。
事实的真相是,大部分的时间都被我花在校对英文和中文上了,根本没有太多的精力细细吃透书中的技术思路。
所以书最后翻译出来了,但是没有达到我学习的目标
第三个阶段、实践
那就学以致用吧,要想学习ruby,那就拿ruby作个小项目,这样有需求拉动,有重点的学习效果一定好的多。
总体来看,这个方法是要好很多,比前两个方法都要深入的多,但我也发现了另一个模式,就是虎头蛇尾,大多数以这种方式启动的小项目,根本还没做到可以用和展示的阶段就做不下去了。原因有两个:
- 相关技术都采用最新的,导致大量的时间都花在穿刺和搭架子上了,
- 没有反馈,没有人批评也没有人赞美,更没有意见和建议,热情是个易耗品,一两个星期一过,没有反馈,就坚持不下去了。
第四个阶段、实战
这期间我读了一本书《Rework》,中文译作《重来》(我能想到的最差的名字,译者,我怎么说你好呢?),作者是DHH,37 Signals的创始人,rails的作者。这本书里提到了一个观点,不要去想一个抽象的、似乎能够改变世界的牛X产品,事实的真想是谁也不会用它,从你和周围人的生活出发,想一个不那么牛X点子,写一个简单的软件真正改变他们的生活,或许一个改变世界的点子可以从中诞生出来,即便没有,你也至少改变了“那个人”的生活。
实战阶段和实践阶段的分别就在于具体的思路和操作手法,我不再去想一个抽象的,另我自己觉得兴奋的点子,而是观察周围人的痛苦,去了解他们的工作,找到可以用软件改进的部分,有了这个目的,在技术选型期,我更多的采用了新旧技术混合,比如scala + Spring framework而不是scala + lift,通过降低学习曲线,减少发布的周期
由于这件改进是会影响到某个人的生活的,她也会特别上心,愿意尝试,愿意给出反馈和意见,有了积极的反馈就更能激励自己向前。
最后再推荐一篇文章,微创新(Micro-Innovation)