至今的工程師生活篇(工作、心態)

「我所認為的Senior Engineer 系列」的第一篇文章,關於過去的職涯會用工作、心態與所需技能組,兩個面相分享給大家

CraftsmanHenry
Nov 21, 2021

出來工作至今,已經將近5年的時光,也許還能自稱是個職場新手,但我想無法說自己是個新手工程師了。因此想要靜下心來回顧自己這段日子經歷些什麼,期許自己在回顧的過程中,能夠有其他的收穫並能訂下更明確的目標,以求未來的成長都能夠在軌道上。同時也想分享給任何讀到這篇文章的任何人,期望能給別人帶來一些啟發,更希望有資深的前輩能給予我些許的指引

溫故而知新,可以為師矣

我想是最能詮釋我為何想寫這篇的一句話吧!過往的工作,這篇文章要用以下的結構來進行思考

  • 令我印象深刻的產品或專案
  • 自己在部門內的定位與貢獻
  • 部門間的溝通與合作
  • 部門在公司的定位
  • 自己對於公司的意義

這篇主要是以我過往的工作為主,而下篇則會談論關於一個具備5年資歷的工程師該具備的態度與人格特質

廢話太多,還是趕快開始吧!

叡X資訊

這裡我是剛畢業的第一份工作,進入的部門算是產品團隊,主要開發與維護知識管理系統的附屬模組。

第一個任務是客戶需要公司的主要產品知識管理系統的論壇模組修復所有弱掃工具回報的高風險資安問題後,客戶才肯為購買的產品結案付餘款。這個任務讓我認識當時的OWASP TOP 10,還順帶學會寫Code時需要的一點Security思維

接下來令我受益最多的任務是我與另一位資深同事,一同開發一個知識管理系統的附屬問卷模組。這是一個全新的模組,在這個任務我經歷從軟體生命週期的啟動開始到軟體開發完成後開始維護;也是這個任務讓我知道軟體生命週期中8成以上時間都是用在維護(修改軟體、debug…等),因此增進維護的效率等同於降低公司的成本

與同部門同事之間的相處

在此工作時,老實說我與大多數同事相處非常一般,就是公事公辦,上班好同事下班不認識。但比較可惜的是,我與最常合作的資深工程師之間關係卻有些尷尬,可能因為年紀造成的代溝或我個人行事風格的關係,原因我不得而知。認真說來,時常有離職的衝動(我想不少人都有XD),畢竟沒人教還會被冷嘲熱諷,不過我一有這樣的想法我就問自己

我在未來的面試中,我想告訴我可能的雇主什麼?

而我自己覺得:「因為我不喜歡誰誰誰…」或是「跟同事相處之間有問題」這樣的說法非常的low,而且也無法在未來的職涯中用這種說法矇混過去,在這裡我想我學會最重要的事情是

只要堅持不放棄,一天改善自己一點點,到最後大家總是會無法挑惕你

我有些朋友覺得我的想法非常奴(或許有些讀者也這麼覺得),但我想我就是一個執著的人,而放棄對我而言是一件無法對自己交代的事情吧!最後我也確實履行自己的承諾,為公司達到一個階段性的目標,也準備好我認為要往下一階段前進的技能。

部門在公司的定位與部門間的溝通

以當時的組織結構觀察,自認為公司的資訊管理系統算是個熱銷的產品,因此有許多廠商會想要擴充模組來提高生產力,因此不時就會有我們部門負責的模組改善需求,甚至會有財力雄厚的公司直接請公司直接為他們設計一套新模組,時常可以看到主管帶著架構師出差去談需求;因為以上因素,我始終覺得部門在公司是有受到重視的。

由於我們部門負責coding的工作,而design(UI/UX)的工作則是由另一個部門負責,因此對我們模組team來說,需要溝通與合作的team,除了主要的知識管理系統team外就是前端設計team,也是因為與他們的合作我才覺得,第一家公司算是個政治角力不算大的公司,跟第二家公司的狀況比起來,他們的設計團隊幾乎是與產品團隊有對等的力量與地位,我們時常也需要去與他們協調時程和討論想法,不會說產品團隊一味的將自己的想法跟時程強壓到設計team頭上,以我的角度來看部門之間可以說是和諧相處、相互尊重

