0%

【中場心得】半年過去了,我仍在學習程式的路上(下篇)


Photo by Justin Luebke on Unsplash

“Do not, for one repulse, give up the purpose that you resolved to effect.” — William Shakespeare.

Medium 連結

前言

幾天前分享的上篇心得有稍微提到,前半段會偏向描寫過去的個人經驗,是有關於在開始學習程式之前的自己。

接下來這篇文章,則是要來談談自己在學習過程中內心的轉變,是什麼因素帶來這樣的影響;以及在參加第四期程式導師計畫以前,曾經透過哪些管道自學程式語言;還有在學習過程中,遇到了哪些困難與挫折,而自己又是如何調整心態去面對的。

文章大綱如下,共分為上下兩篇,本篇為後半部分:

  • 萬事必有起因
  • 關於那些沒能選擇的過去
  • 如夢似幻的那一年
  • 值得不值得
  • 失而復得的熱情
  • 恐懼的背後什麼都沒有
  • 找到適合自己的學習方式
  • 慢慢變成理想中的樣子

那麼,以下是關於開始學習程式之後的一些心路歷程。


失而復得的熱情

在上篇心得中,曾談到自己在求學期間開始學習日文這件事。即使這門語言不是自己的主科,只不過是一門選修課,卻還是習慣每天接觸它,變成像吃飯一樣的日常,意識到這件事情的我,人生也因此產生了一些變化。

或許自己也不是那麼一無是處,還是能夠對某件事情產生熱情。好比說,因為有了喜歡的事物,透過這層媒介,我開始看起了從沒想過會接觸的舞台劇,會去聽喜歡的聲優所主持的廣播節目,刷日文推特追蹤最新消息也成了每日習慣,甚至還會利用空閒時間去做一些日文翻譯。

其實這些是過去的自己從沒想過會做的事情,以前頂多當作興趣,偶爾會看看動畫和日劇,依賴於中文字幕;但到了後來,卻變成能夠主動去吸收知識,遇到不懂的單字就去查,記起來就能變成自己的,不知不覺間,即使沒有字幕也能大概理解意思,只因為自己喜歡日文。

因為喜歡,就會願意花時間去學習,而那些曾付出的時間並不會欺騙自己;因為喜歡,就不會先去想結果會是如何,而是選擇先做再說;因為喜歡,所以能夠不被外在因素影響,只專注在自己喜歡的事物上。

像這樣透過一點一滴的累積,我能夠實際感受到,自己懂的東西也越來越多,只要願意付出時間學習,是能夠讓自己慢慢變得更強大的。在不知不覺之中,我體會到什麼叫做「學習正回饋」,這段過程對我來說非常重要。

簡單來說,就是透過喜歡這份動力,來持續學習這件事:

喜歡某件事 → 產生學習動力 → 全力學習 → 得到正向回饋 → 持續循環

說了這麼多,但怎麼都在講學日文?那學程式呢?

很推薦 Huli 寫的這篇:致跟我一樣的拖延症患者:動力是需要刻意創造的。覺得當中有句話說得非常好:

「動力是消耗品,需要補充、需要加值」

自己在閱讀過程也不斷被戳中。總會在心裡想著今年一定要完成XXX事情,買了課程想學也好、讀完幾本小說也好、要瘦下幾公斤也好,卻每隔一段時間後才驚覺,那份熱情只在開頭燃燒幾天就消退了。明日復明日,明日何其多。

沒辦法補充學習動力的自己,也就因此逐漸脫離正軌,變得想逃避學習這件事;沒辦法從學習中獲得成就感的自己,也因此更恐懼學習新事物,到後來甚至變成一種習慣,從此陷入無窮迴圈。

正因為有學日文這個例子,讓我相信,動力是能夠被創造的,在學習任何事情時,或許也同樣能夠遵循這個道理。回想在過去學習的路上,曾幾何時也遺忘了這件事。或許是害怕無法達成理想中的自己,而被數不盡的藉口以及拖延症給束縛住;又或許是因為太過在意身旁的人們,隨之萌生的不甘心與懊悔,反而掩蓋住學習過程中獲得的快樂。

如果我不知道自己喜不喜歡,那又該怎麼辦呢?

這個問題,就好像是聽到有人問說:「你喜歡吃某某食物嗎?」如果我剛好沒吃過,就會理所當然回答:「這我不知道欸!可能要吃吃看才會知道?」

要嘗試接觸新事物也是同樣道理,與其猶豫再三,思考沒有解答的問題,不如直接嘗試看看吧!對於不知道自己是否會「變得喜歡」的事情,就算把問題拋給旁人,即使對方會通靈也沒有辦法肯定你會不會真的喜歡。

如果在實際嘗試之後,發現結果好像和之前想像中的不太一樣,那也沒有關係,因為這還只是在摸索階段,還不需付出太大的成本,只是藉此更加瞭解了自己而已,畢竟自我探索的過程是一輩子的事:

1. 不知道會不會喜歡 → 直接嘗試看看 → 產生學習動力 → 得到正向回饋 → 持續循環
2. 不知道會不會喜歡 → 直接嘗試看看 → 和想像中的不太一樣 → 尋找下一個可能

怎麼說著說著,好像變得有點心靈雞湯的感覺XD 可能是因為剛好前幾天才跟友人聊到類似的話題,覺得深有所感,彷彿看到半年前的自己一樣,即使現在的自己也還同樣身處在摸索階段,在對方的眼中,自己就好像已經找到未來方向似的確定。

而面對朋友拋出的這些問題:「我不知道自己會喜歡什麼、又適合什麼工作…」,對於感情問題,我一率建議直接分…咳、是直接嘗試看看再說,既然不確定答案為何,反之也代表充滿無限的可能性。

再回到為什麼我會開始學習程式這個問題。在思考未來方向的某一天,我想到自己在幾年前,曾在 Hahow 買過有關動畫互動設計的課程,回想起當初因為想要記錄在日本的生活,而想要打造屬於自己的網頁的故事。

然後就在不知不覺中,學出一點心得(雖然課程還沒有看完),因為覺得有些課程內容,對於初學的自己來說不是很好理解,就也開始尋找其他網路上的學習資源,邊學邊看許多有關這個領域的文章,像是瞭解前端與後端的差別、和自己一樣零基礎的小明系列、和一些給非本科系生想要轉職的建議與心得,也曾去聽過資策會的課程說明會等等。

後來,因為查到一些評論推薦說六角的課程適合初學者入門,就選擇在六角學院繼續學習網頁前端基礎。發現透過不同的教學方式,不同的切入角度,能夠讓自己對程式語言有新的一層認識。

然後經過幾個禮拜,不斷循環練習切版、讓助教改作業、檢討的過程。在上完 HTML & CSS 課程之後,再來應該繼續學習 jQuery 還是 RWD 呢?這段學習過程的確讓我獲得了成就感,但內心似乎又覺得不太踏實,究竟是缺少了什麼?我應該再學些什麼,才能夠讓自己變得更強,直到獲得足以踏入這個領域的入場門票呢?

在思考這些問題的當下,無意間我發現了有關程式導師實驗計劃的宣傳文章,而且還剛好在報名期間。看過課綱以後,不知為何,我很確信這就是我想尋找的。透過為期六個月的計畫,從程式基礎打起,瞭解前後端語言的差別,接著透過實作來熟悉開發流程等等。

看到那些充實的課程內容,竟然讓自己再次燃起學習熱情,我才明白,原來自己還是渴望學習的。而且和過去的被動學習不一樣了,這次是自己來選擇想要的東西,我想要改變自己。

恐懼的背後什麼都沒有

其實回想起這一路走來,總是對自己很沒自信,甚至到了會自我懷疑的程度。就好比膝跳反射,一旦要接觸新事物時,第一個反應一定會是「我不行、我辦不到」,悲觀地認為自己沒有那個能耐去勝任。

即使是直到三月左右,或是真正開始自學程式以後,這個現象依然如影隨形,我真的學得好嗎?我會不會太天真了?

好害怕失敗,害怕新的開始,怕自己學不好,怕即使學完也找不到工作,怕就算順利找到工作結果卻不適合自己,怕……(以下略)。

阿到底是在怕什麼?怕就能解決問題嗎?靜下來仔細想想,其實害怕並無助於任何事,只會讓自己駐足不前。這些道理我都明白,卻還是會忍不住去擔心害怕。

人之所以會感到害怕,通常來自於對事物的不瞭解、不熟悉,也就是對於未知的恐懼。

倒不如說,「害怕」這份情緒其實會一直伴隨自己,或許是害怕失敗,又或許是害怕被比較,害怕自己被貼上「劣等」的標籤。

更何況,未來是不可預期的,不同階段或身分其實也存在不同的問題要去煩惱。就好比學生時期,煩惱不要被當和煩惱怎麼拚到書卷獎是完全不同的事;又好比月薪 3 萬和 25 萬要煩惱的事情也不會相同。

這讓我想到,每週在 Limedy 的學習系統上也有談到類似的話題:

