有时候电脑忽然慢下来,这时候打开「工作管理员」(Task Manager),你会惊讶地发现,怎么有这么多莫名其妙的「常驻程式」正同时在执行? 其中一个罪魁祸首程式占用了CPU将近百分之百的效能,难怪你的Visual Studio忽然变得这么慢。
不仅电脑中有许多常驻程式,会来中断我们的重要程式,我们现实的生活中,也有许多例行与非例行的事项,占据我们一天中大多数的时间,让我 们做事的效率不彰。可能是没有结论的无聊会议、可能是一通女友撒娇的电话、可能是MSN上没有意义的寒暄、合作厂商礼貌性的拜会、或者行政人 员对于你请款单据的刁难。这些都会让你的工作产能大减。
你知道,将这些乱七八糟的事情摒除于外,绝对可以省下许多时间写程式,也就不需要天天加班了!但是你可能不知道,你因此省下的时间,不只是这些杂事的时间,还包括了「进入流」的时间。
心理学家发现一种「高度专心与高生产力」的心智状态,称之为流(flow)。进入流的状态,需要约15分钟(0.25小时)的时间。你可以把
「进入流」的时间,比喻成CPU进行Context-Switch时的Overhead。
二十多年前,《Peopleware: Productive Projects and Teams》一书,就已经开始提醒我们,程式员写程式时遇到外来干扰,对生产力的伤害有多大。总而言之,如果你想提升你的程式生产力,你可以全面检视一天中有哪些Context-Switch,然后尽量避免。
假设有一个程式员,中午休息一个小时,上下午的上班时间各3.5小时。那么他处于高生产力的时间,大约是3.5 – 0.25 + 3.5 – 0.25 = 6.5小时。假设一天中被电话等杂事中断10次,每次都花费6分钟(0.1小时),则高生产力的时间变成6.5 – (0.1+0.25) * 10 = 3小时。降低的幅度相当惊人。每次6分钟的打扰,都会造成6+15 = 21分钟的损失。
每一次的注意力转移,都需要耗费15分钟才能回到之前的流状态。所以大多数的程式员,很难在白天上班时有很高的生产力。有许多程式员喜欢在晚上(或下班后)写程式,正是因为半夜的干扰比白天少很多,所以产能比较高。
程式员要如何避免来自办公室的干扰?大部分的程式员都没有独立的办公室,只有小方块,所以很难避免干扰。以前在上班时,我就常常幻想要把办公室小方块隔板加高,盖上屋顶,加个滑动门,成为一个1.5 x 1.5 x 2立方公尺的「办公包厢」。我还想加个造型烟囱,兼具透气的目的。如果真有办公包厢,应该就可以阻隔相当多来自办公室的干扰。
许多程式员习惯上班时戴着耳机,当进入耳朵的声音变得可以预期(例如音乐),大脑可以将它变成白色噪音(white noise),而主动过滤掉。但是我觉得一整天都戴着耳机,耳朵其实会不舒服。加上长期使用耳机会造成听力衰退,而现代医学认为,听力衰退是无法复原的,所以戴着耳机似乎不是好作法。我后来尝试着改用耳塞,觉得效果还不错。
Instant Messenger(IM)软体也常常会造成工作的干扰。我工作时,尽量不开IM,或者设定成忙碌。有些人很白目,对我的「忙碌」状态置之不理,找我进行不重要的对话,这种人就会被我封锁。除了IM,电话也常常是干扰的来源。
上述的这些干扰,是我们可以轻易地察觉的,但是有一类干扰,是编程语言与开发工具造成的,也会造成Context-Switch,使得程式员的生产力降低,但是却少有人注意到。
有些编程语言和开发工具,需要你进行自我测试、除错、编译、连结的冗长动作,让你离开真正具有高生产力的流。大部分这类的语言,都是编译式、低阶、传统的语言。
Script语言显然就比较没这个问题。许多使用Script语言的人都会觉得生产力很高,开发的时间可以比传统的语言快上许多倍。一方面是因为
Script语言很高阶,可以用比较简短的程式码,做出很多事;另一方面,有问题可以立刻修改,不需要形成中断而离开「流」。
即使是传统的语言,也可以藉由开发工具的帮忙,减少离开流,而改进开发效率。例如六七年前的IntelliJ就显然比当时其他Java IDE更能够减少Context-Switch,生产力更高,所以马上成为最受欢迎的Java IDE之一。
请注意:有些行为很容易被误认为是干扰,但其实是有助于生产力的。例如,很累时,可以起身走动,到办公室外面的Starbucks买咖啡,但是脑筋依然保持原来的Context,继续思考,不要进行Context-Switch。当身体在动作时,血液循环加快,脑筋似乎会更清晰。
在走路的时候,尽量不要被沿路的事情所分心,也不要和他人交谈,因为这些都会造成Context-Switch。不过你可得小心,因为我有好几次在去买咖啡的路上,差一点因此被车撞到呢!为了避免Context Switch,而造成主机损毁是不值得的。
[zz]无所不在的context switch
最新推荐文章于 2024-10-31 15:49:24 发布