個人對公司的價值

其實以過去我的角度來看,當時的部門是極度需要在技術上有些突破的,因此當時除了協助公司完成一般的開發、維護和業務需求外,還投入相當多的時間思考與研究,到底對於對於公司當前的產品來說,怎樣的技術選擇會更具有競爭優勢,並讓開發與維護更容易。這個思維也為我帶來一種類似leadership的心態,下面我試著用白話文描述對我而言的leadership

以自身的行為為榜樣,做好那些所有人都認為重要,但卻沒有人願意起頭開始做的事情,以求大家能夠受到激勵而跟隨自己的腳步

在與公司同事和在科技業的朋友聊天與討論後,發現其實大多數的人都對怎樣做比較好有個大概的輪廓,不過所有人卻覺得吃力不討好而且不會對自己的職涯發展有幫助。但如果所有人都這麼想並漠視這些問題,那進步要從何處開始,而我希望可以由我自己開始驅動那股改變的力量

因此當時的我主動學習並引進一些部門還不算成熟的概念(ex. Restful, CI/CD),甚至還在公司的文件管理系統發表一些心得與教學文章,我想這就是我認為我對公司的價值。

在第一家公司服務將近兩年後,開始覺得自己透過自學所能成長的速度始終有限;自己不該再閉門造車,該看看別人公司的practice,並試試看自己努力的技能可否在其他公司也派得上用場,因此我當時決定離開這裡,去外面看看新的機會。

X勢科技

第二份工作是當時我衝著名去的台灣某防毒軟體公司 😆,主要開發與維護的是公司的Identity and Access Management(IAM)和Single-Sign On(SSO)服務。這服務提供給公司的客戶一個入口能夠使用同一組帳號密碼,使用其購買的所有公司產品,要我用一句話來形容這個服務就是

程式碼 Legacy 到幾乎無法更動,而且又有抖高的更動與部署風險

風險就是只要這服務一下線,全公司客戶都無法登入他們購買的任何產品,但也因為這樣的產品特性讓我養成以下的五個習慣

  • 每次的程式碼更動,一定要讓下次更動更簡單一點(Refactoring)
  • 要更動前要先搞懂與更動相關的所有feature的測試方法,以確保更動後所有功能還是可以運作(Test)
  • 退版要很快(Continuous Deployment — Rollback),真不行起碼要趕快退回上一版,否則晚上都不用睡覺 😭
  • 別直接Copy/Paste從網路上找到的Code,要從別人的code中學到他人的思維(把別人的legacy code加進自己的legacy code變成legacy² code)
  • 文件跟Specification務必看清楚,搞清楚自己在做什麼(寫程式真的很容易,但寫符合規範又能持續帶來收益的程式很難)

由於我在第二家公司時間比較久,經歷的專案太多,族繁不及備載,因此就不一一列出,我這裡就只闡述我獲得的體悟。另外一部分的心得就根據上面說的四個面向分享給大家

與同部門同事之間的相處

在這裡真的認識不少相當好的同事,甚至公司外都還可以約出來吃飯聊天,不過工作與生活總是不能相提並論,而在工作方面我的想法就是

我了解不同職位的同事間很難互相理解彼此在做什麼,但最起碼要願意理解,並嘗試協助對方把他的工作做得更好

以一位開發人員的角度來看,其實不僅僅是開發與測試或其他職位的人之間的矛盾,甚至開發人員之間也有,大家的心理我想不外乎「get my shxt done」,但只要對方願意接受(這非常重要,有些人ego很強,或是另一個極端打從心底覺得自己不行),盡量多觀察看看別的同事在工作上希望些什麼配合,可以讓合作之間更沒有障礙,避免以為自己的事情都做完,但卻無意間造成他人的工作變得更難做更複雜。

部門在公司的定位

有趣的是,我任職的部門主要的業務並不是大家對公司的第一印象「資安相關」服務,而是負責我前面提到的客戶認證另外跟還有產品授權,定位上算是協助銷售的團隊;因此開發的過程中時常要思考的問題,從過往的「怎樣好用?(功能取向)」變成「怎樣好賣?(業務取向)」,對我來說是個全新的體驗,而且後續與朋友聊天後才知道,這樣的思維模式也相當需要。

