究竟,怎麼樣才能算是「資深」工程師? - Medium
文章推薦指數: 80 %
既然是工程師,不管你是上班時做公司專案,還是下班後自己搞Side Project,最重要的任務就是把腦中的構想透過寫程式實現出來,所以實作的能力絕對是必要的 ...
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWritePublishedinStarbugsWeekly星巴哥技術專欄究竟,怎麼樣才能算是「資深」工程師?前幾天看到老莫寫的「成為SoftwareEngineer半年後的小回顧—我遇到的困難與反思」,想到自己加入現在的公司也好一陣子了。
雖然我的職稱是資深工程師,但老實說最近跟前輩一起開發專案後才發現自己根本就還不夠「資深」XD,尤其是在軟實力以及軟體工程方面都還有很多進步的空間。
所以趁這個機會,我想跟大家聊聊我身邊的「真.資深工程師」大概都具備怎麼樣的能力跟特質,以及身為普通的工程師,應該要朝什麼方向去努力。
實作能力既然是工程師,不管你是上班時做公司專案,還是下班後自己搞SideProject,最重要的任務就是把腦中的構想透過寫程式實現出來,所以實作的能力絕對是必要的。
就像LinusTorvalds的名言「Talkischeap.Showmethecode」,光說是沒有用的,只有把程式碼寫出來了,那才算是真正完成了一件事情。
實作能力要到什麼程度才能算是「資深」呢?這也沒有標準答案,但根據我的觀察,資深工程師們的實戰經驗往往非常豐富,只要你的需求不要太過嚴苛(希望系統的可用性有十個9之類的XD),幾乎沒有做不出來的東西。
任何ticket對他們來說大概都只有「這個簡單弄一下很快就好了」跟「這東西我要花點時間研究一下」兩種,而且他們通常都可以獨立作業,不會突然跑來問你「為什麼我的npminstall跑不過」、「我沒寫過Dockerfile可以教我嗎?」。
說了這麼多,那實作能力要怎麼練起來呢?關於這個問題,我的想法是要不斷學習新東西,並且真的應用在實戰中。
譬如我原本就很熟悉用Node.js寫RestfulAPI,那下次SideProject就可以試試GraphQL或是乾脆改用Rust,雖然第一次寫Rust會被編譯器搞得很痛苦(想把電腦砸爛的那種),但寫了就會發現「原來這種地方可能會有datarace!」、「原來非同步不是只有callback跟promise兩種處理方法」,而這些事情做久了會慢慢提升你的技術深度跟廣度。
有了足夠的技術深度跟廣度之後,既便未來遇到一些沒碰過的東西,也只需要花個五到十分鐘就能看懂他在幹嘛,甚至能猜到底層的技術原理,因此有需求進來時即便不熟悉也可以更有把握的把東西寫出來。
願意花時間做設計雖然資深工程師很懂怎麼寫程式,但除了寫程式,我認為他們最厲害的地方其實是設計。
這邊的「設計」指的不是UI上的設計,而是在真正開始動工之前的「系統設計」以及「技術選型」。
我身邊很多資深工程師在工作時並不花太多時間寫扣,因為對他們而言「事前設計」的重要性遠大於「實作」,錯誤的設計一但開始動工了,可能要花費設計階段所需的十倍甚至百倍時間來彌補。
就像我前陣子在幫忙公司的一個專案,那個專案最初是從2016開始的,也就是Python3.6發佈那一年,但專案竟然是選擇用已經被官方放棄的Python2來開發,導致後來很多套件都無法更新,整個專案也無法維護,只好重新寫一個版本。
因此在真的開始實作之前,好的資深工程師們會先仔細確認需求、設計資料庫Schema、思考後端架構等等,等這些大方向都確定下來之後,才是開始寫下第一行程式碼,這種「先確定大方向,再慢慢完成小細節」的工作方式讓我非常欣賞。
要怎麼增強系統設計的能力呢?系統設計這方面其實我也還算是新手,所以沒辦法給出一個很明確的答案,大家參考參考就好。
我認為想要把系統設計做好,除了自己要有一定的技術深度及廣度之外,最重要的就是跟其他人討論,不然很容易受限於自己過去的經驗,而想不到更好的方法。
譬如說我多年前剛開始做SideProject時,都是用AWSEC2開機器來跑APIserver。
因為那時不知道有S3這種服務可以放靜態檔案,所以server收到的資料都是直接放在機器上。
而這樣做的代價就是我的服務沒辦法水平擴展,如果效能不夠就只能升級到更好的機器,現在回頭看真的很傻很天真XD。
因此我覺得在對於架構的掌握夠全面之前,盡量還是要多跟別人討論,真的沒人討論的話也可以多看一些文章跟書,像我前陣子看到「系統設計101—大型系統的演進」跟「系統設計入門」都很不錯,有很多東西用講的很模糊但圖一看就懂了。
而這些知識都備齊後就是靠實戰累積經驗了,只要每次開發新功能之前都有認真做設計,那必定可以感受到每一種設計在開發速度、部署流程、可擴展性等等各方面的好壞,久而久之設計出來的系統也就會越來越完整。
團隊先於個人這點是我從其他「真.資深工程師」身上觀察到最令人敬佩的地方,好的資深工程師會去思考怎麼提升整個團隊的效率,而不只是個人的績效。
以寫文件這件事來說,每家公司都會有自己的開發流程、部署流程、AWS密碼放哪之類的。
而我身邊的資深工程師就很樂意把這些東西整理成文件,畢竟如果沒有文件到時也是去問他XD,所以先花點時間寫起來不只省了自己時間、也省整個團隊的時間。
另外,他們也很願意寫自動化測試,當然測試不可能全部都測,但如果能把系統中絕對不能壞的地方用測試保護,那團隊內其他同事在開發時就可以更安心,而且也不會有人假日還要被挖起來修bugXD。
除了寫文件及測試之外,在技術選型方面,他們也是以整個團隊為優先,認真考量各個技術的效益跟學習曲線。
比方說因為Docker很好學,花一個下午就可以學會寫Dockerfile了,所以用它來做部署的CP值就非常高;但如果說是要用Rust來寫APIServer,雖然可以提高效能幫公司省開機器的錢,但一來團隊內的新人要花更多時間才能上手、二來要找到會寫Rust的工程師真的不容易,所以顯然不是一個好的方案。
還有什麼要做什麼的嗎?雖然「以團隊為優先」聽起來很抽象,但其實做起來並不難,只要你抱持著推己及人的心態,在做任何事情的時候都想一下「別人會不會也有相同的困擾?」,然後花點時間幫忙解決,那離資深工程師也就不遠了總結要成為資深工程師,絕對不是年資到了或是Leetcode刷得夠多就可以。
好的資深工程師除了技術能力夠扎實之外,在溝通能力以及心態上也必須足夠成熟(這方面我也還在努力),才有辦法帶領整個團隊一起前進。
以上就是我從自己身邊觀察到的資深工程師,當然資深工程師還有很多種樣子,而且他們有些還會有自己的特異功能(特別會通靈、隔空解bug之類的XD),因此大家有空也可以多觀察身邊的前輩們到底厲害在哪裡,也許能從他們身上學到不少東西哦~延伸閱讀一個資淺工程師年末的自我省視如何才有資格稱為資深工程師技术人员的发展之路MorefromStarbugsWeekly星巴哥技術專欄一群技術人想要寫出一些好文章所建立的技術專欄。
每週二一篇原創文章、一封電子報,歡迎大家訂閱!主網站:https://weekly.starbugs.dev/。
ReadmorefromStarbugsWeekly星巴哥技術專欄AboutHelpTermsPrivacyGettheMediumappGetstartedLarryLu2.4KFollowers我是Larry盧承億,傳說中的0.1倍工程師。
我熱愛技術、喜歡與人分享,專長是Javascript跟Go,平常會寫寫技術文章還有參加各種技術活動,歡迎大家來找我聊聊技術~FollowMorefromMediumÉlisonGomesMyapplicationdoesn’tscale,nowwhat?KalyssaA.OwusuOnCAPTheoremRaghavBanginRaghavBangConcurrencyvsParallelismvsMultithreadingJ.KalyanaSundaramRendezvousHashingHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1[請益] 怎樣才算資深工程師- 看板Soft_Job - 批踢踢實業坊
以我的淺見加上我對我們公司資深工程師的觀察資深工程師應該要有能力自己架構規劃一個專案並且有能力可以review其他工程師的程式碼更重要的是還有能力 ...
- 2資深工程師的價值是什麼?這5項能力你準備好了嗎? - 翔說什麼
請拋下技術是一切的想法,技術只是工具,實現需求的工具、讓您賺到錢的專業能力, 當您成為資深工程師這一刻起,它!現在是您的基本能力了。 過去因為您的 ...
- 3工程師升資深工程師的比例 - 科技業板 | Dcard
想了解業界每年升資深工程師的比例,資深工程師的定義是,碩畢進公司後第一次被升等上去的職位,我猜各家到這都稱資深工程師。分享我們單位是一年20% ...
- 4「資深工程師」找工作職缺-2022年8月|104人力銀行
2022/8/11-11314 個工作機會|資深工程師【富都新開發建設股份有限公司】、越南廠-初級/資深工程師【新至陞科技股份有限公司】、機構資深工程師(IVM)【貿聯國際股份 ...
- 5如何才有資格稱為資深工程師