軟體工程師光鮮亮麗的背面

一直以來,許多人羨慕著軟體工程師的高薪高報酬,許多其他產業的人也想要轉職進入這個領域。然而,就像任何事物一樣,有光明的一面就有黑暗的一面。在決定投入時間和金錢等成本之前,不如先瞭解一下軟體工程師的真實面貌,再來決定加入也不遲喔~

軟體工程師

軟體工程師工作內容

軟體工程師」其實是一個很概括的職稱,實際上在徵才網站上,你會看到以下可能都算是軟體工程師的職稱,包含有:

  • 網站開發工程師
  • 系統工程師
  • 專案工程師
  • 應用程式 (App) 開發工程師
  • 後端工程師
  • 全端工程師 … 等等

軟體工程師的核心工作之一就是開發與維護程式碼。不同的程式碼應用在不同的系統或專案上,或者因為專精領域的不同,導致工程師的職稱也有百百種。

瞭解了這些職稱之後,我們來看看它們工作內容的差異~

以下列出比較常見的工程師職稱,實際工作內容仍以公司在徵才網站或面試過程中的說明為準喔。

  • 網站開發工程師:專注於開發和維護網站,通常使用 HTML、CSS、JavaScript 等技術,可能專攻前端後端開發。
  • 系統工程師:通常負責設計、實施和維護系統(如企業資源管理系統、人力資源系統等),需要具備清晰的商業邏輯知識
  • 專案工程師:主要負責協調和管理專案的技術開發,並與 PM 確保專案按時完成,可能參與技術決策和問題解決
  • 應用程式開發工程師:專注於手機應用程式的開發,常用技術包括 iOS、Android,或跨平台技術。
  • 後端工程師:專注於開發後端邏輯伺服器端應用程式,負責資料庫、伺服器架構、API 等,偏重於伺服器端技術開發。
  • 全端工程師:具備前端和後端技術,能夠從頭到尾開發完整的軟體系統。這是工程師中角色範圍最廣的,需具備多方面的技術技能。

不同的工程師需要使用不同的程式語言來開發。對軟體工程師來說,擅長的程式語言也會影響他的職涯規劃。因此,先決定你想開發哪種類型的軟體,會比較容易規劃學習計畫。

雖然軟體工程師的核心工作是開發與維護程式碼,但除了寫程式,還有很多時間是在做其他事情。以下是一個後端工程師可能的一天:

綜合來看,工作比例可能如下:

  • 開發新程式:20%
  • 除錯找問題:50%
  • 閱讀規格書:10%
  • 會議報告文書行政等等:20%

根據不同的職位、職級可能會影響工作比例,這個比例只是先幫助大家容易想像。

軟體工程師的工作挑戰

當公司服務的功能、伺服器出問題,或專案延遲時,客戶不會管你是否已經下班,或最近多忙,你都得犧牲掉原本的休息時間處理;另外,由於軟體業產業需求變化快速,你很可能必須一直學習、有所產出,來保持競爭力,因此你「下班」之後還有可能得花時間在以下的事項:

  • 緊急問題處理
  • 死線趕工
  • 自己的 side project

如果你想作軟體工程師的原因是你想寫程式,那你將面臨另一個挑戰,實際上每天真正在寫新程式碼的時間大約只占 20%,剩下的時間都在抓蟲 (bug),頭疼地思考:「那隻蟲到底在哪裡!!(翻桌)」;新寫出的程式碼能一次通過,還會驚訝:「我亂寫的居然運作了?」有時候儘管一切都順利,但只因為加了一個小功能,整個系統卻崩壞。最慘的是你有時候根本不確定 bug 是因為哪一天寫的程式所引起的,這時候你就得追蹤問題到底是什麼。今天找不到那隻蟲,明天還得再繼續戰鬥。

上述的場景如果已經讓你夠苦惱了,那還有另一個會讓你扼腕的事 —— 無止盡的會議,不管是使用者會議、主管會議,還是 PM 會議。使用者的需求可能莫名其妙,如果有好的 PM 或主管,他們會幫忙過濾無理需求;若遇上比較「不講武德」的 PM 或主管,他們會要求你不擇手段完成需求。閱讀文件也是工程師工作的一部分,因為魔鬼藏在細節裡,尤其是當你面對沒有技術背景的 PM 提出的需求時,你必須具備足夠的敏感度來找出問題並解決它。

咦,下班後還會接到系統當機的電話喔?是的,不只是下班,週末也會。 視你負責的系統營運時間,如果系統營運時間為 24 小時,那就是 24 小時都必須有人負責系統營運狀況,有些公司會採用值班的方式,有些則是誰開發誰負責。

這就是我們的一天。

軟體工程師常用程式語言

此外,技術日新月異,用戶可能會要求你將最新的技術加到系統中。既然是最新技術,工程師當然不可能天生就會,只能花時間學習才能滿足需求。所以工程師是一個不斷學習才能跟上時代的職業,而且學習速度要非常快,許多程式語言可能一年內更新多次,為了適應新版本,學習新語法也是必須的。

以常見的程式語言為例:

  • JavaScript: 更新非常頻繁,幾乎每月都有新的 ECMAScript 版本釋出。
  • Python: 更新頻率較穩定,每1-2年發布一個大版本。
  • Java: 更新頻率相對較慢,但每個版本都帶來許多新功能和改進。
  • C++: 更新頻率較慢,但每次更新都經過嚴格測試,確保穩定性。