假如我今天想學某樣東西,卻花了兩三天的時間來思考自己究竟學不學得會。
假如學得會,就等於浪費掉這兩三天,因為如果不猶豫的話就可以再多兩三天來學習了;假如學不會,那這兩三天也是浪費掉的,因為只光憑想像而不動手,根本不會知道自己是真的學不會,還是只是「我認為自己學不會」。

與其浪費過多的時間在猶豫不決、或是自我懷疑身上,倒不如直接動手做,這樣才能更快找出真正的答案。

在正式開始程師導師實驗計畫以前,其實有個前置作業,也就是第零週的心態培養。在學習之前若是能夠先培養好心態,對於之後的學習也會容易許多。

當中有提到下列幾點,有關如何建立心態:

  1. 不要害怕問問題,每個問題都值得被提出來,你的問題可能也是其他人的問題
  2. 問問題前應該先自己動手查詢資料,如果是很難查的也可以直接問
  3. 有老師、助教或同學能夠讓你盡量問,反正問就對了
  4. 重點是「目的」,而不是「手段」,持續問為什麼為什麼為什麼為什麼
  5. 學程式需要換一個思維模式

其實最重要的,就是「懂得適時提問」這件事。接受自己有不懂的東西,然後不要害怕問問題;如果自己解決不了,就要趕快尋求他人幫助,如此也能避免自己鑽牛角尖或繞遠路,否則可能結果是浪費時間又沒能找到答案。

然而,如果每個人都能夠像這樣理性思考,或許人生也不會有那麼多煩惱存在了。理智上告訴自己不應該逃避學習,卻又會忍不住倒退三步,本來可以馬上完成的作業不知不覺又拖了兩三天。

老實說,自己也是不擅長主動發問的學生,就是那種在課堂上打死不舉手的那種,除非遇到老師規定每人都要發問,不問就要被扣分數的時候,可能才會很痛苦的擠出一兩個問題來問。

但後來我發現到,如果是私下問問題的話自己還是能辦到的,可能是利用課餘時間找老師或助教,或是透過一些學習系統發問,抑或是乾脆找比較熟的同學問等等。

之所以會在眾人面前發問感到害怕,我想根本原因還是在於「害怕」他人的眼光,如果我問的是笨問題怎麼辦?如果被別人發現我連這麼簡單的東西都不懂怎麼辦?我怎麼知道我的問題別人也可能遇到?像是害怕被發現自已其實是個失敗者似的,結果就成為一個既不敢發問,又害怕犯錯的學生。

也是從開始學習語言以後,才試著努力改掉這個不敢問問題的壞習慣,畢竟有很多時候,是需要仰賴有經驗的人,來幫助自己少繞一點遠路的。但即使是現在,要自己在所有人面前提問還是很有障礙的一件事,但還是會試著把握住能夠提問的學習平台,或是找看看有沒有同學曾和自己有過相同經歷能夠參考等等。

此外,提問也是有技巧的,詳細可以參考這篇文章:第一天上班就該學會的精準提問術。記住個重點,就是提問時要帶著自己的答案找人,才能讓對方知道自己是有嘗試解決,而不是懶得找方法解決的伸手牌。

總之,為了能夠克服內心的恐懼,這些也都是需要慢慢練習的,只要能夠比昨天的自己又往前邁進一步,就是戰勝恐懼的第一步。

以自己在學習程式這段過程來說,在接觸某個新的程式語言或工具之前,總會忍不住在心底吶喊「這看起來也太難了吧!」。像是第四週學習如何串接 API、第八週的同步與非同步、第九週第一次接觸的後端語言 PHP、第十四週架設遠端主機、第十六週的 JavaScript 物件導向等等。

就算學習過程中遭遇滿滿的挫折,自己最終還是順利把作業給完成了。無論那些東西看起來再怎麼困難,只要自己願意花時間去學習它,那麼恐懼也就會隨著理解而慢慢消散。

即使如此,偶爾還是會擔心自己學得不夠扎實,那這也就不是「能不能學會」這個問題,而是「熟練不熟練」的問題才對。就像前面所提到的,每個階段都有每個階段要去煩惱的問題存在,重要的還是專注於當下的自己。

也是直到後來,瞭解到在這世界上,其實多數人都會對生活的未知感到恐懼,像是周遭和自己有類似際遇的人,或者即使是那些看起來很耀眼的人們,還是會害怕自己不夠好、害怕失敗,似乎也就慢慢釋懷「和他人比較」這件事了。

再回到最根本的問題,所以我們應該如何面對恐懼、面對失敗?

節錄 Huli 在學程式的第零課:心態調整這篇寫的一段話,一方面也用來提醒自己:

為什麼要讓別人幫你定義成功或失敗?這一點都不合理。你管他什麼成功跟失敗,知道自己在幹嘛就好了。

與其把時間浪費在思考不確定的結果,或是害怕自己會不會失敗,不如直接去面對它,試著排除外在的雜音,把重心放在自己身上,然後試著面對問題,並找出適合的方法來解決它。

要記得,就算結果真的失敗了,人生也不會就此畫下句點,這些都只是過程的一部分,而失敗與挫折會化作成功的養分。因為只要我還沒放棄,比賽就還沒有結束,我只是走得比別人慢了一點,但我相信自己最終還是會到達。


找到適合自己的學習方式

在這半年中,我發現比起學習程式本身,更困難的,其實是該如何建立健全的心態來面對學習。

就好比要在一片空地蓋房子,假如地基一開始就沒有打穩,即使有再好的設計圖或工程器具,也沒辦法打造出理想中的樣貌,可能才蓋到一半建築物本身就先垮掉了。

人的內心也是一樣的,其實我並不是一個內心堅強的人,也會擔心自己跟不上進度。所以在真正開始學習程式以前,就先接受「我就爛」的事實,我就是因為什麼都不會,才要從現在開始學啊!

回想起在六月程師導師計畫開始之前,自己有先看過 Huli 的基礎課程:[CS101] 初心者的計概與 coding 火球術[ALG101] 先別急著寫 leetcode ,對計概這門課的第一印象其實是在 Hahow 平台的時候,沒想到會在這裡再次相遇。

再加上之前自學 HTML & CSS 打下的基礎,或許就類似於預習的概念,多虧有提前開始奔跑,所以直到第九週以前,自己還是能跟上進度甚至是超前的,但是後來呢?

在計畫剛開始的時候,自己還有在做兼職,一週五天的那種文書工作。因此,要想達成每週四十小時的學習時間,勢必得每天都固定持續學習才能辦到。但,只要是人總會有惰性,尤其自己又不是意志力足夠堅定的類型,等前端基礎告一段落,正式踏入後端基礎課程時,先前儲存的扣打也用得差不多了。

直到課程進入中場,漸漸地發現自己有些負荷不來,為了有更充足的學習時間,兼職也從五天改為三天,直到上個月乾脆辭去,下了決心改為全職學習。但這樣自己是否就能全心全意在學習上了呢?其實並沒有,說來慚愧,自己可能就是那種容易邁向失敗的例子,已經沒辦法像高中時期從早讀到晚,這樣的我,是不是不適合寫程式?難道我要就這樣放棄嗎?

不、絕對不是這樣的,就像上一段提到的,這些都只是過程的一部分。如果一天學不起來,那就再多花一天;如果有一行程式碼寫不出的程式,那就再多寫一行。還沒學會怎麼爬之前,又怎能妄想一夕之間學會如何飛翔?

速度並不代表一切

永遠要記得「先求有再求好」,有做比沒做好,做好比有做好,總之先做做看就知道了。究竟資質優劣、成效好壞、成功與否,在還沒開始之前都只是空談,重要的是自己如何去面對這件事情。

或許當下我是進度落後了,但我只是跑得比較慢而已,就算資質高低不同、就算起跑點不同又如何呢?我已經盡自己最大的努力了嗎?難道參加這個程式計畫是為了被打擊信心?絕對不只是這樣。

或許我不會是最厲害的那一個,但我可以把握這個機會,學習怎樣寫出「好」的程式碼。與其糾結在「為什麼他可以想出這種解法我卻不行?」,不如換位思考,也許之前的我只是不夠熟悉而已,只要我能理解程式碼的邏輯,日後我也能把這個概念應用在其他專案上。

學習方法是需要不斷去調整適應的,正因為一定會有比自己還要厲害的人存在,透過這些社群互動與同儕刺激,能夠讓自己慢慢瞭解這世界有多大,原來可以用不同的思考邏輯去解決問題,而這些是靠自己單打獨鬥所無法接觸到的。

最後總結幾點自己在學習過程遇到的困難,以及自己如何去面對,或是正在進行式,仍然在摸索的問題:

「害怕自己學不好,害怕比不上別人,害怕轉職失敗。」

  • 大多情況下,恐懼這份情緒其實是自己想像出來的
  • 與其浪費時間去想東想西,不如直接動手去驗證結果,光是在腦中想像事情並不會有任何進展
  • 每個人學習的起跑點不同,花費的時間與成效也不盡相同,不需要太過在乎身旁的人

