How to step up as a senior engineer. 更進一步:資深工程師如何精進。

David Lee
iCHEF
Published in
Dec 23, 2021

軟體工程師職涯的成長分了幾個階段,而最容易卡住的可能有兩個。

第一是剛入門的時候,雙眼茫茫,舉目皆是不熟悉的知識與概念,你想要上手,卻不知道學習的內容到底跟實際工作到底有多少差異。實際工作時想要精進,卻又不知道自己的方向是否正確。

其實在你漸漸資深之後,想要再進一步也會遇到類似的困境。

大多數的東西你可能已經會了,但是系統規模成長帶來的問題卻遠比你學習的速度還快,放眼望去每個領域好像都有精進的可能,卻又很難肯定哪個領域可以為你的工作提供最大的幫助。

在這篇文章,想要試著藉由回顧自己和身邊的同事們,找出一些相關的脈絡,希望能夠提供一些幫助。對於一些走到這個階段,而有些徬徨的你提供幾種可以實際的執行方式,來作為工程師成長的養分。

第一件事,更多更多的閱讀。

書已經讀不完了沒錯,但是更多的輸入絕對是成長的基本方式。

閱讀更多基礎知識的資源可以讓你在看到問題時能夠以不同的認知來思考如何解決,得以更有效率地找出更棒的解法。例如今天你需要呈現一個資料的報表,如果你有更深入的 SQL 以及資料庫相關的認識的話,你可能可以找出最少彎路,效能負擔最佳的解法。如果你更懂 SQS 和 Celery 在設計非同步系統時就可以避開一些地雷。

更抽象一點的層次一點來說,假設你讀過一些架構設計的書籍,你會在整個架構的設計上更有原則和依據來避免前人踩過的坑洞你去一踩再踩。因為這些書通常會提供你一些準則與不少的案例和問題探討,來提供你關於相關系統設計的認識。

同時也可以分配一些時間來吸收一些關於其他人經驗談的部分。除了互相驗證思考的方向,激發沒有考慮過的面相之外,聽聽別人怎麼說來提升自我認同 — 「原來這些厲害的傢伙也是這麼想的!」可以有效地幫你去除冒牌者症候群的一些負面心態,讓你可以用更健康的心態和其他同伴一起討論、甚至分享你的技能。

最基礎的閱讀材料就是書籍,軟體工程相關的書絕對多到數不清,甚至很多人會分享推薦與心得讓你得以有效率地去找到你所有興趣閱讀的書籍。但是不要停止於接受其他人的分享,自己去讀那些書才是你和作者最直接的交流,心得很好,但是每個人的心得都和他們的背景有關,直接地去看看書本想要和你敘述的知識和經驗,會是你職涯發展不可或缺的基石。

甚至在你遇到職涯、角色變換的時候,一些書籍的閱讀可以讓你在這些轉換之間得以藉由前人的經驗來預先做好心理準備或者有個著手的方向,無論如何,在職場發展和個人發展來說,都是一件有利無害的事情。

當然,有些人就是沒那麼喜歡讀書。

那當你讀完那些必讀的書籍之後,影片其實也是很棒的閱讀來源。諸多的會議其實都會留下影像紀錄,在經驗分享相關的媒體來說,影片的資源也許也不少於書本。尤其影片大多更新得更快,很多近代技術的心得都會讓人有積極分享的慾望,而我們也因此而得益,在 youtube 等平台都可以找到很多很棒的閱讀材料。

而最近幾年除了影片,更多了超多的 Podcast 。

我覺得 Podcast 真的是零碎時間的救星。從雜談,到入門,甚至深入的內容現在你都可以利用通勤時間甚至午休、睡前來吸收。大多數的 Podcast 都用著相對輕鬆的表達手法,讓人在休閒與學習之間模糊了分界,讓你連聽一小時也不會有覺得,啊,頭腦要炸開了的那種壓力感。

也許他的學習效率沒那麼好,但是就像是工程在考慮架構的時候一樣,最佳解也必須要是可行方案才行。先引起一些興趣、多瞭解一點大概,在慢慢深入也不失為一個好作法。

