想要高效的工作,最关键的一个要素就是:深度工作
深度工作是一种状态,意指当前自己沉浸在做的事情之中一种忘我的状态。而在这个状态中,又以心流为可追求的最高境界。
本周,继续追求高效的程序员,这是第二篇。本系列其它文章为:
1.做追求高效的程序员(一):价值,效率与时间
一)
对于深度工作,我个人的定义是:
在无干扰的状态下,专注的从事喜欢做的工作
从我的这个定义中来看,有三个比较关键的词是需要稍微说明下,它们分别是无干扰,专注以及喜欢
无干扰
我认为对程序员来说,在实际工作中非常影响效率的一件事就是公司的各种干扰。
本来编程相比其它事,更需要一个无干扰的状态,它和做管理不一样,做管理可能就是不断在产生各种"干扰",比如与人沟通,找人开会,沟通进度,协调资源等。
但编程则不一样,如果没有一个安静或能让人平静的环境,想要进入深度工作的状态非常难。因为进入深度工作是需要时间的,一个人不是说开始工作马上能进入深度工作的状态。而是慢慢的,然后进入一种状态,非常忘我。
很可惜,这种时候,可能管理人员会找上你,说要开个会什么的,于是程序员的状态立刻被打断。
这就是干扰。
很多公司都存在许多类似的干扰,当然我们不能说这些干扰是没有价值的,可能确实有一些事需要找到我们。但也存在很多完全没有必要频繁的打断编程人员的情况。
这就一方面要求程序员自己要主动提出,比如要求上午尽量不要找自己,或找个别人无法找到你的环境(通常这个有点难),或要求管理人员在下午某个时段点一次性集中进行沟通等方式。
另一方面,也需要公司及管理人员意识到,给编程人员营造一种不被干扰的环境是多么重要。
而很多所谓的大公司,大家都觉得很忙,很累的原因在于:
大量的时间花在沟通,会议等对程序员来说没有太多价值的事上,反而要等到晚上或半夜程序员才能静心好好的写代码。
难怪程序员很多是夜猫子,环境逼迫啊。
专注
无干扰是指外面的一种状态,而专注则是指的内部的一种心理状态。
也就是程序员你在某个时刻是不是进入一种忘我的状态,我认为这是深度工作的一种前提条件。
如果你在编码时,想的是另外的事,比如领导昨天批评你了,你老在担心这个事,那我觉得这种时候你压根进入不了深度工作的状态。
只要你自己的关注全放在当前这个事情上,比如你在开发一个功能,你头脑中想的全是这个功能,及当前你要如何实现,你可能想到了一个更好,更高效的实现机制,你心中非常期望,迫不及待的想要实现及验证它,完成之后,有一种极大的满足感。
这就是专注。
如果你从未经历过类似的体验,我只能说你得好好想想,你究竟喜欢不喜欢编程。
喜欢
如果当前做的事,不是你喜欢的事。那这个不可能产生深度工作的状态。
所以,这是深度工作的前提,
关于这个,我只能建议,尽量去做自己喜欢做的事。
当然,人生不如意之事十有八九,确实不喜欢又必须得做的,我觉得就把要求降到认真吧。
要求自己认真的完成这件事,就问心无愧了。
二)
近些年来,心流这个词也很火。
当我想到深度工作,就想到心流,而且我也觉得心流某种程序上和深度工作是重合度非常高的事。
但我认为心流可能某种程度上比深度工作更高的一种状态,也就是更难达到的一种状态。
关于心流,我同样认为有三个词非常重要,它们是做喜欢的事,做有挑战的事,频繁的正向反馈,只有满足这三个条件,才有可能产生心流。
而似乎心流的前提一定是深度工作,如果没有达到深度工作的状态,想产生心流可能性不大。
除了喜欢的事以外,产生心流的另外两个重要的条件就是做有挑战的事和频繁的正向反馈。
用一种好的方式来形容有挑战的事,那就是:需要稍微用力跳一下你才能够着的地方。这就是有挑战的事,如果你做的事是自己轻而易举能完成的,那产生心流的可能性不大。
而频繁的正向反馈是指,能有正向的结果激励你,奖励你。我们现在都知道,大脑非常期待反馈,如果你做一件事需要很久才能收到正向反馈,那你坚持下去的动力就会越来越弱了。而如果能时不时的有正向反馈,则它就像一个加油站一样,做着做着给你加个油,让你动力十足。
只有满足上述三个条件,才有可能产生心流。
三)
好吧,怎么做?
我也只能说一些我觉得有可能对你有帮助的点
主动避开外部干扰
如果你所处的环境外部干扰太多,就想办法减少与避开外部干扰。
比如,告诉你的项目经理,不要什么会都拉上自己,不重要的事可以积压着集中沟通,等到下午下班前一个小时再和自己沟通。
或者干脆找个让别人找不到你的地方等,你要明白这世界少了谁都一样转,你没有想像的那么重要,找不到你不会产生什么不能接受的后果 。
这些都是可以考虑的方式
关键是要让别人知道,你的时间和你的事也很重要,不要随便来个人来个什么事就把你打断了。
保持专注
不要并行的去做很多事,我们的人脑毕竟不是多核CPU,多核CPU能同时并发的处理很多事但我们的脑子肯定做不到这样。
保持专注的前提,就是当下只专注某一个事。如果你确实任务很多,把它分开,在不同的时间去处理。至少给每个事1-2个小时专门的时间来处理它。
番茄工作法是个不错的方式,你可以尝试下,它主张每20-30分钟,只专注的做一件事,再休息一会。
做喜欢的事
好吧,也许这并不是你能选择的,但也不尽如此,对吧。
你可以与领导或公司沟通,做自己喜欢做的事,这是你能做到深度工作与心流的前提。
比如,对很多程序员来说,做管理并不合适,可能自己也不是非常喜欢管理或与人沟通。那你可以不做,专注的只做编程。
但这又涉及到另一个个人前程的问题了,你得好好思考下,怎么样才是对你最有益的。
我认为,想要做出成就,选择非常重要,但如果你不喜欢的话,也不太可能做出成就的。
编写单元测试
如果你是前端或移动端开发,有个非常有益的优势,这两个方向来做事,很容易见到成果,因为有现成的UI,这是产生正向反馈的一种非常好的方式。
如果你是后端开发,这就不太容易了,对一个后端功能开发,可能很长时间段你都见不到什么实际的东西或你能看到的成果,这并不是一个好的方式。
所以,这也是我主张TDD并且自己喜欢这样做的原因,与等待前端或移动端来联调才能知道自己开发的东西的效果,还不如我自己编写单元测试,在短时间内就知道自己的东西是OK了。
这能频繁的产生正向反馈。
拆分任务,越小越好
不要让一个任务看起来要几天或几星期才能完成,可能事实上你的任务确实如此,但你要学会把这些任务进行拆分,这样的事情总可能拆成更小的功能点。
与关注一个大的长的任务比起来,不断的完成这些小的任务是个更好的方式,它会让你不断的意识到你又完成了一个事情,这也是正向反馈的很好的方式。
四)
对于编程来说,有个事情始终是我们要好好面对的,就是如何面对不断频繁出现的新技术。
这要求我们有极高的学习能力,如果我们无法高效的学习,所谓的做高效的程序员也就无从谈起了。
下一章,追求高效的程序员(三):高效与快速的学习能力。
下周再聊。