蒼時弦也
蒼時弦也
資深軟體工程師
發表於

寫程式的「活在當下」

過去一年花了不少心力在學習調整心理狀態,也慢慢的能夠理解「活在當下」的概念想要傳達什麼,同樣的概念也讓我想到了學習敏捷開發中的一些技巧,意外的能讓在寫程式的過程中更順利。

現在

把注意力放在「現在」很困難嗎?仔細觀察自己的狀態,會發現似乎真的有點困難。正在讀這篇文章的你,也許正在思考下一餐該吃什麼,或者下一句話會寫些什麼。對我們來說,很難控制自己把注意力放在「現在」上,而是會根據當下的線索不斷做預測。

這其實也沒有什麼問題,當我在寫這篇文章時也會思考讀者的反應、寫完後要做哪些事情,這是我們很自然的計畫能力,我甚至認為一些厲害的企業家能夠描繪出一個長達十年或者以上的計畫然後進行實踐。

也因此,把注意力放在當下這個時間點更接近於一個狀態,從不同的時間維度去看現在的定義,也是不太一樣的。

分配

假設我下週末準備出去旅遊,也有一個大概的計畫,我可以這週上班都在思考旅遊的過程要做什麼讓工作狀況不是很好,也可以先專心工作,旅遊當天的早上在思考更詳細的計畫,這就是一種注意力的分配。

我們可以選擇把注意力放在「時間較遠」的事情上,也可以把注意力放在「時間較近」的事情上,因為我們可能有一些期待、預期,所以很容易把注意力放太多在時間較遠的事情上,而忽略了現在應該做的事情。

也許這不是什麼嚴重的問題,例如,時間範圍縮短一點,可能就是午飯前的會議分心思考午餐要吃什麼,漏聽了一些重要訊息,導致後續工作犯了一些錯誤這樣的狀況,然而這個時間是數個月或者數年的事情,似乎就不是一件好事。

敏捷

如果去看敏捷開發的進行方式,我們會把「重要的事情」以一個固定的頻率調整優先次序,然後專注在這些重要的事情上,可以想像是一個以一週或者兩週為單位「調整注意力」的方式,實際上也是相當有用的,實際上還需要搭配不少技巧才能實踐,在生活的應用之前也寫過一篇用「敏捷開發」的方式過生活來分享我目前是怎麼做的。

即使團隊不做敏捷,身為一個工程師在實踐這件事情的時候也很容易落入「過度設計」的狀況,通常會感到開心。

然而,在這個狀況下,我們去思考的每一個功能、實作、設計都是在預想著「如果以後⋯⋯那就需要⋯⋯」這樣的內容,而忽略現階段連可以用的功能都還沒實現,也沒有被測試過,甚至不太確定使用起來是否如預期,或者公司未來有計畫要做這些擴充。

因此,敏捷開發嘗試告訴我們用「小規模完成可用的功能」然後去做確認,如果狀況很理想,那就再繼續完成下一階段的功能,持續的改進。

改變

這樣的持續改變對我們來說其實是可怕的,因為我們需要在短時間內持續的面對大量的「未知」而感到不太舒服,畢竟我們如果可以製作一個長時間可以運作的程式,然後就把它放在那裡不是很讓人安心嗎?畢竟太久沒人動他們都可以直接把這些程式碼忘掉了!

回到現實中,我們自己身上的細胞每天都在改變、科技隨時都在進步,我們也確實會因為各種原因感到「焦慮」所以需要去學習如何「活在當下」專注在現況,要去減少焦慮其中一個很好的做法其實就是做好面對改變的準備。

就像定期做消防檢查,就是為了在火災發生的時候能做出對應,這就跟我們在軟體開發時的「測試」很類似,我們希望在一些預期外的狀況下「感知」到問題,然後能夠做出對應。假設這一次的消防檢查、設備沒有完善的解決問題,我們就會改善法規、機制去讓下一次出錯的問題更少,這也就是一次「重構」的處理(根據情況也會有快有慢、改多改少)

簡單來說,我們在生活中本身就習慣許多對應變化的能力,也很習慣這件事情。大多數時候都是準備不足(測試不完善)所以讓我們對未來很害怕,嘗試做很多設想。當我們很熟悉如何對應變化(有效率的重構)以及對現況增加保護(測試)在面對未來的時候能夠小心一點(少量多次的實作)就比較能夠把注意力分配在「現在要做」的事情上。

因此,我們需要習慣如何腳踏實地(踩空的時候不會摔下去,用跑的通常會)的朝目標前進,並且有意識的實踐這件事情。

假設未來是一片黑暗,走過的路會被點亮起來。想要安全地往前,應該就是專心看前面的路(專注當下)然後踩看看(測試)沒有問題再前進,如果有問題就調整方向(重構)過度的關注遠方,反而容易踩空。