读中学的时候,我们就在物理课上得知电路有两种基本连接方式:串联和并联。我们还背过一些相关的规律,如 “串联分压、并联分流” [21] 。在任务管理过程中,可以运用类似的方式去思考任务与任务之间的关系:这两个任务之间究竟应该是串行关系,还是并行关系?
弄清这个问题非常重要,因为在一般情况下,“提高效率”指的就是“原本只能串行完成的两个任务现在可以并行完成”。
有些任务只能串行,例如要先洗手再吃饭。“洗手”和“吃饭”,不仅是串行关系的任务,还是顺序确定的任务。尽管确实有人真的“不洗手先吃饭而后再洗手”,但大多数人还是能够看到这样做事的明显荒谬之处,而且,我们没办法也没必要“边洗手边吃饭”。
俗话说“一心不可二用”,从某种意义上理解,这句话是正确的。不过我们也确实很难做到一心一意地长期只做一件事,事实上,我们日常同时要做的事情可能不少于两件。一些早期的计算机操作系统,例如DOS,是单任务操作系统;为了提高效率,程序员们又开发出了多任务操作系统,例如Windows。从发展的角度看,为了提高效率,我们也有必要给自己的大脑打造一个“多任务操作系统”。
最直接的办法是尽量将两个任务并行。例如,在跑步的时候听英语,在写文章的时候听音乐,在等班车的时候看书等。养成一个习惯——把要做的事情用纸和笔写下来,把任务落到纸面上,就可以比较容易地分辨出哪些任务是简单而又机械的,哪些任务是相对复杂而又灵活的(对我个人来讲,需要思考的就是“非机械”的),然后,尝试把一个非机械的任务和一个机械的任务搭配起来完成。
举一些我自己的例子。跑步是机械的,听 有声读物 [22] 是非机械的(相对需要集中更多注意力), 这两件事情就可以一起做 [23] 。另一个例子是我在写文章的时候往往同时听着音乐,甚至在另外一块屏幕上放着电影。我可以这么做是有前提的:我的电脑接了两台显示器,并且都是25英寸宽屏。在这种情况下,即使同时播放两部电影,我的屏幕上还是有足够的空间。另一个我可以这么做的原因是我看过的电影太多(这两年是每天至少一部),以至于我对电影的理解能力非常强(就好像文章读多了阅读理解能力就会很强一样),大多数电影我只需要间或扫一眼就可以,而且不会错过重要的细节。但是,对一些比较特别的电影,如 《福斯特对话尼克松》 [24] 《朗读者》 [25] 《革命之路》 [26] 《是,大臣》 [27] 等,我就做不到边写文章边看,而需要停下手中的事情专心地看。
并行两个任务的一个重要前提是执行者足够了解这两个任务,且对自己有足够清楚的认识——对执行者来说,这两个任务是“主动并行”的。被动发生的并行任务往往只能使效率变得更低。我在生活中剔除的一个被动并行任务就是“接电话”。从好多年前开始,我就把自己的手机设为“静音”状态,从不主动接电话——而是每隔一两个小时查看一下电话,有必要的就打回去。当我有条件给自己安排一间不受人打搅的“工作室”后,终于再一次大幅削减了“被动并行”造成的时间和精力的浪费。
当一个任务比较庞大,需要划分成多个步骤或者多个子任务的时候,对这些子任务之间的关系需要仔细甄别。甄别后,可能会产生若干行动方案,而针对这些方案可能还需要反复衡量才能找到最佳方案。
华罗庚 [28] 先生曾经用 烧水泡茶 [29] 为例说明过这个问题。
▷办法甲:洗好开水壶,灌上凉水,放在火上,在等待水开的时候,洗茶壶、洗茶杯、拿茶叶,等水开了,泡茶喝。
▷办法乙:先做好一些准备工作,洗开水壶,洗壶杯,拿茶叶,一切就绪,灌水烧水,坐待水开了泡茶喝。
▷办法丙:洗净开水壶,灌上凉水,放在火上,坐待水开,开了之后急急忙忙找茶叶,洗壶杯,泡茶喝。
哪种办法更省时间呢?
谁都能看出第一种办法好。原因很简单:有些任务被并行处理了。可以如此优化的前提是“大任务被划分成足够多又不太多的小任务”。有了这样的前提,才有能力分辨哪些任务可以并行——所谓的“优化”,其实是很简单的。
如果不进行划分(事实上大多数人真的如此),就只有一个任务——喝茶。然而,如果粗略划分一下,就能知道起码可以划分成两个子任务,也就是“烧水”和“泡茶”。但这样还不够,因为在划分之后,两个子任务是串行关系,先后顺序明了,没有可以优化的余地。如果再继续划分子任务的话,就得找出有并行关系的任务,进而提高效率。
在麦当劳之类的快餐店排队也会涉及串行和并行的问题。很多人是轮到自己的时候才抬头看柜台上面的菜单,再花很长时间作出选择,而实际上,完全可以把“排队”和“选菜”并行,这样,轮到自己的时候只需几句话就可以端着菜去吃了。有一次我为了观察,特意排了个10人长队,结果所有人都是在轮到自己的时候才开始选菜的。有过这样的经历,我就决定以后除非无须排队或者排队的人很少,我绝不在类似的餐馆吃饭,以免被迫浪费时间。
让自己拥有“多任务操作系统”的另一个方法就是切分自己的时间。在本质上,我们的大脑与计算机的 中央处理器 [30] (下文简称“处理器”)一样,是个一次只能处理一项任务的系统。那么,计算机究竟是如何做到同一时间处理多项任务的呢?(没有多任务处理机制,就无法实现如今人们习以为常的多视窗操作系统。)
一个处理器在一个时间段内其实只能做一件事 [31] ,因为它只有一个个体、一个时空。而多任务操作系统把一个长时间段划分成很多短小的时间片,每个时间片只让处理器执行一个 进程 [32] ——尽管同时可能有多个进程需要处理。在第一个时间片里,操作系统让处理器处理A进程;时间片的时间用完之后,无论A进程处理到什么程度,都要被“挂起”(A进程这时不能再占用处理器资源——尽管它还是被允许使用计算机的其他资源,如内存、磁盘、屏幕输出等);在第二个时间片里,处理器处理的是B进程,时间用完后,B进程将与A进程一样被中途“挂起”;然后,处理器开始处理下一个进程,例如C进程;把所有任务的一部分依次完成之后,处理器重新循环,从A进程开始顺次处理,直到最后一个进程。在循环过程中,有些任务完成了,有些任务处于未完成状态,如果有新的任务进来,加入循环队列即可。看上去好像是操作系统同时运行很多进程,而实际上,它依靠的是类似视觉暂留现象的机制。
在这个机制里,进程并非按其本质属性被划分为子进程,而是被处理器的时间片硬性划分为进程片。这是关键。
我的健身教练就是一个例子。他非常酷,收取的课时费也很高——因为他就是比其他教练教得好。他的工作方式可以很好地说明上述“关键”。例如,我约他15:00至16:30锻炼,结果有一天我迟到了(16:00才到),那么他会一言不发,马上开始上课,到了16:30(我刚刚上了半小时课),他会说:“到时间了,下课。”可收取的费用还是1.5小时的费用。这位健身教练是有效率的。因为他的能力强,所以课排得满,所以他必须准时下课才能确保不耽误下一位客户的时间。之所以说他酷,是因为即便在接下来的时间里他没有课,他也不会延长那1小时。事实上,尽管有些人觉得他“不通情理”,但这确实是无可挑剔的做法。这样的做法可以非常有效地减少一种令人恼火的情况——因其他人的错误而耽误自己的时间。
把自己的时间切分成“时间片” [33] 是一种很难习得的能力,我花了两三年时间才开始感觉自己可以相对自如地运用这种能力。不过这种能力在大多数时候用不上,只有在任务太多、时间太紧的情况下,我才会使用这种能力。在使用这种能力时,要先坐下来制定一个工作列表,把任务罗列出来,然后把自己的时间“切片”。我通常把“20分钟工作+5分钟休息”作为一个时间片,然后就开始像处理器一样处理任务。这样做可以保持相对长时间的高效率工作。
尽管说起来简单,但其实需要反复应用才能把这种简单的思考模式变成习惯。一旦养成精细拆分任务的习惯,效率就会在不知不觉间提高了。