《先別急著寫 leetcode》課程學習心得

如果你也是個初學者,那這門課很有可能會改變你對「寫程式」的看法

在上這門課之前

在之前已經有上過 JavaScript 的入門課程,但沒有做過任何線上題目,因此就參考 Huli 寫的這篇 Codewar 練習題 想試試看自己的程度,卻發現自己連「一顆星(熟悉語法)」的題目都寫得很卡,當時覺得好氣餒但卻不太知道該從哪裡下手去進步。

今年五月中,在瀏覽 Lidemy 粉絲專頁 時,看到了當初推出「先別急著寫 leetcode」這門課程的貼文,寫著「目標族群是會寫程式卻覺得自己基礎不紮實的人」,讓我想到自己的問題一定是出在沒有紮實的基礎,因此毫不猶豫的註冊並開始上課。

課程重點:培養程式思維

課程一開始,就不斷在我腦中投下震撼彈,Huli 所講的「初學者在寫程式時常犯的錯誤」真的完全就是我在解題時的樣子:

看完題目,一有想法就開始寫程式碼–> 邊寫邊想解法–> 因為沒有經過構思,程式碼缺乏架構,思緒越寫越亂,很容易卡住

我從來都沒想過,在開始寫程式碼之前其實有很多事情需要先做,正確的解題流程應該要是這樣:

看懂題目,並注意「輸入範圍」–> 在腦中構思解法–> 再把解法轉換成程式碼

在課程的前三個單元,都沒有在寫真正的程式碼,而是大量地練習把解法先用 pseudo code 寫下來,並且寫出一行一行的執行步驟,再模擬電腦當個「人體編譯器」一步一步地跑過執行流程。

這些練習雖然花時間,但我覺得非常有幫助,現在的我看到迴圈、雙層迴圈,可以很快的知道這段程式碼是怎麼執行的,也更能夠把腦中的想法用程式碼寫出來。

我很喜歡這門課的地方

老師講解清楚耐心

尤其是課程的前半部分,在每個範例中,真的是一步一步帶我將程式碼的執行步驟走過,搭配用心製作令人賞心悅目的課程簡報、動畫,讓我對於「迴圈、函式、判斷式」更加熟悉。

Huli 很能體會新手容易卡關的地方,在講解題目時,會針對比較難懂的地方將速度放慢並告訴我們這裡要怎麼思考。在說明一些關鍵的觀念之前,不會馬上說出答案,而是先用反問的方式丟出問題,這時我都會先把影片暫停,自己先試著想出這裡為什麼這樣寫,再接著看老師是怎麼講的,藉此訓練自己的邏輯思維。

舉例易懂生活化

特別是從第八單元開始講到「提升程式碼的效率」,會用很多生活中的實際情況作為舉例來講解,例如:

在講到如何表示演算法的效率時,用「找出班上最高的、考試做是非題、找出第一個來報到的人」來說明「Big O 符號」的各種表示方法。

在講到「時間與空間的權衡」時,「讓客人排隊」就是「增加執行時間來節省空間(店面可以比較小)」,而「書本前面那兩三頁的索引」就是「雖然增加了空間,但是節省了搜尋的時間」。

將電腦科學融入生活中的案例,不但很容易理解,而且印象非常深刻。

作業安排豐富用心

這門課會搭配一個線上解題系統,課程中的題目幾乎都是在這個系統裡完成。裡面的題目全部都是 Huli 自己出的,很多題目的敘述和背景故事都非常有趣,讓解題這件事情變得很好玩。

很多時候,作業會是實戰的延伸題型,我很喜歡這樣的安排方式,可以再次考驗自己是否真的有弄懂實戰的觀念,並自己實作出來。在每個單元中,不管是實戰還是作業,我都會先試著把題目解出來,再去看影片的講解,把更好的解題方式學起來,這樣的練習很紮實、效益也更大。

學習社群回饋熱情

這門課提供了一個 slack 群組可以加入,當我在解課程作業遇到怎麼想也想不通的問題,在群組發問都可以很快得到同學和老師的回覆,除了針對問題的回答之外,甚至還會提供學習建議、好用的工具和資源。

一個人自學程式其實是很孤獨的,但社群總是可以讓我感受到同學和老師的溫暖。以我目前的新手程度,對於要解答他人的問題比較困難,希望能盡快提升自己的能力,也成為能夠幫他人解決問題的人!

總結

上完這門課後,我覺得自己的程式邏輯是有進步的,在看到題目時,也能透過先拆解題目、觀察規律,讓大問題變成小問題,思緒可以更有條理。

藉由最後一個單元提到「資料結構、演算法」,也讓我知道該往哪個方向求進步並繼續學習。

如果你跟我一樣,在自學程式時是直接從 to-do list 這些應用程式開始做起,但在解題時發現連一些簡單的題目都做不太出來,我真的真的很推薦你也來上這門課去補足這段很重要的基礎,詳細的課程說明在這邊:https://lidemy.com/p/alg101-leetcode

最後,很謝謝 Huli 開了「先別急著寫 leetcode」這樣的免費課程,很用心的規劃整個課程內容,讓我重新思考「寫程式」這件事情究竟在學的是什麼東西。也很期待 Huli 之後會開一門演算法的課程!