本著取之於網路,回饋於網路的心境,

來拋磚引玉地分享一下一個前端工程師找工作的心得,

主要想分享一下整個「找工作的流程」,

中間也會穿插一下對於徵才者的一些看法。

希望讓求職或徵才的人,都能更了解要怎麽對待前端工程師 XD

題外話是之前有寫過一篇關於前端工程師入門學習的:

PTT 文章代碼:#1MdHy0Kj

網誌連結:http://abalone0204.github.io/2016/01/18/way-to-fed/

網路上還有很多其他優秀的前端學習資源,

推一下保哥的:我要成為前端工程師!給 JavaScript 新手的建議與學習資源整理

只是到底要學習到怎樣的程度才能找到想要的工作,

這中間的隔閡,似乎還是很容易讓人迷惘,

所以今天這篇就自己的經驗來來分享,

身為一個普通新鮮人是怎樣準備「找工作」這件事情,

老實說我覺得重點永遠都不該是什麼研究履歷怎樣排版、怎麼猜 HR 或面試官看履歷的眼動,

甚至問學什麼比較有前途,

我不是說這些事情不重要,這些事情你當然還是得做,

只是如果你只是做了這些而已,往往都是治標不治本的方法。

做一件事情有分「術」跟「道」,

「術」是具體的做法;「道」則是做事的過程和背後的哲學。

而前面講的這些具體作法,我把它們歸類為求職「術」(方法),

這些「術」,不懂寫程式的獵頭可能都比你瞭解,

所以身為一個實事求是軟體開發者,

我們應該要找到自己為了什麼工作,

以及想做什麼工作的本質,

也就是探詢自己的求職之「道」,

懂了之後再搭配方法(術),找工作這件事自然也就水到渠成,

就算有問題,也會比較知道問題出在哪裡。

也許我工作經驗還不足,有想地不夠的地方,

但希望能幫助到還在迷惘的大家,

