以下文章經同意全文轉載自:Frontend Intermediate Course - 學習心得
作者:Peggy


有點不敢相信自己居然可以堅持到最後,而且每週都有交作業(除了第五週作業寫不出來,看完直播講解後才交作業),每週也都有寫部落格記錄作業筆記跟直播筆記,都沒有偷懶呢!

以下是我上完這個課程的一些心得,寫得很長 XD

30 歲才開始
30 歲才開始學寫程式,總是會懷疑自己能不能學好,不過看到這篇:60歲才接觸電腦、日本81歲奶奶開發出 iPhone 遊戲 App 之後,又覺得 30 歲開始其實也不晚。年齡不應該是阻止自己學習的藉口,如果想著「我年紀大了,學這個太晚了還是不要學」,這樣其實是為自己的懶惰找藉口,沒有開始學習就說自己學不會,當然不可能學會的。開始踏出嘗試的第一步才是重點。

不可否認如果年紀輕一點開始學習,記憶力、反應力跟學習能力比較高,我也常常想,如果早個五年來學寫程式,是不是會比現在還輕鬆許多?但五年前的自己,根本不認為自己能夠寫程式,也對寫程式沒有一點興趣。雖然開始學寫程式的原因有點好笑,是因為失戀而想要學一個很難而且從沒有接觸過的東西,困難到不要讓我分心想不開心的事情,所以才開始學寫程式。

一開始也沒有想過學了要做什麼,也不確定自己會不會喜歡寫程式,但我的個性有一個奇怪的特點,就是「真正嘗試了之後才能決定自己對此事物的感覺」。雖然以前不認為對寫程式有興趣,但我從沒有真正寫過程式,這樣又如何下定論我是討厭寫程式的呢?剛好也趁這個機會好好嘗試看看寫程式,然後再來決定我對寫程式有怎麼樣的感覺。於是就在 Codecademy 上開始學 Python,後來卡關跑去 Hahow 上了胡立老師的課,也才開始了這次的課程。

學習的動力
對我而言,有興趣就會成為我學會一件事情的動力,怎麼樣的事情會讓我覺得有興趣呢?大概是那件事情很有趣,以及那件事情會帶給我成就感。學習寫程式的過程常常是:崩潰 -> 解題 -> 成就感,我猜想大概是這樣子,才讓我漸漸發現寫程式好像也蠻有趣的。

老實說我並沒有對學習寫程式這件事情設定很明確的目標,反而是享受學習的過程。當然有目標的話,可能動力更大。也或許有人會疑惑,學了程式結果沒有訂目標要朝這個方面就業不是很浪費?我承認是因為不想要給自己太大壓力所以才沒有訂一個目標,畢竟一開始我就只是業餘性質的心情去學寫程式。

後來上了這個課程,每一週都要做作業,有短期的目標要完成,學著學著發現原來我努力的話也是能做完作業,自己好像可以做好寫程式這件事情。這些感覺都逐漸累積成學習的動力吧。

在第八週的時候,跟胡立老師說過:「其實前幾個作業我都會萌生想放棄的心情,但又覺得不可以辜負胡立的好意。」

胡立老師回:「所以是有種人情壓力的感覺 XDDD」

當時我沒有反駁,因為某些程度上好像是因為「人情壓力」才堅持學習。但後來仔細想想,真正的「人情壓力」通常帶有不情願的心情而去做那一件事情,而我並沒有不情願的心情,只是希望能夠以自己的努力去回報胡立老師的認真。學生有老師的鼓勵會更有學習動力,同理,老師有學生的鼓勵應該會更有教學動力。

所以基於以上的種種原因,累積了我學習的動力,也慢慢的肯定自己。

心境上的轉變
原本我以為自己會中途放棄,結果還是在不斷崩潰的輪迴中熬了過來,真的很感謝胡立老師,每次交作業前都要不斷的問他問題才能幫我完成作業。有時候我都覺得一直問胡立老師問題問到不好意思,但他總是耐心的回答我的問題。即使覺得不好意思,但在找不到答案的時候也還是只能問他問題啊 XD。

不過我對自己有個要求,至少要知道基本的東西之後才能問胡立老師問題,不可以白白從他身上輕易拿到答案。不過也是有問完問題後才發現,其實 google 一下也可以找到答案的時候,但大部分的時候我都會盡量做到要自己先找答案才問問題。但有時候有些看似很簡單的問題,反而在網路上找不到答案,這種時候問問題就會感到有點抱歉,可是沒有問胡立老師還真是不知道應該從哪裡找答案。

