心流Flow是一種絕佳的體驗,也就幸福的感覺。
Mihaly Csikszentmihalyi
前言
我一直以為「心流」是可遇不可求的一種情境,所以才沒有深入去研究它,而且感覺上它是屬於心理學的東西,身為工程人員大可忽略它。直到看到心流是一種最佳的體驗時,才恍然大悟,自己一直在追求良好的開發者體驗(DevX),其實讓開發者容易進入心流的狀態(它不是情境),然後盡力的去維持這種狀態讓它不要受到中斷,便是王道。這對開發效能與開發者的精神狀態都是一種絕佳的體驗,可以稱之為開發者的幸福之道。
(本文要探討的是如何讓開發者更容易進入心流的狀態。)
何謂心流Flow?
心流(Flow)是心理學中的一個概念,最早由匈牙利心理學家米哈伊·契克森米哈伊(Mihaly Csikszentmihalyi)先生於1975年提出。心流狀態是指人在完全投入某項活動時所經歷的一種高度專注、充滿熱情且完全沉浸的經驗。在這種狀態下,人們會忘記時間、疲勞,甚至忽略身體需求,只是完全投入於當前的活動中,這種情形出現在「工作上」的比例勝過休閒育樂。
從科學(神經科學)的角度來看,心流的解釋前提是我們要主動關閉大腦的前額葉皮層的一部分功能,心流的過程是大腦分泌 “去甲腎上腺素"和"多巴胺"等六種激素,它們不斷深入,心流的愉悅感則來自這些激素,而這些活動增強了我們的專注力和動機。
撰寫程式時一定有進入心流的體驗,只是維時不長
我們或多或少都聽過心流(Flow),都聽過也都有過類似的感覺,但卻很少有工程師專注於此。我們總是把技術與潮流當作第一要務,卻忽略了開發工作中人的感受這一個最重要的部分。「心流」是一種全神貫注在工作中達到渾然忘我的境界時的感受,因此又被稱為「最優體驗」。在心流中你會忘去了時間,明明工作了很久,但就是不會覺得飢餓也不覺得累。既然被稱為是一種最優的體驗,自然是開發者體驗(DevX)所應該研究的東西,也是程式設計人員應該盡力去追求的一種狀態。開發者若能夠越頻繁越輕易地進入心流的境界,開發效率自然會更好而所寫出來的程式品質也會更佳。這是所有管理者所追求的,也是開發者體驗 DevX所想要達到的。
心流,就是一個人全神貫注於某件事而渾然忘我的境界。
Mihaly Csikszentmihalyi
解讀:
在這個模型中,兩個主要的軸線: 挑戰水準(Challenge Level)縱軸和技能水準(Skill Level)橫軸,被用來界定不同的心理狀態。這個模型描繪了當人們在他們的技能水準和面臨的挑戰之間達到一定的平衡時,他們最有可能進入心流狀態。
- 心流(Flow):當挑戰和技能水準達到均衡時,個體可能會體驗到心流狀態,感受到完全投入和享受當前活動的感覺。(這是這張圖示最容易被誤解的地方,因為挑戰和技能位置在右上角,容易讓人以為都要達到相當高的水準時,會產生心流,但其實挑戰和技能水準能夠相匹配才是重點而不一定都要屬於高水準時才會產生心流狀態,請參考下圖)。
- 焦慮(Anxiety):當挑戰水準高於個體當前技能水準時,個體可能會感到焦慮。這是軟體開發人員最常碰到的現象,也就是主管沒有做培訓或技術衡量就直接指定工作給工程師去負責,這種焦慮感經常發生在coding不順時。
- 無聊(Boredom):當挑戰水準低於個體的技能水準時,個體可能會感到無聊或不感興趣。
- 掌控(Control):當技能水準高且挑戰適中時,個體可能感到他們完全掌控了情況(人們在這個時候反而容易產生疏忽,對程式設計人員而言,有機會重構過去所寫過的程式時,由於過度的有把握反而不經意的新加入許多功能,以至於產生過度重構的現象)。
- 放鬆(Relaxation):當技能水準高而挑戰水準低時,個體可能會感到放鬆。
- 覺醒(Arousal):當挑戰略高於技能時,個體可能會感到興奮和激動,這可以是積極的壓力。這正是OKR所想達成的目標,也就是自我激勵的效果。
- 擔憂(Worry):當挑戰略高於技能,但個體還未達到焦慮的程度時,他們可能會先體驗到擔憂。
- 冷漠(Apathy):當技能和挑戰水準都低時,個體可能會感到冷漠或缺乏動力。對無知的好奇可以打破這種冷漠的感受。
這張圖強調了為了實現心流狀態,個體需要找到技能和挑戰之間的平衡點。但是上面這張圖太容易被誤導了,我們還是來看一個將心流理念對照到專案開發上頭的簡單案例(參考自《心流》一書,第四章)。
運用上圖說明專案開發的心路歷程,心流理論可以被運用來描述開發者在不同階段的經驗。
專案啟動階段A①與心流:在這個階段,在還不熟悉相關專業知識之下;開發者就像初學者一樣,可能對新技術、新框架或新語言充滿好奇心。初期的挑戰可能是學習和理解專案需求,並開始搭建基本架構。此時,即使任務相對簡單,開發者也可能會感到滿足和投入,因為這些任務與他們當前的技能相匹配。正所謂好的開始讓人心情愉悅。
開發階段A②與心流:開發者的技能隨著時間逐步提升,他們可能會尋求更複雜的任務來挑戰自己,比如實現更複雜的功能或解決更難的問題。如果挑戰不足,許多功能都能由外部輕鬆獲得(例如AI自動產出程式碼)開發者可能會覺得工作重複而感到厭倦。
測試與問題解決階段A③與心流:當專案進入測試階段,開發者可能會面臨各種意想不到的問題和錯誤。如果這些問題超出了他們的能力範圍,他們可能會感到焦慮和壓力。這個階段的動機可能來自於解決問題和改進專案的願望。但隨著開發時間的消逝,想要及時完工的壓力反而容易造成開發者的焦慮情緒。
專案上線與維護階段A④與心流:在專案最終階段,開發者需要確保專案的穩定和優化性能。這時,他們的技能必須足以應對這些高層次的挑戰。心流體驗可能來自於成功部署專案並見證其運行的成就感。動機可能是專業的成就感、客戶滿意度和產品的市場成功。
在整個專案開發過程中,維持開發者的動機和挑戰之間的平衡是至關重要的。一方面,他們需要經常學習新技能和技術以保持競爭力;另一方面,挑戰需要與他們的技能水平相匹配以防止工作變得過於重複或壓力過大。理想的狀態是保持一個讓開發者感到既挑戰又能夠掌控的環境,從而使他們更有可能經常進入心流狀態,這樣他們不僅能夠提高工作效率,也能夠享受工作過程,並在專案開發中取得成功。
理想的狀態是保持一個讓開發者感到既挑戰又能夠掌控的環境,從而使他們更有可能經常進入心流狀態,這樣他們不僅能夠提高工作效率,也能夠享受工作過程,並在專案開發中取得成功。
動機的重要性
上圖在心流渠道中;想要表達的是在心流渠道內「動機漸增」的觀念,主管必須依據程式設計人員的技能適度的調配任務的困難度,參照心流模型來理解工程師在不同情境下所可能出現的心理體驗(透過1對1的會議或是敏捷的各個會議,把它當成檢核的項目),經由指導或調整的活動來促進心流的發生。當開發者出現冷漠或無聊的狀態時,自然就會缺乏工作的動機,這種情形常常會出現在資深的技術人員身上,此時主管往往會給予較高挑戰或是將專案成敗整個採用交付重任的方式,指定交由他負責的方式,但這是一種不好的處理方式,可能反而會招來技術人員感覺孤單而缺發團隊意識,引發離職的念頭,同時也讓他無法發揮本身的技能而失去產能。這種情形之下,我以為動機是真正的罪魁禍首,
- 要怎麼樣讓程式設計人員進入心流的狀態?
讓程式設計人員進入心流狀態,需要創造一個有利於專注和創造性思考的環境。心流狀態,或稱為「在區域中」(in the zone,註2.),是一種完全沉浸於當前活動的感覺,並且在進行活動時感到既快樂又充滿成就感(也就是意識掌控挑戰的結果)。
- 清晰的目標:確保有一個清晰且具體的目標。程式設計人員需要知道他們的目標是什麼,以及如何達到這個目標。
- 減少干擾的環境:創造一個安靜且無干擾的工作環境。這可能意味著關閉不必要的通訊應用、電子郵件提醒,或者在辦公室內設置一個不被打擾的時間段。或是盡可能將會議轉變成文件記錄的方式,來避免中斷心流。
- 適度的挑戰:工作的難度應該與程式設計人員的技能水平相匹配。太難或太容易的任務都可能導致挫敗感或無聊,從而妨礙進入心流狀態。這一點與敏捷開發最能配合,在每個衝刺(sprint)的開始時或每日的站立會議時,我們都有一次檢驗挑戰與技能匹配度的機會,Scrum Master 若能善用激發內在動機的能力,更能協助開發者進入心流的狀態。
- 及時的回饋:進行任務時,能夠獲得即時反饋,可以幫助維持專注和動力。這可以通過程式碼審查(即時的 code review)、測試或者實時的進度更新來實現。
- 消除外部壓力:盡量減少截止日期和其他外部壓力的影響。雖然一些壓力是不可避免的,但過度的壓力可以導致焦慮,妨礙心流的產生。
- 自我照顧:保持良好的身體和心理健康狀態對於進入心流至關重要。這包括充足的睡眠、健康的飲食、規律的運動以及時間管理。
- 學習與成長:鼓勵學習新技能和技術。掌握新技能不僅可以提升工作效率,也能增加面對挑戰時的自信心,從而促進心流狀態的產生。
團隊中每個人進入心流的條件可能略有不同,因此了解自己在什麼樣的條件下最容易集中注意力和創造性思考是很重要的。透過嘗試不同的策略,找到最適合自己的方法,並努力去營造它。
小結
我們總是把心流看成是一種可遇不可求的狀態,因此而忽略了刻意去追求它的探索,其實;程式設計本質上就屬於需要相當專注的工作,程式員是一種十分容易進入心流的工作者,所以主事者(管理者、SM甚至人資)都應該刻意去營造一種環境,讓開發者容易的進入心流的狀態。而主事者更應該依據挑戰與技能的心流模型圖,來判讀開發者此時所產生的感覺是否恰當,怎麼作呢?
作專案討論時,先問問看他準備怎麼作?
在整個開發的過程中,刻意的去注意每位開發者的情緒 (請參考圖一、心流的模型圖示) 。必要的時候問他一下「現在的感受是甚麼?」。然後再拿來與模型相對照,就可以知道目前他最需要的協助是甚麼了,例如: 如果他感到焦慮,則明顯的遇到了難題,這時候協助他提升技能可以讓他順利的覺醒,提升工作效率。當他感覺工作過於輕鬆時,適度的調整工作範圍,加入一些挑戰,能讓他對周遭的事物更能夠掌控,也提升了他的高度。
心流的體驗即幸福
良好的生活品質能讓我們感覺得幸福,而生活的品質來自於(1)我們如何體驗工作以及(2)我們與他人的互動關係(註3.)。這二者正是團隊開發的基礎,重視開發者體驗就必須在日常活動中多多創造心流的體驗,也就是購專主於自己的工作,又能於他人進行良好的互動。雖然在經歷心流體驗之後自我們會變得比過去更複雜。而這種自我漸趨複雜的過程則稱為成長。乍聽起來變得複雜了帶有負面的味道,但是它還有另一個層面的意義,意味著不同部件的整合。就像是一部引擎是眾多零件所組合而成的,每個零件都有它獨特的功能,但是只有彼此相連結時,才能發揮出更好的性能。除了感受這種樂趣之外,還能增添我們的自信心,讓我們發展出更好的技能。
敏捷和心流
敏捷和心流之間存在天然的契合點,但在實踐中要實現這兩者的協同效應仍面臨挑戰。 例如,團隊成員可能因為技能不匹配、目標不明確或反饋機制不充分而難以進入心流狀態。此時每日晨間的站立會議便都是一種檢核的機會點,ScrumMaster可以觀察團隊成員的精神狀態,了解到阻礙他們進入心流的種種因素,藉此反應給主管或是運用引導來協助工程師調整挑戰或是提升技能,以更容易進入心流狀態。
敏捷開發以Sprint為週期,並鼓勵團隊成員在每日站立會議時以搶工作單的方式進行開發作業,主動選擇工作(挑戰),這一點讓工程師更容易進入新流的狀態。所以可以持續的觀察工作的挑戰性與工程師的個人技能是否匹配進行調整,某些挑戰甚至可以藉由團隊成員的互助來達成,就更有意義了。而SM 正可以以協助開發人員進入心流狀態為依歸(看來SM比任何人都更應該熟悉心流),並在團隊進行回顧會議時做好檢討與改善,期許團隊能擁有更少的中斷與更長的開發時間來追求開發者絕佳的體驗,也就是心流。
團隊領導和專案管理者需要持續關注團隊動態,確保目標清晰,反饋及時,並且任務難度適當,以便團隊成員能夠發揮其最佳性能。上圖中的五個重要因素;是管理者不可忽視的心理狀態,並應該依據開發者所楚瑜的狀態適度的調整任務的挑戰程度,以期望與開發者的技能能夠相匹配,或是給予足夠的學習機會,讓他可以順利的成長。
感興趣嗎? 多做練習自然容易進入心流,註解中包含進入心流狀態的十個步驟。(註4. 參考自戴蒙.札哈里斯先生Damon Zahariades所著《實踐心流的零基礎練習》)
註1. 《心流: 高手都在研究的最優體驗心理學》作者: 米哈里.契克森米哈伊 Mihaly Csikszentmihalyi
米哈里先生是美國心理學家,是「全球正向心理學研究的領航者」,四十多年前他觀察到,超過需求門檻的物質條件,再多也不會讓人感到快樂。於是,他開始研究擁有創造力或卓越表現的人們,像是藝術家、科學家、運動員等,釐清是什麼驅使他們不為名聲或財富,而為自我價值感與生命意義而行動。他發現,令人最感美好的幸福時刻,經常發生在一個人遇到挑戰他現有能力的事,他專注地將身心能力發揮到極致之時。在這種狀態中,人們會忘卻時間與自我,猶如進入「自動運轉」模式,由於這種體驗像是自然湧現,所以契克森米哈伊稱之為——「心流」。
這本歷經30 多年歷史的佳作,談的是人類最佳的體驗,但卻經常被忽略,在這裡藉著研究開發者最佳體驗的使命,再次強調它的重要性。
註 2. 在區: 在心流狀態下,英文通常稱為 “in the zone"。這種狀態描述了個人完全投入於某項活動,忘我地進行,同時感受到高度的興奮和成就感。
註 3. 米哈理教授以為心流能夠提升生活的品質。
註 4. 進入心流狀態的十步驟。參考自戴蒙.札哈里斯先生(Damon Zahariades)所著《實踐心流的零基礎練習》
步驟一、培養並遵循一套進入心流前的預備程序:這可以是一系列的習慣或儀式,幫助你的大腦準備專注於即將進行的任務,比如深呼吸、簡短冥想或檢查工作列表。
步驟二、找出你的精力巔峰時段:識別一天中你最有精力和最能集中注意力的時段,並在這些時段安排最需要創造力和專注力的工作。
步驟三、打造不會令人分心的環境:確保你的工作環境盡可能減少干擾,比如關閉不必要的通知,使用耳機屏蔽噪音等。
步驟四、定義清楚的目標:為即將從事的任務設定具體、可衡量的目標,這有助於指引你的專注方向和努力。
步驟五、確立內在動機:找到一個個人意義重大的理由來進行任務,內在的動機比外在獎勵更能驅動長期的專注和參與。
步驟六、做到單工處理:一次只專注於一項任務,避免多任務處理,這樣能夠幫助提高效率和質量。
步驟七、選擇具挑戰性(但是做得到)的事情:任務應該足夠挑戰,以促使你伸展自己的能力,但又不至於過於困難導致挫敗感。
步驟八、充分休息後,保持放鬆和清醒:保證充足的休息,確保你在工作時保持精神體力充沛,這有助於維持高效的工作狀態。
步驟九、運用心流時間工作法:可能是指采用像番茄工作法之類的時間管理技巧,這些方法通過設定工作和休息的固定周期來幫助人們保持專注和高效。
步驟十、創造回饋循環:為自己的進步和成就設定反饋機制,無論是通過自我檢查、同儕評估還是客觀指標,都能有助於你瞭解自己的表現,並根據反饋進行調整。 要實踐心流,重要的是找到適合自己的活動,持續不斷地練習和調整,以保持挑戰和技能之間的最佳平