當然,也希望能省掉一點面試者和被面試者的時間(XD。

註:
這裡的前端工程師指的是不負責出圖,
而是要跟設計師協作、寫 html、CSS、JavaScript 的 web 前端工程師。

整篇文章的結構大概是這樣子:

  • 我的背景介紹

  • 找工作之前

    • 為什麼要當前端工程師
  • 開始找工作

    • 評估自己的能力

    • 找到想去的地方及準備

    • 面試完以後

    • 開價

  • 自己的經驗分享

  • 結論

背景介紹

非四大的學士,不是本科系,

2014 年中開始學習寫程式,

之前完全沒有寫程式的經驗,到現在差不多寫了兩年。

學習的路上碰到蠻多困難,也常常卡關,

覺得自己資質在眾工程師間絕對是屬於中下的,

當年要學寫程式時,我的朋友告訴我:

「寫程式太吃天份了啦!現在才起步太晚了。」

那時候的我看完了 vgod 的「神乎其技的程式設計之道」,

儘管滿腔熱血,

但也清楚這世界上有像 vgod 這種天份好、夠努力,

更別說對 CS 充滿熱情的人在;

只是後來仔細想想,哪個領域不是這樣子?

再者,開始工作和學習也發現:

其實許多人的努力根本就還沒達到要談天份的程度,

就算不跟一些怪物比,這世界還是充滿機會的 XD

而且連我都能做到的事情,相信大概八成以上的人都能輕鬆做到。

這篇文章寫的很粗淺,

主要的目的還是讓新手能省掉一堆繞遠路的時間。

為什麼要當前端工程師

首先要問自己的問題是:

「為什麼要當前端工程師?」

為什麼你要來寫程式?為什麼你不去做後端?

為什麼你不想做 Data Engineer?

這不是一個答錯就找不到工作的題目,

但是從來沒有思考過這個問題,那其實就是在思考上懶惰,

現實做了再多努力也很容易只是徒勞。

而且這個問題的答案也是當你遇到挫折時,

真正有辦法支持你繼續走下去,而不是得過且過的根。

在這裡也分享我對這個問題的想法,

對我來說初期選擇網頁前端的原因是:

  • 可以看到東西,比較有成就感。

後來也發現前端雖然很好入門,

但是前端仍然那麼缺人的原因,

是勞力的供需雙方都出了問題。

首先是「勞力的供給者(求職者本身)」的問題:

正因為網頁前端算是個「好入門」的領域,

所以許多人不把自己當作真的「軟體工作者」,

以為我們只要照著需求拉拉頁面就好,

有的也為了薪水所以跟風跳了過來卻發現薪水不如預期,

這時候就不免得問自己如果這個工作門檻這麼低,

被取代性這麼高,

到底哪來的自信覺得這樣有辦法坐領高薪?

許多「前端工程師」忽略了瀏覽器本身是多麽複雜的軟體,

也忽略了你將來可能要協作的會是一個複雜的系統,

少了一些電腦科學和軟體工程的知識當基石,

面對問題時你會少了很多想像力(這裡指對於解決問題的方法)。

蠻常聽到一些人在抱怨說學校裡教的理論脫節,

老實說,技術的東西會隨著時間迭代演進,

也許教授沒有告訴你這個跟你未來要做的事情有什麼關係,

捫心自問一下,

其實我們是在根本不夠熟悉理論前就嫌他不實用而已。

Computer Science 一直都是一門實用的科學,

但如果只是為了考試而念,那當然就不實用啦!

前端的生態大概每幾個月就會跑出一大堆新東西,

(像是最近很紅的:Vue.js)

當追隨各種 framework 或是工具時,

很容易顯得浮躁,會學的不好甚至盲從,

更重要的是看一下這個「工具」能解決什麼問題,

細細探究下去會發現「工具」為什麼要這樣設計的哲學,

也會發現其中有許多原本以為很「理論」的東西被實作在裡面,

而這些「研究」就是在鍛鍊選擇和學習工具時的品味,

長期來看,這讓你自己更快速地建立自己的知識體系,

也更快速地提升自己的價值。

只是許多人忽略了這點,

忙著去追逐一些絢麗的畫面、火熱的框架,

這就是對自己的職業定位不夠清楚的緣故。

再來是「徵才者」的問題:

這裡會比較單純一點,

因為大多都是徵才方不知道怎樣面試一個前端,

或者不了解前端的重要性。

有些人心裡覺得:

「啊不就畫面拉一拉、改一改,有什麼難的?」

或是:

「有必要搞那麼多 Framework 或是 pattern 嗎?什麼 MVC、MVVM 的。」

但實際上 UI 實做起來的程式碼很容易就不合邏輯,

要寫出能夠維護、好擴充的程式碼更是需要實務和一定的「品味」,

舉例來說可以看看下面這個Flux challenge

這是 Cyclejs 的作者對於 Flux 這個單向資料流框架發起的挑戰:

不用下去實作,光是看一下就會發現要良好地控制資料流、畫面的 state ,

以及設計一個精巧的 template 有多困難。

正因為對求職者期待錯誤,薪水自然也錯誤,

到最後如果好運把東西做出來,那可能也跟屎有七八分相像。

當你真的開始重視前端的複雜度和專業時,

自然面試的水平以及來應試者的水平就會上升,

好的企業跟求職者是相輔相成的。

講完雙方,言歸正傳一下,

對於我來說,

後端 API 的邏輯是理性的,

設計師圖稿的美感是感性的,

而前端就是站在理性跟感性中間的介面設計者,

處於這個位置,不管你面向哪邊都能夠看到許多有趣的東西,

而前端本身又一直是一個「生機蓬勃」的領域,

這是我為什麼選擇這個職業的原因,

但這也是我認為前端工程師容易浮燥、忘記如何追求知識本質的原因,

這個之後再提。

開始找工作

評估自己的能力

這裡不空談什麼人格特質,

只談兩件事情,一為學歷,二為技術力。

學歷:

首先是大家最愛討論的學歷,

老實說,如果不是大公司或是比較傳統的企業,

前端對於這一塊需求還好。

儘管學歷可能不會是一個好的評斷標準,

但在履歷數量大的時候直接用學歷篩,

對於想偷懶的徵才者來說蠻方便的。

另外,學歷是最現實的東西,

假如你跟我一樣學歷不好看,卻又非得進擺明需要四大碩本科學歷的大公司不可,

儘管上網問完有些人會告訴你有作品集比較重要 blabla 之類的,

但八成的情況是這些意見比較多是屬於安慰性質而已,

還是務實一點努力去考碩士或是換個目標吧 XD

把時間花在猶豫和求安慰真的是最可惜的一件事情。

如果你只是單純想要學習的話,你並不需要成為學生,

可以先看看這篇文章

技術力:

前端的東西太多太雜,我不會一一細列,

但對於你每個想火力展示的技術,

我認為都可以分為以下三個等級:

Level 0: 用過,看過 document 上的 get started。

1
2
3
4
5
6
7
8
9
10
基本上處於這個階段的技能,別硬要放上履歷表,
而是問問自己除了好玩之外為什麼要學這個?
最好能講出這技術背後的想法為何,
如果連你仔細思考後都無法回答這問題,
那真的得問問自己為什麼要把時間分配在這上面。
舉例:
我對於 Cycle.js 這個 framework 就是如此,
當初只是為了瞭解處處是 Observable 到底是怎樣的體驗。
(意外相當不錯 XD,只是基於現實考量沒有用它)
有興趣可以看看我的 Blog 上有些簡單的學習紀錄。

Level 1: 有應用在實務上過。(指上 production)

1
2
3
4
5
6
通常服務一上到 production 環境後會遇上各式各樣的毛,
而且到這等級,好運一點的話你會有作品可以 Demo,
再怎麼不濟也要好好回想自己曾經遇到哪些 issue 或 bug,
甚至是比較麻煩的地方,將這些經驗分享給其他人,
大多都能得到不錯的回饋。
在這一階段的技術能證明你能獨立作業並有實質產出。

Level 2: 摸透技術的本質

摸底

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
這裡指的摸透,不只是有豐富的實務經驗,
同時也對這個技術背後設計的哲學有深入了解,
能去進行底層的擴充和更改。
如果真的到達這境界,也應當要能理解其發展出來的歷史背景,
很多時候會發現這些東西跟商業或是人的關聯性,
讓你能更站在作者的角度去思考。
到達這一階段的人,通常能分享知識並提升身邊的人素質。
舉例:
我在看過 「Secret of the JavaScript Ninja」這本書前,
曾經傲慢地覺得 jQuery 實在沒存在的必要,
但細究當時的背景,
一個有辦法跨越各個瀏覽器以及提供一個簡潔的介面來做 ajax 是很了不起的事情,
更別提 jQuery 在原始碼中有許多程式設計的典範,
以及為了工程需求而做的折衷,
這些都不是一個沒摸透 JavaScript 本質的人能寫出來或是理解的。

至於到底要放哪些在履歷表上,或是該怎麼展現,

如果你還是沒辦法靠自己完成,

相信我,對自己有了上述的理解,

你也更容易讓別人願意幫助你。

假如只說個我會 jQuery、React、Angular,

除非通靈,不然沒人知道你的「會」是到哪個程度,

身為一個工程師,連自己的規格都描述不清楚那是非常不專業的事情。

找到想去的地方及準備

假如你已經很有經驗,獵人們自然會排隊幫你找工作;

反之你就得自己做打算,

但公司種類簡直跟前端框架一樣也是百百種,

如果有任何文章提出一個應付所有公司的解法,那一定是在扯淡。

這階段真正要解決的問題是:

「你到底想要在哪裡工作?」

很多人會抱怨把 104 打開或者是投履歷都沒人理或者沒回,

其中一個很大的問題是因為這是個「海投」的策略。

將心比心的問題,身為一個求職者,

你會希望自己被好好對待,

可是「海投」卻是一個讓你沒辦法好好對待每個機會的策略,

這不見得對於每個人都成立,但我認為對方如果要付出面試時間,

自己也應該準備足夠,讓對方沒有在浪費時間的感覺,

正因為每個選擇都要付出很多時間,

所以有沒有想清楚是不是非這間公司不可就顯得非常重要。

接著繼續解開「到底想在哪工作」這個問題,

前端工程師目前在台灣是一個有點尷尬的職位,

光是看許多人套 bootstrap 就稱自己 fullstack,

就知道蠻多公司不重視前端這個工作,

所以挑選時,除了各方上網搜尋意見之外,

也別忘記去公司的網頁 inspect element 看看 XD

不要想著進去一間公司就要待到老死,這樣對你和公司都是壞事,

(想待到老死去考國營就好了,不用在這塵世間浮沈)

先設定一個目標和時間,比如說待兩年,

然後問問自己這兩年你要完成什麼事情,待在這間公司有辦法幫你達到嗎?

很多職涯相關的文章已經講說面試要準備問題問面試官講到爛掉,

但每次提供的問題都蠻垃圾的,有時候會有點分不清楚內容農場跟媒體的差別。

總之「要問面試官什麼」的根本就是上述那個問題,

所有你想要的,都應該 contribute 到你想完成的那件事情上,

而有了這個問題當作基礎,就很好延伸思考了。

當你現在準備和了解的越少,

你未來可能要付出的代價越大。

開價

談薪水其實已經偏向「術」,只是這個階段實在太重要 XD,

所以特別講一下。

一定要開一個讓自己覺得有尊嚴的薪水,

不要因為很怕自己不值得這個錢而開一個自己無法接受的低價錢,

不然你進去才一直覺得公司欠你,心態會漸漸扭曲。

另外這裡沒辦法寫的很具體,

是因為我實在無法評斷會某技能,就值多少錢,

一來,會到什麼程度只有自己最清楚,也關係到面試怎麼展現;

二來,地區、產業、公司的不同,都會大大影響。

如果前面的準備有做好,

這時候應該對自己的喊價應該要充滿信心才對。

面試完以後

一面試完,

要先思考的問題就是:

「你有多想跟面試你的那些(個)人一起工作?」。

就算未來不是你真正 co-work 的人,

我相信待在同一間公司的人都會有某些相同的特質。

面試要考倒一個人是相當容易的,

所以要自己過濾一下哪些明顯是在刁難。

(履歷上完全沒提到自己會,卻又故意問非常深入的部分。
比如說應徵前端結果問你熟不熟 CSP 和 Actor model的差別)

再來就是檢討自己有哪些不足的,簡單分可以分成兩種:

一,短期內學習就有效果的。(e.q:某個東西的 API 不熟悉,或是某個名詞你不知道是啥)

二,需要長期養成基礎的,要再擬個計畫來補強。(e.q:演算法不熟)

接著再更改履歷,

強烈建議用 git 來管理自己的履歷,

你也更容易從中看到每個版本的自己有什麼進步,

而針對不同的公司只要新開一個 branch 就好了。

每次面試完以後,我也會回到再度「評估自己的能力」一次,

如果你準備的夠足夠,

面試完時通常都能獲得更多,

因為你去的都是你認可的公司,同時你每次也是全力以赴。

自己的經驗分享

這裡首先來分享自己曾經忽略的幾個點。

什麼資料結構、演算法,或是作業系統就不再提。

  • SEO:
    • 有些公司會需要前端工程師來處理 SEO 相關的東西,其實是蠻合理的。
      推薦一下這篇文章,看完你會知道為什麼我認為這跟前端有關了:
  • 網路:

    • 這裡的用「網路」是有點太 general,不過我找不到更簡單的詞來說明。
      舉例來說熟悉 http 中各個 method 的特性和 status code 會蠻有幫助,
      了解網路相關的知識也容易讓你對產品做出更多優化。(cdn, gzip)
  • 瀏覽器:

    • 了解瀏覽器是怎麼運作的,
      推薦一下這篇文章,應該很多人看過了 XD

然後是一些迷思:

1. 寫文章或是經營 github 上的 side project

我的經驗是如果單純為了找工作才刻意去做這些事情,

那很可能會無法持之以恆,

我寫的所有技術筆記都是為了讓自己以後忘記時有東西可以參考,

同時我也認為我們平常工作上靠 google 得到那麼多資訊,

自己應該有一些回饋的責任,

而且如果搜尋問題的前幾個結果能是繁體中文的文章,

那會是一件很莫名令人開心的事情。(XD)

總之如果這些事情是你真心認為想做再去做才有意義。

2. 參加社群

人脈真的很重要,而分享和吸收新知也相當有意義。

我記得第一次參加大型技術 conference 時,

看著世界上許多人技術和商業都如此強勁,

真的會起到相當大的激勵作用。

不過就這陣子的觀察,有些活動很近似於大拜拜的行為,

好像參拜完大神會得到靈魂上的昇華一樣,

這不是一個很健康的現象。

參與社群時不應該時時想著從中得到什麼,

假如得到了什麼,更要思考著該怎麼樣去做有效地回饋才是。

3. 是否有必要去上職訓、資策會⋯⋯等等課程

我沒有上過任何上述的課程,這裡也不想談論自學和上課哪個好。

但這些課程中,大多都是在業界實戰過的老師,

出來的學生素質會參差不齊的原因很有可能是因為:

他們沒真正想過「為什麼想成為前端工程師」,

去上課可能是一個更有效率建立知識系統的選擇,

但把上課當成一個速成脫離低薪的「速解法」,

就很容易高不成低不就,甚至怪這些課程沒有用。

結論

最後想要分享一下之前在 twitter 上看到的這段話:


你使用的語言被人嘲笑
職業被藐視
解決問題的努力被視為噱頭
自詡不弄髒手的人輕視你面對的問題
執行引擎到處是實作者從未重視過的 Bug
所有跨平台的承諾都在增加你要解決的問題
UX認為要的效果很簡單
QA給你的回報難對上問題
最後,報酬通常低於平均水準

你說,你想成為前端工程師

網頁前端的迭代速度跟特別的技能樹,

讓這個職業既有吸引力又讓人容易感到挫折,

希望透過這個分享讓大家更了解前端工程師,

也讓對前端有興趣卻不敢踏出那一步的人可以試試看。

References