程序員,別再迷戀多線程工作了
我剛剛嘗試了一下,一邊用 iPad 看“Java 極客技術(shù)”自制的 SpringBoot 視頻(1.2X 倍速),一邊在 iMac 上回復(fù)博客上讀者的留言。過(guò)了一會(huì),視頻上講了什么,我完全沒(méi)有印象了;而回復(fù)的內(nèi)容也寫(xiě)得亂七八糟。
很長(zhǎng)一段時(shí)間內(nèi),我都在欺騙我自己:一邊寫(xiě)博客,一邊聽(tīng)音樂(lè),自認(rèn)為可以一心多用,做到了像計(jì)算機(jī)一樣的“多線程工作”??傻鹊揭魳?lè)的某個(gè)高潮響起時(shí),我情不自禁地投入到了音樂(lè)的世界中,卻完全忘了博客接下來(lái)應(yīng)該寫(xiě)的主題。于是只能狠狠地把音樂(lè)關(guān)掉,重新讀一遍計(jì)劃好的內(nèi)容大綱,尋找新的寫(xiě)作靈感(之前的靈感已經(jīng)杳無(wú)音訊了)。
像我這樣自作聰明的人應(yīng)該不在少數(shù),但實(shí)際上我們只是在幾個(gè)不同的任務(wù)之間快速地進(jìn)行切換。當(dāng)切換的頻率過(guò)高的時(shí)候,我們的創(chuàng)造力就會(huì)下降得越快,我們浪費(fèi)的時(shí)間就越多,我們學(xué)習(xí)的效率就會(huì)越低。
假如你要反駁,說(shuō)自己在打發(fā)時(shí)間,那請(qǐng)你自便。
1、為什么我們會(huì)迷戀多線程工作
“人生苦短,我愛(ài)多線程”——這恐怕是我們迷戀多線程工作的主要原因了。想一想手頭那么多事情要做,而我們又分身乏術(shù),不能像孫悟空那樣拔一根猴毛就能復(fù)制一個(gè)戰(zhàn)斗力滿(mǎn)滿(mǎn)的自己,就只能硬著頭皮 new Thread().start() 了。
就我們程序員來(lái)說(shuō),打開(kāi)手機(jī),掘金社區(qū)上的小冊(cè)在向我招手,極客XX的課程在向我拋媚眼,GitChat 的小課在向我暗送秋波,就連XX星球也在喊我過(guò)去。在我們猶豫再三的時(shí)候,奇妙清單提示我,項(xiàng)目要 deadline 了,于是我們只能搖搖頭,忍不住嘆了一口氣。
是這樣的,生命是短暫的,可我們要做的事情實(shí)在是太多了。況且多線程工作會(huì)讓我們上癮,因?yàn)?ldquo;當(dāng)完成一項(xiàng)小任務(wù)時(shí),我們會(huì)受到多巴胺的沖擊,也就是我們的獎(jiǎng)勵(lì)激素。大腦喜歡多巴胺,于是我們被鼓勵(lì)不停地在一些能給予自己即時(shí)滿(mǎn)足感的微小任務(wù)之間切換。”
可多線程工作在大多數(shù)情況下給我們帶來(lái)的是負(fù)面的影響。計(jì)算機(jī)在處理多線程任務(wù)時(shí)可以通過(guò)追加 CPU 的核數(shù)來(lái)提高程序的運(yùn)行效率。但我們并不是計(jì)算機(jī)。
2、多線程工作嚴(yán)重影響工作效率
當(dāng)一個(gè)程序員在全力編程的時(shí)候,腦袋里同時(shí)記著數(shù)不勝數(shù)的東西,包括變量名、方法名、重要的接口、數(shù)據(jù)結(jié)構(gòu),還有他們自己的常用組件庫(kù)。如果送這個(gè)程序員去侏羅紀(jì)公園度假一個(gè)月,保準(zhǔn)他會(huì)把這些東西忘得一干二凈。
在高效編程的時(shí)候,腦袋里的那些東西就好像存儲(chǔ)在計(jì)算機(jī)的 RAM 上,等到其他的任務(wù)切換進(jìn)來(lái)的時(shí)候,這些東西就不得不轉(zhuǎn)移到別的地方(比如計(jì)算機(jī)上的磁盤(pán))備份起來(lái),等重新切回到原來(lái)的任務(wù)上時(shí),就需要花費(fèi)巨大的精力重新恢復(fù)了。
不知道你有沒(méi)有這種感覺(jué),我是有的。我特別討厭在聚精會(huì)神編碼的時(shí)候,突然殺來(lái)一個(gè)電話,讓你措手不及,尤其是廣告營(yíng)銷(xiāo)的,忍不住要痛罵他們幾句,然后加入黑名單。有時(shí)候很不幸,來(lái)電顯示打來(lái)電話的人是老板,就不得不扼殺住想要爆發(fā)的怒火??膳鹗嵌髿⒘?,敲代碼的那種快感也被扼殺了。
2011 年加利福尼亞大學(xué)發(fā)表的一篇研究報(bào)告展示了“快速地從一項(xiàng)任務(wù)切換到另一項(xiàng)任務(wù)”是怎樣影響我們記憶的。研究者們表示,多線程工作對(duì)人的“工作記憶”有著消極的影響。工作記憶是指一段時(shí)間內(nèi)在大腦中保存和處理信息的能力,它是一切思維活動(dòng)的基礎(chǔ),也是學(xué)習(xí)的第一步。
當(dāng)我們能夠?qū)W⒆鲆患虑榈臅r(shí)候,工作記憶就不太容易受到影響。但受限于工作場(chǎng)合,互聯(lián)網(wǎng)公司尤其鐘愛(ài)開(kāi)放式的辦公室,大家匯聚一堂,感覺(jué)彼此之間充滿(mǎn)真愛(ài)。但大量吵雜的聲音,嚴(yán)重影響著我們的工作效率,于是夜深人靜加班的時(shí)候,工作效率是很高的。
3、多線程工作會(huì)扼殺創(chuàng)造力
神經(jīng)科學(xué)家厄爾·米勒(Earl Miller)表示多線程工作會(huì)扼殺創(chuàng)造力,“創(chuàng)新的想法,歸根到底來(lái)源于深度的注意集中。當(dāng)我們嘗試多線程工作時(shí),基本不會(huì)在任何一條能發(fā)現(xiàn)原創(chuàng)東西的道路上走的足夠遠(yuǎn),因?yàn)槲覀冊(cè)诓煌5厍袚Q和回溯。”
當(dāng)我在上下班的路上騎自行車(chē)的時(shí)候,我發(fā)現(xiàn)戴著消噪耳機(jī)聽(tīng)音樂(lè)是一件非常美妙的事情。不僅可以把馬路上嘈雜的聲音隔離開(kāi)來(lái),還能夠消磨掉時(shí)光。
而當(dāng)我在寫(xiě)博客的時(shí)候,聽(tīng)音樂(lè)就適得其反了。這是因?yàn)轵T自行車(chē)本身并不是一件需要?jiǎng)?chuàng)造力才能完成的事情,而寫(xiě)博客則需要聚精會(huì)神才能把腦袋里的所見(jiàn)所聞流暢地梳理出來(lái)。
也就是說(shuō),當(dāng)我們需要?jiǎng)?chuàng)造力的時(shí)候,最有效的做法就是移除干擾物,把手機(jī)調(diào)成飛行模式,把一些軟件的通知禁掉,把門(mén)窗關(guān)閉等等。盡量專(zhuān)心地完成當(dāng)前的任務(wù)。
這并不簡(jiǎn)單,但是非常值得去做。
4、最后
我需要告誡大家一句:當(dāng)我們正在做的一個(gè)任務(wù)還沒(méi)有完成的時(shí)候,下一個(gè)任務(wù)來(lái)臨的時(shí)候一定要勇敢說(shuō)“不”,坦率地告知派發(fā)任務(wù)的領(lǐng)導(dǎo),讓他保持清醒。
假如說(shuō)不出口,那也要一個(gè)一個(gè)來(lái)。切記不要高估我們自身的能力,畢竟我們是人,不是計(jì)算機(jī),沒(méi)辦法把我們的腦袋改造成多核的??傊痪湓挘撼绦騿T,別再迷戀多線程工作的鬼話了。