十年前 WebConf 在台下聽演講,十年後自己也成為講者的一員。經過思考,我決定用之前在商業思維學院中的讓知識有光課程中,我沒有選擇的「(工程師)自我學習」這個題目作為這次 WebConf 的心得。
緣由
最初是想寫成三篇不同的文章,一篇寫 WebConf 的心得、一篇記錄一下這次分享的內容,另一篇則是最近對學習上的感想。然而再去晚宴的路上時,龍哥跟我分享最後一場演講Beyond Technology 技術之外 - 從個人身心安頓到人類福祉追求對許多自己熟知的業界前輩也有幫助的資訊。
因為我的演講在這場演講之前,沒有聽到完整的內容。然而演講中提到的「焦慮」是許多人正在面臨的問題,也點出了我們之所以會去參與 WebConf 是否也是一種「資訊焦慮」這樣的問題。
第一天在講者休息室橘子提到大家不怎麼在外面聊天,我們都是差不多時期開始參與社活動,回顧當時的氛圍不是資訊焦慮,而是拿著有趣的技術去交流的心態,這幾年明顯能感受到研討會活動氣氛和以往不同。
我這幾年也剛好度過一個「門檻」跟一些不同類型的焦慮進行深度的「交流」看到前輩們也有不同的煩惱,同時這幾年才成為工程師的人們也有另一種煩惱,就覺得很適合把 WebConf 跟學習這兩篇文章一起整合來講。
預期會是稍微長的文章,而且很難涵蓋所有的範圍,因此會比較集中在「學習」這一個主軸。
心
我認為必須從「心理」或者「心態」開始討論,有好的心態不一定有好的心理狀態,因此我們會焦慮、會挫折。
我相信,工程師是很容易忘記關注「人」的的職業,工作久了之後會發現對外(客戶、夥伴)不當成人,對內(自己)也不當成人,最後就覺得自己在工作中「裡外不是人」更慘的是,因為同事都是工程師,互相不把對方當人看。
聽起來很嚴重,大多數人應該沒有這樣的問題吧?心理上的問題很難處理的地方就在於此,我們很難意識到這樣的狀態。
2013 年接觸到社群活動,我對於技術的熱情是十足的,也相信自己能不斷的精進技術。出社會後,也不斷的用技術對公司做出貢獻,保持這樣的心理狀態是很輕鬆的,因為只需要不斷的「進步」一切似乎就會順利。
這不就是一個「無情的寫 Code 機器」嗎?當一切的基準都是「寫好程式」的時候,我們是否對於同事的失誤、客戶的需求都以一種效率、正確這類方式去判斷了?也許客戶提出意見是我們沒有解決問題、同事失誤是狀態不好、沒有經驗。
昨晚到家後發現沒能跟資訊架構設計新體驗:在需求情境中運用領域事件分析描述結構化內容的講者 Soking 聊到,他分享的方法和我在理解 Domain-Driven Design 的方向類似,卻從我沒思考過的角度切入。
透過 Facebook 簡單的交流,也注意到了一些有趣的狀況。同樣是使用者的需求,我從工程師的角度看的是「規格」是否能被確定下來,然而 Soking 則是從「使用者為什麼想這樣做」「他是否想解決某個問題」這樣的角度切入。
是否注意到了?我們試著把自己「數值化」好像聽了一場演講經驗值就會增加 10 點,工作一段時間之後就會升級,甚至履歷上還被要求精確寫著「改善公司服務 50% 反應時間,降低到 100ms」之這樣的描述,在業界我們很少問你的「想法」是如何的。
這幾年在調整的過程中,我問了工作中第一次帶的同事。他說他不太喜歡在有其他人的時候找我提問,因為我的反應總是讓他覺得他很笨。實際上我一直都很看好他,他願意來問我也是因為能學到東西,我卻因為總是用「這不是常識嗎?」這樣的標準看待工作,反而讓同事們不敢找我討論。
從 Ant 分享的從專業到商業:十年軟體架構變遷中,也有提到會問面試者對自己「十年後」的想像(大家能想像出來自己想要什麼嗎?)即使 DevOps 的發展雖然有著「專業」的考量,然而還是能看出依循人性去不斷的調整。
那麼「人」到底是什麼?
我自己也不能很好的回答,我認為至少要先看「自己」然後再看看「其他人」是怎麼樣的,就像我在選擇適合你的技能組合想傳達的觀念一樣,先搞清楚自己想要什麼,再去做選擇,人生遠比想像中還長,不用擔心學不會那些覺得自己需要學會的技能。
對內心的探索還有很多面向,作為這一個段落的收尾,我認為用「當你意識到自己是獨一無二時,才能夠變得不凡」來作為收尾,在這之前我們需要先學會「跟自己相處」
其實還有不少小故事,幾年前自己精神狀況很嚴重時,幾乎是用一種「把自己打碎重組」的方式去處理,我是希望大家不太會走到這樣的階段,也很推薦定期找諮商師,要遇到 Mentor(人生導師)並不容易,諮商師作為「教練」能幫助你在「自己」這件事情找到出各種盲點,那麼就有機會處理。
技
知道自己想要什麼後,才能來討論「技能」和「知識」這些讓我們的「下限」增加的問題,因為「上限」在自己做出選擇時就能知道大概在哪裡,至少是自己做出選擇,大概就和講事實沒用,顧客才不聽這個!提到的「信仰」一樣,才能說服自己堅持下去。
「信仰」的這部分以後有機會可以討論,在工作中那就是公司有沒有「願景」我曾經為了瞭解大公司的運作模式,加入到有 3,000 人的外商加密貨幣公司,因為我沒有信仰,所以又當了一陣子「無情的寫 Code 機器」同時公司似乎也沒有讓我感受正在做的事情跟公司的願景是一致的。
要學習技能、知識最困難的不是天份也不是有多努力,而是你是否能夠看見也就是你的「視野」是否足夠廣闊。
要有足夠的「視野」並沒有想像中容易,我從一開始就是以 IC(Individual Contributor,獨立貢獻者)當作職涯目標,因為我喜歡寫程式,不是某個語言、也不是這個語言,而是寫程式本身。在工作的前幾年,我認為只需要不斷的磨練技術就可以達到這個目標。
然而,這幾年發現這個角色當「技術」達到一個極限後,要面對的仍就是「人」的問題,當你不斷地注視在技術上,你就看不到這些狀況。
今年也有不少議程在討論這個問題,像是為何技術老人這樣想那樣做?從技術前輩的視角理解技術決策就是一個工作越久越有感的問題,除此之外經理人之道也是很不錯的書,或者只聽過傳聞 vgod 的軟體工程師的修煉與成長系列都是很不錯的學習方向。
最近,因為公司有想做的新產品需要驗證,因此公司的 C-Level 等希望主管提供一個原型(Prototype)來展示跟討論,剛好就交給我來執行。在向 C-Level 們介紹時,主管用了「這是蒼時協助實現的」這樣的方式來描述,讓我注意到「專業的主管」在做事上也有很多細節。
如果說「心」是對內的思考,那麼「技」其實就是對外的思考,我們要去觀察業界需要怎樣的人、公司期待怎樣的員工等等因素,再去思考應該具備怎樣的能力」
當內外對應起來的時候,可能不會停止焦慮,但是少你會不再迷惘。
回到視野,假設在幾年前,我是不會看到主管這樣的一句話會有怎樣的效果,然而當我讀完上述的一些書籍、文章,以及跟我的直屬主管 1 on 1 討論的不少議題後,發現這是一種非常專業的表現,一方面是幫助有能力的員工獲得關注,同時也幫自己建立一個在未來能支持自己的人脈。
假設目標是管理職,那麼這是很重要的。我認為這是很重要的 People Management 技巧,國外會把這類型的職位獨立出來似乎也是合理的,因為需要注意到這樣細緻的細節並不容易,作為管理者是要隨時注意團隊的狀況提供最佳的支援,那麼才能讓團隊獨立的運作起來,主管才有機會投入到更重要的事情上。
技術跟管理職的部分可以參考跳脫技術職與管理職的二分選擇,技術管理職讓職涯無限寬廣這場的內容(我沒有聽到只有讀了筆記)另一方面在 1 on 1 上,我認為能不能維持「信任」是很重要的,另一場擠不進去的【工作坊】敏捷不只是敏捷:從台灣看敏捷實踐的十年變遷以及必備微技能也提到敏捷開發是需要「心理安全感」當我們不信任團隊、主管,那麼也很難很好的實踐敏捷。
視野,其實就是知識、見聞的累積,研討會、社群活動的作用是什麼呢?除了獲取「新知」之外,你還需要去認識看看不同的人,了解他們的觀點、看法,那麼你才能從自己從未考慮過的面相、角度去思考,就可以不斷地拓展視野,所以也不能把時間都放在議程之中。
過去幾年我也在這方面有所停滯,因為舒適圈非常舒服。當我選擇換公司、換語言之後,又有許多不同角度的人、事、物可以作為參考,就能看到更多東西。
用我在 RubyJam 社群活動分享的「專業,源自於對細節的掌握」作為這一段的結尾。
體
最後,我們還需要去「體驗」在研討會結束後,是否有興奮地嘗試那些講者分享的內容呢?即使選定了方向、學會了知識,沒有實際做過一次,是不會有經驗的。
之所以會用「超限學習」作為文章的主題,是因為大學讀的是多媒體設計,設計學院的畢業專題大多以「爆肝」聞名,我自己也體驗過一週一天只睡三小時左右的生活。
當時很常跟同學說的是「極限是用來超越的,超越極限後才會有新的極限」
似乎是很不妙的發言,然而在十年後來看,卻非常有道理。這幾年我都是採用原子習慣的方式安排生活,這是因為我發現我有許多目標,像是畢業後再次做遊戲、對 Ruby 語言社群有所貢獻、拓展自己的職涯等等。
一晃十年,似乎什麼都沒有一個成果。這是因為我們對於「細節」無法想像,無法清楚的知道要完成這樣的成果需要怎樣的實踐,就像現在要寫一個短篇小說,我們大多無法馬上把劇情細節安排詳細一樣。
我們知道要去「實踐」但是卻一直無法開始,就是期待成果太過完美、目標太過遙遠而無法想像,那麼最好的方法就是變成「可以負擔的狀態」
即使換到使用 Golang 我也還想繼續使用 Ruby,那麼給自己設定了在 Golang 實現 Ruby 環境的目標,我每週都會加上數十行的程式到 mruby-go 這個專案中,不管最後成果如何,至少下一個十年我不會毫無成果。
同樣的,我想拓展我的職涯和實踐理念,也跟五倍學院合作開了幾門課程,為了這門課程我需要每週更新一篇文章作為內容改進的參考以及宣傳,我給自己的要求就是一週寫兩篇,並持續準備下一期的文章,至今已經持續更新一年半,也規劃到明年下半年能順利更新。
然後,就到此為止了嗎?
並沒有,當我習慣做這些事情之後,我需要去破壞這些習慣,增加強度然後再一次去習慣。這就是「超越極限」當我們越來越熟練做某件事情後,就變成「舒適」的狀態,就會很難再次進步。
因此,只是習慣還不夠。還需要超越這些習慣,達到更加熟練的程度,這才是透過累積不斷進步的本質所在。
我在 WebConf 有提到,我的不用工作是「快到看起來像是沒有在工作」就是在這樣的前提下達成的,所以才能的跟大家開玩笑說「團隊借用的同事都回到原團隊後,我自己一人還是能保持專案進度」工作七、八年的過程中,我在實作的速度跟正確率都還在不斷地提高。
這是AI 驅動下的開發者體驗所提到的「Good Enough」情境,我們會開始「焦慮」的事情,其實就是被不斷的推到懸崖邊,然後要努力地爬回原地。
我並不擔心 AI 的衝擊,很大的原因是我在試用了 Copilot 後確定我的反應速度更快、更準確,同時我也準備好更複雜的知識(架構、系統設計)這些難以用片段程式碼就解釋清楚的問題,我過去累積的一切經驗都讓我有這樣的「餘裕」
AI 領域中有不少我「認知範圍(視野)以外」的知識,也有很多可以從我過去經驗中「拼湊」起來的東西,透過實踐(如:用工程師的方式入門生成式 AI - Stable Diffusion)的方式驗證知識,最後就能逐漸了解背後的機制,那就不需要擔心或者害怕。
WebConf 結束後有人私訊我的粉專告訴我從演講中「可以感受到我這十幾年來的血淚史」這是為什麼有些人總能不緊張、冷靜地應對,因為他有「餘裕」一種「前面所有的地雷位置我都知道」的餘裕,所以可以冷靜的對應變化。
十年前,我在 SITCON 也跟夥伴們討論過「理論」和「實踐」的重要性,到最後,我們發現是缺一不可,即使做出行動去「學習」沒有透過實踐轉換成經驗,是不夠的。
複雜
現實中我們面臨的問題總是更加複雜,不論是某個專業或學習技巧,如果只從特定的面向去看,大多會面臨失敗。
從「內心」開始,我們要需要先搭建出能構承受這樣強度的心理狀態,那麼心態正不正確才有意義,不然就變成不斷的學習卻無法承受挫折,最後還是會放棄、迷惘。
即使內心準備好,不斷的學習,如果視野不夠還是很難繼續深入,就算心態再開放能夠接受各種不同的知識也不會有幫助。
同樣的,即使學會再多知識、看得再廣最後沒有實踐轉換成經驗,那也只會停留在「理論上」也無法向任何人證明知識是有用的。
然而,就算有實際的經驗可以解決現實層面的問題,最後也會因為整個文明的演進從「獨有的經驗」變成「共有的經驗」這些經驗的價值也會不斷降低,還需要持續的突破極限,保持在最前緣的狀態。
想要保持這樣極限的狀態,最後還是回到自身內心的狀態,當「心累」的感覺出現,就很難持續下去,那麼怎麼維持這樣的整體狀態持續足夠長的時間,就需要「適當」的調整,給自己適當的壓力、適當的知識、適當的實踐、適當的休息,等變強壯一點,就可以再增加強度。
最危險的,其實不是自己給自己壓力。而是身邊的人給的,我認為「面對自己」這件事情很大一部分,就是跟被討厭的勇氣講的課題分離一樣,很多時候我們不需要把對方的責任當成自己的責任,也要注意不要把自己的壓力變成別人的壓力。