軟體工程師特質所需

基於上述的工作內容及性質,你可以評估你是否擁有以下特質,來初步判斷是否適合軟體工程師的工作:

  • 好奇心強:工程師需要對新技術和工具充滿好奇,樂於探索解決問題的新方法,並持續學習新技能。
  • 問題解決能力:喜歡面對挑戰並享受解決複雜問題的人非常適合,因為軟體開發過程中經常會遇到各種技術難題,需要具備邏輯思維和分析能力。
  • 耐心與細心:寫程式碼、除錯和測試需要高度專注和細心,要能夠處理大量細節,並在面對複雜問題時保持冷靜。
  • 創造力:軟體開發不僅僅是技術工作,還需要創造性思維來設計創新解決方案,尤其是在設計系統架構和使用者體驗時。
  • 自律與持續專注:軟體開發通常需要長時間獨立面對程式碼開發工作,自律性高的人較能夠自我管理並專注完成任務。
  • 適應變化:技術領域發展迅速,適應變化並樂於學習新技術的人會在這個職業中更有成就感。

常見程式語言介紹

至於市面上這~~~麼多程式語言,如果你想轉職成為工程師,應該從何著手呢?
首先,你應該先瞭解自己,對於什麼樣的產品是比較有興趣或熱情的。
有些人喜歡線上音樂播放軟體,有些人喜歡遊戲想要製作遊戲,有些人喜歡手機 app 隨身攜帶的感覺,有些人喜歡將任何事情自動化。
不同的程式語言會有他不同的原生特性以及該程式語言擅長的領域。


這邊舉出幾個比較常見的程式語言擅長的領域:

C#

  • 桌面應用程式(如Windows Forms、WPF)。
  • 企業級應用程式開發(特別是在微軟技術堆棧中)。
  • 遊戲開發(Unity 引擎主要使用 C#)。
  • Web 應用程式開發(ASP.NET)。

JAVA:

  • 企業級應用程式開發,特別是後端伺服器。
  • Android 應用程式開發(雖然 Kotlin 現在更流行,但 Java 依然被廣泛使用)。
  • 大型系統和分散式系統的開發(例如金融系統)。

Python:

  • 資料科學、機器學習(使用 Pandas、NumPy、TensorFlow 等類別庫)。
  • 自動化腳本和工具開發。
  • Web 開發(Django、Flask 等框架)。
  • 網路爬蟲和數據分析。

Javascript:

  • 前端開發(瀏覽器端開發,如React、Vue、Angular)。
  • 後端開發(使用 Node.js 進行伺服器端編程)。
  • 全端開發(配合 JavaScript 框架進行全端應用開發)。
  • 移動應用開發(React Native、Ionic等)。

C++:

  • 系統軟體開發(操作系統、驅動程式、嵌入式系統)。
  • 遊戲開發(特別是遊戲引擎和高效能應用程式)。
  • 高效能應用(如金融交易系統、圖形處理)。

PHP:

  • Web 開發,特別是動態網站和內容管理系統(如 WordPress)。
  • 小型到中型網站的快速開發。
  • API 開發和資料處理後端系統。

Ruby:

  • Web 應用程式開發(特別是快速原型和 MVP 開發)。
  • 自動化腳本和輔助工具。
  • API 開發和後端應用。

先瞭解你夢想中開發的產品,或你想要做的事情,然後選擇相應的程式語言作為切入點。
以下是一些比較常見的學習建議:

  • 想開發遊戲:C# 和 Unity
  • 想開發手機應用程式
    • Android: Kotlin 或 Java
    • iOS: Swift
    • iOS & Android: React Native 或 Flutter
  • 想做網站或網頁應用:
    • 網站開發:HTML/CSS 和 JavaScript 是基礎。前端框架例如 React 或 Vue.js
    • 後端伺服器開發:Node.js、Python、PHP 或 .NET。
  • 想做資料分析機器學習:Python
  • 想做自動化工具爬蟲:Python
  • 想做系統軟體嵌入式系統:C 或 C++

Saori 推薦的自學資源:

軟體工程師薪水區間

最後,錢錢也是非常現實的考量,這麼多人對於工程師如此趨之若鶩,因為這個行業有著高薪的光環。然而,並非所有工程師都能年收百萬。

大多數大學畢業的新鮮嫩肝工程師或轉職工程師大多數的年收為 50 萬。
若是你累積了一定的經驗或擁有足夠的 Side projects 可以拿出去說嘴,才有可能為自己殺出一片天。
Side project 是對於工程師的能力表現非常重要的工具之一,畢竟在公司花了大約 80% 的時間都在跟蟲蟲或人類作戰,白天哪有時間去累積作品表現能力?

※ 薪資情報整理:最新求職資源整理

最後,Saori 想說

至於我,為什麼面對這樣的生活超過 10 年?因為我的夢想是透過我的能力幫助人們過上更好的生活。如果我開發的系統能幫助你做出更明智的決策,或我的軟體能提升你的生活效率,對我來說,這就是最值得的成就了。

寫程式不僅僅是編碼,機器、系統軟體這些東西存在的目的是為了讓人類生活更美好。當然,能利用這項能力賺錢,無疑是錦上添花。如果你只是追求高薪,還有許多其他高薪職業,不一定要寫程式;但如果你找到了寫程式的熱情和動力,歡迎加入工程師的行列~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *