程序员,别再迷恋多线程工作了

我刚刚尝试了一下,一边用 iPad 看“Java 极客技术”自制的 SpringBoot 视频(1.2X 倍速),一边在 iMac 上回复博客上读者的留言。过了一会,视频上讲了什么,我完全没有印象了;而回复的内容也写得乱七八糟。

很长一段时间内,都在欺骗我自己:一边写博客,一边听音乐,自认为可以一心多用,做到了像计算机一样的“多线程工作”。可等到音乐的某个高潮响起时,我情不自禁地投入到了音乐的世界中,却完全忘了博客接下来应该写的主题。于是只能狠狠地把音乐关掉,重新读一遍计划好的内容大纲,寻找新的写作灵感(之前的灵感已经杳无音讯了)。

像我这样自作聪明的人应该不在少数,但实际上我们只是在几个不同的任务之间快速地进行切换。当切换的频率过高的时候,我们的创造力就会下降得越快,我们浪费的时间就越多,我们学习的效率就会越低。

假如你要反驳,说自己在打发时间,那请你自便。

01、为什么我们会迷恋多线程工作

“人生苦短,我爱多线程”——这恐怕是我们迷恋多线程工作的主要原因了。想一想手头那么多事情要做,而我们又分身乏术,不能像孙悟空那样拔一根猴毛就能复制一个战斗力满满的自己,就只能硬着头皮 new Thread().start() 了。

就我们程序员来说,打开手机,掘金社区上的小册在向我招手,极客XX的课程在向我抛媚眼,GitChat 的小课在向我暗送秋波,就连XX星球也在喊我过去。在我们犹豫再三的时候,奇妙清单提示我,项目要 deadline 了,于是我们只能摇摇头,忍不住叹了一口气。

是这样的,生命是短暂的,可我们要做的事情实在是太多了。况且多线程工作会让我们上瘾,因为“当完成一项小任务时,我们会受到多巴胺的冲击,也就是我们的奖励激素。大脑喜欢多巴胺,于是我们被鼓励不停地在一些能给予自己即时满足感的微小任务之间切换。”

可多线程工作在大多数情况下给我们带来的是负面的影响。计算机在处理多线程任务时可以通过追加 CPU 的核数来提高程序的运行效率。但我们并不是计算机。

02、多线程工作严重影响工作效率

当一个程序员在全力编程的时候,脑袋里同时记着数不胜数的东西,包括变量名、方法名、重要的接口、数据结构,还有他们自己的常用组件库。如果送这个程序员去侏罗纪公园度假一个月,保准他会把这些东西忘得一干二净。

在高效编程的时候,脑袋里的那些东西就好像存储在计算机的 RAM 上,等到其他的任务切换进来的时候,这些东西就不得不转移到别的地方(比如计算机上的磁盘)备份起来,等重新切回到原来的任务上时,就需要花费巨大的精力重新恢复了。

不知道你有没有这种感觉,我是有的。我特别讨厌在聚精会神编码的时候,突然杀来一个电话,让你措手不及,尤其是广告营销的,忍不住要痛骂他们几句,然后加入黑名单。有时候很不幸,来电显示打来电话的人是老板,就不得不扼杀住想要爆发的怒火。可怒火是扼杀了,敲代码的那种快感也被扼杀了。

2011 年加利福尼亚大学发表的一篇研究报告展示了“快速地从一项任务切换到另一项任务”是怎样影响我们记忆的。研究者们表示,多线程工作对人的“工作记忆”有着消极的影响。工作记忆是指一段时间内在大脑中保存和处理信息的能力,它是一切思维活动的基础,也是学习的第一步。

当我们能够专注做一件事情的时候,工作记忆就不太容易受到影响。但受限于工作场合,互联网公司尤其钟爱开放式的办公室,大家汇聚一堂,感觉彼此之间充满真爱。但大量吵杂的声音,严重影响着我们的工作效率,于是夜深人静加班的时候,工作效率是最高的。

03、多线程工作会扼杀创造力

神经科学家厄尔·米勒(Earl Miller)表示多线程工作会扼杀创造力,“创新的想法,归根到底来源于深度的注意集中。当我们尝试多线程工作时,基本不会在任何一条能发现原创东西的道路上走的足够远,因为我们在不停地切换和回溯。”

当我在上下班的路上骑自行车的时候,我发现戴着消噪耳机听音乐是一件非常美妙的事情。不仅可以把马路上嘈杂的声音隔离开来,还能够消磨掉时光。

而当我在写博客的时候,听音乐就适得其反了。这是因为骑自行车本身并不是一件需要创造力才能完成的事情,而写博客则需要聚精会神才能把脑袋里的所见所闻流畅地梳理出来。

也就是说,当我们需要创造力的时候,最有效的做法就是移除干扰物,把手机调成飞行模式,把一些软件的通知禁掉,把门窗关闭等等。尽量专心地完成当前的任务。

这并不简单,但是非常值得去做。

04、最后

我需要告诫大家一句:当我们正在做的一个任务还没有完成的时候,下一个任务来临的时候一定要勇敢说“不”,坦率地告知派发任务的领导,让他保持清醒。

假如说不出口,那也要一个一个来。切记不要高估我们自身的能力,毕竟我们是人,不是计算机,没办法把我们的脑袋改造成多核的。总之一句话:程序员,别再迷恋多线程工作的鬼话了。

Java Geek Tech wechat
欢迎订阅 Java 极客技术,这里分享关于 Java 的一切。