2019年非本科轉職前端工程師經驗分享

Emma
14 min readDec 19, 2019

--

這一路上來受到太多人的幫助,當初在 Medium / PTT / 各種部落格上看到許多分享,希望也能回饋正在轉職這條路上的夥伴。

前言&轉職動機

轉職成為前端工程師,是我在 2018 年年底訂立的目標。動機的話簡言之就是工作上接觸到網站 / 網頁規劃的專案,開始對開發網頁產生興趣,經由自學後確信自己想走這條路。

大概從2018年 10 月先透過線上課程的方式自學前端技術,那時候我買了六角學院的前端組合課程,想說一口氣買完概念會比較齊全,價格也比較優惠。如果想用線上課程來轉職的人,很推薦六角學院,在問答區發問隔天就能得到助教群的回應,問題不會卡在一個地方太久。

在完成課程到某程度後,老師還有提供幫忙看履歷和模擬面試的服務,雖然我自己是沒有用到,不過以這種售後服務來看真的是相當佛心。

購買課程後,我用 Excel 表和蕃茄鐘規劃自己的學習進度,持續邊工作邊學習一段時間後,發現想要的學習模式是長時間的專注,帶職學習容易讓時間零碎化,安排的進度有時因外務就拖延了。隨著後續課程越來越難,其實是要投入很多時間才能理解消化的。

在某個深夜裡,我反覆的問自己要多久時間才能達成轉職的目標?思考辭掉工作拼轉職的可能性,所以我開始搜尋線下的實體課程的資源,我想要的模式是在同個空間裡,跟其他有類似目標的人一起學習衝刺。

後來班上的同學真的也給了我很多幫助,不管是實質技術或是精神支持上,沒有他們這條路一定會走得更辛苦。後來下定決心申請 AppWorks School,很幸運地被錄取了,於是在2019 年 7 月辭職並且投入全天時間學習網頁開發。

在 AppWorks 開發不止是每天上班八小時的時間,投入的時間真的如招生文宣上寫著:每週 75–80 小時沒在誇張XD 經歷睡眠不足的四個月後,如電影蒙太奇般,萬分努力一路打怪完成兩個專案,10月學期結束開始找工作。

中間有透過合作的 Hiring Partner,自己也有到外面投履歷,整體時間是先與 School 的 Hiring Partner 面試,有得到後續機會的就繼續走流程下去,同時投人力銀行平台找工作。

個人學經歷 & 背景

想說不免俗還是要提一下個人背景,我是 113 社會科學院碩士畢業,在上市上櫃科技公司工作大約快兩年半的時間,做的是數位行銷專員和網站 PM的工作內容,和前端工程師算是有擦邊球職務連結,所以在面試和個人履歷上我會盡量講述這部分的經驗。頗多公司對 PM 這段經驗有興趣,這塊很常被問到,面試到後來大概知道如何講出一些有趣的故事,經過不斷反覆的面試越講越順暢。

如果可以的話,盡量將前一份工作的關係跟現在要應徵的職位做連結會帶來加分。

面試公司

  1. 管道:大部分是從 Yourator 和 cakeResume 投,還有 AppWorks School 這邊的 Hiring Partner,以我個人而言第一份想要在新創,所以選擇的平台會從新創公司常發布職缺的管道開始找。
    可以想想自己是比較適合或比較喜歡什麼環境。個人當初篩選工作的基準是有興趣的產業,以及開發框架是使用 React 的工作內容。
  2. 投履歷數量:在 Yourator, cakeResume, AppWorks School 共投遞 27 間公司,後續在 104 上投 8 間。履歷通過進一面共有 17 家(有些我主動放棄小作業或是 online coding test),邀請進入二面共有 10 間,最終陸陸續續一共拿到 4 個 offer。
    在所有面試跑完前已有拿到心儀公司的 offer,確認後便婉拒其他的二面。
  3. 公司產業分布:金融科技、共享經濟、長照科技、電信業、線上教育平台、電商、互動廣告等等,博弈跟接案經個人考量後則沒投。
  4. LinkedIn 上也可以找找職缺,通常我會瀏覽記下後再到其他的人力銀行上投履歷,領英上的回覆率跟同學討論過感覺是偏低。

作品集

強烈建議非本科、無真正軟體工程師經驗的轉職者,準備好一至兩個個人作品再去面試,一方面是為讓對方瞭解你的實力在哪裡,二來許多問題也會從你的專案下去問。

我的個人作品兩個都是各別花 4–5週完成的。一個是純 JavaScript 寫的電商網站,可選擇商品尺寸和顏色,有接 API、第三方金流和第三方會員登入機制。另外一個則是 React 框架寫的社群網站,可新增、刪除、按讚、回覆他人貼文,後端用 Node.js / Express.js 寫 API,資料庫使用 Google Firebase 儲存 data 和做會員身份的驗證。

很重要的是,要弄清楚自己專案中為什麼要這樣寫,為什麼要使用這個技術?這個技術的好處是什麼?是為了解決什麼問題?這些都是可能被問到的問題,你必須對自己的作品很熟悉很熟悉。

建議要將 Demo 這部分的介紹練好,講給朋友聽或是錄音多聽自己講幾次,講出使對方感到有興趣並想追問的地方,也要明白自己作品不足的地方,像我就被問過,「你覺得最困難的地方在哪裡?當初是怎麼解決?」,「如果還需要優化,你覺得部分還需要再重構?」這些都是可以事先準備好的問題。

面試問題和流程

  1. 最常一開始不免俗就是請求職者先自我介紹,請準備約 3–5 分鐘左右的內容,非本科轉職滿常被問你為什麼想要轉職?想好自己的故事,讓面試官理解你的動機並且問更多。我是從學歷、經歷、動機這樣鋪陳下來,請表現出對 coding 的熱情,盡量避免說我想開發大財所以來當工程師,相信每個人轉職有自己的動機和理由,請適度包裝並且行銷其中的故事,不要讓面試官對你的動機持懷疑態度。
  2. 自我介紹講到個人作品的時候,請不要害羞的直接打開電腦說「那我可以 Demo 作品給你們看嗎?」強迫推銷目前為止沒有被阻止過XD 欲呈現的亮點請先排序練習好,可以先講一個段落總結所有專案的特色與功能,有點像是打開一本書的目錄先看重點摘要,不會讓聽的人好像有東西四處散落的感覺,整體重點說完再接著去介紹各個部分的功能。
  3. 承接上兩段,不要預期所有面試官會詳細看過你的履歷和資料,這時候用口頭說明和 Demo 就是讓他來了解你的重要機會。
  4. 有些公司會有技術筆試和口頭問答的部分。自己覺得哪裡弱的部分就多花時間加強,像我剛開始超害怕白板題,面對題目不用編輯器考就會一片空白,就是多練習沒有別的了。

JavaScript 概念是必考的部分,這個網路上找就有很多,prototype, closure, scope, hoisting, promise, asynchronous, event loop, ES5 vs ES6, primitive type, immutability, 陣列批次操作的方法,還有 https, TCP/IP 等等,另外如 Webpack, babel 到 React 的 lifecycle, pure component, Redux pattern, Thunk (或是你使用的其他 middleware) 這些都有機會被問到。

*超級推 JS 概念影片,新手容易誤解的雷幾乎都包了:JavaScript: Understanding the weird parts (吃不下英文版的話,Udemy 上有賣中文翻譯版,只要俗俗的三百出頭左右)

不曉得有沒有人跟我一樣,心裡知道某個概念大概是什麼,就是很難用文字清楚解釋。後來覺得有個不錯的方法輔助,就是搭配一個實際例子解釋,讓抽象的概念更具體化,YouTube 上有很多實作概念的 影片,就理解並記下一個例子吧!例如被問到 call 跟 apply 有什麼差別?為什麼要使用?當下沒有例子的話真的滿難說明的,腦海中有例子就能直接跟面試官討論。

另外白板題的部分。在投的公司中遇到有考白板測驗的公司數量不算少,Online coding test 的有 2 間,面試寫考卷 or 白板的共有 4 間。不同公司使用的線上測驗平台也不同,建議可以先註冊帳號熟悉作業環境再開始測驗。

推薦幾個影片,下方第一個頻道講解很多概念的實作,第二個頻道是「一個好的寫白板題考試過程應該是怎麼樣」。不要看完題目後就埋頭苦寫,我自己的經驗是:討論互動的過程會重要於你是否真正解出正確答案。

*推薦解說 JS 概念的 YouTube 頻道:Web Dev Simplified*面試解 LeetCode 互動影片範例:How to: work at Google

面試中曾經有一間公司沒有進到二面,追問原因後得到的回饋是:白板題看很久,不理解卻沒有直接跟面試官討論。

還有另外一個例子,是我與另外一位面試者(本人朋友) 面試同一間公司,我答對了白板題而朋友沒答對,但最後卻是朋友錄取了。可能當中還有其他的原響,但這兩個經驗告訴我解出正確答案並不是最重要的因素。

面試的準備方式

  1. 找別人的面試題庫來考自己,不懂的就做筆記(筆記很有幫助,面試前我也會打開筆記讀),特別是有想申請的公司,直接上網找分享過的人的面試題就對了。
  2. 刷 leetCode,我選了 Top Interview Questions 這系列來刷。先試著用自己的方式解,30分鐘至一小時,解出來或是解不出來就去找別人的解答,試著理解其中用的技巧和概念是什麼,通常會牽扯到一些資料結構,然後我會去找 YouTube 影片或是其他文章幫助自己理解概念,做筆記把重點思路解法寫下來,再自己做一次。
