CS入門心得之學海真的很無涯

一門非常有趣又令人感到痛苦的學問。

Walle
漫築蘭格
4 min readDec 10, 2019

--

https://www.youtube.com/watch?v=SzJ46YA_RaA&feature=emb_logo

在 Alpha Camp 開啟〈CS演算法・入門工作坊〉前,我曾非常零星地接觸過關於電腦科學與演算法的知識,像是臺大開放式課程的計算機概論哈佛的 CS50,還有 CodeWars 解題等等。剛開始學程式每天都焦慮自己知道的事情太少,點開一堆視窗,每篇教學文章和影片都只看一點點(因為通常都聽不懂老師在講什麼),沒辦法有效吸收任何知識,也不確定看完了到底應該把它運用在什麼地方。

但即便如此,學習程式語言的過程我還是一直掛念著在演算法邏輯上的缺陷,看著寫出來的程式碼跟別人比起來又長又笨,覺得未來勢必要將這門科目學好,期許自己是個懂得如何優化效率的工程師。

於是今年10月機會來了,看到工作坊準備試營運就馬上跟主管溝通,讓我每週四晚上可以提早下班回去上課!!!!

學習CS的原因

練習寫 JS 的過程中,會發現它有許多可以遍歷陣列的方式,而且每種的效能、適用情況與回傳值都不同(這篇在 stackoverflow 的討論滿有趣的,可以參考看看),初學時沒有認真研究,總是看別人寫什麼就跟著寫什麼,直到作業交不出來被同學鞭策過後才發現自己真是一無所知。

再到後期開發完整的前後端專案,寫出雜亂無章的程式碼後,時常會懷疑網頁跑那麼慢是不是因為我寫的 code 很沒效率,光是一點點的測試資料跑起來都讓人覺得天長地久(?),雖然不斷試圖重構和優化,仍然不確定所做的努力到底有沒有效果。

總之,抱持著對電腦科學與演算法的好奇心、至少不要寫出效率最差的code,還有多學一點總是好事的心態,我決定投入時間嘗試瞭解 CS。

過程中的感受

隨著每週主題的進展(Runtime & BigO、Searching and Sorting、Recursion、Dynamic programming、Trees),學習演算法這件事情漸漸就變得愉快不起來(喂),寫作業的耗時大概是指數型成長。

實際上,從第一堂課開始,就有明確感覺到自己對於演算法的概念更明確了,畢竟過去只著重在可以得到預期的 output,根本不會去認真檢視每行程式碼背後的 Time and Space Complexity。到第 3、4 週學習 Recursion 與 Dynamic programming 後,真的有種大開眼界的感覺,沒想到演算法可以這麼聰明優雅,也會開始練習用不一樣的思考方式去分析題目,嘗試寫出比較有效率的解法,觀摩其他人的程式碼時也不會常常有滿頭問號的感覺。

但是演算法這種東西很可怕,大概兩個禮拜沒碰,回頭看就會有又要重新學一次的感覺。畢竟這是一堂帶領我們入門的課程,如果真的希望將 CS 的知識與觀念內化,相信必須要花費很長一段時間專注的投入思考與練習。雖然目標是前端工程師,現階段所需的技能(像是切版、動畫、串API等)與這些知識看似比較沒有關係,掌握演算法的運用技巧仍然可以讓我們對於自己的 code 更有理解力和自信。

LeetCode

未來規劃

我的目標是 5 年內,成為可以獨立接案的全端工程師,以長期職涯發展來規劃,瞭解更多 CS 的知識會是很重要的一環,預期前端技術更為熟悉後,要報名參加 CS50 課程,並且穩定發表技術筆記。

最後要感謝 Alpha Camp 用心設計這門課程,還有講師們專業又易懂的授課方式,引導我們往更有深度的領域邁進,也讓非本科轉職的人更加理解成為一名工程師,還有哪些選擇與學習方向。另外也非常謝謝一起上課的同學,你們的提問和解題方式對我而言都有很大的幫助~~~

--

--