後來在他的部落格上才知道課程第七週的時候他左眼腫起來,就在他眼睛腫得像被人打的時候,我正好瘋狂的問問題,心裡真是對他又感謝又抱歉。雖然他說當時其實不會感到不舒服沒有關係,但我還是感到抱歉,總會想如果自己厲害一點就不用一直問他問題了。

雖然我真的不厲害,但回頭看自己進步的幅度,還是想對自己說:「做得很好,妳超認真的!」今年的 3 月 3 日還在部落格上記錄用 Scratch 做出的小遊戲,而 6 月 16 日的今天,我從幾乎不懂如何寫程式到知道如何寫 HTML/CSS/JavaScript、用 CSS 預處理器、用 command line、用 Webpack 打包 JavaScript 檔案、用 Gulp 自動化...等等,這一切都比我當初給自己的設定「要是能弄懂 HTML/CSS 就滿足了」還要多很多。即使每個項目我都還涉獵不深,但至少弄懂許多專有名詞,不再是程式語言的麻瓜了。

胡立老師在 PTT 的 Soft_Job 板上 po 了這篇:[情報] 免費程式教學(前端),然後 3月 11 日收到他寄給我確認「錄取」課程的 email,詳細過程我有寫在在 Frontend Intermediate Course - 緣由,裡面有講到我是如何知道這門課程的,以及如何認識胡立老師的。我其實不符合資格,因為幾乎沒有基礎,所以一開始我也不太敢在 Slack 群組上問其他人問題,一方面怕我問的問題暴露出我其實沒基礎進到這門課裡,二來也怕我問的問題太基本其他人會想翻白眼(不過都只是我想太多的內心戲而已)。

後來在第八週左右,剛好一個機會在 Slack 群組裡說出了自己在今年 3 月份才開始學寫程式,其他同學倒是沒有聯想到一開始我是沒基礎進來的了,反而覺得我很厲害。當時想說我那麼弱但也努力的跟上大家的進度了,所以即使一開始沒基礎「被特例」進來也應該沒關係了吧,我已經用行動證明自己的能力。而且越到後面繳交作業的同學越來越少,我還是持續堅持交作業,這也代表我其實不比其他同學差(當然我程式碼寫得如何是另外一回事了 XD)。大概是從那時候開始,才對自己有了信心,也才發現原來自己還蠻厲害的。

此課程的特別之處
前陣子跟胡立老師聊到,這次的課程除了可以從他提供的學習資源學到東西之外,觀摩(偷看)其他同學如何寫程式也學習到很多。

這個課程跟其他線上課程最大的不同,就是先做作業,才聽老師講解,一般的線上課程都是顛倒過來。由於這個因素,每個人依據胡立老師提供的學習資源、其他網路資源、或自身原有的知識來寫作業,這樣也讓我們不會因為先聽了解說,而被解說框架住我們的作業答案。

作業四之前我都不敢在交作業前看其他同學的作業,害怕自己看了別人的答案會想抄答案,就寫不出自己的作業了。後來進入 JavaScript 的部分,我才發現,每個人寫的程式都不太一樣,我功力很弱也幾乎沒辦法抄別人的作業(因為看不太懂 XD)。

如果真的卡住的時候也是會參考別的同學是如何解決的,然後再依照自己的程式碼做修改。常常都讚嘆其他同學的功力「哇,原來還可以這樣解決這個問題!」

所以除了胡立老師提供的解法,還有很多其他同學的解法可以參考,是很寶貴的學習資源跟學習經驗。

寫部落格的好處
在還沒參加胡立老師的這個課程之前就新開了這個部落格,當時想記錄一些學習筆記,後來加入課程之後,剛好可以把每次做作業的過程仔細記錄下來,遇到的問題、如何解決的、參考哪些資料...等等。寫部落格對我來說非常有幫助,因為記憶力不佳,所以每當忘記之前在作業裡怎麼解決某個問題時,就可以在自己的部落格上找到答案。

而且要把學習過程寫成部落格,這中間要經過消化與理解,才能把文章完整的寫出來,這樣同時也是再一次的複習。所以即使寫部落格要花不少時間,但我還是堅持每次做完作業跟看完直播講解之後要寫部落格記錄,因為我自己是最大的受益者。

