无所不在的Context Switch

http://hi.baidu.com/cliff77/blog/item/11eeaaf5381f8120bd3109ca.html

有时候计算机忽然慢下来, 这时候打开“ 工作管理员”(TaskManager),你会惊讶地发现,怎么有这么多莫名其妙的“常驻程序”正同时在执行?其中一个罪魁祸首程序占用了CPU将近百分之百的效能,难怪你的Visual Studio 忽然变得这么慢。

     不仅计算机中有许多常驻程序,会来中断我们的重要程序。在现实的生活中,也有许多例行与非例行的事项,占据我们一天中大多数的时间,让我们做事的效率不彰。可能是没有结论的无聊会议、可能是一通女友撒娇的电话、可能是MSN上没有意义的寒暄、合作厂商礼貌性的拜会、或者行政人员对于你请款单据的刁难。这些都会让你的工作效率大减。将这些乱七八遭的事情摒除于外,绝对可以省下许多时间写程序,也就不需要天天加班了!但是你可能不知道,你因此省下的时间,不只是这些杂事的时间,还包括了“进入流”的时间。

心理学家发现一种“高度专心与高生产力”的心智状态,称之为“流”(flow)。进入流的状态,需要约15分钟(0.25 小时)的时间。你可以把“进入流”的时间,比喻成CPU进行Context-Switch 时的Overhead。二十多年前,《Peopleware: ProductiveProjects 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。不过你可得小心,因为我有好几次在去买咖啡的路上,差一点因此被车撞到呢!

你可能感兴趣的:(java,编程,工作,语言,开发工具,电话)