---
title: "2022 年在台灣的軟體工程師需要什麼？"
date: 2022-08-19T00:00:00+08:00
publishDate: 2022-08-19T00:00:00Z
lastmod: 2022-08-18T16:25:06+08:00
tags: ["工程師","經驗","設計","職涯"]
toc: true
permalink: "https://blog.aotoki.me/posts/2022/08/19/what-the-programmer-need-in-taiwan-in-2022/"
language: "zh-tw"
---


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

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

<!--more-->

## 重視的部分{#the-important-part}

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

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

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

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

## 缺少的設計{#the-design-part-disappera}

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

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

這也是我在 [COSCUP 2022 的演講 - 我想慢慢寫程式該怎麼辦？](https://coscup.org/2022/zh-TW/session/WH3X8U) 所點出的一個方向，假設我們想在軟體工程師這條路走下去，需要的是「思考」跟「想法」這跟技術沒有太大的關係，更多的是我們學會「思考如何設計好程式」的問題。

## 技術的迷思{#the-myth-of-skill}

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

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

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

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

## 原則{#principle}

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

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

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

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

## 我們需要什麼？{#what-is-we-need}

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

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

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

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

