邁向軟體工程師之路
The Way to Become a Software Engineer
就這樣,研究所畢業後順利進入職場也差不多工作了三個月,雖然菜味還是很重,但是我對於軟體開發有些看法與目標。
首先,來説說軟體工程師是怎樣的概念。雖然公司大多都會給予工程師的頭銜,但是我認為軟體工程師是一個嚴謹的概念,其大約等同於資深工程師,可以看看這篇「如何才有資格稱為資深工程師」[1],文中將能力大致分為兩種層面:技術能力層面、心理素質層面,最後還提到這不是全部,讓我想起在大學時聽過一場演講說到:「做好一件事所需要的能力,遠遠超過ㄧ件事」。
想要面面俱到軟體工程師的能力,不是一朝一夕就能達成,軟體工程師是一條道路,現在只是拿到了一張門票。我認為掌握程式語言的語法只是最粗淺讓寫出來的程式碼能夠通過編譯器/直譯器的檢查,不代表在機器上運行時是有效率或在執行期 (Run-time) 不出錯,也不代表寫出來的程式碼是能夠容易的被維護,或是在軟體成長時能夠容易的擴充新功能、改變既有功能,其道理類似於在讀研究所時,一位熟稔平行運算的教授說過的話:「頂尖的車手除了很會開車以外,也對車子本身十分了解」,就像電影玩命關頭 裡的主角們一樣,各個駕馭的技術精湛,又很會改車,把系統整體的效能百分百的發揮出來。所以除了語法的掌握以外,還需要了解機器本身的知識。
那麼技術層面的能力該如何培養呢?原本我從設計模式 (Design Patterns) 下手,但是經過馬克斯大大的指點,應該先學習 SOLID 原則,不要為了使用而使用設計模式,其道理就像是丐幫的打狗棒法,空有外功沒有心法,無法發揮真正的威力,更可能發生用了比沒用更糟糕的狀況,在這裡就推薦 Finn大大的「我該學會SOLID嗎?」系列[2]。另外,推薦「無瑕的程式碼」(Clean Code, Robert C. Martin),這本書裡講述了如何撰寫高品質的程式碼,其作者人稱 Uncle Bob 在 GOTO Conference 2017 上的演說「The Scribe’s Oath」[3]也推薦一看,從法學家的誓言引申到程序員的誓言 (The Programmer’s Oath)[4],趣味十足。
最後,來說說我自己的目標:成為對一個領域專精,又不被單一領域所局限的人,簡單來說就是兼具「深度&廣度」。用一輩子來做好一件事,其實就算是一種偉大了吧!
References
- [1] 網站製作學習誌 — 如何才有資格稱為資深工程師
- [2] Finn — 我該學會SOLID嗎?
- [3] GOTO 2017 • The Scribe’s Oath • Robert “Uncle Bob” Martin
- [4] The Clean Code Blog — The Programmer’s Oath
Last updated Jan 13 2019