程式出路大解析|資訊業界前輩經歷為你解惑

本線上講座舉辦於 2021.09.10(五)

文章節錄並整理講座分享的精華內容,另有當日直播影片可以觀看。

 
我對程式有興趣,應該要讀資工系然後成為工程師嗎?可是一直寫程式會不會很無聊?工程師好像出路很廣,但聽說都在瘋狂加班與熬夜… 你的煩惱就讓 CodingBar 來解惑!

九月份主題講座,我們邀請曾任於電商、遊戲、互聯網、資訊安全等領域,現在是吉達思科技總經理的 Gary 朱懿中先生,與各位分享他的精彩程式生涯:「無論職務、角色怎麼變,軟體工程師是我不變的斜槓!」機會難得千萬別錯過。

主講人

朱懿中 Gary —— 吉達思科技總經理

從大學就愛上了程式設計,超過 20 年軟體開發經驗,在電商、線上遊戲、資訊安全、物聯網等領域都有豐富的產業經驗。喜歡悠遊四海享受美食,足跡遍佈亞歐美三大陸,立志一輩子當個享受生活的軟體開發人員。

現職智能櫃解決方案專家 吉達思科技 總經理,快取寶前資訊總監。

主持人

林士翔 —— CodingBar 執行長暨創辦人

CodingBar 創辦人,曾任 BenQ、洋華光電等科技業管理職,在與世界各國人才交流的過程,深感台灣教育需要改變,才能培養出符合新世代的人才;因此創辦瑞比智慧科技 airabbi,以及青少年程式教育服務 CodingBar,希望透過科技翻轉教育,培養出具有國際競爭力的下一代!

精選文章:人工智慧AI時代來臨,下一代要怎麼避免被「取代」?

影音介紹:為什麼要學程式?科技教育大哉問 #01

Jerry 引言

我們今天非常高興邀請一個在軟體資訊界二十幾年,我以前的同事 Gary 來與大家分享,資工科系在學校到底念什麼?出了社會能夠做什麼?我想今天很多精彩內容應該是學校老師比較難與各位分享的業界實務經驗,有任何問題歡迎大家在聊天室提出!

 

一、軟體工程師是我不變的斜槓

我所經歷的資訊職涯

找到適合自己的程式出路

各位同學大家好,我是吉達思科技的 Gary,今天要跟大家分享我從大學畢業至今,已經二十四年的資訊職涯裡碰到哪些事情,以及如何在資訊這條路上,找到適合自己的職涯或者相關的學習方法。

在分享開始之前,你會需要有以下四點的認知:

首先,本次內容不會介紹如何開發或者實作,或是怎麼在考試中拿高分,這不是我的強項。

再來,資訊這條路不會有單一的狀況,因為每個人的狀態或優勢會不一樣,有的人可能邏輯或數學分析能力特別好,有的人可能組織管理能力特別好,有的人擅長資訊之外,也很擅長溝通,或者很知道如何表達自己或者使用者的需求。所以當每個人的強項不一樣,那大家會走的軟體職涯方向也會有所不同,我會就我自己看到的、帶領過的部門、面試過的應試者的狀態,來分享你的長處如何與軟體業界對接。

第三件事,大家要有個認知,資訊軟體是個快速變動的一個學科,也就是你高中、大學、研究所學完後,這項技能可以用五年、十年、二十年、三十年,但同時會需要不斷的學習新的知識,包含軟體開發的語言、軟體工程新的應用與方法,像是近幾年比較熱門的可能是 IoT 或者 AI 的應用。

最後,相信大家今天來參加這個講座,可能都知道資訊軟體是很有趣、生動,並且貼近大家的生活,所以希望你們對於資訊與軟體都有保持著熱情。

軟體工程師

先與大家簡單介紹我自己,我是吉達思科技的總經理,我個人覺得我的經歷還滿代表軟體工程師職涯會碰到的發展,吉達斯科技是個資訊創業的公司,我等於是在資訊應用裡面走到了自己創業的這段。

我做過家寧智慧的資訊長,也做過達煬科技的研發部協理、產品暨技術支援部的協理,大家一般認知的研發部,就是我們所說的 R&D(Research and Development),負責開發公司裡面的核心技術,我在的公司大部分都是資訊公司,所以那個技術就是軟體開發相關的一些應用。

所謂的產品暨技術支援,是從產品是否為市場上消費者所需要的,到產品已經上市後,可能會碰到消費者反饋回來的問題,需要去做後續的修正或排除。

學歷的部分,大學的時候念資訊工程,研究所念資訊管理,大家可能會想知道到底要唸資工還是資管?後面我們會用資工跟資管的課表為大家解說。

black cat holding persons arm
Photo by Ruca Souza on Pexels.com

電商網站

