前端職涯
-轉職前端,資料結構和演算法要學到什麼程度?
this.web
轉職前端要學演算法嗎?
曾經有朋友問我
- 轉職前端要不要學演算法?
- 演算法好難完全不知道要從哪裡下手
- 演算法和資料結構差在哪?
- 而且現在 AI 這麼強,真的有必要學演算法嗎?
先說結論,演算法還是要學的,但是要有目的和方向的去學,因為時間是有限的,我們不能像無頭蒼蠅一樣到處亂飛。
今天這篇文章就幫你釐清為什麼現在前端還要學?以及演算法的底線要求,最後告訴你該如何開始學習~!讓你把時間花在刀口上
一、資料結構和演算法的差別?
- 資料結構:資料的儲存方式、組織方式,像是 Array、Set、Map、Tree … 等等
- 演算法:解決問題的具體步驟、流程、策略,例如:排序演算法、搜尋演算法、遞迴、DFS 和 BFS … 等等
對於前端工程師而言,最少要把基本的資料結構搞清楚,知道差異、優缺點以及應用場景。
二、為什麼前端還要學演算法?
最主要有三個原因
- 面試會考
尤其是大公司,每天都有一堆人投履歷到大公司,他們為了更好的篩選人才,只能使用這種最公平且最省資源的方式。 - 溝通會用到
當工程師在講 Map、Set、Hash Table、Tree 等關鍵字時,如果你有基本觀念,很快就能釐清當下的問題。 - 工作會用到
雖然前端很少情況下會用到,但真正需要時,有學過就能拉開和其他人的程度,舉一個最容易用到也很基本的例子:陣列去除重複元素。這個常見的面試題,如果你知道 Set 的資料結構,就能快速用 Set 去除重複元素
三、轉職要學到什麼程度?
可以根據你要面試的公司來決定,如果要面試外商大公司,那要蠻全面的去準備,包括:
- 資料結構:了解 JS 內建結構+能手刻簡單版本 包括:Array、Object / Map、Set、Stack、Queue、Linked List、Tree 的基本概念
- 演算法:leet code easy ~ medium 的套路,可以從 leet code 75 開始下手
- 時間複雜度:能夠講出這個算法的複雜度和原因
- 前端手寫題:常見的 JS 手寫題,像是 Debounce、Memoize、Group By 等等,這裡可以參考 leet code JS 30
但如果沒有要挑戰外商大公司的話,
只要把基本的資料結構搞懂,能寫出相關的 Easy 題目,以及把 leet code JS 30 搞懂就挺夠了~!
四、轉職前端該如何準備演算法?
在準備演算法之前,一定要先把 JS 的語法和觀念搞熟,如果連語言都還很陌生就先學演算法,就是越級打怪了!
很多新手會犯的一個錯誤是直接去刷 LeetCode,對於非本科生的我們來說,一定是完全看不懂 LeetCode 的,所以這邊推薦一個學習路徑:
- 搜尋 代碼隨想錄,先從這邊開始了解常見資料結構的概念,先學到 stack & queue 即可,之後有間再補 tree 的相關觀念。可以搭配 Hello 演算法來加強觀念
- 如果覺得代碼隨想錄的題目太難,在了解資料結構的概念後,建議先從 Codewars 的 8 Kyu(最簡單)的題目開始熟悉,Codewars 和 Leet Code 類似,但他有更簡單的題目。
- 當你 Codewars 能寫 6 Kyu 的難度時,就可以去嘗試 Leet Code 的 Easy 題目了,可以先回去從代碼隨想錄開始學習
代碼隨想錄是大陸的資源,名詞和台灣的會不太一樣,建議以英文的名詞為主。
參考連結:
五、學習演算法的常見地雷
在學習資料結構和算法時,一定要注意這幾點
- 缺乏持之以恆的練習
演算法不是死背幾天就能上手的東西,重要的是每天練習,每天刷一題,三個月後也不用太擔心小公司的面試了 - 主題學習順序錯亂
一次先學一個主題,例如先把陣列搞懂,題目寫得出來,在開始刷其他類型的題目。不然很容易搞混彼此之間的觀念 - 死背題目不了解原因
一定要理解解法的思路,什麼場景適合什麼資料結構或算法,如果只是單純死背,當題目稍微變化時就很容易做不出拉
六、已經有工作的前端工程師還要學演算法嗎?
一樣建議先把基本的資料結構搞懂,這樣最少當某些特殊需求出現時,你可以快速找到方向來解決。
如果你短期內沒有要面試跳槽,你本身對刷題也沒什麼太大興趣,我會建議先把時間拿去累積在專案和實務上,提高解決真實問題的經驗與能力。
當專案需要時,再更深入特定演算法也更有學習效率。
如果你有規劃要準備面試了,可以考慮利用衝刺的方式,1 ~ 3 個月把 leetcode 150 刷完就很足夠了。避免把戰線拉太長失去耐心。
結語
資料結構和演算法一直是非本科生卡住的一大難關,雖然轉職前端雖然不需要精通演算法,但基本的資料結構與常見題型還是必學的,尤其是面試時可能會被考到。
只要掌握 JS 內建結構、能解一些 LeetCode 的 Easy 題型、理解時間複雜度,再熟悉常見的 JS 手寫題,其實就足以應付決大多數前端職缺。
就算已經在職,懂一點演算法觀念也能幫助你解決實務問題、提升職場競爭力。