layout: post
title: 今年撰寫的軟體工程師入職指南
categories: [dev]
description: 提供給大家參考
身為一個軟體工程師,撰寫程式碼來實現功能只佔了工作的一小部分,除此之外您還會經歷軟體開發生命週期的每個階段。要順利在職涯持續成長,您更需要同時兼顧工程面的可行性和產品思維。請時時提醒自己:寫程式的目的是為了解決問題。
對於工作中可能出現的任務,這邊有幾點建議:
- 分析需求:思考客戶需要的是什麼,而不是等待客戶說他想要的是什麼。和客戶討論如果怎麼做可以更好的滿足他,而不是僅止於他的想像。
- 軟體設計:相信你在職涯旅途將會碰到或已經碰到Design Pattern、SOLID原則、OOAD、軟體架構。請記住設計並不是一道是非題或選擇題,而是一道申論題。以客觀的角度提出至少三種可行的選項,並列舉其中每個選項的優缺點,最後才說明你認為哪個選項最好。
- 實作:這會是你最擅長的部分,不要忘了開發會伴隨測試和重構,當你忽略他們,未來都會以技術債的形式回來要求你加倍償還。
- 撰寫單元測試和整合測試:作為你自己程式碼的第一個用戶,如果連測試時你都覺得難以使用,或是需要大量的測試程式碼來進行各種前置準備,那程式品質是可想而知的。
- 你會和code reviewer共同討論這個變更是否能夠變得更好:系統設計、元件職責、可讀性、可測試性、程式碼風格一致性、後續影響、API易用度、git commit message...等等。code reviewer就是你的第一個程式碼閱讀者,如果他不能順暢的閱讀,那很有可能三個月後的你會不小心git blame到自己。
- 在這個階段有可能反覆進行以上的作業,直到你們都覺得這是一份品質良好的變更,才送交進程式碼庫。如果他已經成為一種討厭亟欲避免的步驟,請讓你的主管知道這個回饋。
- 實際使用:雖然你已經寫了單元測試,也可能具備整合測試和系統測試,在部署到staging後,至少使用幾次自己開發的功能。畢竟等到別人使用發生問題,那可是相當尷尬。另外也記得提供一些QA用的功能,例如登出、解除綁定、清除資料,並且設定只有在staging才能呼叫。QA測試時就可以自助式的反覆進行,而不用一直找你重置資料庫。
- 部署:建立和加快自動化流程永遠是你可以主動做的事,嘗試把所有檢查和構建都放進CI流程中,並讓整個回饋循環發生的越快越好。
- 錯誤處理:針對錯誤永遠多想一步。當你撰寫程式碼時,試著思考如果在這邊發生錯誤,我還需要印出哪些關鍵資訊來判斷問題成因。試著讓log裡面擁有5W1H資訊。
- 溝通:當你寫了一段很漂亮的程式碼、實現了一個很精妙的設計、學習了某個新技術,試著用文件、簡報、口頭分享的方式讓同事們理解。當你不清楚某個任務內容、優先順序,試著用問題、用你的話再說一次,來確認彼此的理解沒有落差。
作為一名軟體工程師,你的工作遠遠超出了單純的程式碼撰寫。從需求分析到設計、實作、測試、部署,再到最終的維護和溝通,每一步都是創造出高品質軟體的重要組成部分。在這個過程中,你不僅是技術的實踐者,更是問題解決者和創新的推動者。記住,持續學習和適應變化是這個行業不變的規則,而你的熱情和創造力將是你職業生涯中最強大的資產。