我在 1999 年正式進入職場,那時候資訊相關最熱門的領域是電子商務、網際網路相關的網站,對各位來說是一個歷史,就是 .com 電商泡沫的時候,那時候每一家公司都想變成電子商務的公司,所以當時這類型的軟體人員需求是相當多的,並且還沒有很好的軟體開發工具或者 IDE(整合開發環境),常常是用文字編輯器在做開發,大家可以想像用 notepad++ 或者是 Archive Editor 這樣的文字編輯器在寫程式。

遊戲產業

為什麼當初會從事軟體行業?當初怎麼去做選擇的呢?其實我跟大部分軟體行業的男生同學們狀況很像,很多都是從玩遊戲開始,才想要進入這個領域。所以在 .com 電商泡沫之後,我就選擇了也很吸引我的遊戲領域,我進入了大宇資訊,它們主要的遊戲大家應該有聽過,像是大富翁、軒轅劍、仙劍奇俠傳,可能還有部分有存活或者有同學有玩過,那時候是台灣剛開始有大型線上遊戲,還沒有手遊,都是在電腦上面進行的遊戲,收費模式也不太一樣,幾乎都是包月制的方式,現在大部分是免費下載遊戲玩,但有很多課金陷阱,買一些裝備啊、加一些速度。

我進入遊戲公司之後過得很開心,白天上班玩線上遊戲,下班也在玩線上遊戲,只是上班的時候是玩公司的,下班後玩別的,那時候很流行像是世紀帝國那種遊戲,不過那時遊戲產業才剛興起,遊戲內所需的像是 3D 立體等等核心引擎技術,主要都是來自於日本,所以在 18、19 年前的遊戲大部分都是代理,而非自己研發的,也因為產業的脈動與模式,我後來離開了這間公司。

當時的我想要去軟體公司,我希望我做的軟體能夠影響到這個產業,或者對真正想用這個軟體的人達到足夠的影響力,可是那時候遊戲大部分都是代理日韓的軟體,所以軟體工程師的角色比較偏向周邊的角色,比較像是 GM 遊戲管理的系統處理,例如說有個 +10 的武器不見了,就要去找出來哪裡出問題然後補給玩家,所以比較多的是遊戲管理或者網頁行銷的領域,我覺得沒有進入到真正軟體的核心領域,才決定離職。

turned on flat screen monitor
Photo by Lewis Kang’ethe Ngugi on Pexels.com

資訊安全

在差不多 15 年前,網路的應用越來越多,資訊安全備受重視,剛好當時的前同事,也是之前的主管,邀請我一起去創立一個新的跟資訊安全相關的公司,我們做的就像防毒軟體那樣裝在大家的電腦裡,但主要是給公司管理內部企業的同仁,例如說:能不能隨便用個 USB 就把機敏資料搞出去、連到網路上能不能連、或者自己偷安裝某些軟體等狀況。

那時候為什麼會覺得資訊安全有趣呢?因為資訊安全產品的本質就是軟體,而資訊安全也是屬於一直變動的領域,以前大家可能比較在意網頁的安全,現在可能在乎 4G、5G 連線的安全、在乎 Wi-Fi 的安全,都是隨著科技發展在日益變動,所以是很有趣的,軟體也能幫上很大的忙。

資訊安全做了十多年以後,公司也做了一些成就,身上也累積了一些財富,因緣際會有個朋友說想做跟 IoT 互聯網有關的,任何東西可以聯網的都可算是 IoT 的範圍,例如說農業生產,可以透過偵測器來蒐集土質或水源狀況這些資料,並且透過網路回報給管理員知道,IoT 也就是 Internet of Things,把所有數據或資料都傳到網路上。

那我們做的東西叫做智能櫃,不知道大家在路上有沒有看過 中華郵政i郵箱,是用來放包裹用的,也就是說當你在電商買了包裹之後,是可以放在i郵箱裡面,讓消費者自行去領取,中華郵政的i郵箱現在已經有兩千四百座,遍佈在全台灣,像這樣的東西是需要聯網,也會應用到資訊安全,也跟軟體應用有很大的關係。

你們可以從我的經歷發現,不論在做什麼事情,軟體是不是這個事業的本質很重要,我自己會認知我就是一個軟體工程師,不管我有沒有在寫 code,大家可能認為有在寫 code 才是軟體工程師,其實在軟體領域還有很多的角色與必要工作(後面也會再介紹),現在我的工作年資已經二十幾年了,也許我會再做十幾二十年,我不知道會變化什麼職務,不過我有一項非常確定的就是,我一定還是會做軟體開發,軟體工程師是我不變的一個職務,或者說斜槓領域。

二、程式教育與資工資管系

常見的資訊工作誤解

修電腦很內行?買電腦就找你?

那個時候唸資工最痛苦的就是這件事,以前買電腦都是買組裝電腦,例如說買 CPU、硬碟、記憶體把它組裝起來,所以你只要唸資工系,只要有親朋好友要買電腦,就找你!就會覺得資工的專長就是組電腦、修電腦。

Jerry:「至少讀資工大家是覺得組裝電腦要找你,我的經驗更悲慘,我唸電機的,有鄰居家裡電視、馬桶壞掉,就叫我去幫他修 ⋯⋯」

Gary:「傳說中的工具人嘛(笑),以為有電的都可以修,各位同學,電器跟水電其實是很不一樣的。」

資訊工作就是寫程式?

資工就是寫程式?軟體工程師就等於程式開發?這些其實都不算是完全的等號。

也有人以為讀資工應該有具備駭客的技能吧?如果我忘記密碼之類,就可以找你幫我破解(沒有,忘記密碼請點選忘記密碼);另一方面是擔心說我電腦裡什麼東西會不會被你看到(不會的)。

軟體工作很好找?薪水很高?

這個不完全正確,不過我可以告訴大家一個好消息,資訊軟體工程師在市場上面,是需求大於供給,確實工作很好找,薪水也比一般待遇來得好,可是還是有一件重點,所有的工作都一樣,其實都是在看你的等級或層級到什麼階段,只是相對來說軟體工程師的需求量很大,所以即使你在平均中位數的階段,你也足以找到可以糊口的工作,但你如果要薪水很高,那跟所有行業一樣,需要很多的努力與很多的練習,所以前面這段「軟體工作很好找」是對的,後面這段「薪水很高」我認為是不對的。

通常我們那個時代的好學生,理工科系第一志願幾乎都是電機,當初台灣的軟體產業還沒那麼發達,所以學習能力最好或者最優秀的人才都被吸引到半導體產業,近幾年來是軟體產業越來越多改變世界的案例,對於軟體的價值才越來越重視。

程式教育的目的

很多今天講的東西是我的經驗,大家可以參考,但真正的答案需要你們自己找,每個人都有每個人的經驗。我認為程式教育的目的在於:訓練大家的邏輯能力、訓練大家解決問題的能力,通常你寫一個程式都是為了解決某個問題,例如說寫一個遊戲是為了讓自己能夠殺時間、讓自己可以開心,你寫一個計算機是為了算帳等等。

大學資訊科系的目的,不外乎是知識與基礎理論建立的地方,並且給大家夠廣的角度,原來在做資訊或軟體裡面這片森林是這麼大的,可是你如果要研究某棵樹、研究某個領域再走下去,找出更好的方法而非人家給的方法,譬如說怎麼做出更好的演算法、算得更快更準,會是碩博士應用研究的領域。

person holding white ceramic mug
Photo by cottonbro on Pexels.com

職場所需要的資訊新血軟體工程師,以我待在軟體產業的角度,希望具備大學階段的基礎理論知識,而且不能單純只會做某件事情,當發生某個狀況,如果沒有具備解決問題的能力,那我覺得這是職場上比較難去生存的。所以,要有組織能力、要有解決問題的能力、要有基礎知識概念、要能針對某些領域很熟悉,例如說剛進職場的時候,需要至少會寫某一種程式語言,那其他不會沒關係,可以透過職場的教育訓練再慢慢累積,可是如果完全都不會的話,對資訊軟體公司來說是不適合的角色。

資訊軟體存在於生活之中,也改變了生活。

電子商務、外送服務、手機或桌機版遊戲,以及置入一下我們的 i 郵箱服務,甚至現在講座使用的視訊軟體,這些其實都在大家的生活中,軟體真的能夠改變世界。我不知道現在年輕人小時候的夢想是什麼?以前我們的年代可能很多小孩是想要當科學家、當太空人,主要的目的都是能夠改變世界,長大後發現要改變世界蠻難的,但現在發覺軟體其實可以改變世界,也許不能改變全部的世界,但是可以改變人類的生活。

資訊工程系 vs 資訊管理系

資工系跟資管系的課程,因為每個學校的課表會長得些微的不一樣,Gary 跟 Jerry 畢業又是二十幾年前,所以現在的課程內容是什麼,我就替同學們上台大課程網看看,實際上大家在選學校的時候還是要注意一下差異,原則上就我的認知來說,你要注意看它掛在哪一個學院,台大是把電機跟資工獨立為兩個學院,資管的話大部分是放在管理學院或者商學院,所以核心課程就會有些差異,資管會有經濟學、會計學、組織管理、行銷等等這些跟企業管理或者人員管理比較有關的議題,對於資訊來說會比較偏向概論或者應用,當然也有一些可以選修的程式開發課程。

程式在開發之前,通常從了解使用者的需求開始,像是 Ubereats 的 APP 會需要設計它如何使用,能夠定義哪些角色,譬如說餐廳、送餐員、消費者,並把這些需求變成工程師能夠去開發的內容與描繪方式,類似這樣的角色與概念,就會是資管要了解的事情,還有在企業內部要怎麼透過資訊來管理。

資工在資訊程式方面會有更深入的教學,資工課程有資料結構與演算法,也會有蠻多數學,微積分、工程數學、線性代數等等,雖然到現在好像沒什麼用到,但它是一個很好的基礎,因為你如果要做更高效率的事情,寫更好的演算法的話,數學確實是基礎;也包含作業系統、資料庫、物件導向設計這些,都是屬於基礎理論,更深入了解原理的部分。

