當初會知道胡立和程式導師實驗計畫,是因為看了「零基礎的小明要如何成為前端工程師」,覺得胡立把技術演進的脈絡講得很清楚,也把每一個工具出現的原因和想要解決的問題,以情境的方式描述,讓人很能感同身受也印象深刻。(這點在之後的課程中也會體驗到。)覺得這個人還蠻有趣的,就把胡立在 Medium 上的其他文章也都看過一輪,因此知道了這個計畫。
從進入第四週課程到第八週課程結束,突然就沒有線上課程講細節了,只剩直播講大概,於是開始嚴重卡關,各種撞牆。一開始不知道怎麼寫,寫了以後不知道怎麼改、不知道怎麼 debug、也不太知道怎麼問問題。如果要簡單總結的話:自己對於概念的理解其實比較沒問題,通常是實作上比較有問題,四到八週理解了但實作障礙重重的地方有環境建置(week5)、串API、操作 DOM 物件、jQuery、ajax、事件處理、前後端溝通,還有重構程式碼。(列一列怎麼好像就是全部了)
此外,因為全部的程式碼都混在一起寫,看了十一週課程學到 MVC 架構以後,不禁在心裡默默 murmur:為什麼不在寫留言板中間的其中一週教,順便教我們怎麼重構呢!雖然知道胡立決定教學順序的原因是在 There is no magic in my classroom 這篇提到的讓學習者感同身受,但我自己是覺得感受兩週就夠了,感受四周有點太久。
交出第八週作業後,頓時覺得人生海闊天空,經過留言板的作業,覺得自己明顯的進步應該是在於可以比較清楚地把「使用者的動作」對應到:「該怎麼寫程式碼」,再對應到:「前後端怎麼寫、怎麼溝通」,再對應到:「該怎麼切分檔案」。一開始腦袋裡不太會有這樣清楚的意識,雖然怎麼切分檔案和 function 可能還是有點弱。但對比之前全部糊在一團的時候,感覺已經有進步了。
後期與現況:建立自信、持續前進
或許是找到了適合自己的學習方式,也建立了一定的自信,也或許是更會 google 了,過年後順順地完成了第九和第十週,也看完第十一週課程(但目前想走前端,作業就先跳過)。
現在一邊開始看深入淺出系列當複習(不得不說深入淺出系列真的寫得很好),一邊優化過去可能沒有寫得很理想的作業、嘗試自己規劃、寫幾個小作品,一邊學 React,一邊準備投履歷。希望在不久的將來可以找到前端工程師的工作。
來源:https://hackmd.io/s/Bykkj4LD4
課程開始之前
為什麼選擇這個課程
當初會知道胡立和程式導師實驗計畫,是因為看了「零基礎的小明要如何成為前端工程師」,覺得胡立把技術演進的脈絡講得很清楚,也把每一個工具出現的原因和想要解決的問題,以情境的方式描述,讓人很能感同身受也印象深刻。(這點在之後的課程中也會體驗到。)覺得這個人還蠻有趣的,就把胡立在 Medium 上的其他文章也都看過一輪,因此知道了這個計畫。
於是,傳了課綱給資工系的同學請教意見,他們覺得這個計畫教的東西還蠻多的,有些東西甚至連他們自己也不太熟,如果能學會課綱上所說的這些,應該就真的如計畫簡章所宣稱的,能在結業後找到工程師的工作。而我也到 youtube 上看了兩集第一期的直播,覺得胡立講話的口條和聲音都蠻可以接受的(在乎聲音是不是一個奇怪的點啊?),講解概念也都蠻清楚的。大概花了一個週末的時間完成報名要求的 Scratch、Codewar 和一些問答。
之前有在 hahow 上買過課程、在工程師朋友推薦下看過 W3School 的網站,覺得會寫程式是一件蠻有趣的事,如果能學會這項技術,對生活應該也蠻有幫助的(不管是要解決自己實際碰到的問題,或想要轉行)。思考了一下自己是不是想花四個月的時間學習、嘗試踏入一個新的領域。然後,就決定報名了。
簡章吸引我的地方
備註:
為什麼不選擇其他課程
由於我並不是一開始就很篤定自己要成為工程師,只是當作轉換工作過程優先嘗試的選項之一,在參與計劃前也沒有認真地往這條路邁進,所以也不知道有什麼其他的線上課程。報名時大概知道有 Udemy、hahow、資策會、好想工作室這一類提供學習程式的管道,但在那之前也沒有仔細研究過他們的差別是什麼,當時也還不知道有六角學院、Alpha Camp、五倍紅寶石之類的選項。
在還沒百分之百確定自己是不是真的要走這行之前,程式導師實驗計畫的收費制度是我比較能接受的:上課一個月後付保證金3000,計畫結束後找到工作付一個半月薪水。除了學費考量以外,課綱的設計、作業的說明和可以試聽課程等等,胡立在網路上公開透明地公布關於計畫近乎所有資訊,這些都讓我對程式導師實驗計畫有多一點信心。
對課程的期待
對於課程的期待大概是:老師會手把手地帶我們學會所有成為一個工程師應該要懂的一切。
課程開始之後:關於學習歷程與轉變
歷程分期
不知道大家有沒有看過少年 Pi 的奇幻漂流,如果把課程開始之後的學習歷程用電影來比喻,大概會是下面這樣。
其實學習歷程這一段應該跟其他的同學大同小異,畢竟課綱是一樣的,作業的難度也是一樣的。但除了考量讀者,寫心得也是為了自己做紀錄。
前期:按部就班、穩定成長
前面三週的學習蠻順利的,或許交作業有點 delay,但差距不會太大,在 Lidemy 上的課程都講得很清楚,寫作業時發現哪裡不熟可以很快找相對應的單元複習,課程和作業之間的差距也不會太大。比較難理解的是物件和邏輯短路的部分,理解了但需要花比較多時間熟悉的是 CSS Selector。
中期:迷途漂流、自我懷疑
從進入第四週課程到第八週課程結束,突然就沒有線上課程講細節了,只剩直播講大概,於是開始嚴重卡關,各種撞牆。一開始不知道怎麼寫,寫了以後不知道怎麼改、不知道怎麼 debug、也不太知道怎麼問問題。如果要簡單總結的話:自己對於概念的理解其實比較沒問題,通常是實作上比較有問題,四到八週理解了但實作障礙重重的地方有環境建置(week5)、串API、操作 DOM 物件、jQuery、ajax、事件處理、前後端溝通,還有重構程式碼。(列一列怎麼好像就是全部了)
實作留言板的時候幾乎是每增加一個功能就陣亡一次,而每次陣亡都需要二到五天不等的恢復期,導致留言板不斷進化的階段拉得很長,透過留言板實作的過程,也讓我很清楚地知道自己前面哪些地方沒學好。(這點因為在第三期課綱加了複習週,應該會大幅降低前面沒學好但誤以為自己學好了,往下走之後又回去補洞的機率)
此外,因為全部的程式碼都混在一起寫,看了十一週課程學到 MVC 架構以後,不禁在心裡默默 murmur:為什麼不在寫留言板中間的其中一週教,順便教我們怎麼重構呢!雖然知道胡立決定教學順序的原因是在 There is no magic in my classroom 這篇提到的讓學習者感同身受,但我自己是覺得感受兩週就夠了,感受四周有點太久。
留言板四週的課程和作業我跌跌撞撞大概花了兩個半月才完成,超久!過程中主要碰到的問題是不太能很清楚地列出使用者做一個動作以後,寫程式時要怎麼拆解成多個步驟。對於新學到的東西不熟悉,全部的東西都混在一起,留言板又是第一個遇到架構比較複雜的作業,對前後端間的溝通沒那麼清楚,一開始 debug 的時候常常會困惑到底該從前端還是後端改起。因為卡關卡得太嚴重,有好幾天都被滿滿的焦慮和無力感淹沒,打開要修改的檔案就覺得心很累,幾度想放棄這個計畫。但幸好我不是唯一卡關的人,因為太多人卡在這裡,胡立有補開了仔細的留言板手把手教學影片,還有一對一檢討,更後來還補了 BE101 的課程,並提供 PHP 學習路徑。這邊要再次感謝胡立即時進行課程修正,這些都讓路更好走一些。
轉折:不斷試錯、累積經驗
除了教學端提供的協助,我覺得在這過程中我做對的事情還有以下幾點:
協助學習:
因為留言板寫到後面真的太崩潰,我覺得我有任何一點點不確定,就會丟訊息給資工系的朋友,問各種問題,因為很熟,所以不怕自己問的問題是蠢問題,不必在問問題之前再三斟酌用詞,或再三確定自己到底努力過了沒。(雖然胡立也強調任何時間都可以問問題,但每次發問前總覺得需要先跨過心裡的一道檻)中間甚至約了兩天一起寫 code,把自己寫的程式碼講一次給對方聽,確認自己的理解是正確的,我覺得這件事對我幫助很大。一開始 debug 的時候,常會有這樣的情形:改一改突然就好了,但不知道哪裡改對了,有時候改別的地方,上次改過的地方又壞了。在那之後就知道當有錯誤發生的時候,要怎麼修改和測試會比較好,也能比較冷靜地處理。觀摩同學的作業,則是在不知從何開始著手的狀態下適合的方法。
調整狀態:
雖然暖男老師有和大家說了蠻多次可以按照自己的步調走,課程設計對初學者不是那麼友善,如果跟不上進度很正常,不必給自己太大壓力。
但由於進度落後了以後,差距只會愈來愈大,心理的壓力很難因為短短幾句話就被解除。很多時候會陷入自我懷疑的狀態:到底自己適不適合走這條路?這幾個月來我到底在幹嘛啊?心理上的卡關說不定比學習上的卡關花了更多的時間調整。發現自己到極限的時候,適度的放鬆也是很重要的,給自己完全放兩天假以後,再回到學習狀態吸收能力會比較好。想一想自己當初為什麼要報名這個計畫,可以重新長出繼續往下走的動力。和朋友解釋自己在學什麼,有助於建立自信。(這點我一開始完全沒想到會有幫助)
和朋友聊起近況,我說我在學程式的時候,難免也會被問到那是在學什麼?什麼是什麼?當和朋友解釋自己在學什麼東西的時候,其實會發現自己對哪些東西的概念可能不是太熟,但也會很明顯看到自己的成長。例如一開始我只會說:噢,HTML 就是網頁的架構內容、CSS 可以改變外觀、JavaScript 可以增加和使用者的互動。但後來就可以講得更清楚、更多細節,比如為什麼有的網站在註冊頁面,可以即時和使用者說這個帳號有沒有人使用。但有的網站需要在使用者按下送出按鈕以後,才會告訴使用者成功或失敗,這背後是用了什麼技術之類的。
意識到這件事以後,不管是學新的東西或複習,都會不斷問自己問題:
如果可以自問自答地很清楚順暢,就可以當作是學會了,可以在每週課程目標上打勾。
有做對的事,當然也有做錯的事:例如:熬夜 debug,結果沒有結果。或是高估自己的能力,重排的計畫又嚴重 delay,結果再度懷疑人生、質疑自己的智商。但經過一次又一次的試錯,如果有好好記錄下來,就可以避免下次再摔進一樣的坑洞。
交出第八週作業後,頓時覺得人生海闊天空,經過留言板的作業,覺得自己明顯的進步應該是在於可以比較清楚地把「使用者的動作」對應到:「該怎麼寫程式碼」,再對應到:「前後端怎麼寫、怎麼溝通」,再對應到:「該怎麼切分檔案」。一開始腦袋裡不太會有這樣清楚的意識,雖然怎麼切分檔案和 function 可能還是有點弱。但對比之前全部糊在一團的時候,感覺已經有進步了。
後期與現況:建立自信、持續前進
或許是找到了適合自己的學習方式,也建立了一定的自信,也或許是更會 google 了,過年後順順地完成了第九和第十週,也看完第十一週課程(但目前想走前端,作業就先跳過)。 現在一邊開始看深入淺出系列當複習(不得不說深入淺出系列真的寫得很好),一邊優化過去可能沒有寫得很理想的作業、嘗試自己規劃、寫幾個小作品,一邊學 React,一邊準備投履歷。希望在不久的將來可以找到前端工程師的工作。
關於學習方式
印象中我在某一次意見回饋的時候有說過,覺得自己除了在學寫程式以外,也在學怎麼學寫程式。
在課程前期,自己還在摸索怎麼樣是適合自己的學習方式。因為課程主要提供的學習資源是影片,不管是直播或切成小單元的線上課程都是影片。根據自己過往的學習經驗,如果是透過閱讀文字的方式學習,理解和吸收會比較快速、也比較牢靠。所以剛開始還不太會找資源、也有點懶惰讀英文文件的時候,同樣的課程要反覆看很多次才能完全理解,單靠影片學習的方式對我來說太耗時間,但若以閱讀的方式學習,就可以很輕易的找到自己看不懂的地方反覆看。
一開始也會依過去習慣的學習方式進行課程,因為過去學習和寫報告的習慣是會先收集大量正反方資料、仔細研讀後,列出論點與文章大綱(甚至逐段要點),才真正開始進入書寫(輸出)階段。事前的前置作業相當長。
但經過了幾週以後,我才發現學習程式和寫程式並不是這樣的。看了教學影片或官方文件,有了七、八成的理解,就應該進入實作階段。一邊做,會一邊發現問題,自己不會的地方、自己還不夠理解的地方,如此一來,在找尋新的資料的時候,更能帶著問題去尋找和閱讀、理解。比起原本的方式,會更有效率一些。
覺得找到適合自己的學習方式,與相對應合適的時間是很重要的。我現在會把課程要進行的事情做以下分類,然後盡量在覺得頭腦最清楚的時間進行輸入(理解)和輸出(實作),飯後容易想睡覺的時間做記錄和整理,睡前做歸納統整。如果能有效率的學習,看到待辦事項每天都有很多打勾,而不是一直往後推遲,就好像喝了福來福喜,感覺做什麼都會很順利。
輸入:看影片、閱讀文章 記錄與熟悉:寫筆記、模仿與練習 輸出:自己寫 code 問題紀錄:整理遇到什麼問題、用什麼關鍵字 google、google 到什麼、嘗試了什麼 歸納後輸出:寫統整筆記
問題與建議
寫到這邊有點累了,相信讀者也累了。 有些部分第三期課綱已經有改進,或在其他同學的心得提過的面向就不再詳述。
教學面
包含:課程大綱、作業設計、學習資源等。
教學內容的部分我覺得是最沒有問題的。 胡立教的東西真的很多,從一些同學求職的經驗來看,應該也是蠻符合市場需求的。
不過如何優化程式碼(包含 coding style)、dev tool 的使用和如何 debug 這三件事,在直播影片的時候雖然會稍微帶到,但覺得但如果可以獨立出來講,我覺得對學習會更有幫助。
另外,有幾個小問題:
其他對應問題:
支持面
先說我覺得做得好的部分
課程一開始,第二週很多人在大數加法卡關的時候,胡立有邀請第一期的 Amelie 同學,分享她當時同樣作為一個初學者的經驗。後來當大家紛紛卡關時,胡立也不斷透過各種精神喊話和經驗分享,鼓勵大家,幫助大家調整心態。並嘗試調整課程進行方式。
其實我覺得這是最難的部分,畢竟有時候連單純模仿教學影片或範例都發現不如預期的時候,真的會懷疑自己的智商,不小心就會陷入自我否定的無窮迴圈。但每個人可以被安慰到、或被說服的點又不太一樣。
這邊順便分享資工系朋友安慰到我的點:
有些同學可能進度蠻快的,但我們不知道他是不是之前就有相當的基礎,或花很多時間投入學習。我們不能只看到別人的成果和進展神速,卻忽略了他們背後付出的努力和時間。
覺得可以改進、做得更好的地方是
(這裡列的不是教學端的責任,只是以如果我是胡立,我會怎麼調整的角度分享)
以關卡取代週次 對應很多同學都有提到的問題:落後者容易有心理壓力。 建議不要以週次描述,用關卡取代,並提供平均過關時間,讓同學可以自己衡量時間。或建議同學如果超過平均時間,就可以勇敢地向胡立提問。(我自己覺得這是一個很難的問題,到底卡關多久才算久?努力多少以後的發問才不算伸手牌?) 如果不是用週次做區隔,好像就沒有一個主進度,落後的人可能不會那麼容易有心理壓力,也比較不會自我懷疑。畢竟到了下一關又可以重新開始。不會覺得自己一直處在落後階段。
更好的整理學習資源、參考資料與常見問題 課程以 slack 作為主要的資訊交流管道,但訊息有點多、有點亂、時間一久還會被洗掉,只能夠手動保存。中間進度落後的時候,會不知道當時分享的文章什麼時候適合讀。就算保存起來了,也還是有很多還沒讀和還沒整理的,資訊量多到爆炸,不知道自己是遺漏了重要的還是不重要的。除了各種文章轉貼,還有很多同學的提問,但因為進度不一致的關係,同學的提問和自己當時的進度不一定相符,事後就算碰到了一樣的問題也不知道要往回找對話記錄,甚至找不到。 我猜也有其他同學也會手動保存 slack 裡的訊息,如果有整理另外一區放常見問答和經驗分享的文章,應該可以避免讓大家重複做白工,可以節省不少時間。
每日進度報告調整(兼問問題習慣養成與掌握狀態) 第二期的進度報告比較像是攤開的 Todo List,重點主要放在完成和未完成,像是: 「我昨天學了什麼或完成的什麼;今天預計學什麼、做什麼」 我個人覺得如果把重點擺在學習記錄會好一些,像是: 「我今天學了什麼和碰到什麼問題(已解決或未解決)」 一方面可以避免大家看進度報告會有比較心理,一方面可以養成問問題習慣,另一方面教學端也可以比較即時掌握學習端實際的情況,知道初學者實際會碰到的問題在哪,不必再另外透過問卷收集大家的問題。
其他對應問題:
給想報名下一期的同學
報名前評估
課程推薦
硬要放金句摘錄
小結
感謝老師、助教、同學們還有資工系好朋友。雖然很少在 slack 上發問,但透過大家的問題和分享,讓我知道很多可能會發生的問題。透過大家的程式碼,也讓我知道自己不足的地方。
雖然已經接近課程表定結束的時間了,但對我來說,旅程仍持續進行中,中間雖然有迷途、漂流、失去動力的時候,很慶幸自己沒有太快放棄,才能體會到更多寫程式的樂趣,像是靠自己的力量做出想要的網站模樣,並持續往下走。
畢竟,學習是自己的事,只有自己可以決定自己要走多遠。