一般般的產品搭配神一般的銷售,才能真的大紅大紫

畢竟客戶的需求,沒人可以從一開始就完整預測,並打造出一個完美的產品。但是銷售給越多人,收集越多客戶的回饋並快速改善後,會更有機會打造出一個客戶真正需要的好產品。而我們部門之於公司的定位,就是要讓產品容易被客戶取得並開始使用,協助產品團隊更快速地蒐集到更多的用戶回饋。

部門之間的溝通

上一節也提到我們部門算是協助業務的團隊,因此對我來說可惜的是,我們部門對自己的服務也有所要求並想要改進,卻總是把時間花在別人(產品團隊)的需求上。剛開始時常怪東怪西的覺得「難道我們就不能透過排程或是跟別的團隊協調一下嗎?」,但後續想想這背後的原因必定是有我無法得知的因素或困難之處(政治角力之類的),因此也沒想責怪任何人。

其實跟同部門的同事相同,雙方需要有共識想協助對方把工作做得更好。但我心裡卻也沒有好的解決方案,能夠讓部門間可以達成這樣的共識,希望在未來的成長中,可以領悟到這件事情。

個人對公司的價值

延續在前公司學到的leadership的概念,將上面提到的legacy系統,透過不斷理解其中的核心domain knowledge、加上測試與重構後,終於將這個系統改善到對我而言修改與維護成本都已經降到能夠輕易修改與擴充的地步。改善外同時還不斷尋求更好的系統架構與使用案例,意在使我們手上的服務不僅能持續減少維護成本、增加開發效率,甚至期許這個服務能不再只是公司的一個輔助性服務而成為一個能夠直接創造收益的產品(product)

不過任職於大公司後,我認知到最重要的事情是

要把為公司創造的價值延伸到公司外,否則離開公司後,過去創造的價值並不能為自己創造未來

雖然上面已經提到不少改善,但過去許多自行研究的想法與技術都因為時程或公司規劃而導致沒時間實作;離開公司後,以往的知識只能經由時間的摧殘後被慢慢的遺忘,更久以後甚至沒人知道我曾經花過時間學習那些被遺忘的知識,我確定這不是我面對我職涯的方式,也不想忘記我曾經花時間學的知識。所以我開始分享自己的所學跟心得,正是因為我希望自己的價值能提供給除了公司外的大家,甚至是未來的我自己。

自己是自己的老闆,而不管是公司或公司外的大眾,都是你的客戶

以上把自己本身當作企業在經營,我想是最符合自身體悟的一句話

在結束之前

工作至今將近5年,我一共經歷2份工作。兩份都是純軟體開發為主,雖然公司規模與部門的定位有相當大的差異,但要我由以上的經驗選一個最重要的核心概念,我想會是最後經營自己的概念

自己是自己的老闆,而不管是公司或公司外的大眾,都是你的客戶

觀察目前市面上成功的軟體公司,他們的主要業務幾乎都大相徑庭,因此可以說軟體業要成功靠的是「在軟體產業的獨特性」,而獨特性意味著,離開這家公司你所理解的domain knowledge幾乎對下一個老闆來說用處不多。

以我自身為軟體工程師來說,由自己後續的面試經驗,發現後續的面試官有興趣的多半是解決問題的思維與方式,鮮少會對原本公司的domain knowledge有任何的提問。

因此除了對所有公司都重要的人際相處技巧外,以我的經驗來說,要從自己能從每份工作得到的會是

能夠轉移(Transferable)至所有公司的通用技能組(Skill Sets)

說起來很抽象,其實就是單一的特定語言 之於 思考程式的方式、特定CI/CD工具 之於 Continuous Delivery的思考方法;由於篇幅的問題,技能的部分我會在下一篇文章中再分享給大家 👊。

就這樣啦!如果有機會,我想未來也會嘗試學習與分享思考方式這樣的概念給大家,雖然這樣的文章多半超難寫,希望以上的思考對未來的我或是任何看到這篇文章的人能有些幫助。

最後聲明,以上所闡述的都僅針對我處的職位與待的部門,不代表全公司的狀況,因此看到的大家參考就好。祝大家未來職涯順利愉快 😄

--

--

CraftsmanHenry

一段尋求軟體工藝的旅程。 A journey by a software developer looking for software craftsmanship.