「進度落後了怎麼辦?想要加快腳步,卻又擔心學得不夠扎實怎麼辦?」

  • 不需要總是跟其他人比較,學習專注在自己的學習上
  • 一開始就想要學到 100% 需要付出的成本太大,不如先把課程都跑完,學會了以後剩下的就是提高熟練度
  • 雖然說不需太過在乎進度落後這件事,但也需提醒自己落後了多少,做好時間管理同樣重要,真正進入職場後是不可能這樣寬容自己的

「對於學習產生惰性,覺得無法完全理解內容,導致效率低落。」

  • 試著改變學習步調,例如原本預計一天要看完整個章節、要寫完整週的作業、要寫完一篇文章,可以把目標切成一段一段,變成看完一小節、寫第一份作業、寫一行文字。萬事起頭難,先讓自己習慣有個開始
  • 試著改變學習方式,適時跳過也是很重要的技巧,比如幾週前 callback function 學得很頭痛,先跟著範例實作,剛開始不需要到完全理解,有時候多做幾次不知不覺就學會了
  • 試著改變學習環境,例如在家裡無法集中精神,可以到咖啡廳或圖書館學習
  • 讓自己維持規律生活也是個辦法,把學習變成一種習慣
  • 找一些求職訊息,未來應徵自己夢想中的公司可能需要會哪些技能,激發自己產生動力去學習

慢慢變成理想中的樣子

有的時候,會覺得這段日子就像在跑馬拉松一樣,即使有許多人同時開跑,卻也能感受到自己是獨自一人在前行,但同學之間擁有共同目標,老師和助教也適時給予協助,儘管如此,真正去學習程式這件事還是得靠自己。

最近看了一部很喜歡的動畫《強風吹拂》,這是一部以「跑步」作為主題的作品,當中多數人是從沒想過人生中會出現跑步這個選項,當中幾段台詞非常有感:

「以為只靠努力就能無所不能,其實是一種傲慢。」

為什麼我這麼努力了,卻還是和前面的人差這麼遙遠?很多時候,我們往往只看到結果,而難以去想像別人背後經過的事情,甚至因此產生相對剝奪感。

卻很少會思考過,也許對方早在幾個月、幾年之前就開始奔跑,又或著對方其實就是萬中選一的天才。不管如何,要記住速度並不代表一切,別人的成功與否,與自己的將來其實是非關聯的,更重要的,是如何專注於自己,專注當下,不斷去思考自己想成為怎樣的人。

「但是,實際跑起來,我卻發現,比起被強制要求跑步,自願去奔跑要快樂得多。不是因為喜歡,才認真起來,而是因為認真起來,說不定就能……」

或許在還沒嘗試之前,永遠都不會知道自己會不會喜歡寫程式;也正因為是自己所選擇的路,而不是被強制說一定要這麼做,所以更加確信自己會走到最後,說不定就會喜歡上這條路也說不定。即使最後失敗又如何?至少我還是學會了些什麼,一切並不會歸零,而是會帶著這些經驗值前往下一個遠方。

回到最一開始的問題:「為什麼會想學寫程式?」

想起某一年曾寫過的作文題目《我曾那樣追尋》,那時的我其實不知該如何下筆,很難去想像未來的事,縱使引用了一句句事先背好的名言佳句,對於人生仍充滿迷惘,但是現在,我好像能夠找到答案了。

在學習程式這段過程中,我能夠與自己對話,回想起學習的快樂,然後確信這就是我想尋找的。也因此,打從開始加入程式導師計畫以來,我知道自己會走完這段課程,不管時間拉的多長,不論這路走得有多狼狽,還是想要追尋這個夢想,為了能夠慢慢接近那理想中的自己。

結語

最後放上我在課程中的學習筆記、GitHub 頁面,個人網誌目前正在架設中,會慢慢把之前寫的筆記或文章搬運過來:

  • Lidemy 程式導師計畫第四期 - 每週學習筆記
  • GitHub
  • Heidi’s Blog

在總結自己這半年來的學習心得時,發現其實很多道理是當初「第零週心態建立」中就有提及的,結果也引用不少 Huli 說過的話,作為紀錄的同時也用來提醒自己,也很推薦那些跟我一樣迷惘的人去閱讀原文。

也許是還沒有親身體驗就不會懂,如果能早一點瞭解這些道理,或許也就不用浪費那麼多時間和內心的自己打架,或許也就能夠跟上課程進度也說不定;但人生沒有如果,我們能做的,也就是咬緊牙根繼續走下去。不過也不需走得那樣痛苦,試著從中獲得成就感與快樂同樣很重要,如此這條路也才能走得更久更遠。

Happy learning, happy coding!