第二件事,多發表,多溝通。

有很多很棒的閱讀,很多很棒的想法是很好的事情,但是我們獨自思考總是會有缺漏的地方。這也是為什麼多表達自己的想法在工程師的進階中其實佔了一個重要角色的原因。你不只需要自己去想,也需要和其他人進行交流與碰撞才能夠成長得更快。在不斷的挑戰與被挑戰你所提出的想法之後,一則你會學習到很多原本沒有考慮到的面相,再來則是你會得到足夠的自信 — 「我的想法已經在數次的攻防之中獲得了更多的驗證」。

最日常的發表場景可能就在每日的會議之中。我們總會討論各種規格的需求,當你聽到這些規格的時候,如果心中覺得有什麼窒礙難行的地方,更跳脫的達成手段甚至是有什麼整體設計上的顧慮,希望你的團體文化是一個大家都可開放討論的環境,和設計師與專案經理的溝通有助於你對於整體架構的理解,也可以讓不同職能的夥伴對於引擎蓋下如何運作有更直觀的認識。什麼樣的東西可以做,什麼樣的東西好做,什麼樣的東西最好不要做?不斷來回的溝通可以讓你更釐清這一切的基本規則。

除了開發規格的會議,希望你也有實作前的會議。也就是 Design Review。程式碼需要大家協力把關,設計也是,而想要在軟體工程師的身份更加精進,能夠把自己的設計完整化、抽象化並且表達給相同職能的同事也是很重要的能力,這個過程可以協助你反思你的設計有什麼優點和缺點,架構就是取捨的總和,而再三確認我們是否正確地做出選擇是我們自我成長十分關鍵的一個橋段。

最少最少,你需要在 PR Review 中發表你自己程式碼的脈絡並且能夠對於其他人的 PR 發表一些有建設性的意見和提問。

附帶一提,溝通的時候也許不需要很強力的表達。在我們多次的實驗之後,溫和有理的敘述,似乎是最能夠進行有效溝通的做法。

第三件事,多實踐同時多想。而這也是最重要的一件事。

講到資深,通常對應的就是有很豐富的經歷,而其中最有用的就是你接觸過各式各樣的挑戰帶來的經驗。而在軟體工程師的職涯中,往往這些經驗是需要你主動去挑戰去創造的。在絕大多數的情境我們可以使用既有的架構既有的工具去達成公司所規劃的商業目標,只是在不加優化的前提下,技術債可能會越累積越多,或者是效率一直難以提升。

在解決當前的問題時,往往如果你有像前述的多吸收多閱讀的話,其實你是有很大的可能去找出一些可以實作的新玩意的。不論是新的架構也好,引進新的套件也行,甚至只是把程式碼做一些重構,這些基於需求所發現的基礎建設翻新,可以讓整個系統越來越健康,對於你個人而言,他們都可以是你每年績效考核的加分項目,甚至在你離開公司之後,他們也可以是你在履歷上亮眼的一條成績。

但不要只是為了實踐而實踐。在動手之前先做好相關的計畫,最好還可以來場 design review ,這樣我們一行程式都還沒寫,經驗就先增加了。最重要的是在安排這項實踐的思考過程中,所想到的,所學到的思路與觀點,他們和你實踐過程中踩雷解題的經驗一樣重要。

最後這個步驟確實是需要一些機運的,因為你需要一個成長得比你還快速的系統來作爲你成長的養分。

剛好在 iCHEF 我們有很多這樣子的機會。團隊在擴張,每年我們開發的合作方式都不斷地迭代進化,一年比一年更有效率。系統更在擴張,資料也好,客戶數也好,每隔一段時間我們就可能會打到一些瓶頸並且經歷這些突破瓶頸的過程。這都是我們成長的養分。

如果你也對於這樣的成長方式感到有點興奮,不妨也來聊聊。也許我們,可以一起經歷這些有趣的系統成長自我成長,最終成就一些不凡的東西。

Go Beyond, iCHEF.

--

--