我覺得這是個有價值的問題,希望自己的一點想法可以對你有所幫助
先討論什麼是 senior 該有的樣子,由於我本身是 backend developer 下面的說明主要是
我自身的經驗,不過只要你的工作是 software enginner 我覺得大部分的概念都是通用的
senior 跟 junior 的主要差別在於抽象跟選擇,造成兩者能力落差的主要原因是經驗跟基礎
知識的深度。
留下重要的資訊省略所有不必要的細節就是抽象,好的抽象才能產生有好的程式碼(可讀性、擴
充性、robust、正確度、效能...) 新人往往會關注於功能的實現與細節,而忽略了功能背後
的脈絡與目的,因為他不曉得如何從比較高的層次來抽象化,所以產生了一系列可怕的結果(錯
誤百出、可讀性差、沒辦法改寫)。
選擇其實也是一樣的情況,選擇不同的寫法、Framework、 Language、 Databsase
、 是否要寫測試、哪些 exception 需要處理... 在這些選擇背後的是足夠的知識與經驗
去做出正確的取捨,而不僅僅只因為某個原因(我只會用 PostgreSQL、k8s 很潮、
Golang 聽說很快)。 如何根據使用情境做出正確的選擇是一件困難的事情,而 senior 比
junior 更有機會做好這件事情是因為 senior 踩過夠多的雷,有更扎實的基礎知識與
domain knowhow,所以他們懂得利用這些資訊去找出最適合的選擇。
新人怎麼進階?
* 做每個功能前先確認這個功能的目的是什麼,你的工作不是完成某個 for loop,而是
確保你的 code 有幫助到你們公司/組織。
* 學好工作上常用工具(i.e. Database、Framework)的底層知識,這是非常值得的投資。
* 先 code 前先用紙筆把想像中的實作大概描述一下,看一下是否合理(容易理解、擴充)
* 寫測試,這是一個抽象化的好練習,抽象做得好,測試沒煩惱。
* 學好英文,正確的命名是好的開始、很多重要的知識都是英文居多。
* 請同事 review 你的 code 看有沒有改進的地方(跟你的寫法有什麼差異、看不看得懂、
有沒有辦法修改)
最後推薦幾本書
Designing Data-Intensive Applications: The Big Ideas Behind Reliable,
Scalable, and Maintainable Systems
https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Site Reliability Engineering
https://landing.google.com/sre/sre-book/toc/index.html
A Philosophy of Software Design
https://www.amazon.com/Philosophy-Software-Design-John-Ousterhout/dp/1732102201