這個議題吵好久了,在這裡簡單紀錄一下自己的想法。
在很久以前只有 HTML 與 CSS 的年代,頂多再加上 jQuery,只要架出靜態網頁丟到 FTP 就可以被稱作是高手。
隨著瀏覽器可以做到的事情越來越多,前端能夠涵蓋的範圍也越來越廣了,光是前端這個名詞,可能就可以有多個分支:
- UI:對於使用者體驗的重視,其中包含了 API 狀態處理、資料處理、使用者體驗、a11y、適當的 animation 互動。
- 多媒體:對聲音、影像、直播比例偏重的服務,除了要對 UI 有一定了解外,還需要對多媒體背後的解編碼、傳輸有一些概念。
- 資料流 / 前端工程:對於工具框架的掌握度,對於業務需求、領域知識有一定的了解
- 資料視覺化 / Stroy telling:這部分除了對 Chart Library 或是 D3 的熟悉,還需要知道瀏覽器對於圖表的顯示極限在哪裡,何時用 Canvas、何時用 SVG、何時用 WebGL,除此之外可能還需要一些 story telling 的技巧,才不會做出花花綠綠的圖表卻沒有使用者買單。
- 架構:前端的部署、Logging、底層框架、規範、API 管理、狀態管理等,這方面需要經驗以外,也需要一定的 CS 知識背景來支撐。
- 遊戲:透過遊戲說故事,或是單純娛樂用,涉及遊戲理論,也跟一般的開法手法不太一樣
- 概念流:像是 Vue、React、Svelte 等直接從概念(Component、Virtual DOM)下手,徹底改變開發者對於前端的想像。
一個有 CS 背景的開發者寫出來的 UI,可能會比一位沒有 CS 背景的前端工程師還要糟,比起多念演算法可能多鑽研一下 a11y 跟 UI 對這個社會還比較有幫助呢
全部都能專精的人不多,基本上如果都專精的話也不會以前端自居了,都變身成 Software Engineer 了。這種人可遇不可求,也不需要每個人都要成為技能樹全滿的大神。
從以上的角度來看,不看公司的條件與需求就一味地強調演算法、CS 背景都是在耍流氓啊,很多時候只是徵才心態上的懶惰罷了。
回到老話一句,重點還是你的目標還有你想成為的人