Cost in Context Switch


Context Switch 中文翻譯成環境切換,wikipedia 的解釋:

是一個儲存和重建 CPU 的狀態 (內文),因此令多個進程 (process) 可以分享單一 CPU 資源的計算過程。

把它放在人身上,就是一心多用。Context Switch 的成本很大,五顆球同時丟給一個人,最後可能只接著一顆,也可能一顆都接不住。所以創造能「專注」的環境很重要,不管是在工作環境,還是個人的學習。

『五顆球同時丟給一個人』這段是出自 “Steve Jobs 自傳” 某一章,不過我找不到原始段落了,有找到的人麻煩跟我說,感激不盡!

Updated 2023/07/19: 本文部分收錄在個人著作 《SRE 實踐與開發平台指南》 - 2023/08 上市


神馳 (Flow)

在企業裡,主管應該要營造讓大家能夠專心工作的環境,減少不必要的中斷。不管是內在環境的因素,像是噪音、講電話,或者是外在的變因,像是不必要的會議、與 IM。

有人認爲這是太過保護工程師,但我覺得,工程師就應該讓他們專注在工程技術上的事情,而不是要他們又要寫程式,又要整天在充滿不必要的會議中工作。

技術是研發團隊的根本,專注才會有 扎實 的產能,才能培養出優秀的工程師,累積扎實的技術根本。

很多工程師、創作者、藝術工作者 (像音樂家、樂手、小說家) 都習慣在夜間工作,最主要是因為夜間容易進入 神馳 狀態,而這段時間神馳的思緒被中斷的機會少,思緒不間斷的產能是相當大、且扎實的。

神馳 (Flow Status) 一詞出自 Peopleware: 腦力密集產業的人才管理之道 ,摘錄如下:

第 10 章 腦力時間與身體時間

當一心一意埋首工作時,人會進入一種理想狀態,心理學家稱之為神馳(flow)。神馳是一種有如冥想、深深沉醉其中的狀態,人在這種狀態下會產生一股陶醉感,而且時間是在不知不覺中流逝:「我埋首工作,一抬頭,已過了三個小時。」不會有累的感覺,工作似乎是順其自然地往前進展。

我以前不管是寫程式還是做音樂,很容易就進入這樣的狀態,常常是日夜顛倒的,甚至一醒來,馬上就可以接續昨晚睡前的思緒,打開電腦繼續寫程式,或者繼續編曲。可能因為那時候年輕,體力好,思緒也單純 (頭腦簡單?)。即使工作時寫程式被中斷,像是有人來問一些問題,那時候還可以一邊說明,一邊持續想程式的內容,然後很快的能切回去狀態,繼續思考。

現在年紀稍長,工作的角色改變,每天隨時都在被中斷,往往被中斷之後,要花很多時間重新把破碎的思緒連接起來,就像以前 Windows 做磁碟重組 (defragment) 一樣,讓人相當疲倦。

干擾的來源

工作的干擾很多,歸納如下:

  • 辦公室的噪音:帶耳機、聽音樂、協調 work from home, 更多參閱 開放式辦公室有哪些壞處?
  • 太多會議:跟主管溝通看看,盡量減少不必要的會議。
    • 很多沒意義的會也是很多公司共有的通病
    • 我認為一個禮拜只要超過三次會,就是過多了。
    • 別忘了,開會是要事前準備、事後溝通的 – 參閱:開會的原則
    • 企業裡 溝通成本 是非常驚人的
  • IM / 電話:Slack, Telegram, Facebook, Line … 關掉不要開
  • 不好的開發工具:設定一些 hot key / shortcut、減少視窗切換,或者盡量用 vim 這樣的工具。
  • 混合的程式架構,又是前端、又是後端、又是維運:跟老闆溝通,想辦法專業分工
  • 不佳的工作流程 (callback hell):一大堆跟主管請示的流程,或者跟其他人確認的流程,造成沒意義的 overhead。這些事情最好是要充分授權,或者用 Code 解決。

干擾的來源和企業文化有關係,分工越細的,越不會有這樣的問題。當然分工越細,代表著能看到的面相就相對狹隘。

