一直以來,許多人羨慕著軟體工程師的高薪高報酬,許多其他產業的人也想要轉職進入這個領域。
然而,就像任何事物一樣,有光明的一面就有黑暗的一面。在決定投入時間和金錢等成本之前,不如先瞭解一下軟體工程師的真實面貌,再來決定加入也不遲喔~
軟體工程師工作內容
「軟體工程師」其實是一個很概括的職稱,實際上在徵才網站上的許多職缺,都可以算是軟體工程師的職稱,包含有:
- 網站開發工程師
- 系統工程師
- 專案工程師
- 應用程式 (App) 開發工程師
- 後端工程師
- 全端工程師 …… 等
軟體工程師的核心工作之一就是開發與維護程式碼,不同的職位及各軟體工程師的工作內容,會受到各系統、專案所使用的程式碼或專精領域的影響,而訂定出不同的實際職稱及工作內容,瞭解了這些職稱之後,我們來看看它們工作內容的差異,以下列出比較常見的工程師職稱,實際工作內容仍需以公司在徵才網站或面試過程中的說明為準。
- 網站開發工程師,專注於開發和維護網站,通常使用 HTML、CSS、JavaScript 等技術,可能專攻前端或後端開發。
- 系統工程師,通常負責設計、實施和維護系統(如企業資源管理系統、人力資源系統等),需要具備清晰的商業邏輯知識。
- 專案工程師,主要負責協調和管理專案的技術開發,並與 PM 確保專案按時完成,可能參與技術決策和問題解決。
- 應用程式開發工程師,專注於手機應用程式的開發,常用技術包括 iOS、Android,或跨平台技術。
- 後端工程師,專注於開發後端邏輯和伺服器端應用程式,負責資料庫、伺服器架構、API 等,偏重於伺服器端技術開發。
- 全端工程師,具備前端和後端技術,能夠從頭到尾開發完整的軟體系統。這是工程師中角色範圍最廣的,需具備多方面的技術技能。
不同的工程師需要使用不同的程式語言來開發,而每個工程師擅長的程式語言也會影響他的職涯規劃,因此,先決定你想開發哪種類型的軟體,會比較容易規劃學習計畫。
軟體工程師工作內容佔比
雖然軟體工程師的核心工作是開發與維護程式碼,但除了寫程式,還有很多時間是在做其他事情。
以下是一個後端工程師一天工作議程的範例:
- 9:00 |檢視前一天未完成的工作,及規劃今日進度
- 9:30 |與團隊報告今日計畫,並討論是否有需要協助的事項
- 10:00|專案 A:程式開發
- 12:00|處理客服發出的程式 log
- 12:30|午休
- 13:30|開發會議
- 14:30|專案 B:針對測試結果除錯、修復功能
- 16:00|專案 C:閱讀規格書,研究新技術
- 17:00|開發會議
- 17:30|今日工作收尾,進度更新
- 18:00|下班回家
- 20:00|接到系統當機的突發通知,需緊急處理
從業務性質來看,實際上各業務的工作佔比可能為:
- 開發新程式|20%
- 除錯找問題|50%
- 閱讀規格書|10%
- 會議報告|20%
根據不同的職位、職級可能會影響工作比例,這個比例只是先幫助大家容易想像,
軟體工程師的工作挑戰
軟體業的性質有二,一是當公司服務的功能、伺服器出問題,或專案延遲時,客戶不會管你是否已經下班,或最近多忙,你都得犧牲掉原本的休息時間處理;二是由於軟體業產業需求變化快速,你很可能必須一直學習、有所產出,來保持競爭力,因此你「下班」之後還有可能得花時間在以下的事項:
- 緊急問題處理
- 死線趕工
- 處理自己的 side project
另一大挑戰是,你可能會覺得軟體工程師工作內容中最大佔比應該是寫程式,但實際上每天真正在寫新程式碼的時間大約只占 20%,剩下的時間都在抓蟲 (bug),頭疼地思考:「那隻蟲到底在哪裡!!(翻桌)」。
新寫出的程式碼就算能一次通過,還是會不免驚訝:「我亂寫的居然運作了?」有時候儘管一切都順利,卻會在加了一個小功能,整個系統突然崩壞,最慘的是你有時候根本不確定 bug 是因為哪一天寫的程式所引起的,這時你就得回去追訴問題錯誤源頭是什麼,今天找不到那隻蟲,明天還得再繼續戰鬥。
上述的場景如果已經讓你夠苦惱了,那還有另一個會讓你扼腕的事 —— 無止盡的會議,不管是使用者會議、主管會議,還是 PM 會議,你都可能會遇到莫名其妙的需求,此時如果有好的 PM 或主管,他們會幫忙過濾無理需求;若遇上比較「不講武德」的 PM 或主管,你可能就得加班處理。
此外,閱讀文件也是工程師工作的一部分,因為魔鬼藏在細節裡,尤其是當你面對沒有技術背景的 PM 提出的需求時,你必須具備足夠的敏感度來找出問題並解決它。
軟體工程師常用程式語言
此外,技術日新月異,用戶可能會要求你將最新的技術加到系統中。既然是最新技術,工程師當然不可能天生就會,只能花時間學習才能滿足需求,所以工程師是一個不斷學習才能跟上時代的職業,而且學習速度要非常快,許多程式語言可能一年內更新多次,為了適應新版本,學習新語法也是必須的。
以常見的程式語言為例就包含有:
- 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)。
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++
推薦自學資源
軟體工程師薪水區間
最後,薪水也是非常現實的考量,這麼多人對於工程師如此趨之若鶩,因為這個行業有著高薪的光環。然而,並非所有工程師都能年收百萬。
大多數大學畢業的新鮮嫩肝工程師或轉職工程師大多數的年收為 50 萬,若是你累積了一定的經驗或擁有足夠的 Side projects 可以拿出去說嘴,才有可能為自己殺出一片天,另外 Side project 是對於工程師的能力表現非常重要的工具之一,畢竟在公司花了大約 80% 的時間都在跟蟲蟲或人類作戰,白天哪有時間去累積作品表現能力?
(薪資結構可另外參考 104 薪資情報:https://guide.104.com.tw/salary/cat/2007001000?type=catjobs&salary=monthly )
小結
至於我,為什麼面對這樣的生活超過 10 年?因為我的夢想是透過我的能力幫助人們過上更好的生活。如果我開發的系統能幫助你做出更明智的決策,或我的軟體能提升你的生活效率,對我來說,這就是最值得的成就了。
寫程式不僅僅是編碼,機器、系統軟體這些東西存在的目的是為了讓人類生活更美好。當然,能利用這項能力賺錢,無疑是錦上添花。如果你只是追求高薪,還有許多其他高薪職業,不一定要寫程式;但如果你找到了寫程式的熱情和動力,歡迎加入工程師的行列~
本文作者介紹
Saori|FMCG 外商技術副理
經營有個人部落格「人生探索手扎」、Podcast「職涯探索家」。
–
–