從開始出社會工作到現在,總共也八年快九年,總共待了三間不同的公司。待過的公司一間比一間小,每一份工作中也都學到不同的東西。從熟悉一個領域,到全端開發整個產品,到熟悉一個領域且維持一定全端開發的能力。三份工作剛好維持了一個循序漸進的結構。
有什麼做什麼,唯一選擇的是軟體
第一份工作選擇了一間軟體大公司,抱著大部分新人都會有的心態,以學習心態來工作。工作是負責某個產品的 Android App,公司是傳統一點的軟體大公司,有完善的規章制度和層層分級的管理制度。我負責也就是一個產品的 Android App 的部分,完成功能後,然後會交由 QA 進行測試,然後解決 Bug,有人負責後端,有人負責產品規劃,有人負責時程規劃,有人處理 DevOps 的部分,可以說是把工作內容分得比較的細,像工廠流水線一樣,每個人處理好自己的部分,流水線就會持續有產出。
我覺得在這個過程中,只負責一個 Android App 讓我有機會把程式的基本功練好,從語言特性到框架行為,可以有一段相對連續且漸進的學習過程。公司內部也會有一些大神,能幫助解決開發上的一些問題,自己也能側面了解如何解決並學習。在這份工作上,比較少機會直接花大量時間與他人學習如何寫程式。工作之外,自己雖然會看一些設計相關的書,例如重構,設計模式,但是除了簡單的重構,其他的只能是有看沒有懂,更別談會用了。以現在的角度來看,在沒有人指點的狀況下,有點不得其門而入的感覺。
以上都是五六年前記憶中的樣子,很有可能有已經有許多地方不同了,畢竟軟體開發是個變化快速產業,公司也會隨之發生變化。
進行開腦手術的過程
第二份工作,公司規模相對小一些,公司組織扁平化非常多,工作方式採用敏捷開發。公司有許多產品,而每個產品是由一個一個小而精壯5~7團隊組成,從前段端後端,CI/CD,軟體測試都需要由這 5~7 人全端的負責。相比之上一份工作,公司的風格可以說是完全相反的。也是在這個階段,我開始需要了解 Web 前端,後端與 CI/CD,了解軟體的完整開發流程,不像之前一樣可以在單一的領域鑽研到比較深入,而是需要廣泛的了解整體概況。
公司鼓勵開發人員持續學習,有許多預算讓開發人員去買書上課,甚至直接請教練來公司與開發人員進行 Pair Programming。自己也是在這個時候才開始頻繁上課與看書,認識許多大師。也是從這個階段開始,開始知道什麼叫做開發人員,從認識 Code Smell,知道 SOLID、 KISS、DRY …等諸多軟體設計原則,知道如何善用 IDE,能在開發過程中重構和寫單元測試,與團隊成員 Pair Programming、Code Review、分享經驗和共同成長。
在這份工作上,我知道如何從一個碼農變成一個開發人員。聽起來第二份工作似乎相當完美,但是最終我還是離開了。
世上沒有完美的解法
在第三份工作中,我來到了一間更小的公司,雖然工作方式與上一份工作差不多,但是制度與資源上還是有一些不同。在上一份工作中,大部分的開發團隊都不會區分前端開發人員與後端開發人員,每個人都是全端的開發人員。在這份工作中,團隊有比較明顯的前端與後端開發人員,只是前端開發人員也會需要具備一些後端開發技能,在後端負擔相對較重的時候,前端開發人員可以協助開發。開發過程也與上一份工作一樣,會 Pair Programming、Code Review,公司也同樣鼓勵並提供預算讓開發人員持續學習,就本質上來說與上一份工作區別不大。
聽到這邊好像沒什麼差別,就工作方式來說也確實沒什麼差別,唯一差別在於細節程度上的不同。由於上一份工作中,我所在的團隊的成員都相對年輕,也較缺乏實務經驗,在開發的過程中,比較難討論出有效且合理的做法,好像這個做法也可以,那個做法也可以,沒有花時間去研究並評斷解法之間的優缺點。在 Code Review 的做法也比較不講究,對於程式碼的品質也不會要求到極致,也不是每一個功能都會加上單元測試。重構沒有測試的程式碼時,也有時會出現 bug。
在這份工作中,Code Review 時,我們會嚴謹的審視程式碼,從變數命名到架構設計,讓程式在每一個時間點都保持一定的可維護性。若是在 Code Review 過程中,如果設計經過討論後發現可以調整,也會即時的調整,讓程式碼維持一定品質。聽起來好像常常在修改已經做好的東西,也確實是常常在修改已經做好的東西,這也是十分正常的,畢竟程式不是天生的,是演化而來的。為此我們會打磨自己的開發工具,熟練重構工具與 IDE 快捷鍵,加速修改程式碼的速度。我們也會為每一個功能加上完整的單元測試,測試各種預期程式行為,讓產品保持一定的品質。
在這份工作上,我學習如何變成一個更專業的開發人員。
結論
我覺得每間公司都有優點與缺點,有時候本來的優點也會變成缺點,缺點也可能變成優點,完全在於你從什麼角度來看。只有知道自己的需要的是什麼,才有可能找到自己需要的。我自認為自己很幸運,可以在不同階段遇到的合適工作方式,也十分感謝遇到每個人事物與機會。
======= 以下是工商時間 =======
公司正在尋找前端、後端、App 的開發人員,歡迎有興趣的朋友履歷投起來