胡立老師也有寫這篇:[心得] 寫 blog 的好處,看完後更加確定當初堅持寫部落格是正確的決定。

自學程式要具備的能力
在 PTT 的 Soft_Job 板上時常會看到「我非本科系想要學習網頁設計轉職,請推薦書籍或線上課程」這類的文章,然後下面的推文大多都不太看好(當然也有人會給很好的建議)。看到這類的文章,我就會覺得自己很幸運可以遇到胡立老師,有他可以詢問問題,跟帶領我學習網頁設計。

後來發現,這類文章的發問者就跟以前的我一樣,只是在「想要開始學寫程式」跟「不知道寫程式適不適合自己」。胡立老師的這篇:程式新手常見問題:解惑篇 裡面有提到:「坐而言不如起而行,與其一直在猶豫『如何開始』,不如『馬上開始』。」實際開始動手寫程式後,才有辦法來談自學程式還需要具備什麼能力。一直煩惱自己缺乏某項能力而害怕開始,或是害怕「選錯程式語言」都沒辦法真正開始學程式。

Soft_Job 板上有不少是非本科系出身的強者,靠自學然後找到程式相關的工作。我目前沒有自信也能夠像那些強者一樣,只能以自己少許的經驗來分享個人認為自學程式要具備哪些能力。

剛好胡立老師前陣子分享這篇:培養程式自學能力時應具備的三種能力,裡面提到:

  1. 英打能力
  2. 閱讀英文 Error Message 的能力
  3. 閱讀英文資料的能力
可以看到英文能力的重要性,比起數學能力還要重要的多。看過不少人在詢問學程式要具備哪些能力時,他們常常會說「我數學不好,能夠學寫程式嗎?」反而較少的人會問到英文能力,是我觀察到的一個有趣的現象

別的不說,光是「寫程式」這件事情,都必須用英文才可以。由於在美國讀大學的關係,所以英打跟閱讀英文資料對我而言不會太吃力。在寫這個課程的作業過程中碰到許多問題,通常用中文去搜尋得到的答案都很少,甚至沒有;但換用英文搜尋就能找到答案。而找到解答後,可能是官方網站的資料,或是別人寫的答案,能夠讀懂然後找到答案解決問題,都是自學程式的基本功。


還有許多線上教學網站、學習資源、開放資源都是以英文為大宗,如果只局限在中文資源上,真的會錯過很多珍貴的資源。自學的時候真的要讀很多很多 documentation,如果基本的英文能力都沒有,會學得很吃力,也會降低學習的意願。所以英文能力絕對是自學程式的時候必須具備的能力。

另一個能力是解決問題的能力。寫程式一定會遇到各式各樣不同的 bug,有 error message 時可以利用 google 搜尋看有沒有人跟你遇到一樣的問題,但也會有怎麼樣也無法套用別人的解法來解決自己的 bug。這時候可能要換不同的關鍵字去搜尋,也可能要嘗試不同的方式寫那段出錯的程式碼,也或者是根本不是程式碼出問題,只是不小心多了一個逗號或是打錯字(這超容易發生的錯誤)。所以 google 的能力是基本,延伸出來的是解決問題的能力。

當然如果數學能力很好,絕對是有利的。不過個人覺得,英文能力跟解決問題的能力才是學程式最需要具備的能力。

未來的發展
在課程後段的時候,胡立老師曾問我:「有考慮過認真轉職成軟體工程師嗎?妳有在寫程式得到樂趣嗎?」當時我回答:「不確定自己有沒有慧根。雖然在寫程式中有得到樂趣,但本身是好奇的人,可以把一個問題解決就會覺得有樂趣。」加上一些未來人生規劃的問題,所以還無法確定未來是否真的會成為軟體工程師。

就算未來我沒有從事工程師的工作,我也不認為學習寫程式是浪費時間的行為,因為學習從來就不會被浪費。高中時期學的三角函數都忘光了,可是我相信經過那些數學的訓練,才造就我今天的邏輯思考能力或是解決問題的能力。相同的,學寫程式受到的訓練,也會內化到我自身的思考,更加強我的思辨能力,並且更了解網頁的運作。

最後,感謝胡立老師無償的教學,讓我收穫良多。可以在自學程式的路上有他的引領,覺得自己無比幸運。