@xuemingdeng
2017-08-10T14:59:30.000000Z
字数 1323
阅读 574
管理
来自Stripe的程序媛Julia Evans在Twitter上问了一个问题:“你们是如何进行自我学习的?”很多人给出了他们的回答,大致总结如下:
这些事情几乎都发生在工作之外,而且相信很多人也是这么做的。但问题是,为什么有些非常优秀的程序员并没有在工作之余做这些事情,或者至少没有经常这么做,但仍然不影响他们成为大神之类的人物?带着这个问题,Julia在Twitter上与人们展开了交流,最后总结了以下几点。
以Julia为例,她在工作中需要用到Go语言,她很喜欢这门语言,只是她并不想花太多的个人时间在学习Go语言上。因为她觉得没有必要,她完全可以在工作中通过编写代码、阅读别人的代码、让别人审查她的代码这些方式来学习这门语言。虽说在工作之外学习编程语言不是什么坏事,但既然可以在工作中更高效地学习,那为什么不直接这么做呢?
Julia在过去三年学到了很多东西,比如Scala、Ruby、Go,Hadoop、Java并发编程、Java诊断、AWS、网络、容器、服务发现,等等。人们经常会说:“我们使用了某某技术,你需要具备这些方面的经验才能胜任这份工作。”但实际上,Julia在掌握这些技术和知识之前,都没有没有接触过这些东西。所以说,在一开始你不一定要是某某方面的高手,但是你要学会成为高手。选择那些可以从中学到东西的项目。
当Julia遇到高手时,就会观察高手是怎么做事情的,然后模仿他们,或者向他们请教。当她开始独立负责新项目时,就会谨记前辈们的教导,让项目进展得更加顺畅。
查看别人的PR也是很有帮助的,通过跟踪这些PR可以知道别人在做什么以及他们是如何解决问题的。Julia引用了两个很有意思的推文。
我在一个小团队里,我会查看每一个PR,直到完全了解问题所在以及解决问题的方案。
我通过跟踪人们checkin的代码了解他们是如何解决问题的。
阅读源代码是一个非常重要的学习途径。很多系统并没有完备的文档,如果不阅读源码就很难搞清楚内部的细节。
阅读源码对我来说是非常重要的。不仅要了解它们内部的原理是什么,也要了解为什么要那么实现。
有时候,你在面对bug时会束手无策,当别人三下五除二把问题解决掉之后,你会迫不及待地想知道他们是怎么做到的,在以后碰到类似的问题时就知道该怎么处理了。
在为问题寻找解决方案时,我通常会从更广的范围着手,进行更深入的探索。
有时候,我也会深入了解与我无关但与我的工作有关的问题,看看能否从中学到什么。
有很多人说,可以利用通勤时间来学习一些东西,比如听音频、阅读论文或感兴趣的文章。看起来这也是一个不错的学习方式!
不要觉得利用工作时间充电是在“假公济私”。在实战中学习是最好的学习方式,况且也只有先提升自己,才能更好地回馈工作。程序员的时间不可能都用来写代码,程序员真正高效的写代码时间一天不会超过4个小时。可以花一些时间用于思考和学习,在交付工作成果的同时也要不断提升自己。