資工的技術含量與重點在訓練資訊的專業人才,資管則是比較偏向管理人才、通才的發展

Jerry:「剛剛 Gary 有講到我們上資工資管的課是二十幾年前,其實坦白講,我覺得科目跟現在沒有差很多,九成左右大概都類似,這代表什麼意思呢?大學教的都還是概念跟基礎,所以唸書的時候常常不知道為什麼要學這個,通常是用到的時候才找出好幾年前學過的東西再去鑽研。大學教的東西還是不會太深,沒有很多科目是在寫程式,反而很多是在講基礎架構,這就是為什麼在業界是不是資工系出來的學生還是有差。

坊間很多訓練像是資策會,可能會在短時間內訓練你學會寫程式的能力,畢竟還是沒有像資工系有完整四年的打底,所以寫程式方面大家可能不會差太多,但是當你要做更大的系統、使用的流量更大,你可能就需要更基礎的能力。」

Gary:「確實是這樣,以我們公司來講也比較喜歡資訊本科系的學生,這些基礎比較像是內功,寫程式的某些技巧比較像是招數,所以短時間內你學會寫程式,看起來就是會武功的人,而且可以把武功用在一些地方,可是當你碰到的魔王等級逐漸增加,內功不行的話你就得重新來過,所以內功跟招數都是很重要的事情。再加上資訊領域日新月異,很多的技術可能沒多久就被淘汰,但是基礎理論或者邏輯概念的部分,大部分十幾二十年都還可以沿用。」

 

三、資訊軟體職涯發展

資訊軟體職稱

大家學了資訊,除了軟體開發對你來說是有趣的事情,還是會碰到要拿它來找飯吃,開啟求職網站看到各種職稱真的是眼花撩亂,先是可能聽過很多 C 開頭的,CEO、CIO、COO⋯⋯

那跟資訊比較有關的是:

  • CTO 技術長
    一般來說研發最高主管就會被稱為技術長。
  • CIO 資訊長
    如果是處理內部而非對外的資訊系統、安全、資料存放等議題,就會比較是資訊長的角色。
  • CDO 數位長
    通常會設在較為傳統的行業,我舉例來說,家樂福就會有數位長的角色,家樂福的線上商城、結帳系統等等可能是由資訊長建立,累積超多消費者的數據後,怎麼把消費者的數據用得好,給消費者更好的體驗、讓消費者買更多的東西、得到更多的回饋,這部分通常就是數位長負責,如何把營運的部分變成數位化可運用的實體資產。

在求職網上會有以「職位」區分,像是總監、協理、經理、部長、工程師等等,名稱聽起來很棒,但實際上如同大家所知,在大公司裡面的經理管的是 80 人,在小公司裡面的經理管的人可能是 2 個人,甚至只有他自己,所以職稱是一個參考。

另外一種職稱的區別方式是用「語言」,比如說它是找 Java 工程師、C# 工程師、Python 工程師、C++ 工程師。

那也有可能用「開發層級」區別,像是前端工程師、後端工程師、全端工程師、資料庫工程師。不知道大家知不知道前後端的差別?我們做一個網頁,網頁呈現的方式大部分屬於前端,那在後面資料庫的操作、商業邏輯等等,一般就會稱為後端工程師。

「角色」區分的話,會有軟體工程師、程式設計師、系統工程師、系統分析師等等,職位上通常只要叫做軟體工程師、程式設計師,都跟開發有關係,可是不代表系統工程師或分析師跟開發就完全沒有關係喔!只是前面兩個一定跟開發有關係。

也有可能以「領域」來區分,例如說 AI 軟體工程師、IoT 軟體工程師、IOS App 的程式設計師、ERP 系統的系統分析師。

man walking on sidewalk near people standing and sitting beside curtain wall building
Photo by Negative Space on Pexels.com

系統工程師 vs 系統分析師

大家現在可能比較熟悉軟體開發的領域,不過其實資訊還有很多領域,像是如何讓開發的專案進行得順利、收到需求之後我怎麼去做需求的探索、如何把使用者想要的東西描繪成一個文件,讓使用者與開發者都能理解、做完之後還能夠去衡量做得對不對,這個通常是系統分析師來做的事情,系統分析師主要做的東西是資料流,也就是我互動的情境與資訊資料是如何流動的。

系統分析完會有一個系統設計,就會是設計如何實作,例如說資料庫要開發怎麼樣的資料表,要開發 Web、App 或者是其他的東西,接下來才到軟體工程師去做實作的動作。後面還有軟體測試工程師,依照系統分析師當初開的規格,去驗證軟體工程師當初做得對不對,那測試的工程師做完之後,通常就會碰到系統工程師的部分,一般來說是維護執行環境,例如說雲端系統工程師,要把程式放到 AWS、放到雲端,如何去做備份或者設定資訊安全環境等等。

來看看求職網站

如何找尋軟體開發相關的職務呢?從求職網站的分類「資訊軟體系統」勾選「軟體/工程類人員」就可以看到很多相關的項目,以手機來說有作業平台來做區分,例如說 Android 或者 IOS 的工程師,可能也有職缺只寫軟體工程師,在做什麼?不知道,就要看敘述有包含哪些內容,配合團隊做開發、現有功能維護、版本管控,全端工程師、資訊軟體工程師、技術主管,其實光看職稱不會完全對應到工作內容,所以要看一下工作內容是什麼,才能去判定。

有些寫高級軟體工程師,我也不知道他的高級在哪,可能就是初階的相對概念;測試工程師也是一個職務,只是在國內來說,測試工程師的角色會被弱化,就是說沒那麼重視測試的部分,但在國外來說測試是很重要的,因為你要了解軟體、甚至要曾經寫過軟體,你才知道怎麼樣測能夠找出問題點,不要讓有品質瑕疵的東西出去。

Jerry:「大家有個基本概念,不要覺得寫軟體的工程師只有一種,你可以想像像是 Facebook 這麼大的系統開發,隨著它的功能越來越多,工程師的分工也越來越細,所謂系統分析就是從一開始的需求來制定規格,然後讓程式設計師、軟體工程師去開發做出來,所以中國會有一個名詞叫做碼農,為什麼叫做碼農呢?好像寫程式就是像農夫一樣,每天都在螢幕上面打字,我是不認同這樣的觀點。

很多工程師如果只能把人家給的規格做出來,這樣的工作價值相對的就比較低,厲害的工程師是能想一個更大的架構,去解決更大的問題。

未來各位的薪水,取決於你能解決多大的問題,同樣的大家未來想找到一個好的工作,可能你在大學階段就要把這樣的能力具備好,這也是講座的目的,讓大家多了解業界的狀況,讓大家能夠去規劃未來想往哪個方向走。」

Gary:「能力越大,責任越大,薪水越大,蜘蛛人的議題。」

確實像碼農這個議題,依我們軟體開發的角色來說,有的時候有點貶義的味道,代表沒有自己自主的思考,或者我負責的部分並不包含軟體的架構,跟其他整體的設計,我只是在寫這個程式碼,而且是人家告訴我要寫這個程式碼,那我這個角色就有點像是農夫在耕我面前的那一塊田,我永遠就是在做那一個動作,或者是我其實是流水線製造的作業角色,永遠在做重複的動作,當然這樣的工作也是必要存在的,但如果你甘於做這件事情,那發展當然會受限,因為你的能力沒有越大,責任沒有越大,必然的薪水也沒有越大。

資訊軟體領域薪資

你要夠優秀

想要了解相關產業的薪資的時候,請大家先想想,業界有幾個 Google 或 Microsoft?其實它們都是唯一的,你可能看到在 Google 裡面薪水多高多高,伙食福利多好,隨時想要在家上班就可以在家上班,五天裡面能有一天做自己想做的開發任務,而不是公司交付的開發任務,覺得哇好棒⋯⋯ 可是背後有很多不為人知的地方,例如說當你能力或責任沒有到那個等級的時候,你可能早上進公司就發現你的員工證刷不進去,去了公司發現你的電腦登不進去,就直接叫你收書包走人了,類似像這樣;或是在你的能力下,你做到晚上八點、晚上十點都完成不了交付任務,但在你的責任之內你必須完成這件事情,這些都是有可能的。

價值鏈位置

再來就是大家要先了解軟體產業的價值鏈,我覺得這一點很重要,譬如說在軟體公司裡面,定義規格的人是誰?Google 開發了很多基礎軟體或開放 API 給大家用,就像是食物鏈最上層的獅子,那再往下面還有誰呢?像是猴子猩猩狒狒綿羊那些。

那在每個產業鍊裡面,每一個角色都代表著可以獲取到不同的價值,例如說到產品鏈下游,可能是賣軟體產品的公司,本身並沒有對軟體產品做加值的動作,照這樣來看,產業鏈越上游的公司就能吃到更多的肉,薪資收入也是越大的,所以要找產業鍊裡面比較上游的公司。

然後進入公司裡面的職位,在公司裡的價值鏈是什麼樣的角色?前面有提到為什麼我離開遊戲公司的原因,因為在公司裡面,你會發現核心程式不是自己開發,而是跟別人買的,所以軟體工程師沒辦法在核心價值裡面,代表什麼意思?公司不會把核心的資源給你,也就不會得到最核心的學習機會跟新知,所以,如果你是在獅子老虎的公司,又是在獅子老虎公司裡面做 R&D,那就是核心中的核心,你的待遇就會好。

舉例來說,在台積電裡面做研發工程師,那進去可能 150 萬起跳,前幾天還有個新聞是聯發科在爭奪人才,起薪 200 萬起跳,那這就是核心,如果是一般公司,做些軟體開發專案,接些小的案子,那就算在這個公司你是主力工程師,可是公司裡面的肉本來就比較少,再怎麼分也受限於這塊肉的大小。

如果可以的話,那當然選擇大池塘與大海,有大魚在的地方我才能釣到這些東西。

如果真的沒辦法,我待在小池或者利基市場,利基市場是指領域可能比較特定,那我就要做那個領域裡面最強的,大概的概念是這樣。

two men fishing on lake
Photo by Tomasz Filipek on Pexels.com

軟體業界現狀

很多公司找不到合適的工程師,很多工程師找不到理想的工作,這好弔詭,為什麼?回歸到前面講的意義,到底業界要的是什麼?跟在學校訓練出來的中間有多大落差?我個人覺得落差非常大,所以學校也越來越多程式實習的課程,譬如說去業界做專案,或者在研究所裡面教授會接一些外面的專案做開發,其實都是為了消弭中間的落差與需求。

那一般軟體工程師平均年薪是 14-16 個月,當然有更多的,也有聽過更少的,軟體工程師剛畢業的話看你是不是本科系,或者有沒有另外寫些專題,畢業專題分工裡面有沒有分到開發的任務,是否跟求職的領域相近。大學畢業大部分在 3 萬多到 4 萬多,其實主要取決於你自己的狀態,還有你的學校的好壞,學校的好壞對於職場來說只有一開始有影響,當你進職場五年十年,看的會是你的能力,和學校相對應的需求是比較少。

觀眾提問:「一般公司會願意訓練新人到什麼的程度?像是前三個月要達到怎麼樣的水準?」

每個公司不太一樣,舉例來說我們公司開發的東西,或像是資安領域開發的東西,這個難度比較高,以我們公司來講,軟體工程師從進來到實質有產出,通常大概在 6-8 個月;能夠獨當一面變成公司能獨立委任任務的,通常都要 1 年到 1 年半,當然每個軟體公司狀況不太一樣。所以說三個月要達到什麼樣的程度,我覺得最基本的原則,我交給你前面的人寫的程式碼,你能開得起來、可以把它編譯完成、看得懂裡面在寫什麼、能做簡易的修改,以及可以跟系統分析師、專案經理溝通,聽得懂對方交付的任務,你交出去的東西也能正確交付、能有正確的版本管控、學會團隊合作,我覺得是三個月內至少要做到的。

資深軟體工程師的薪水大概在 5-8 萬,軟體技術主管或經理可能在 7-10 萬,但是這個沒有一定的準則,像剛剛講到的大公司經理要管 7、80 人,那他的薪水可能遠超過這個數字;在某些公司做軟體工程師薪水就有 8 萬,但在其他小公司可能做軟體經理也只有 6 萬塊,這只是一個概論。

如果做到技術長或軟體總監,那月薪 8~15 萬、20 萬、30 萬我都聽過,年薪 300 萬這都是看得到的,基本上軟體產業只要大家夠努力,做軟體開發這件事情,在 30 歲左右的「錢」景達到年薪破百萬都是有可能的。

觀眾提問:「這樣好像很難篩選人才,會不會可以獨當一面的時候就跳槽?」

其實公司選同仁跟應徵者選公司是一樣的,這有點像是男女朋友相處的過程,互相選擇,所以當你跟我在一起,我訓練完你,你發現你不喜歡我想要離開,這是很可能發生的事,那對我來說其實要自我檢討,為什麼你跟我在一起三個月,我對你認真付出最後你卻不喜歡我,代表我沒有給你好的學習環境、沒有人好好帶你、沒有好的開發環境、讓你沒看到前景⋯⋯ 這是我覺得員工跟業主都要思考的事情。

 

四、軟體開發所需技能

以軟體開發為例,你需要什麼技能?

硬技能

包含大家開發所需的相關技能,可參考業界教育訓練單位。

領域知識

例如說今天要寫的是電商系統,我需要知道電商在幹什麼,怎麼管理存貨、帳怎麼跑,不然你都不懂的話,怎麼能寫出好的程式呢?

軟技能

就是剛剛講到的像是溝通,我能把我的程式除了寫出來之外,還能告訴其他人為什麼這樣做?我表達得出來為什麼使用者需要?或者我能聽得懂別人在說什麼。

UCOM 恆逸教育訓練中心 為例:

依職務類型來尋找課程,有系統工程師、網路通訊、前端工程師、程式設計。

我們從「程式設計」來看看裡面內容,課程非常非常的多,是給非本科系的學生,或者畢業後發現自己的基礎不夠扎實,就會參加這種可能六個月的課程,讓不是這領域的人能快速學點功夫,就能快速進入相關領域;或者是會內功但不會招數的本科系畢業生,為了能夠銜接到業界的需求,就會去參與這類課程。

但是以我自己的公司來說,我還是會傾向選擇已經有基礎訓練的人,那有上這個課程會是加分項目,擁有資訊基礎訓練又有實作經驗,絕對會是我優先選擇的對象。

另一個 Microsoft Build School,概念其實跟恆逸是一樣的,去學習框架、團隊怎麼開發、雲端架構等等,這其實是 Microsoft 為了讓它的技術能夠深入到企業界,目的在減少學習落差所提供的課程,所以這類的網站大家也可以去看看,就能大概知道職涯部分的範疇可能有哪些。

以實例架構來看所需技能

這個是我們公司的系統架構,就以 i 郵箱為例子好了,智能櫃這邊是很多的 i 郵箱,裡面有一個觸控螢幕,有一個電腦裡面裝了軟體,然後會回報到一個管理後台(G-DAS)包含資料庫管理員透過網頁去看這些東西,然後會透過一個標準整合的 API 去跟外部系統串接。

光講完這件事情,跟軟體相關的範圍好廣好廣,首先,你要會開發像是 ibon、famiport 這種的程式內嵌在機台裡面,透過 web-api 的方式把資料通到後台,後台你就要寫商業邏輯、控制交易、考慮當流量有一兩千台的時候的狀況,以及怎麼樣跟異質系統例如說 IOS 或 Linux 去做串接,所以要考慮的軟體議題是非常多的,大家現在開始寫程式的話,其實就是專注在某一個節點的某一項任務開始,萬事起頭難,所以先找一個出發點,在 CodingBar 來學 Python 就很像是裡面的一個小任務開始學起。

軟體開發流程

其實我們前面稍微提過,就是需求 ➡ 設計 ➡ 實作 ➡ 測試 ➡ 維護,這樣是一個完整的需求開發流程,實作部分就是軟體開發,設計的部分比較偏向系統分析師、UI 畫面設計的事情,需求的部分比較偏向系統分析師或專案經理的部分。

Agile vs. Waterfall Model
來源:http://ouriken.com/blog/which-one-is-right-for-you-waterfall-or-agile/

那大家要想像它永遠是一個循環,因為現在用交作業的形式好像我開發完就結束了,但實際上真實人生跟真實世界不一樣,你開發完的東西有問題的話會找你、做得好的話也會找你,因為它會往後發展,軟體就像你的孩子一樣會慢慢長大,當它長到很大的時候,本來想說原本軟體功能只有 A 但現在已經到 Z 了!

所謂敏捷式開發、專案管理辦法可能講三十個小時都講不完,軟體開發就是個不斷地循環、不斷去做擴增的動作,再來這兩張圖是軟體開發規劃的方式,看起來更令人頭昏,只是給大家一個感覺,像是綠色橢圓圈圈裡面的就是使用者案例的描述,這兩個模型其實都是在達到剛剛講的概念,我怎麼樣把我要開發的軟體系統,變成一個正確的描述方式,讓使用者端跟開發者端都能跟隨這樣的描述,開發出正確的東西。

Modeling structure views using UML
來源:https://www.visual-paradigm.com/guide/uml-unified-modeling-language/uml-practical-guide/

你今天開發一個計算機,可能自己想想就能開發了,但像前面 Jerry 舉到的 Facebook 的例子,當你牽涉到的工程師可能是三、四百人,怎麼溝通?你必須要有良好的設計才發包出去,大家可以想像我要蓋一個大樓,可能會有水泥工、模板工、事後裝潢設計等等,怎麼讓設計師、工程人員、還有土木工程師都能一起做這件事情?建築業靠的就是那個藍圖,軟體業靠的就是這些東西,所以這個東西是很有價值的。

我軟體可能寫得很好,可能是一個很不錯的木作或木工的角色,但你要往下走的話,會需要這樣的概念,會是一個設計師、建築師的概念,就要懂這些事情。

An overview of the C4 model
來源:https://c4model.com/

這張圖要表示的,就是從不同觀點來看軟體這件事情,這是很重要的,每個人有資質的好壞與差異,但我相信其實不會差到這麼多,一般人的 IQ 可能都是在 80~120 之間,我忘記是哪位科學家還是哲理學家說過,每多一種觀點看事情的時候,等於你的 IQ 加 10 分。

這代表什麼事情呢?每個人看同一隻大象會看到不同的面向,所以多幾個人比較容易看到全貌,會讓自己更加的睿智更加的聰明,我可以用使用者、開發實作、邏輯觀點、程式執行序的觀點來看,或者是我怎麼樣部署這件事來看。

這個 C4 Modeling 的概念就是說,當不同的人在看的時候,我要看到多細?我要看到的是軟體操作的介面就好,還是我要看到他的設計細節,這個學問還蠻深的,在大學裡面應該是一門 3 學分的完整課程,3 學分講完之後就能入門基礎,那要多深就是看大家怎麼繼續往下走。

職涯與資訊設計的策略

每個人要找出自己最佳的演算法,因為剛有講到說這是一直變動的領域,所以你要能確保自己在這個領域裡面一直往前走,你要靠你的熱情驅動?還是成就感?或者現實驅動?那這通常也是組合的,沒有標準答案,也會一直交叉的相互影響。

那你要做的是通才還是專才?所謂專才,以開發來講,就是我很會寫 Python、很會寫網頁程式,這是專才;那通才可能是我會寫網頁程式,我 DB(資料庫)也很強,然後我又懂雲端部署怎麼做,我還很會做使用者訪談需求,做系統分析的角色,多懂不同領域的知識那就是通才。

提醒各位同學,如果你想要做專才,那你要夠專才行喔,想做專才又想出人頭地,那要做到前百分之十、百分之五才行喔!否則其他人都比你強,你為什麼可以是專才裡面得到最多資源的人呢?通才就比較不一定了,因為可能大部分人在受專業訓練都以專才為出發點,可是在某些領域,五個 75 分可能會打得贏一個 90 分,所以這怎麼選擇?大家可以再多多考慮這件事情。

標竿學習的重要性,這對應到程式領域來說,就是多看看前輩寫的程式碼,看人家寫的程式碼對自己的學習其實是很有幫助的事情,或者多看看業界的大師相關書籍等等。

接下來就是想想下三步,我今天學了這個程式,接下來要學什麼?職場上現在做軟體工程師,接下來想做系統分析師、想做軟體技術主管?有點像下棋,你要想你未來的路要怎麼走,不要只困在現在這個任務裡面,那你的學習會更全面,設定好目標之後就是往前走。

還沒有設定到答案沒有關係,那就是先多聽多看多學,軟體開發很重要的點就是多實作、多討論。

問答

Q:請問業界有沒有歷久不衰的領域?

A:我覺得這有點像大家看三國演義,天下大勢合久必分分久必合,我們做二十幾年的經驗,就會從集中式架構變成分散式架構,然後又變成集中式架構這樣在跑。歷久不衰的領域我覺得是企業內部應用系統的開發,這件事情是歷久不衰的,例如說淨銷存系統、人資系統,但歷久不衰不代表工作待遇好,只是代表工作需求很大,一直存在,因為跟企業運行的核心能力會有關係。

換個比較務實的想法,歷久不衰的領域需要具備什麼技能?譬如說你要學會一種物件導向的開發語言,第二個是你需要有從前端到後端到資料庫的實作能力,不管你是做個 App 或是網頁,這個領域到這個程度,工作是非常之多的,只要有這樣的能力跟技能的話。

只是工作的角度我覺得很難歷久不衰,知識或技術的角度能夠歷久不衰,例如說資安、資料庫、演算法、軟體工程、物件導向程式設計這可以歷久不衰,工作不管怎樣還是會隨著時間的迭代有所變化,三十年前的系統 Cobol 現在可能沒有人會用這個撰寫,但有些系統還是用這個在運作,那會 Cobol 的工程師薪水就好高,因為會的人很少很少,這樣算不算歷久不衰?可是他換到別的工作就不能適應了,所以歷久不衰其實是相對的概念。

Q:今天講的大部分是職場,想問 Gary 覺得高中生應該具備的程式基礎在哪?

A:我覺得程式基礎在於可以解決問題,所謂的程式基礎就是,今天你碰到一個問題,你能想出來該怎麼開發,並且用程式開發出來,我就覺得已經達到最基礎了。不管這個問題是難或容易,從前面到後面可以完整地做完就是程式的基礎。

你至少能夠處理輸入到輸出這個動作、你會用編輯器把它編譯出來、找出程式的問題在哪裡,這些會是最基礎的基礎,因為每個領域的應用範圍不太一樣,網頁來說你至少有個網頁可以輸入然後可以回應,並把這個程式部署在網頁上面,就是軟體開發的基礎。

 

結語

吸收別人的經驗,站在巨人的肩膀上,能看得更遠。

保持熱情最好的方式就是真心喜歡,真心喜歡最好的方式就是在開發中找到成就感,如果你不是喜歡開發,你覺得開發是痛苦的事情,我建議你不一定要做軟體開發,資訊還有很多角色可以扮演。

成就感就有點像拼圖的時候,突然找到關鍵的拼圖,拼出來的那個成就感!或者是做模型終於花了二十個小時把模型做完的成就感,大家一定要保持熱情。

最後就是學習跟工作都需要策略與方向,要知道自己往哪裡去,現在不知道沒關係,至少要開始,所以資訊軟體的路就從動手寫程式開始吧!

 

如有任何問題想深入了解,歡迎透過 LINE : @codingbar 與我們聯繫,將有專人為您說明。

 

每月第二週週五晚上定期舉辦!歡迎免費報名!

CodingBar 致力於透過程式教育,培養青少年邏輯思考與創新應用的核心能力。
誠摯邀請您與我們一起打造台灣新世代的教育工程!

// https://codingbar.ai //

 

✨ 訂閱 CodingBar 獲取最新資訊 ✨

處理中…
順利完成!已將你加入訂閱清單。

發佈留言