如果是在家裡的干擾,那就 … 很難處理了 …

如何進入『神馳』?

以前我在做音樂或者練琴時,有自己的一套方法,像是:

  • 喝咖啡:一定要吃早餐,而且不能吃太多。然後要先喝定量的水,在固定的時間喝咖啡,通常會是在十點。
  • 小睡片刻:通常是下班後,晚上繼續上課 or 練琴的時候
  • 做體操、靜坐:通常是我要寫文章之前的準備
  • 喝一小杯高粱 - 冬天:暖身後比較好練琴

下了班,通常是很疲倦的,要讓生理狀況能夠進入另一個狀態,真的不是很容易,一些心得、方法都描述在:

如果是週末,就會十點半吃早午餐、喝咖啡,然後從十一點一口氣專注到下午五點,通常不管是練琴、錄音、還是唸書,都很有進度。如果有連續幾天假 (三天以上),通常第一天我就開始醞釀了,準備日夜顛倒。

練琴、做音樂每一次的 神馳 的單位時間是以 4-6 小時 為單位;寫程式比較短,依照過去工作的經驗,實際寫程式通常只有 1-2 小時,因為通常搞懂需求、想好設計時間更久;寫文章通常是 2-3h 為一個單位。

如果是在辦公室裡,目前我還沒想到比較好的方法,最常用的方法有:

  • 躲起來,像是躲在會議室裡,記得反鎖 or booking 一整天
  • 去附近的咖啡廳
  • 跟老闆說 work from home
  • 甚至就乾脆請假在家工作 (很爛的招式 … 囧rz)

最近想出一些方式,就是把會被中斷的事情,用固定時間處理,雖然這需要一些內部的協調,但應該是可行的方法。

最後一招就是:換工作 or 自行創業 XDD

Cost in Context Switch

Steve Jobs 信任 A Player 原則,也就是找最好的人才,用最頂尖的工程師。他覺得 B 級的人才,只會帶入 B- 、甚至更差的人。他用 A Player 同時也願意提供給予高額的薪資,

以下摘錄自:THE PAYOFF OF A GREAT EMPLOYEE (June 1995) 一個好員工的薪水

In most businesses, the difference between average and good is at best 2 to 1, right? Like, if you go to New York and you get the best cab driver in the city, you might get there 30% faster than with an average taxicab driver. A 2 to 1 gain would be pretty big.

The difference between the best worker on computer hard-ware and the average may be 2 to 1, if you’re lucky. With automobiles, maybe 2 to 1. But in software, it’s at least 25 to 1. The difference between the average programmer and a great one is at least that.

The secret of my success is that we have gone to exceptional lengths to hire the best people in the world. And when you’re in a field where the dynamic range is 25 to 1, boy, does it pay off.”

在大多數的商業中,一般與最好的差別最多就是二比一,對吧?例如你到了紐約,你找到了市內最棒的計程車司機,你大概可以比雇用一般的司機快上30%到達目的地。以二比一來說,收益還蠻大的。

而電腦硬體方面的工作人員,平均差大概是二比一,如果幸運的話。在汽車產業,也許是二比一。不過在軟體方面,最少也有二十五比一。一般的程式設計師與很棒的程式設計師相比,至少也有差那麼多。

我成功的秘訣,在於我們走了極長的路,來聘用世界上最棒的人材。而當你處在一個差距高低有二十五比一的領域,嘿,這還不划算嗎?

如果你跟 Steve Jobs 是一樣,只用最好最優秀的人才,那麼你的成本就更加重要。你的員工都是有極大產能的人,所以讓他們能夠專注在技術就更加重要的。

時間在哪,成就就在哪。

管理階層的責任在於建立每個人之間的連結,同時也讓每個人都很強健。就像是一個系統每個元件本身是扎實且穩健的,主管就是連接元件的推手。

相關資訊


延伸閱讀

參考資料

開放式空間?

相關書籍



Comments

  • 全站索引
  • 關於這裏
  • 關於作者
  • 學習法則
  • 思考本質
  • 一些領悟
  • 分類哲學
  • ▲ TOP ▲