資訊產業一直以來都是求職市場的大宗,高需求、高薪資、高競爭的條件讓許多畢業生每年都擠破頭,試圖進入這個產業,成為人人稱羨的軟體工程師;但是,剛接觸軟體工程師領域時,你可能會被前端工程師、後端工程師、 全端工程師這些常見的工程師職稱搞得一頭霧水⋯⋯
這些軟體工程師彼此的工作內容有哪些差異?各自的薪水待遇又是如何?本篇文章將帶你一覽這些常見軟體工程師職稱分別的月薪級距、工作內容、以及必備程式語言技術力與軟實力,讓你在選擇進修、轉職方向,或者在與技術團隊溝通協調時,更有一份參考依據。
本文目錄(本文篇幅較長,建議跳轉到有興趣的段落閱讀)
軟體工程師的日常業務
軟體工程師,顧名思義,在公司行號裡負責資訊工程系統、電腦軟體的設計、測試、安裝、修改與維護。白話文來說,就是至少精通一種程式語言,會撰寫電腦能理解的指令,讓電腦自己工作的人。
即使軟體工程師有多種分類,日常業務性質並沒有太大的不同,大致可分為三類:
一、釐清需求
大多數人對軟體工程師的刻板印象,是坐在電腦前埋頭苦寫。然而,為了節省開發階段的時間前,「定義問題,找出最適解」是很重要的。此時需要進行跨部門的需求釐清、開發策略的擬定,否則容易導致不必要的浪費時間。
釐清需求方面的業務通常佔軟體工程師工時的二到三成,工作內容包含但不限於:
- 與需求窗口(可能是 PM、老闆、業務等)蒐集並釐清需求
- 與團隊成員討論/評估技術上的可行性
- 與需求窗口確認,進入開發階段。
此外,「專案工程師」與「產品工程師」在釐清需求時的工作情境差異甚大。專案工程師通常會得到比較清楚定義的規格,因此釐清規格部分時間會比較少;而產品工程師得到的規格往往比較模糊,甚至要自己定義,所以需求討論一般會佔據比較多時間。
二、執行開發作業
進入開發後,工程師需要先與團隊成員討論規格與實作方式,例如前端工程師與後端工程師討論架構的設計與分工、API 串接格式等,接著才會實際寫 code。而在自己執掌的項目交付給需求窗口前,測試與除錯(debug)也是必要的,此外,功能交付後的教學與維護也由工程師負責。
此類工作內容包含但不限於:
- 討論/評估專案規格,以及技術可行的實作方式
- 寫程式,嘗試解決各種技術困難
- 測試與 debug
- 撰寫技術文件、教育訓練文件給 PM 或使用單位
- 後續的功能維護
上述的工作項目,不一定會流水線式順著進行,而看專案或企業的風格,常見的大分類有: waterfall, agile/lean, 隕石開發...。
➤ 延伸閱讀: 何謂 Scrum 敏捷開發?知名新創 PicCollage 告訴你
三、自我學習
資訊工程技術日新月異,隨時會有更好的程式寫法誕生,如何快速學習並且應用在當下任務情境,對軟體工程師至關重要,此類工作項目包含了解並且引入新技術、新套件、學習使用新的系統等等。部分業界工程團隊也會每週舉辦讀書會 (study group),共同吸收新知,工程師也時常為了更好的完成專案,往其他領域學習,例如前端工程師往後端、資料科學發展等。
➤ 延伸閱讀:
常見的軟體工程師種類,各自的工作內容、技能需求
常常被前端、後端這些名詞搞得霧煞煞嗎?好奇我們看到的軟體產品中,不同種類工程師分別負責哪些環節嗎?本段將常見的工程師職稱分為 7 大類,分別介紹他們的工作內容,以及所需的能力與技術。
類別(ㄧ)前端工程師
在網頁開發中,前端工程師負責一切與使用者介面相關功能的開發與維護,若將其工作內容大概分程兩大面向,即是建置合理的頁面讓使用者能與產品互動,以及讓資料能順利顯示在使用者面前。
- 需求能力:除了基本的邏輯思考與自學能力外,前端工程師是相對較需與人互動的工程師,觀察、溝通、表達能力也相對重要。此外建置頁面也需要運用到一定程度的美感與共感力,才讓頁面更容易被使用。
- 需求技術:前端有三個主要技術:HTML、CSS、JavaScript(ECMAScript),以及各式前端框架: React、Vue、Angular...etc.,此外還需要掌握 API 串接、RWD、Git 版本控制等技能。
➤ 延伸閱讀:如何成為前端工程師:什麼是前端 | 在夯什麼 | 在做什麼 | 有哪些特質
類別(二)後端工程師
後端工程師的主要任務,是開發伺服器端的應用程式,並根據不同專案的商業邏輯開發框架。當使用者在前端下指令時,後端工程師要使資料庫自動且有邏輯地撈取對應資料,並在頁面上呈現正確結果。
✨ 假設你今天要架設一個電商網站,網站該如何儲存正確的存貨數量?就有賴後端工程師建置網頁資料庫與演算法,將一切使用者的會員資訊、瀏覽紀錄、購物車等儲存下來。隨著業務的成長,後端工程師也需要持續優化網站的性能與系統架構,讓網站足以應付更多使用者。
- 需求能力:後端工程師更強調邏輯思考能力,才能有效提升網站效能。此外對商業模式的了解,能幫助後端工程師設計出更符合需求的系統架構。
- 需求技術:能使用後端語言或框架進行網站開發,如: Ruby / RoR、Java / Spring、PHP / laravel、Node.js / Express.js 等。基本的伺服器指令、網路知識、資料庫操作 / SQL、API 串接也都是需要具備的技能。
類別(三)Mobile 工程師
根據 《Digital Report 2020》的網路瀏覽裝置比例數據,在全球使用行動裝置比例高速成長的趨勢下,台灣網路用戶的手機與桌機佔比只有 7% 的差距,並且用手機瀏覽網路的比例穩定成長,顯示 App 開發工程師的需求將持續上升。然而,RWD(響應式網頁設計, Responsive Web Design)使得 Web 框架也能在不同行動裝置上正常使用,降低企業對於聘用專職 App 開發工程師的需求。以 Yourator 站上為例,Web 工程師與 App 開發工程師的招募比例約為 4:1。
App 開發工程師可分為兩種,分別是 iOS 工程師與 Android 工程師,入門門檻差異不大:
【iOS 工程師】
iOS 工程師最基本的工作內容便是透過 Swift / Objective-C 開發一款 iOS 應用程式。除了產品開發外,也需要熟悉 Apple 的上架流程,包括憑證及憑證描述檔等。並於上架完成後,持續維護 App,在每次 iOS 更新後同步修改老舊的程式碼,使其獲得支援,維持穩定且優質的使用者體驗。
- 需求能力:除了基礎的協作能力,程式開發能力外,由於是封閉生態系的關係,無論是更新的速度、幅度以及更新的效率都比 Web 或 Android 來得快速,相較起來更需要及時了解每次改版的變動,才能避免 App 因為更新而導致問題。
- 需求技術:熟悉 Swift / Objective-C,了解 iOS 開發平臺、框架原理、以及上架流程。
【Android 工程師】
與 iOS 工程師同理,Android 工程師也需要透過 Kotlin / Java / Android Studio 開發 App 產品與功能、解決設計及開發層面技術問題,同時導入新的 Android 程式、版本與各種新技術,帶來更流暢的效能。
- 需求能力:Android 開發給大家的印象是門檻低、上手快,但如何將多樣且碎片化的 Android 核心基本知識、結構、代碼規範都融會貫通,應用於新技術的開發上,整合能力尤為重要。
- 需求技術:熟悉 Kotlin / Java / Android Studio 和測試工具的使用。
類別(四)Infrastructure 工程師
Infrastructure 指的是資訊系統的基礎架構,各種 Infrastructure 工程師的目標都是把某個面向或所有面向的基礎架構處理好,讓執行於其上的系統可以順暢的運行。目前比較常見的 Infrastructure 工程師有幾種: DevOps 著重於讓開發團隊能順暢的接軌營運,SRE 著重在網站的可靠性,雲端架構師則著重在雲端服務的架構與維運。為了要讓組織內資訊系統能夠好好運行,Infrastrucure 工程師必須存在的重要角色。
【DevOps 工程師】
DevOps 其實是兩個英文字的縮寫,分別是 Development(開發)和 Operations(營運),原先其實是一個文化概念,後來才演變成專門的職稱。DevOps 工程師是敏捷開發盛行後應運而生的角色,負責消除開發與營運團隊之間的溝通與協作障礙,讓敏捷開發的成果能快速上線,打造流暢的部署與發布流程。
DevOps 工程師工作內容核心是建立自動化流程,進而縮短產品的交付周期,最常見的方式莫屬開發企業專屬的工具平台,甚至統整企業內部原有的零散工具,打造能覆蓋整個產品交付流程的工具體系。此外,無論是實體的工具與體制面的流程改進,都需要有人在內部持續推廣,監督是否落地,並持續探索潛在的優化點。
- 需求能力:DevOps 工程師需要掌握整個開發流程,大部分企業傾向使用聘用資深的候選人,於此,DevOps 工程師也是最需要溝通能力與同理心的工程職缺,沒有之一。
- 需求技術:Git、設定管理工具如 Puppet / Chef / Ansible、熟練 CI/CD 工具、容器化工具 Docker / K8S。
【SRE 工程師】
SRE 的全稱是為 Site Reliability Engineering,通常翻譯為網站穩定性工程師。SRE 工程師所需求的工具屬性與 DevOps 工程師非常類似,有許多專文用很長的篇幅解析兩者的差異。如果要簡單區分的話,SRE 的關鍵點在於使產品具有「高擴展性」、「高可用性」,例如當用戶數量暴增時,可以讓產品在不調整架構的前提下支撐服務、或者當系統掛掉時,負責讓服務在可推估的時間內恢復運作,工作內容與系統的變更與故障息息相關。
- 需求能力:確保軟體出現問題時能即時良好的解決,SRE 需具機動性與全局思考能力,因為每一步的修改與更新都可能引發不同的影響和問題,通常也屬於資深工程師擔任的角色。
- 需求技術:Linux、Shell Script、Cloud Services、熟悉 Terraform/CDK 等 (IaC)tools、熟悉 CI/CD 流程設計、Docker / Kubernetes 等容器化技術。
【雲端工程師】
雲端工程師是近幾年興起的職位,主要因為雲端服務(AWS、GDP)等蓬勃發展,企業能夠通過雲端平台節省各項資源,因此聘請雲端工程師負責建置與維護雲端平台,讓企業服務能在雲端正常運作。由於不斷上升的需求,加上 AWS/GDP 都有完整的線上認證機制,需求近幾年來不斷的上升。
- 需求能力:雲端工程師需要能夠進行雲端架構的部署/建置/優化/除錯/管理/監控等一系列流程,需要對基礎架構程式開發有熱情,同時需要熟悉資料存儲、網路連線的基礎,對於組織能力以及硬底子都是考驗。
- 需求技術:了解任一雲端服務、Linux、DNS、WAF、Shell script / Python / YAML 等任一腳本語言、Git...。
類別(五)QA 工程師
QA 工程師全稱 Quality Assurance Engineer,最主要的職責便是測試軟體產品的品質,因此 QA 工程師需要了解產品細節、流程與邏輯,也被稱為「世界上最瞭解功能細節」的職位。
QA 工程師的常見工作內容包含,透過手動,或撰寫自動化測試的方式檢查軟體產品,確保上架、紀錄並分析所得到的結果、建置與管理測試項目(Test Cases)資料庫,同時不斷優化測試流程,讓產品能更敏捷的上線。
- 需求能力:首要能力當然是能細緻了解產品的細心與耐心、能夠策劃測試項目的分析能力、以及對於與工程師&PM 的溝通能力。此外,面對已設定好與準備發佈的軟體,QA 工程師需具備逆向思維的能力,想到一般人想不到的狀況進行假設與操作,才能排除軟體中更深層次的 Bug。
- 需求技術:運用 UFT / QTP、Katalone、Microsoft Coded UI 等工具撰寫自動化測試、熟悉 Azure DevOps / TFS 等 QA 工具、SQL、熟悉資料庫相關操作 ( MongoDB/Mongoose, MySQL...等 )...。
➤ 延伸閱讀:從幾乎不會任何程式語言,到國際 App 新創第一位 Release Manager:QA 工程師的成長之路
類別(六)Data & AI 工程師
數據概念的興起,及其背後對業務成長的影響潛力,讓企業組織紛紛投入預算,組織內部的數據團隊,其中最熱門的兩個軟體工程職種,分別是「資料工程師(Data Engineer)」及「AI 工程師」。
【資料工程師 Data Engineer】
Data Engineer 所負責的角色,是透過一系列程式技術維運企業內部的數據系統,方便蒐集與管理數據,並將原始數據轉換為可用資訊,讓團隊內的 data scientists、business analysts 能夠使用。Data Engineer 也是相對新興的領域,單就掌握的技能樹而言,跟後端工程師有一定程度的重疊,也有部分企業會直接訓練內部的後端工程師接觸數據知識。
- 需求能力:首先必須具備基本的軟體與 data engineering 知識,對於資料素養也十分講究,例如是否清楚資料的屬性與定義,對資料清理、ETL 工具的熟悉程度等。此外,大部分公司行號的 Data Team 規模相對軟體開發團隊小上不少,所有能夠跨越傳統 Data Team 的執掌,勇於承擔挑戰並學習的心也是必備的。
- 需求技術:SQL、至少一種程式語言能力(Java / Python...)、Hadoop / MapReduce / Hive / Spark 等大數據處理相關工具、Docker / Kubernetes 等容器化技術...。
【AI 工程師】
有了一定量體的數據作為基底,就能嘗試建立模型,模擬人類的行為路徑,此時就開始需要 AI 工程師的協助。AI 工程師通常會透過機器學習(machine learning)、深度學習(deep learning)推演行為,從中得出足以影響決策的商業洞察。
AI 工程師的日常業務主要包含業務主要包含開發、測試、並部署 AI 模型,滿足組織內部不同需求方,協助他們理解 AI 模型,實際運用於內部決策,此外也需要負責資料數據結構建置相關工作。根據需求技術的不同,企業也會單獨招聘機器學習工程師、深度學習工程師等。
- 需求能力:AI 工程師需要同時掌握人工智慧、程式語言與資料科學三種高門檻的學問,並能透過它們實際解決問題,帶來有用的商業洞察,對學習能力、甚至溝通能力都是一種挑戰。
- 需求技術:Python / R / Java / C++ 等程式語言、線性區別分析、Hidden Markov models / Naive Bayes / Gaussian mixture models 等 AI 模型、Hadoop / MapReduce / Hive / Spark 等大數據處理相關工具...。
類別(七)區塊鏈工程師
區塊鏈工程師的需求在這兩年極速上升,也促使許多網頁開發工程師跳入這艘大船學習新技術。
目前區塊鏈工程師的工作項目主要能分為兩種領域,第一種是開發公有鏈(公共區塊鏈)的工程師,技術難度高,需要更底層的程式語言、密碼學等知識。第二種則是負責撰寫智能合約開發 DAPP(去中心化應用程式),同時也需要與傳統前後端介面 API,成為成為消費者真實可用的產品服務。
- 需求能力:區塊鏈是個嶄新的領域,有一定的程式語言基礎都可以考慮嘗試。但也因為很新,許多底層技術尚未穩定,打造出來的服務或產品,如沒有隨著跟新作出修改,常常會無法運作。因此超群的學習力與應變能力,以及對於區塊鏈底層觀念的認可十分重要。
- 需求技術:SOLIDITY 等能夠撰寫智能合約的程式語言、NODE.JS / JAVA / PYTHON 等可以串接 DAPP 的程式語言、基礎密碼學、分類帳、共識算法等區塊鏈底層知識。
*怎麼沒有全端工程師?全端工程師的真正定義:
如果你瀏覽過 Yourator 站上軟體工程相關的職缺頁面,也會經常看到「全端工程師」這個職稱。事實上,全端工程師比較像是個通稱,一般全端工程師指的是網頁前端+後端的開發,但依據專案或產品需求,有些全端工程師也有可能是 App + 後端、前端+App+後端等職能。
近十年隨著軟體技術高速發展,並在新創公司強調 MVP (Minimum Viable Product, 最小可行性商品)的潮流下,全端工程師能快速打造出產品 prototype,並在變動的新創環境的隨時支援任何產品開發各個環節,是相當搶手的人才。
- 需求能力:因為需要同時掌握兩項職能,考驗全端工程師的機動性與自我學習力,以及對 IT 技術的熱忱。
- 需求技術:請參照上述前後端以及 Mobile 工程師的需求技術
綜上所述,大部分新手想轉職成為軟體工程師時,都會以「成為合格的前端工程師」為初步的職涯目標,不僅上手門檻較低,部分視覺設計專業的求職者也能發揮所學,提升自己的附加價值,但起薪相對較低。因此,如果在學習過程中意識到對於軟體開發的天賦及熱忱,可以繼續朝後端、全端等軟體工程相關職務邁進。
常見的軟體工程師分別的薪水待遇
看完落落長的工作內容,你一定會好奇:「他們各自的薪資待遇怎麼樣呢?」。Y 小編也整理了站上的薪資數據,分別列出上述職位的平均年薪範圍。
依目前站上資料統計顯示,薪資待遇最高的是「行動裝置開發」,緊追在後的是近年的熱門趨勢「資料工程/機器學習」,以及通常需要由資深工程師擔任的「Devops / SRE 工程師」。
而雲端工程師與區塊鏈工程師都是近年興起的領域,薪資級距落差較大,本次不納入統計,可以到 Yourator 的職缺頁面瀏覽大致的薪資範圍。
(定義:平均下限~平均上限。統計時間:2023/11)
➤ 想看看職缺?歡迎瀏覽:
該如何選定求職方向?怎麼確定自己是否適合當軟體工程師?
基本介紹各種類工程師的工作內容後,想成為軟體工程師的你,心頭一定會冒出更多疑問:「我該往哪種工程師邁進?/我的第一個程式語言該選哪個?」
對於初心者而言,與其看著薪資、招募比例糾結半天,不如先「找尋一個能讓你學習程式的理由」,可以與朋友組成專案,學習最適合專案的語言、或是參與社群,學習最容易取得學習資源的語言。專一深耕其中一項後,再瀏覽工程類別職缺的 JD (工作內容),篩選出適合的職缺,並補足尚未完成的技能樹。
什麼人格特質才能勝任軟體工程師?
資深的軟體工程師普遍認為,對邏輯與流程的注重是工程師最基本的技能,當今的電腦設計、程式語言以流程控制為主體,如果想成為工程師,邏輯能力卻不及格,很難繼續往下學習。
此外,耐心與堅持是擔任工程師的必備特質,擔任工程師不免會遇到需要維護程式碼、重複做公司舊有程式工具的時候,如何在繁瑣的過程中尋找成就感,或是建構一個新的自訂義解決方案,優化整體系統,都是一種練習與挑戰。
另一個要點則是對於問題本質的好奇心,如果好奇自己適不適合當工程師,不妨觀察自己在日常生活中遇到麻煩時,是否會習慣抽絲剝繭,把各種可能出錯的環節一個一個排除,直到找到問題根源,並對於得到解答感到興奮以及滿足。如果你擁有這種性格,在轉職軟體工程師的路上一定更加順利。
此外,Y 小編常聽到的一個提問是:
「我是文組出身/我的數理很爛,我是不是不適合當軟體工程師?」
事實上,如果在 Google 搜尋「文組 工程師」,你可以看到無數的成功的轉職案例,因此,與其因為背景而自我懷疑,不如回歸人格特質,並且實際接觸基本學問,才能能更全面做判斷。
資訊時代來臨,每位工程師都是時代的推手,希望這篇文章有幫助你更了解工程師們的工作內容,做出更好的職涯選擇,或者在工程團隊裡找到對的人溝通。
➤ 延伸閱讀: