Photo by Radowan Nakif Rehan on Unsplash
這篇的軟體界指的範圍大概就是PTT上會發在Soft_Job的,職稱可歸類為Software Engineer的,台灣人熟悉的台gg、聯發科等裡面什麼IC設計工程師之類的不在範圍內,當然這些公司裡面也是有軟體工程師,但不是主要業務
直接先講一個大家在意的結論,除非你有自信自己是世界頂尖的人才,不然在台灣想快速高薪存錢還是IC廠的工程師最快,當然我指的是一線的公司,台積大小M之類的,畢竟這就是目前台灣最強的,不久前台積電市值都超過三星了,軟體界則是還在發展,薪資雖然有在上升,但跟豬屎屋比空間還很大
台灣軟體業職位介紹
首先先簡單分類並介紹一下Software Engineer可以分成哪些
第一個是發展可說最活躍的Web相關,其中至少又可切成Frontend、Backend,比較健全的公司會有SRE(Site Reliability Engineer),或稱DevOps,小公司可能會讓Backend兼做SRE的工作
Frontend的工作就是做所有你們網頁看到的頁面,按設計給的稿做出來,用到的技術最基本就是HTML CSS JavaScript,通常要加上其延伸出來的許多東西,如React、Vue、Angular等
Backend的話則是你們看不到的部分,例如在按下噓之後,必須在資料庫存下一筆噓的紀錄,這種邏輯就是backend負責寫的,用到的技術太多種了,看公司,語言的部分太雜了後面講,但基本就是至少一種後端常用的語言 + 至少一種資料庫
SRE是負責維運的,確保server、資料庫都正常運作,所以跟backend合作緊密,通常需要on call,就是出事要馬上應對,所以我覺得最血汗,雖然都會有on call加給,但是值班時不能安心睡覺,可能連拉個屎都要帶著筆電進去以防萬一,舉例來說就是像前陣子FB掛掉,這種就是SRE等著滿頭燒
除此之外通常也要負責讓公司裡其他工程師可以順暢地deploy新版本到server上,用到的技術也很廣,linux絕對是熟到跟自家廁所一樣,加上AWS、GCP等各大cloud,還有docker、kubernetes、jenkins等,也必須有coding能力,因為不可能什麼都手動來,我認識的SRE個個都像超人一樣
可能有人問有沒有專門的DBA,老實說我真沒見過,資料庫通常就backend跟SRE來弄就夠了,正常人沒事應該不會特地請個DBA
有時會有涵蓋兩種以上的職缺,例如Frontend + Backend,會有人稱這叫Fullstack,但基本比較有水準的公司不會特地開這種職缺出來,實在沒意義,做fullstack的人薪水也不會比較高,而且通常自稱fullstack的人都很廢
除了web相關,當然還有特定平台類的 也就是Android、iOS和Desktop,當然其實不只 例如做家機遊戲的(但台灣不知有沒有)、或做IoT的可能就是Raspberry Pi 這幾個的技術就比較單純,看各自平台而定
Android就是Java跟Kotlin iOS是Objective-C跟Swift 另外還有比較特別的,就是如React Native、Flutter之類的東西 目前我是不推薦,你絕對可以學,但是不需要全心全意的想專精 一個專精React Native的人定位很尷尬,Flutter則是遠遠不夠成熟和普及
Desktop就很多種了,基本上什麼語言都有可能 比較常見的大概就C、C++、C#、Java甚至VB都還活著 但我個人認為單純做桌面軟體可以稱作是軟體界中的夕陽產業了 職缺基本上都是在老公司在維護老程式為主
但語言的技能不變,如果你是寫C/C++這種通用性很高的就不用擔心 寫VB的還是算了吧,至於C#太局限了我個人不喜歡也不推薦 除非你特愛微軟,不然用了微軟系列就是要吃他們的全家桶 而且用微軟系列的公司,聽到的薪水通常都很悲慘 唯一知道的例外是鈦坦科技,號稱可以開到300萬
除了以上幾個大平台,其他還有很多可能也可算在軟體工程師的 最多的應該就是C/C++的各種應用,寫什麼嵌入式系統、韌體、IoT、工業控制 這個太多太雜了,而且已經比較偏離軟體業了就不多談
回到Android/iOS,你會發現我分別寫了兩個語言 如果你問個自要學哪個語言好,我會說當然是學新的那一個 首先iOS肯定學Swift,新專案不會再用Objective-C,需要的都是維護舊專案 相比Swift普及率已經滿高,Android用Kotlin的就我所知還沒那麼多 但其實不用擔心,因為Kotlin就是主打跟Java完全相容,基本概念都一樣 你就把他當成改良的Java就行,一個上手後改寫另一個肯定非常快
另外可能有人會對做Android/iOS有疑慮,覺得未來會不會沒落、被Web取代掉 就我來看是不太可能,至少五年十年內都不可能 至於十年後這世界什麼樣子我都不知道了當然不好說 但總之現況是Android/iOS缺人缺很兇,反而Web相關的人還比較好找 可能是這幾年大家都一窩蜂的去學前端後端的關係 如果你對特定平台有興趣,那放心學肯定沒問題
實力至上
接著來講大家最在意的薪資、公司,這裡只以台北為主,工作機會台北跟台北以外的地方差太多了
首先先跟大家講一個概念,以軟體工程師的世界裡 基本上誰強誰屌就大,實力至上 沒在跟你看年資、年齡、學歷、輩份的,年紀小的帶年紀大的比比皆是 甚至有公司面試會直接問「你可以接受年紀比你小的人當你主管嗎」 面試人時,雖然希望盡量公平公正,但老實說遇到年齡大的會在心裡默默扣分 因為有年紀的人通常比較難搞,年資再深也一樣,甚至年資太深也能扣分
舉例來講 面試完兩個人,覺得實力都差不多60分,假設一個60分一個65分好了 60的年資一年,65的年資五年,兩個要錄取一個的話 我肯定是選年資一年的那個,因為潛力明顯比五年的好 你做了五年還是這種程度你也差不多就這種水準而已了
總結就是,年資和學經歷完全無法證明任何東西 學經歷華麗到不行、履歷寫得多猛多猛,面試時本人卻廢到不行的並不少見 我不會因為你是台大碩還是待過知名公司就破格錄用你 只有面試的時候拿出來的實力才是真的 但也必須承認HR跟其他非技術人員會看經歷學歷
即使技術人員來看也會多少影響第一印象 因為老實說,一個台大學碩的人頭腦通常不會差到哪去 對於能否拿到面試機會「可能」會有影響,這要視公司徵人的運作方式而定 通常較有水準的公司會有更合理的方式來做第一步篩選 例如最常見的就是前測,或是直接讓工程主管看履歷決定 另外當然學歷對第一份工作可能還是會有明顯的影響 不過通常都是比較傳統的大公司才會這麼看,就是類似鴻海阿、華碩之類(亂舉的不保證)
公司類型及薪資介紹
前言講多了,再來介紹我個人對公司的分類,按平均的薪資粗略排的話大概是
- 頂級或準頂級真外商
- 頂級知名新創、優質新創
- 知名大型軟體公司、已本土化的假外商、還行的新創
- 傳統大公司
- 做不太起來的新創、假新創、很小的新創
- 其他小資型小公司
這份名單排序不是絕對,有非常多特例,稍後會舉一些,另外薪水通常只看年薪,因為很多公司都有保證年終,月薪很不準
1. 頂級或準頂級真外商
第一個頂級或準頂級真外商,頂不頂級就純看個人感覺吧 台灣的話第一個想到當然就是Google 事實台灣軟體業真心讓人覺得真正頂級的大概只有Google了吧 有個疑似頂級的是Microsoft,但就我了解的其實薪水沒有很頂 而且台灣微軟一大部分都是約聘的職位,正職的話百萬以上當然是沒問題 還有一個曾經有的是Mozilla,可惜台灣全部裁光現在已經沒了
準頂級大概就像LINE,畢竟不是美國公司,但工程師給到200萬都是有可能的 還有提過的新加坡商鈦坦科技,雖然不有名,但因為薪水敢給我就放這裡了 本業非軟體的外商還有Intel、HP、Dell等,在台灣也都有工程師 上述公司不少我都有認識的工程師在裡面,就我知道年薪百萬都只是最基本
在這幾間實力者要拿200萬以上通常也都是沒問題,各自具體上限在哪我就不知道了 這類公司基本上英文能力都是必要的,你很可能會需要跨國合作、跨國開會 所以最低限度你要有conversational的英文程度(可能只除了鈦坦華語能通)
2. 頂級知名新創、優質新創
第二個頂級知名新創跟優質新創,我指的知名不是你聽過就叫知名 而是在新創圈知名,幾億幾億不斷募到大量資金的那種 新創公司的特色通常就是敢砸錢,所以都會開很高的薪水來搶人 且福利通常也都很好。真正敢給的新創,薪資並不會輸給樓上的頂級外商 對於怎樣才叫新創其實沒有明確定義,通常就是指成立幾年內還在發展初期的公司 也因此這類公司通常不太收菜鳥,只收精英、最看重真實實力 因為都還在燒錢階段,公司都還沒穩才沒那個閒工夫去培養新人
當然也是有例外,有的公司會收Junior engineer,但通常也是有即戰力的人 近期新公司感覺有比較趨緩,所以其實這分類裡很多公司都已經不新了 由於通常只收高手的關係,這類公司年新百萬通常也都只是基本
舉例第一個想到的就是Appier,工程師至少100萬、號稱可開到300萬 (事實上Appier都已經成立7年了,還該說新嗎) 這個分類裡一般的區間大約就是都落在100萬~200萬左右(單純工程師)
其他想到的還有Omlet、17直播、阿福管家、ShopBack等,大約都是在這個範圍 還有些最近才聽到的像Avance Venture Lab,可以給到200萬以上 和另一個滿新的叫Botrista最高也是可以開到200萬左右
此外之前講到的實力至上、年輕人領導老人也最常發生於這個分類 想打破年資這個概念就是來這類公司就對了 24、25歲當工程主管的我都見過,老話一句這裡誰強誰屌就大
3. 知名大型軟體公司、已本土化的假外商、還行的新創
第三個知名大型軟體公司、已本土化的假外商、還行的新創 所謂已本土化的假外商和還行的新創,就是粗略薪水落在70萬~150萬我就歸在這
知名大型軟體公司我覺得可以跟假外商合在一起看,就是大家都聽過的
舉例KKBOX、Yahoo、趨勢科技、IBM 這幾間就我知道的薪資都是差不多水平 除了KKBOX其他都是號稱外商、薪水卻很本土化的公司 雖然這類公司薪水通常都稱不上頂級,但在台灣也算是不錯了
另外這類公司比較可能會看學經歷和年資,因為HR核薪的規則通常比較死 但其中有個我覺得是算是知名大型軟體公司的特例,就是群暉Synology 雖然本業稱不上做軟體,但是有收大量的軟體工程師所以也常被放在SoftJob 以極硬的面試而出名,在PTT一直被視為大魔王,年薪至少百萬、號稱可達250萬
而所謂還行的新創的話簡單說就是比起上一類,薪水比較次一些的 比如大家熟知的Dcard,薪水落在80萬~130萬 另外像是Positive Grid、PicCollage,都是80萬~130、140萬左右 也有像財報狗、Branch8等開出100~150萬區間的
這個區間的小型新創還滿多的,這一大類就是個騎驢找馬、賺經驗升等的好地方 像KKBOX和趨勢科技都被我們笑稱是工程師工廠 因為到處都能遇到這兩間出來的,很多人都只是進去練一練,洗個經歷後找地方跳 順帶一提,KKBOX有高雄辦公室,對不想來台北的高雄人不失為個好選擇
4. 傳統大公司
第四個傳統大公司 這類其實我想到的都不是軟體公司,很多是PTT口中的系統廠 比如說什麼華碩、中華電信、京元電子、仁寶電腦、廣達、緯創等
原本我是把這類排在第五的,但因為這類公司通常有比較多的獎金、分紅等 所以又臨時上移一名。這類公司最重學經歷和年資,畢竟都叫傳統大公司了
在這種公司的好處可能就是過年時被長輩親戚問到感覺很厲害 因為是老一輩的人都熟知的公司,但其實薪水通常都很鳥 新人可能只有三萬多,碩士了不起四萬多 靠著一年通常可以拿到16 17 18個月的薪水所以還過得去 (事實上40K*18個月才72萬)
另外這類公司通常都會有校園徵才、實習 所以大概可以算最願意收新人的,你再廢可能都有公司收 但能否提升實力我不敢講,因為就我知道的這些公司裡的人多數程度都不怎麼樣 就算有人帶你,帶你的人本身水準不高的話我不覺得你可以提升多少
5. 做不太起來的新創、假新創、很小的新創
第五個做不太起來的新創、假新創、很小的新創 嗯…沒什麼好講的,就是自稱新創,但是薪水又更低的 跟上面那類的總年薪可能差不多 這類公司也很多,通常大家都沒聽過,我也懶得找了
6. 其他小資型小公司
第六個其他小資型小公司 就是公司可能只有十個人之類的小公司 軟體界最常見的就是接案公司 我個人是覺得接案很無聊所以完全不考慮 另外要小心接案公司面試的時候都會跟你說他們有要開發自己的產品 未來要做什麼要做什麼,多有趣多厲害,講得天花亂墜,想騙你進來 但八成都是豪小的,通常就是每天繼續無止盡地接案接案接案 這種就小本生意,薪水就是那樣,你想討薪水人家都還不一定付得起
結論
以上只是我的個人簡單的分類 很多公司是很難說一定是在哪一類裡 其中還有一種特例,叫作Remote Job 就是沒有辦公室(或有辦公室但不要求去) 如果是外商的Remote Job,你有機會拿國外水準的薪資住在台灣工作 這種可能是在台灣拿到最高薪的辦法 當然我也知道有remote工作的外商核薪是依當地水準來核的
薪水等級比較
這裡我再按薪水粗略地來分個感覺級數
40萬~59萬
大概就是寫code能力普普甚至偏低的學士新鮮人 會拿這薪水的通常就是大學在班上不會被認為是很會寫code的那種
60萬~79萬
有天份、在班上會被公認很會寫code的那種新鮮人 或寫程式不算特別有天份,但已有一到三年經驗的人
80萬~99萬
通常這裡開始比較難有新鮮人,但還是有 大概四大本科學霸型新鮮人就可以一畢業就落在這 學生時代就是寫code魔人的也可能從這開始 或者那些比較有天份的人工作一到三年左右也大概會在這裡
100萬~129萬
恭喜成為百萬聚樂部的一員,但這裡只是個開始 前面那些通通都是熱身,工程師的路在年薪百萬後才剛要啟程 基本上除了外商,這裡開始的職稱應該都已經是資深工程師 上面的本科學霸型和寫code魔人有機會一兩年內就到這裡 或者天份普通偏上的人工作個三到五年就很可能在這 又或者你是天選之人,一畢業就進頂級外商,那你就有可能直接從這甚至下一級開始 但就我所知那些外商比較少收新鮮人(倒是微軟有實習機會)
130萬~149萬
初入百萬世界的人跳槽一次兩次後大約就會到這 或者有幸加入肯加薪的公司(新創很多很敢加) 從百萬初開始加個幾次薪就能到這個數字 通常要到這裡都有一點年資了,有些公司這裡的職稱已經是Staff Engineer 大約這裡開始會有不少人轉換成管理職 很多時候職稱還是工程師,但其實已經要做一些管理職的工作 可能會先從當一個小Team Lead做起 此時很多職缺也會開始要求要有帶Team的經驗
150萬~179萬
這裡的公司已經不多,薪水不再像以前一樣隨便一跳都能漲 想要跳槽的話你會跳得更謹慎一點 要到這薪水除了實力也要有點運氣 要剛好有適合的職缺、公司跟你的頻率要對得上 因為此時公司對人會更加挑剔,不只實力,也會更看重你的個性等 作為軟體工程師應該許多人會有已經到達天花板的感覺 甚至該說多數人永遠都到不了這裡 跟上一層一樣,應該都是很多人轉換成管理職的分界點
180萬~200萬
幾乎就是在台灣做為軟體工程師的極限 能給這種薪水的公司其實就是那幾間而已 同樣除了實力之外你也需要更多的機運 想再突破的人都是以轉管理職為主 除了管理職,可能還有各種五花八門的職稱出現 比如工程師直接上去就是Principal Engineer(首席工程師) 或著Architect(架構師)等(當然也有很多掛這種職稱薪水卻很低的人 總之一個「Software Engineer」在這裡真的就很緊繃了
200萬以上
同上,單純寫code的人很難突破過來,或著應該說 正常給你這個薪水肯定已經不是期待你只負責寫寫code,才沒這麼好康的 能給超過這薪水的公司手指頭都數得出來 如果你想衝薪水,那建議你還是轉管理職最快 轉成管理職之後,大概就是會有一種通關後解鎖二周目挑戰的感覺 已經壓在你頭上的天花板會被再次拉上天 許多公司是願意砸大錢請一個厲害的Manager來的
結論
同樣,這只是我個人的分類和感受 另外要注意的是,以上對薪水的形容是指你積極爭取後的結果 軟體界跳槽是家常便飯,而跳槽就是加薪最快的方式 CP值最低的就是畢業後在一間公司直接待個五年十年 那你很有可能待五年才7 80萬,要是早點跳槽你可能早就破百了 此外其實很多公司是願意加薪留人的,因為人很難找,到處都在缺人 特別是新創公司,如果你收到其他公司更高的offer後提離職 很有機會公司是願意給你加薪加到該offer的條件的(甚至更高 至少我見過不少,出去拿個offer回來提離職,馬上被HR找去談加薪慰留 所以不要笨笨的一直在一間公司沒有動作,公司最愛這種盤子 你的忠誠度不能當飯吃,也不要捨不得公司,這世界只有錢才是真的
確認自己薪資範圍
順便在這補充,上一篇文裡有人問到一個非常好的問題 「要怎麼確認自己的價碼是多少?」 答案就是去面試 面試不一定是要找工作,你完全可以單純為了確認自己實力去面試 而且有時候所謂運氣、機會就是這樣來的
面試要你開薪水的時候肯定是開一個比你現在還高的薪水 你甚至可以直接喊一個你無法拒絕的價碼 比如你現在70萬,你覺得自己或許值到100萬,你面試可以直接喊120萬 上了對你來說直接就是賺到,也證明了對公司來說你有這個價值 很多時候你敢開就是你的,只要不是太誇張,通常不用擔心喊太高
通常公司如果很想要你但又覺得太高的話自然會跟你殺價 但如果都沒上可能就要考慮目標降低一點,找比較二線的公司、喊比較二線的薪水 這樣透過面試你完全就能抓到自己在市場上值多少錢 最要不得的就是一天到晚覺得「我應該不值這個價碼吧」 明明其實100萬大家會搶著要,結果你跟人家開個70 這不是盤子什麼才叫盤子??
職稱
講完薪水跟公司這裡再來補個職稱表,但說真的職稱不代表任何東西,錢才是真的 我以比較標準常見、制度完整的職稱來舉,當然不是每間都一樣 比如上面說的小資型小公司可能什麼鬼職稱都沒有
除了職稱以外,公司主要會用的是職級代號 首先通常會有兩大類,IC Track及M Track IC指的是Individual Contributor,軟體工程師就是屬於IC M指的就是Manager,主管就是算在M Track
一個職稱可能對應到兩三個職級,例如可能IC 1、IC 2都叫Software Engineer 有的公司則是直接加數字,例如Software Engineer I、Software Engineer II
IC 職稱表
IC粗略職稱表通常如下:
- Software Engineer
- Sr. Software Engineer
- Staff Software Engineer
- Sr. Staff Software Engineer
- Principal Software Engineer
- Sr. Principal Software Engineer
外國有的公司還設有Distinguished Software Engineer 但這有點太魔幻了,台灣我沒見過
M track 職稱表
M track的話則是通常如下:
- Engineering Manager
- Sr. Engineering Manager
- Director
- Sr. Director
- VP (Vice President)
- Sr. VP
很多公司會把兩個track擺在一起做對應 比如Staff Software Engineer大約 = Engineering Manager Sr. Staff Software Engineer = Sr. Engineering Manager 之類的,我是覺得沒什麼意義啦,大概就是在你轉換軌道時做為參考
結論
每間公司多少都有點不一樣,有公司可能粗略到只分Software Engineer / Sr. Software Engineer兩種,有的公司可能還多開了助理工程師(比SWE更低),或台灣一些公司很愛用的高級工程師之類的(SWE和Sr. SWE之間),也有的公司會有比較跳脫的存在,比如Architect、Developer Advocate等等
學生怎麼往軟體工程師前進
講完這些,因為場外應該很多在學學生,所以再繼續講學生的部分,首先最重要的就是把握大學四年,大學通常不如高中有那麼重的課業壓力,你會有很多自由的時間,記得我提過的寫code魔人嗎?現在開始你完全來得及走上這條路,趁大學期間多寫程式、多做不同的專案,尤其畢業專題非常重要,是你一展長才的好機會,如果你沒有讀碩士的打算,這些東西將直接、關鍵性地影響你的第一份工作,有好好把握大學四年的話,第一份工作你馬上就能跟那些廢四年的人拉開距離
除了基本可能會有的演算法測驗之外(面試流程晚點再提),第一份工作面試時通常就是拿你大學做的東西出來展示,因為這也是你唯一可以拿出來說嘴的東西,你用了什麼技術、架構怎樣、哪些東西是你負責實作的,通通都會是和面試官討論的內容
基本上讓你進到面試,公司就是有意收新鮮人,此時更會注重熱忱、潛力等,學生期間如果有很多作品可以拿出來,就能夠證明你對程式的熱情,大學四年你可以做非常非常多的事情,對自己的未來有想法的請別浪費,練習演算法、寫寫覺得有趣的專案、提升英文能力、甚至接案等,每天抽一點時間出來、持續四年的話,簡單想想就知道你可以提升多少實力
另外不要指望你在學校上課學的東西就夠了,很多人很愛戰科系,比如資工寫程式一定最強、什麼系就是爛之類的,其實科系的影響沒有你想像的那麼大,最重要的是在個人,因為大學教程式一定都是從頭教起,教完一個再換個語言又開一堂新的課,只靠學校教的東西、這種步伐遠遠不夠,而且一大堆教授都是早已跟業界脫節的老人,你指望他們教多厲害的東西給你?,所以請認清,不是進了資工系你就會變超強,你看到那些超強的人很多都是私下花自己時間一點一點累積出來的,很多人都是要畢業了才發覺怎麼明明同一班他這麼強我這麼廢
如果你還在高中那更好,你可以更早做準備,但首先成績要顧好,上個好大學對未來幫助絕對大,我指的不是學歷而已,頂大生通常出路都比較好,畢業後很多人會進入不錯的公司,這些都會是你的人脈,未來換工作大家都是可以互相內推、互相介紹的,如果你進個野雞大學,你的同學直銷的直銷、賣保險的賣保險,你去哪找人推薦你進好公司?
至於要不要讀碩士,這是永遠爭論不完的話題,每次PTT上也都是吵不完,我也沒法給一個肯定的答案,每個人狀況實在不同,要讀的話請要先確定你念碩士的目的是什麼、期望得到什麼
只看「我純個人的意見」的話,首先如果你的目標是特定領域,明顯需要碩士的話當然就讀,比如Machine Learning,沒碩士以上要找ML工作應該是有點困難,第二就是我認為如果沒台清交成政、頂多四中,都沒有讀的價值,除非你的目標是進比較傳統的大公司,大學學歷又太糟,除此之外我都是傾向不需要碩士的,算起來不划算
因為就如我所說,軟體界就是實力為主,舉一個例子就是之前Soft_Job的板主TonyQ,在業界算是個名人,學歷是元智大學資管系肄業,很早就投入業界做得嚇嚇叫,但再次強調每個人狀況不同,我的答案絕對不是肯定的,當然如果讀了,論文就好好做,不要只是多浪費了兩年時間
技術 Roadmap 選擇
再來講講路線的選擇,這裡我簡單分成Frontend、Backend、Android、iOS、其他,選哪個最好?我會說隨便、你爽就好,缺不缺人都是浮動的,只看現況不一定準,不管哪個年薪要破百保證都沒問題,看你對哪個部分特別有興趣就學吧,而且也不代表你只能學一個
你可以多摸多學,有的人天生就是跟某領域最合得來,但這裡我也必須說,一定境界之後backend比較吃香,不管你是寫什麼的,等你提升到一定程度後多少都要懂backend的東西
例如只懂frontend的人基本不可能當上architect,更重要的是,有些知名外商沒有在分種類的,以上一律叫Software Engineer,面試都是同一套標準,才不管你原本是做什麼,其中很大可能會有一項叫作System Design,所謂System Design就是在考架構設計,題目可以很廣,比如說,要你設計出一個每秒可容下1000個requests電商交易平台系統,這些東西在正常分工下只有backend會接觸到,只會frontend只會android只會iOS就等著死在這裡
除了System Design也有很多會直接問Database的,同樣是只有backend比較常會接觸到的東西,所以總之,起步沒差,但一定程度後你早晚要補上一些backend的知識
程式語言 Roadmap 選擇
再來講講程式語言的部分,這裡我很快的帶過就好,因為程式語言的部分板上已經有人發過文了,基本上夠參考,唯一需要特別講的應該只有backend,因為backend可以使用的語言太多了,主流有PHP、Python、Ruby、Go、Node、Java、C#
我「個人」不推薦PHP、Ruby、C#,勉強不放進來的大概就Java,PHP職缺非常多,但低端爛職缺的比例也特高,這時代新公司新專案很少人會用PHP,八成都是要維護老舊專案、要不就是接案公司才會用
Ruby則是因為近期嚴重衰退,雖然曾經紅極一時,但不少當年選用Ruby的新創早都已經倒了,新公司新專案我沒見過有人還在用Ruby
C#就是上面講過的,我不推微軟套餐,Java的話新創應該沒人在用,但不少知名大公司大量使用Java,如果你的夢想企業用Java的話就上吧,除此之外我就不特別推薦了,剩下的我覺得都是不錯的選擇,一樣看你個人喜好吧
除了backend主流語言,當然也別忘了C/C++,出路當然也很廣,例如台灣Google的缺幾乎通通都是寫C/C++的
面試流程
再簡單講一下常見面試流程
越初級的職缺當然通常越簡陋,因為每間差異太大我就不講了,一定程度的職缺會開始有比較標準的流程,在你投完履歷後,第一個很常見的是有前測,可能是線上的演算法測驗、可能是專案型作業,因為應徵者很多,公司不可能一個一個花時間面試,所以這是用來最大量刷人的一關,基本上阿貓阿狗全都會在這就出局
最常見的就是線上測驗,例如Codility這種平台,就是給你一小時或兩小時之類的時間,幾道題目要你解出來,準備方法就是刷LeetCode,解題很多都是類似的套路,事前多練習絕對有幫助,測驗時更重要的是細心,題目不會給你完整測資,正不正確你要自己測,先以解出來為第一步,接著再分析複雜度,想想能不能優化
還有測驗前準備好紙筆,找個不會被打擾的空間、穩定的網路等等細節不要漏,專案型的作業壓力就沒那麼大,例如應徵iOS,題目就會是給你規格直接叫你做個App出來,這種的就是看重程式碼品質、架構等,不要功能做完就交差了事
如果你過了前測,面試通常可以分成幾種,Technical Interview、Behavior Interview & Culture Fit,可能一天內完成也可能分成多次,第一個Technical Interview就是測你的技術能力
前測只是最低門檻,這關才是要了解你的實力到什麼程度,這部分通常是由工程師負責面試,面試內容可能是白板題、live coding、紙筆測驗、或純問答,可能只有一關也可能多達三四關,這關通常最好也要準備演算法練習,白板最好也要練習,網路上有非常多解白板題的教學,有興趣再自己看,雖然很多人反對考白板,但我是覺得白板是有其意義所在的,就是在最極限的情況下你能發揮多少、你的思考流程是怎麼樣的
過了之後通常還有Behavior Interview & Culture Fit Interview,通常是由Engineering Manager負責,不大的公司甚至直接由CEO來面,主要是看你的個人特質、個性、同時常常也會摻雜技術問題進來,這部分可以說是最簡單、最輕鬆、但也可以說是最難的,因為幾乎無從準備起,面起來就像純聊天,但你可能聊完就被刷掉了,你也不知道為什麼
舉例常見的問題:
- 為什麼想換工作?
- 為什麼要選我們公司?
- 你在你前公司裡扮演什麼樣的角色?
- 你的職涯規劃?
- 你最近有學習什麼東西嗎?
- 你覺得自己有什麼優缺點?
- 你遇過最困難的問題是什麼?怎麼解決?
雖然難以準備,但也不是完全沒辦法準備,就是常見問題都先想好回答,有時候不要太誠實,但也不要說謊,更不要表現的就像個王八蛋,你要站在公司的角度想,公司想要什麼樣特質的人?這個問題的背後是想問出什麼?
另外很多大公司會有所謂的信條、文化、企業精神,通常都會寫在官網的職涯頁上,雖然大部分都是屁話,但記得面試前去看看,像Google甚至有個詞就叫Googleyness,就是所謂的Google精神
以上是個比較標準的流程,一樣每間公司都不同,甚至同一間公司每個部門都會不同,更甚同個部門不同人負責面都會不同,有些可以一天面完全部,有些可以拖一兩個月,像我都是比較仁慈,只重視實作,電腦跟題目給你,寫不出來就滾寫出來就ok
總結
差不多寫完了,最後補一些不知道放哪的
英文能力
首先再講一次英文很重要,做軟體工程師英文讀是100%肯定要,聽、說、寫也強烈建議要盡可能提升,軟體工程師最強、最大的好處是無國界,你做行銷、做公關,每個國家風氣、文化不同,換了國家幾乎就是從0開始,但程式語言全世界都一樣,經驗完全可以跨國累積,我認識很多想出國就出國、想換國家就換國家、以工作的名義一邊環遊世界的人
而且台灣人的能力其實很強,遠比什麼印度人日本人韓國人強多了,矽谷一堆印度阿三,不是他們比較強,他們只是臉皮夠厚,敢試敢衝敢講英文,韓國人日本人則是打骨子裡害怕英文,而且又有口音問題,台灣人實力強,又因語言關係,完全沒有口音問題,天生就有很大的優勢,但很可惜的是很多人都被語言能力給限制住了,英文不行就像不會卍解一樣,掌握英文才能解放軟體工程師的所有力量
再來常見的問題是要不要出國工作,如果你的目標是存錢,那麼不一定,尤其如果你是台北人,台灣的物價極低(房價除外),稅率也不算特別高,以工程師的薪水在台灣存錢可以非常快,很多歐洲國家其實薪水沒高台灣多少,但物價嚇死人,鄰近國家日本新加坡其實也都差不多狀況,美國如果你有機會的話倒是可以去闖闖看
大公司還是小公司好?
另一個常見的問題是,常常有人問的大公司還是小公司好?
一樣只能說各有優缺特色,大公司步調慢,可以學制度、流程、有人帶等,但可能比較官寮、制度死、薪水死、氣氛沉悶
小公司不好說,我改講新創比較合適,新創公司通常比較操比較精實,步調快、東西學得快、使用最新技術,但是可以說倒就倒,例如不久前的Honestbee不知有沒有人還記得,欠店家幾百萬都付不出來,從此銷聲匿跡,即使曾經是頂級新創之一,薪水可給到200萬左右,依然說收就收,這種情況在新創圈並不少見。
不過同時也看看另一個Mozilla,就算是世界頂級的一流外商(其實不是公司),台灣辦公室也是說解散就解散,軟體界大家就是這麼來來去去、這麼瀟灑,這也是個迷人的地方,有機會的話你可以大小公司都待待看,反正工程師做一兩年就跳槽很常見,如上所說過,一直蹲在一間公司才是最虧的,沒事就出去多看看吧
未來一定要轉管理職嗎?
還有一個是,到後來一定要轉管理職嗎?
一樣看個人,我也認識工程師做到很老的,我個人其實也不喜歡轉管理,做工程師就是逍遙自在,寫寫code就好,當manager就是要背負責任,我曾親眼見證過一個每天容光煥發的工程師,接下manager職位之後,不出半年面容憔悴、印堂發黑、雙眼煥散,宛如行屍走肉的
但不得不說,如果你想往上衝這是最快的路,而且更多時候你想轉都不見得有機會,這裡大家就自己腦補那張摔角手吵架的圖,我要應徵管理職 你要先有管理的經驗,我需要做管理職來獲得管理的經驗 那就去做管理職阿,所以我才來應徵管理職阿 那你要先有經驗阿,我他媽的要怎麼在沒有做管理職的情況下獲得管理經驗 去做管理職阿,所以有遇到的話,可以試著把握住機會
薪水
最後也提醒大家,不要自貶身價,市場的價格是由供需決定的,大家薪水都開低的話,市場平均的薪資也會跟著拉低,提升自己能力的同時也要不斷檢視自己薪水相不相稱,公司不加薪該跳槽就跳槽,不要輕易被摸頭妥協,這部分是勞方要團結的部分
補充①
補一個重要的,上面其實隱約提過但講不夠清楚,就是自學能力很重要,不要整天想要依賴著有人來帶、想要去這裡上課那裡上課,當然不是不行,有人帶確實可以少走冤枉路,但前提是帶你的人真的有足夠水準,如果你能遇到良師,那真的恭喜你
除此之外,要做軟體工程師務必要有大部分東西只能靠自己學的絕悟,在behavior interview中會有很大一部分就是要問出你的自學能力
相關的問題如:
- 你最近學了什麼?為什麼學這個?
- 你都是從什麼管道接收新資訊的?
- 你都是怎麼學習新技術的?
- 你研究過xxx怎麼運作的嗎?
甚至到一定水準比如面年薪百萬的職缺,你要是說你最近去上資策會的課來學習那面試可能差不多可以收尾了,上課可以,但是基本上外面的課程通通都是入門程度,在一個這麼需要主動自學的領域你要是只會被動的等別人來教,那你八成也走不遠
另一個是很多人問的,已經回答過但整理上來,就是關於學生時期怎麼多做專案,基本上就是你想到什麼就做什麼,腦中出現什麼界想天開的點子就動手寫
手機裡哪個app你覺得難用、哪個網站你覺得爛,那你就寫一個,通常你寫出來的東西只會更爛,但是沒差,你就寫就對了,不斷從生活中找可以寫成程式的東西,又例如你宿舍可能網路有限制流量,那你就寫一個流量監控器出來,流量快超標就跳警告,諸如此類,想到就動手,有時一寫才發現比想像中困難許多也沒關係,這些時間永遠都不是白白浪費掉的,在這過程你覺得缺什麼技術就買書學或上網查
講到買書又是一個主題,到底該如何自學好?
沒有一定答案,如果是非常入門,那我會推薦買書,書都是循序漸近、有系統有步調的教,會比你在那到處胡亂找來得快,完成一整個入門書的程度後就可以把重心轉移成從網路學
這時英文能力的重要性又會開始出來,初期可能不明顯,因為越簡單的東西越多人會搶著寫教學,一開始中文資源可能不少,到後面基本都是查英文為主,甚至查不到你就必須自己用英文發問,但不得不說,對岸的文章跟教學也不少,常常還是可以翻到中文的解答就是了