前端職涯

-

轉職前端,資料結構和演算法要學到什麼程度?

this.web

轉職前端要學演算法嗎?

曾經有朋友問我

  • 轉職前端要不要學演算法?
  • 演算法好難完全不知道要從哪裡下手
  • 演算法和資料結構差在哪?
  • 而且現在 AI 這麼強,真的有必要學演算法嗎?

先說結論,演算法還是要學的,但是要有目的和方向的去學,因為時間是有限的,我們不能像無頭蒼蠅一樣到處亂飛。

今天這篇文章就幫你釐清為什麼現在前端還要學?以及演算法的底線要求,最後告訴你該如何開始學習~!讓你把時間花在刀口上

一、資料結構和演算法的差別?

  • 資料結構:資料的儲存方式、組織方式,像是 Array、Set、Map、Tree … 等等
  • 演算法:解決問題的具體步驟、流程、策略,例如:排序演算法、搜尋演算法、遞迴、DFS 和 BFS … 等等

對於前端工程師而言,最少要把基本的資料結構搞清楚,知道差異、優缺點以及應用場景。

二、為什麼前端還要學演算法?

最主要有三個原因

  1. 面試會考
    尤其是大公司,每天都有一堆人投履歷到大公司,他們為了更好的篩選人才,只能使用這種最公平且最省資源的方式。
  2. 溝通會用到
    當工程師在講 Map、Set、Hash Table、Tree 等關鍵字時,如果你有基本觀念,很快就能釐清當下的問題。
  3. 工作會用到
    雖然前端很少情況下會用到,但真正需要時,有學過就能拉開和其他人的程度,舉一個最容易用到也很基本的例子:陣列去除重複元素。這個常見的面試題,如果你知道 Set 的資料結構,就能快速用 Set 去除重複元素

三、轉職要學到什麼程度?

可以根據你要面試的公司來決定,如果要面試外商大公司,那要蠻全面的去準備,包括:

  1. 資料結構:了解 JS 內建結構+能手刻簡單版本 包括:Array、Object / Map、Set、Stack、Queue、Linked List、Tree 的基本概念
  2. 演算法:leet code easy ~ medium 的套路,可以從 leet code 75 開始下手
  3. 時間複雜度:能夠講出這個算法的複雜度和原因
  4. 前端手寫題:常見的 JS 手寫題,像是 Debounce、Memoize、Group By 等等,這裡可以參考 leet code JS 30

但如果沒有要挑戰外商大公司的話,

只要把基本的資料結構搞懂,能寫出相關的 Easy 題目,以及把 leet code JS 30 搞懂就挺夠了~!

四、轉職前端該如何準備演算法?

在準備演算法之前,一定要先把 JS 的語法和觀念搞熟,如果連語言都還很陌生就先學演算法,就是越級打怪了!

很多新手會犯的一個錯誤是直接去刷 LeetCode,對於非本科生的我們來說,一定是完全看不懂 LeetCode 的,所以這邊推薦一個學習路徑:

  1. 搜尋 代碼隨想錄,先從這邊開始了解常見資料結構的概念,先學到 stack & queue 即可,之後有間再補 tree 的相關觀念。可以搭配 Hello 演算法來加強觀念
  2. 如果覺得代碼隨想錄的題目太難,在了解資料結構的概念後,建議先從 Codewars 的 8 Kyu(最簡單)的題目開始熟悉,Codewars 和 Leet Code 類似,但他有更簡單的題目。
  3. 當你 Codewars 能寫 6 Kyu 的難度時,就可以去嘗試 Leet Code 的 Easy 題目了,可以先回去從代碼隨想錄開始學習

代碼隨想錄是大陸的資源,名詞和台灣的會不太一樣,建議以英文的名詞為主。

參考連結:

代碼隨想錄

Hello 演算法

Codewars

五、學習演算法的常見地雷

在學習資料結構和算法時,一定要注意這幾點

  1. 缺乏持之以恆的練習
    演算法不是死背幾天就能上手的東西,重要的是每天練習,每天刷一題,三個月後也不用太擔心小公司的面試了
  2. 主題學習順序錯亂
    一次先學一個主題,例如先把陣列搞懂,題目寫得出來,在開始刷其他類型的題目。不然很容易搞混彼此之間的觀念
  3. 死背題目不了解原因
    一定要理解解法的思路,什麼場景適合什麼資料結構或算法,如果只是單純死背,當題目稍微變化時就很容易做不出拉

六、已經有工作的前端工程師還要學演算法嗎?

一樣建議先把基本的資料結構搞懂,這樣最少當某些特殊需求出現時,你可以快速找到方向來解決。

如果你短期內沒有要面試跳槽,你本身對刷題也沒什麼太大興趣,我會建議先把時間拿去累積在專案和實務上,提高解決真實問題的經驗與能力。

當專案需要時,再更深入特定演算法也更有學習效率。

如果你有規劃要準備面試了,可以考慮利用衝刺的方式,1 ~ 3 個月把 leetcode 150 刷完就很足夠了。避免把戰線拉太長失去耐心。

結語

資料結構和演算法一直是非本科生卡住的一大難關,雖然轉職前端雖然不需要精通演算法,但基本的資料結構與常見題型還是必學的,尤其是面試時可能會被考到。

只要掌握 JS 內建結構、能解一些 LeetCode 的 Easy 題型、理解時間複雜度,再熟悉常見的 JS 手寫題,其實就足以應付決大多數前端職缺。

就算已經在職,懂一點演算法觀念也能幫助你解決實務問題、提升職場競爭力。

你可能會感興趣的文章 👇