蒼時弦也
蒼時弦也
資深軟體工程師
發表於

2022 年在台灣的軟體工程師需要什麼?

最近剛好在跟以前一起工作過的朋友聊到薪資的問題,提到產品設計師的薪資水準比軟體工程師的最高薪資,大概差了一倍左右,這讓我覺得非常疑惑。

以一間做產品為主的公司來說,產品的設計會嚴重的影響公司收入,但拿到的待遇卻沒有比工程師還高,是不是哪裡出了問題?

重視的部分

一般來說,通常只要是該公司最賺錢的單位通常就是公司最重視的部分,因為這樣非常直覺。實際上有點奇怪,畢竟重視業務販賣產品,而不是注重在產品本身能產生的價值上似乎不是個好主意,但我猜很多人都遇過這樣被業務單位推著往前開發的狀況。

同樣的,在聊天中也聽到了「設計」不被重視的看法,這也反應了 UI/UX 和產品設計師在薪資上的極限。不過,也有提出是不是加入了「管理職」薪資就能夠極大提升呢?至少就我的角度來看,這不是一個好現象,或者說不應該是增加待遇的方法。

我認為,某方面來說我們過去在製造業的經驗中學到了某種「原料放進去就會產生利潤」這樣的經驗,也因此會很自然的套用到軟體產業上,變成「想法放進去就會變成產品賺錢」這樣的想法,那麼在快速變化的軟體世界中,找到「技術好的工人」似乎就是賺錢的方法,最後我們這些「有即戰力的工程師」似乎就變成新時代的友好技術的師傅這樣的角色。

我猜大家應該都聽過那種技術好的老師傅收入其實很不錯的案例,以現在工程師的生態系來說是不是也有點類似這樣的感覺呢?

缺少的設計

軟體工程師通常被稱為「工程師」或者「軟體設計師」然而我們大多時候真的有在進行「工程」或「設計」的工作嗎?大多數時候我們可能沒有做,或者幾乎沒有認真做。

以大多數人知道的建造房子流程,也是從建築師(設計師、工程師)的設計開始,然後許多工人照著指示把房子蓋出來。是不是發現我們的「工作」不是前者「設計師」或「工程師」的角色,反而是後面工人的角色?

這也是我在 COSCUP 2022 的演講 - 我想慢慢寫程式該怎麼辦? 所點出的一個方向,假設我們想在軟體工程師這條路走下去,需要的是「思考」跟「想法」這跟技術沒有太大的關係,更多的是我們學會「思考如何設計好程式」的問題。

技術的迷思

用技術判斷能力其實是非常簡單的一種方式,但往往都不是最好的辦法。在過去的經驗中,我遇到過技術非常好卻不上擅長管理人、技術非常好卻沒辦法創造有效的價值等等各類情況。

如同被討論多年的「本科生」對於工程師是否更強更好的議題一樣,在討論「本科生」之前,我們需要先區分是一個學習了「電腦科學」對於「程式設計」有著想法的專業人士,還是單純「程式寫很快」跟「演算法很熟練」但不懂應用的人。

以大學教育的目的,需要的是前者,我也遇過很多「本科生」在程式設計跟電腦科學有非常強大的能力,確實會讓你有著「非本科身」差距這樣的情況。在現實的職場中,我們遇到需要「快速寫程式」跟「大量演算法問題」的情境,除非是在特定產業或者情況,我們更多時候都是在「設計」比較合理,在這樣的前提之下,我們比起技術更需要的是「設計的能力」這也是大多數人轉職後,一直卡關的主因。

我是主修多媒體設計,不過比起為了「把網站做好看」所學的設計,更有興趣的程式寫得更好,還常常被同學跟學弟妹誤會是跨系選修。同樣的,我自己在演算法這類技能上是非常弱的,然而我對程式語言、系統架構這類知識非常有興趣,因此幫助我成為資深工程師的是「設計軟體」的能力,而不是「強大的技術」即使表面上看起來都是「技術很好」

原則

回到前面的討論,我們還提到了「有些公司的設計注重實戰」跟「但沒有規則很難做事」這樣的議題,以往我確實也會在工作上尋找「規則」然而現在我認為需要的是「原則」這樣的東西,看起來類似卻非常不一樣。

在上過 LeSS in Action 的敏捷開發課程後,我發現「敏捷開發」本身是一系列的原則,以這些原則的前提構成了不同流派的敏捷開發方式,但最終都有著「專注於產品」這樣一個基本原則。也就是說規則不重要,而是做事的原則是什麼。這件事情上套用到一個人、一個團隊跟一間公司都是適用的。

基於這個角度來看,我們會發現那些經常修改需求、要求不合理時程之類的情況,都是一種「沒有原則」的表現,因為他們並沒有辦法根據某個原則判斷該用怎樣的方式處理,最糟糕的就是一間公司也沒有「原則」那麼做事起來就很混亂,這大概也是許多商管類型的書要我們訂立「核心理念」之類的目的。

了解這件事情後,我更加確定我想做的事情是什麼,也覺得大部分的公司自己應該都沒辦法待下去。因為我想做的是「探索可能性」這樣的方式,不論是「趕快交差了事」或者「專注改善產品」這些原則,都沒辦法很好得符合自己的目標,大概也是我會開始思考成為「技術顧問」這樣的角色的原因。

我們需要什麼?

首先,技術能力仍然重要,空有想法沒有技術是無法實現想法。但是,能幫助你賺到錢的永遠都是「有價值的想法」這件事情,因此「寫程式」是一種手段,怎麼善用這個手段達到目的才是我們需要學習的地方。

也就是說,我們除了技術能力作為基礎外,還需要像是「程式設計」這類能力,能夠去幫助你所在的公司規劃適合的系統、設計能夠長久使用的軟體等等,才是展現工程師價值的所在。如果你還不熟悉這些,從前面提到的「工人」角色開始跟著有能力的前輩學習就可以。這也是我一直覺得自己對「程式設計師」的角色是「職人」的方式去看待,目標在設計出優雅、容易維護的程式,而不是單純的追求快速的實作出功能。

在這個有大量工程師競爭的時代,想要「更進一步」需要的是學會思考、多做嘗試跟尋找「有原則」的環境讓自己能朝著自己的理想前進才是我們真正需要的。

「資深」到底什麼一直困擾我很久,這幾年累積的不少經驗來看倒是逐漸清晰。畢竟,把東西做出來每個人只要經過訓練就能做到,要如何「設計」出能解決問題(符合客戶需求)的東西,就是一項很專業的技能,不論是設計、程式或者其他職業都一樣。