Alpha Camp 全端開發課程學習心得

我喜歡邏輯,在哲學系求學時期,我花最多時間的科目,是形式邏輯。但是我一直不明白這個我相對擅長的科目,到底能用在什麼地方。我的邏輯能力,並沒有好到足夠讓我走上學術研究的路,那麼,或許我可以試著寫程式?

學生時期的我,自認沒有錢,但是有時間。捨不得花錢去上程式設計課程,寧願自己找資源學習。去上過一些免費的程式入門課程,c++ 和 python,對我而言不是很難,但是學完之後,我還是看不出來,要怎麼靠學到的東西解決生活中遇到的問題,漸漸地就沒有動力繼續學下去。

直到出社會,存了點錢,也漸漸體會到時間的重要,終於捨得花錢投資自己,到 Alpha Camp 上專業的課程,而不是無頭蒼蠅自己亂找一通,省下許多時間,也看到自己學的東西是真的能用的,讓我有動力繼續學下去。

我還記得學到串接 api 的時候,心裡真是太激動了。以前在學免費課程時,就隱約有種「我寫的程式,範圍只侷限在我的電腦上」的貧瘠感覺,而在知道了 api 後,發現「我寫的程式可以跟世界接上線了」,頓時覺得自己非常富有。不過,後來才知道,串別人的 api 服務通常是要付費的。

大概是受了形式邏輯的影響,我在學習程式語言時,總是試圖去辨認,哪些東西是比較基本的,基本的東西是透過什麼樣的規則組合出複雜的東西。例如,變數、array、for 迴圈和 function 是基本的東西,可以用這些基本的東西組合出 array 的 reduce 方法,像這樣:

function mimicReduce(array, reducerFunction, initialValue) {
    if (initialValue) {
        let accumulator = initialValue
        for (let i = 0; i < array.length; i++) {
            accumulator = reducerFunction(accumulator, array[i])
        }
        return accumulator
    } else {
        let accumulator = array[0]
        for (let i = 1; i < array.length; i++) {
            accumulator = reducerFunction(accumulator, array[i])
        }
        return accumulator
    }
}

但是,當我開始接觸到 express 框架時,「辨認出基本的東西、基本的東西怎麼組合出複雜的東西」突然變得極度困難,那些在框架中事先定義好的函式和各種東西,就跟 magic number 一樣令我摸不著頭腦。而且完全不明白程式在執行時,是從哪一行執行到哪一行。原先建立的「程式是這樣運作的」的世界觀,瞬間都派不上用場。我大部分時間都處在「對啦對啦,照著教案的教學是會動啦,可是到底是為什麼啊,憑什麼這樣就會動啊!」的默默崩潰狀態。

幸好當時我剛好參加 Alpha Camp 新開的 LeetCode 訓練營,讓我能稍微離開框架的混亂世界,回到熟悉的地方喘口氣。並不是說 LeetCode 的題目很簡單,而是我在學形式邏輯那段時間,對「題目卡住了老半天還是寫不出來」的事情也比較淡定了。

在學習框架的過程中,漸漸理解 express 框架的運作方式,比較能辨認出請求是從哪個 middleware 跑到哪個 middleware,終於又變成我比較能夠理解的世界了。不過一方面也感覺到,程式的世界水好深,有好多我還不明白的東西:http 通訊協定、資訊安全、程式語言是怎麼一回事(怎麼樣才算是程式語言、c++ 和 V8 引擎和 javascript 之間的關係)、作業系統是怎麼一回事等等。有這麼多東西可以探索,這輩子都不怕沒事情做了。

從「學形式邏輯到底可以做什麼」的焦慮,到現在看著程式碼動起來、幫助我們完成工作,終於有一種腳踏實地的安全感。在工程師的世界,需要考慮現實的問題,不能像理論研究那樣,任性地假設有無限的記憶體,或者是使用時間複雜度會增長得非常誇張的編碼方式。這樣很接地氣,我覺得真是太好了。

此外,我是個在新環境會感到焦慮、緊張的人,而 Alpha Camp 提供很多「程式設計師是個什麼樣的工作」的情報,也會提點我們搜集情報的方法,讓準備轉職工程師的我,覺得安心許多。

Comments

Popular posts from this blog

shop_platform - 建立多對多關聯:Association Object

[計算機概論] SR Flip-Flop

git 指令