這個過程很花時間也很燒腦,但會感覺到自己真的有實際的進步,我是一天刷兩題就差不多了(很累XD) 後來把 Array, Binary tree, Dynamic Programming 這三個部分解完。*解法可以參考強國版力叩,很多強者的解法。*另外在網路上找到題庫:JavaScript 概念測驗題 repo,透過題目可以清楚自己到底懂不懂 JS 概念。

3. 最高曾經在一個禮拜內完成五間面試,面試車輪戰真的滿累的,不過越面試會感到越上手。安排時間是一個學問,曾經為了寫某間公司的專案作業花了大約一個禮拜做,因為是很想去的公司仍然花了很多時間完成。
如果作業或是線上測驗卡太多來不及完成,時間安排要做好取捨。

4. 對於特別想進的公司,我會把職務 JD 詳細看過,找出公司會特別在意的技能和概念,然後列出可能會被問的問題,多花時間複習與準備。

5. 面試訣竅覺得沒有別的了,就是多面試,面試回來後繼續修正,被問到不會的千萬不要回來後很沮喪就忘記了,把不會的弄懂不要再犯一樣的錯誤。

面試前

  1. 面試前請把電腦充滿電,等待的時候可以先接上手機 WiFi,不是每間公司都有WiFi讓你接。我會先測試功能,假如手機網速很差影響 Demo,請記得跟公司的人詢問有無WiFi。
  2. 記得帶水,有些公司聊到兩三小時嘴巴真的會很乾。
  3. 快到公司前我會吃一顆口香錠,盡量保持在好的狀態。
  4. 我有把履歷印下來,不過都沒用到,面試的公司都有我的履歷電子檔或是紙本 (小七印彩色超貴的…)。備著還是比較安心。
  5. 自備鉛筆盒和立可白,為了寫考卷和填資料表用的。有些公司提供的原子筆很難寫,喜歡用自己的。
  6. Demo 作品完我會把電腦保持開著的狀態,在最後問公司問題的環節盡量把公司的工作模式、環境、組織以及未來要進行的業務做成筆記,方便之後有拿到 offer 之後可作比較。
  7. 把面試的公司相關新聞和業務查一查,有 LinkedIn 也可以看一看。強者朋友跟我分享,他在和對方聊未來業務規劃的時候,會去問對方是否未來要開發 XX 功能,或是告訴對方自己是產品某個功能的愛用者。

公司知道你有特別對他們做 Survey 是加分的,像我自己面試順口跟對方聊到,在 LinkedIn 上看到公司獲得 XX 獎項,對方的眼睛瞬間是變成亮的,代表你不是亂槍打鳥的求職者,是真正想加入這間公司。

面試被問到的題目(不分公司):

以下是大概有被問到的題目,有些公司沒有記錄到,大致上是這樣

技術題:

  1. 什麼是 JavaScript 非同步
  2. 解釋一下 Redux 的流程
  3. side effect 是什麼?
  4. forEach 跟 map 的差別
  5. 解釋 React 生命週期
  6. 為什麼選擇用 Redux不是 context
  7. Redux 有什麼好處
  8. 看到班上同學很多用Hooks / context,為什麼不使用
  9. 有用過 styled component嗎
  10. 什麼是 babel
  11. 有聽過 pure component 嗎?請解釋
  12. 平常怎麼處理跨瀏覽器的問題?有遇過什麼問題嗎?怎麼解決?
  13. display: none 跟 visibility:hidden 差別
  14. styled component css 跟 一般引入的 css 哪裡不一樣
  15. updating 階段想要重新 render,要使用哪個 function (updating 中,componentWillReceiveProps 跟 shouldComponentUpdate 差異)
  16. Redux 四個重要的角色
  17. Redux 怎麼把 props 丟到 component? (HOC)
  18. 般同步 function 跟非同步 function 有什麼不一樣?一般非同步 function 跟 promise 又有什麼差異?
  19. 什麼是 event bubbling?
  20. 你最喜歡的資料結構是什麼?優缺點好處是什麼?
  21. <div><span> 元素差在哪裡?請舉出其他的 inline 元素
  22. 請解釋 LocalStorage, cookie, sessionStorage 的不同?
  23. 如果不用 cookie 去記錄使用者已經訪問過,單純使用 HTTP 無法做到這件事情嗎?
  24. 你說你會用 scss,跟 CSS 比起來好在哪裡?

一般題:

  1. 自我介紹
  2. PM 的經驗幫助你什麼?
  3. 專案中覺得最困難的地方
  4. 專案中認為值得一提的技術是哪個?
  5. 有沒有考慮回公司繼續當 PM
  6. 你會去把第三方套件的 code 拿出來研究嗎?怎麼研究?

