紀錄|為什麼要學演算法?

Nia Fan
Now I’m Again
Published in
Oct 3, 2022
Photo by Markus Spiske on Unsplash

身為軟體工程師,常在面試時聊一聊,遇到面試官提出:那我們來考演算法吧 😉

從 school 時期,我一直是演算法苦手,其實在解問題的過程是有趣的,
但心中每次都要做足各種心理建設,遲遲不願意打開 leetcode 刷題,
只有當要重返就業市場面試時,才會硬著頭皮的開始練習。

而且伴隨著這股情緒,常常都是帶著當年準備指考的心態,把題型背下來、強記最佳解。
然而這種讀法,非常痛苦也無法持久,陸陸續續也參加過幾個讀書會,也因為自己提不起勁,最後放棄。

從此,演算法就變成我最熟悉的陌生人🥲

Photo by Nguyen Dang Hoang Nhu on Unsplash

前幾天回 school 參加到傳說中的 Arthur 的「演算法、資料結構和面試」分享會,獲得了不少能量,趁著記憶猶新時,好好地消化和紀錄。

Arthur 首先簡單介紹了演算法和資料結構,這些學科在與電腦溝通時有什麼幫助,接著比較中小公司與大公司在專案與 RD 人數的差別:

前者著重實際開發經驗,對於產品所需功能最好越有關聯越好(ex: 直播串流、藍芽通訊等)
後者則因為專案數量龐大,會接觸的協作者和技術更是多元,每個面試官可能都和你寫不同語言、熟悉不同框架。

因此,演算法就變成一個基礎,方便快速、有效率地評量面試者的工具。

聽到這我才有種幡然醒悟之感,畢竟目前待的公司規模都不算大,主要都是開發自有產品,對於面試要考演算法也常會好奇:「這真的有用嗎?」「跟我工作開發功能又沒關係」

久爾久之,加深我的逃避之心

現在知道為什麼要準備了,那下一個問題就是要如何準備?

如果想有系統把這門學問參透,有兩本書不能錯過:Introduction to Algorithms, Cracking the Coding Interview

但真的好難啃,之前看過幾章後就放棄了(就跟 4000 單的第一個英文字 Abadon 一樣)

Arthur 推薦了比較平易近人的做法,適用於一般人(包括他自己 XD):
先選一個小分類 ➡️ 找任何看得懂的教材(YouTube 影片、文章⋯⋯等)➡️ 在 Leetcode 找對應題型練習

如果成功寫出來,繼續找相似的類似題目;如果失敗了,看討論區學習

這些,乍看很簡單,但難就難在要怎麼持續地做這件事

建立良好的習慣與正回饋機制

要啟動習慣前必須投入意志力,但意志力是有限的,但我們往往會高估了自己的意志力,所以會訂定過於難完成的目標,以至於無法達成、獲得不了成就感,這項挑戰就此停止。

應該先做容易的事,持續地做。要先標準化,才能最佳化。 — — 原子習慣

(原子習慣真的是每年都會想一看再看的好書,最重要的還是落實執行)

比起許下每天都要算 3 題 leetcode 的目標,只要一天沒完成可能就直接放棄,倒不如先從輕量級的任務著手,像是每週花 1 小時,堅持兩個月不隨意暫停,這樣累積下來的程度其實遠比你想得還可觀。

再來,就是找到學習的附加價值,如果只為了面試而投入學習演算法和資料結構,是無法長久延續下去。

若是能夠找到與工作實務面的連結,從中得到成就感,就算面試沒考到也不會容易沮喪,這才是較為健康的學習過程。

Photo by Veri Ivanova on Unsplash

最後就是放下對於時間的焦慮,我們往往會有短期目標,希望能在短短幾個月內刷完幾百題,但這樣囫圇吞棗的結果,就是來得快也去得快。

倒不如把時間拉長,持續學習,長時間的消化,能在腦中留下的東西是別人也帶不走的。

最後,「分享是最好的學習」,這兩小時的分享會,讓我又獲取不同的觀點與能量,對於過去不願面對的課題,我也再次提起勇氣嘗試(吧)。

寫下這篇文章給自己,期許未來某天回頭,那時的你已懂得演算法的真諦。

Feel free to leave any comment or feedback.
如果覺得文章不錯的話,歡迎幫我拍拍手👏🏻👏🏻👏🏻

--

--

Nia Fan
Now I’m Again

主修中文、待了兩年公關公司,努力成為 iOS 軟體工程師 💪🏻 熱愛美食和旅遊 🎬 http://bit.ly/niaYoutube / 📷 http://bit.ly/niaeatfood