思路被打断了怎么办
程序猿和工程狮们的日常工作中,难免遇到代码写得正爽的时候被人打断。要重新进入状态需要时间和心力,万一又被打断,这一天就不能好好过了。本文聊一聊可以把副作用尽可能降低的一些办法。
降低被打断概率
被打断是不可避免的,就像程序中我们不得不try…catch一样。但是我们可以想办法降低被exception产生的概率。
自身原因
首先看看都有哪些异常发生。以笔者为例,如果写代码进入真·状态,那只有别人找上门才能被干扰。如果是伪·状态,那么自己可能会突然想到:有一条微信没看,有一封邮件忘记回了,麻麻让我在网上买的东东忘记买了……于是就悲剧了。对于这种异常来说,最简单的方法就是预先把它们都给处理好。在办正事之前,先干杂事,收发邮件,手机静音,接杯水,上个厕所。至于有一些买东西、订日程之类的非日常事务,需要一个todo list。我一般是在接到任务的时候,记录到闹钟里,定一个比较有空的时间来做。没有了念想,突然想起有事没做的冷汗就不至于经常冒出来了。
另外,如果有什么任务可以很快完成(比如两分钟内),哪怕它的优先级不那么高,也可以先将它搞定,排除念想。
他人原因
接下来是被人打断的情况。如果要降低这种概率,一种办法是在工位的显眼处挂上一块如下牌子,等有空闲了再摘掉,就是有点儿不近人情。
稍微对用户友好的方法是加一个计时器,别人好歹能知道再过多久之后过来找你比较方便。如果像我这样实在下不了手挂牌子,那就只好用下文介绍的等一下大法了。
等一下
花费较少大脑资源,请对方稍微等待一小段时间。但是不要冷冰冰地说:“等一下”。一下是多久?对方要不要找其他人帮忙?这样可能造成对方的困扰,说不定就影响团结了。好歹微笑一下:“稍微等我一会儿可以吗?”,自认在时间上靠谱的朋友还可以更加量化:“等我两分钟好吗”。两分钟之后,听一下对方的需求,是否自己可以迅速搞定,然后再决定是否让对方再等上半小时,或者推荐另一个人来处理。若是对方非常着急,那就花上半分钟记录一下当前手头上的进度和关键因素,就好比暂时让自己这台电脑在这个线程上休眠一下,过一会儿再唤醒。
时间
早晨和深夜,活动的人少,被打断的几率就小。不管是早起的鸟儿还是晚睡的虫子,抓住那段时间专心做不想被打断的事。
判断优先级
也有火急火燎的事突然插进来。比如运维正在部署你的代码,然后出问题了。或者测试发现了一个非常严重的缺陷,需要马上解决。这些不得不立即处理的事情,就得靠下一章的办法来尽量降低副作用了。
使自己不怕被打断
要是能让自己处于不怕被打断的状态,那么就可以来者不拒了。
日常工作
如果日常工作以业务开发为主,平时的开发过程可以分为三个阶段:
- 拆分任务:把一个故事拆分成数个任务,每一个不要太大
- 实现任务:做完其中的一个任务
- 重构:虽然已经完成了,但是可以让代码更优雅
首先是拆分任务。这个阶段应该是在不太长的时间内完成的。虽然很怕被打断,但是由于持续时间短,基本上不太会老被打断。接下来的实现任务会略微麻烦一些,最后再讲。现在说重构。重构是由坏味道驱动,由一系列的重构动作和频繁地运行测试组成的。这就决定了重构应该可以随时中止,所以不是那么怕打断,当然还是需要费时再次阅读代码。如果被打断之后回来不知道要干什么,那么多半是坏味道还不够强烈,这样的代码暂不处理也问题不大。最后讲实现任务。这个阶段的持续时间比较长,取决于具体任务,有可能怕被打断。不过好处是被打断回来也很容易从任务中知道你在做什么。尤其是如果使用TDD的方式,跑一下测试基本上思路就回来了。我们知道TDD有三个法则:
- 在编好失败单元测试之前,不要编写任何产品代码
- 只要有一个单元测试失败了,就不要再写测试代码;无法通过编译也是一种失败情况
- 产品代码恰好能够让当前失败的单元测试成功通过即可,不要多写
当我们编写测试时被打断,回来时测试名会告诉我们应该做啥了。当我们编写实现时被打断,回来时失败的测试会告诉我们应该做啥了。
其它
笔者撰写本文的时候,被打断了无数次,确是别有一番滋味。但是我不是很怕被打断(当然还是有少许代价的),因为我也是按照日常工作的方式写作的。先拆分任务,把要写的文章分成不同模块,每个模块起好标题或者是写句话说明自己想在里面写点儿什么。然后实现任务,虽然没有TDD,但是因为文章的框架已经建立起来了,回来的时候很容易回到刚才写作的背景里去。最后是重构,把不通顺的字句重新整理,纠正错别字等。还是那句话,如果重构被打断,导致回来的时候不知道该做什么了,多半是文章还没糟糕到那种地步,凑活用用还是可以的。
方法和工具
下面介绍一些时间管理方法,作为扩展阅读,读者可以选取自己喜欢的工具来使用。
番茄工作法
番茄工作法无需我多说了,自己看看是不是适合吧。知乎上也有个一千多赞的回答。
GTD
GTD是英文Getting Things Done的缩写,是一种行为管理的方法。“主要原则在于一个人需要通过记录的方式把头脑中的各种任务移出来,通过这样的方式,头脑可以不用塞满各种需要完成的事情,而集中精力在正在完成的事情,是一种消灭压力的高效工作方法。”