面試循環的心理建設

其實一開始手上沒半個 Offer 的時候真的會很慌張,曾經還被面試的公司說過「你沒有工程師的氣」(什麼是工程師的氣呢?我到現在還是通靈不了無法理解),或是暗示覺得我比較像是 PM 等等,甚至最讓我生氣的是被說「你沒有企圖心」這些評價。

我不曉得對方有這樣評價的原因是什麼,也只能安慰自己也許公司在找某些理由告訴你,你不適合我們。

面試過程中也會遇到很棒的公司,讓你覺得在這場面試過後是成長的,雖然沒有得到錄取,但他們會很實際的建議你該怎麼去充實或是修正,這是我們該去聽的。

求職總會有些黑暗期,處在不斷地懷疑自己、否定自己的時候,是不是真的比不上別人才會一間公司都不發offer,到底還有什麼不足的地方等等的負面想法如排山倒海而來。

會有這樣的想法很正常,請不要看不起自己的脆弱,這種時候我就會試著倒帶腦內記憶,回想自己為什麼會想要轉職的原因?不要忘記寫程式時帶給自己的成就感和快樂等等。

回想得到的評價,或許只是還沒遇上願意欣賞自己的公司,去公司面試其實也是求職者在面試未來工作的夥伴,無論如何不要忘記自己的初心。

心情真的很沮喪很差的時候跟朋友吐吐苦水,讓自己放鬆一下沒關係,但不要太久,記得還有挑戰要去面對。

面試後

心靈雞湯的部分寫完後回歸正題,很有興趣的公司可以發個 Thank you letter follow up 後續,讓對方感受到你的積極,如果面試中有講得不夠完整或正確的地方,可以用這個機會補充解釋一下。聽聞同學這招很有效果。(不過我自己是只寫給一間公司啦)

拿到 offer 之後&談薪水

順利拿到第一個 offer 後,除了心裡會比較踏實,像是開啟好運的大門,後續也順利得到其他 offer。接下來就到選擇的時刻了。

請正視自己的需求,作為轉職新人,可以列出三點自己會在意的部分,例如公司的產品/產業有無前景、有沒有 code review、技術上用的框架等等。假如無法忍受太低的薪水,那就不要勉強自己接受,不然進去之後也不會做得開心,如果想去制度完善的公司,那就盡量鎖定中大型公司,認為自己個性適合新創那就投新創(有點廢話),認識自己並釐清想要的東西很重要。把底線清清楚楚地列出來,在跟公司談的時候,發問的環節要盡量去問出對方答案,公司能提供的是不是符合你所期望的。

假如前面幾關技術通過後,HR 就會出現了,遇到滿多是技術關卡結束後,HR 直接出現詢問期望待遇。這邊可以先問問公司願意給這個職位的範圍是多少,或是投履歷前先在求職網站上確認有無符合自己的期待,以免到了後續的關卡因為薪資談不攏而無法接受。

談薪水的話我是參考這篇,嘗試過有成功把 offer 談高一點。不過這要建立在有幾個 offer 的狀態下比較好談,因為遇到的 HR 都滿喜歡問現在有沒有 Offer 了,或是面試過哪些公司。公司在面試人也是有成本考量,如果對你有興趣,會願意繼續跟你討論薪資,假如提了一個範圍對於公司來說過高,公司是會詢問你有無討論的空間,不太需要害怕開過高的薪資而被拒絕,不過也不要開了一個遠高於對方在 JD 上提出來的薪資就是了。

故事尾聲:上工啦

最後很開心也覺得幸運地拿到想進的公司的 Offer,曾經為了抉擇煩惱許久,除了跟身邊的人談談,這篇文章在做選擇時候給我很大的幫助:身為前端,你瞭解公司的專案性質嗎?

轉職成為工程師後,這段旅程並不是到這裡畫下的句點,還有許多不足要去努力的地方,前端是一條必須持續學習的道路,接觸後發現需要搞懂的東西還有太多太多了。

最後最後,希望這篇文章能給正在走這條路朋友一些幫助和力量。記得要離職的時候,曾經有同事跟我說「你沒辦法跟本科系的人比啦,去學習就當個經驗」或是「我以前有朋友試過但是結果不怎麼好」,別人可以告訴你很多失敗的故事和經驗,但自己的故事只能由你創造。

文末附上我見證過許多次且神奇的一句話共勉之,「當你真心渴望追求某種事物的話,整個宇宙都會聯合起來幫你完成。」 — 《牧羊少年奇幻之旅》。

--

--

Emma

Front-End Developer from Taiwan | Medium 主要更新工作雜談和書籍閱讀分享 | 技術 blog 請往這邊走:https://emmaswy.hashnode.dev/