程式導師實驗計畫 - 故事起點與中途站

背景介紹

安安,我 ChihYang 啦。

歷史系畢業,很純的純文組。

就讀中正大學歷史系,必修課寫的論文是「粟特民族的祆教葬俗」,一個連我自己都忘記在寫什麼的論文主題。歷史系訓練出來的能力是「查找文件並篩選資訊」、「了解事件的前後脈絡」、「統整文件及抽象概念後重新組織」這幾項。

個性三分鐘熱度、容易放棄,從前都在自己的舒適圈踏步,求學過程中數學一直不好,覺得文科擅長就走文科,很少踏足文科以外的領域。

一切的起因,起源於學長

為什麼會想轉職呢?

主要是因為大四快畢業前在因緣際會之下,資管系的學長教了我一咪咪 HTML,後來覺得求知慾大過於平時吸收的資訊量,就改成自己摸索,看完了六角學院的 HTML、CSS、RWD、JavaScript 課程並提交作業,在過程中覺得自己的確對寫 code 頗有興趣,產生了一絲絲「或許我可以試著成為前端工程師」的想法。

沒有想太多,只有純粹學習的樂趣和好奇心就踏入這個世界,但在學習不久後就被抓去當兵了。

學習前的歷程,遺忘與迷惘

當完兵後幾乎把之前學的東西忘光光,花了幾個禮拜重拾記憶,開始思考「到底要學到什麼程度才能去應徵前端工程師?」,我總覺得自己只是在看線上課程自 high,是個閉門造車的傢伙,超級迷惘自己的方向。

那時覺得迷惘時就來點外在刺激吧,報名好想工作室的 Web Camp 是我踏出舒適圈的第一步,但不幸被刷掉了,那時我的心理狀態還沒有準備好,不太確定自己想不想要投入學習,而好想工作室就是篤定要找方向非常明確的人,另外在對問題的執著度或許也沒達到他們要求,被篩選掉也是理所當然。

被刷掉不完全是壞事,反而這股不甘心激發我的動力,經歷挫敗後才發現自己是有熱忱的,加上之前就有在關注第二期的消息,看到第三期開放報名後就欣喜若狂的寄信了。

為什麼選擇 Huli 的課程?

第一次關注到 Huli 是 零基礎的小明要如何成為前端工程師? 這篇文,那時候對我是蠻大的震撼,沒想過自己能夠看得懂工程師寫的文章,之前我看工程師寫的文章都覺得像外星語,沒想過有人能寫出地球語,Huli 的思維與特質也很吸引我,於是他成了我第一個關注的工程師。

再特別關注 Huli 已經是第二期結束的時候了,想說幹這課程心得也太 Real 了吧,Huli 檢討自己課程的時候是直接把轉職成功和不成功的人數攤開,非常的硬派,沒有過多的渲染,只有客觀的分析。

看完第二期的心得後,我覺得自己和老師的相性應該會不錯,而且課程內容扎實,轉職失敗也沒損失,自己又喜歡寫廢文,進入課程應該很棒。

另外也報名前也有評估自己的需求,我有什麼需求呢?

第一,我沒有方向,需要一個藍圖以及即時幫我修正方向的導師。第二,不想閉門造車,所以想要一個小社群。MTR03 都是符合這些需求的,毫不猶豫就動手報名。

不過每週要投入 40 小時這個前提的確是有讓我猶豫啦。

綜上所述,我有什麼條件與性格呢?

課前程度

  • 程式:自學六角學院的課程約兩個月,完成 HTML、CSS、RWD、JavaScript 課程並都有繳交作業,會依樣畫葫蘆,實際上對程式邏輯不熟。
  • 英文:多益裸考 700,閱讀文件沒什麼問題,但需要點時間。
  • 中英打:中 126/m,英 46/m。

工作經歷、背景、個人特質

  • 工作經歷:無
  • 背景:歷史系,算是毫無相關,硬要說有影響的話是比較在意技術的演進與脈絡,以及在對於抽象概念的理解與表達會比較清楚。
  • 求學過程中數理成績不佳,是考試時的軟肋。
  • 三分鐘熱度,需要不斷有新東西的刺激才有力氣向前。
  • 單純、衝動,偏好做中學,先行動後思考。

學習條件

  • 完整的六個月全職學習時間
  • Macbook pro 13 吋
  • 住家附近很棒的咖啡廳

對於課程的期待

開始前當然是先研究課綱:

1. 基本 Git 操作
2. 基本 command line 操作
3. 前端基礎(HTML, CSS, JavaScript)
4. 前端各種工具運用及原理(jQuery, SCSS, Gulp, Webpack)
5. 前端進階(React, Redux)
6. 後端基礎(PHP, Node.js, MySQL)
7. 後端進階(CodeIgniter, Express)
8. 基本網路安全(XSS, SQL Injection, CSRF, 密碼不能存明碼)
9. 部署(買 domain, 設定 DNS, 租 Digital Ocean 主機, 自己架環境)

除了 3 以外,其他我都完全不懂,連名詞都沒聽過,所以當然是期待結業時可以對上面的技術有一定的掌握度或有基礎認識。

另外看了 Huli 對課程的說明,在內在層面他注重的是「自學」、「技術的脈絡演進」,特別是使用每個技術時思考「為什麼?」的這點,先前我在自己摸索前端技術的時候完全沒想過這問題,我不知道為什麼要用,只知道可以這樣用,對於一個歷史系的人來說不懂事物的脈絡算是很不可思議的事情,所以我也期待在課程中學習每個新技術時,自我檢測能夠有條有理的說出「為什麼要用」

課程開始前,豪緊張

看到錄取當下是在半夜,興奮地跳起來睡不著,等到心情冷卻後就開始害怕擔心跟不上了,基於這種膽小的心態,我在寄出報名信後就先註冊 Lidemy 看 Week1、2 的 CS101 部分內容,然後先預習 為你自己學 Git,怕的就是稍微落後進度自己就會心態炸裂。

Huli 很暖的地方是發了一篇 學程式的第零課:心態調整,開始前我是已經調整好心態了,不過這篇對於過去學習有挫折的人是很有幫助的。

進行課程前制定的原則

前面說過我是個三分鐘熱度的人,還會拖延,我也深知這點,所以我認為自己應該要像庫拉皮卡的念能力那樣,對自己有一些制約,違背制約就會死翹翹,主要是想藉由幾點原則來養成持續學習的習慣。

每天都要寫心得

這原則規定我不論假日/平日,或進度如何都要回報今天的學習內容,架構就是按照 ORID 架構來寫,這樣做有幾個好處,第一,是我在撰寫的過程中,可以讓自己慢慢進入學習的狀態,告訴大腦「現在是專注的時間」。第二,每天都可以檢討自身學習狀況,掌控進度,這半年的學習會是一個人的戰鬥,如果沒有每天檢討進度,很容易就忘記自己走到哪裡,失去學習目標和動力。

進度不能拖延

MTR03 有個表定進度,但還是按照個人學習進度做調配,沒有強制規定要跟上。但我認為按照自己廢廢的個性,落後了就很可能放棄或是拖延症發作,所以規定自己都要準時交作業,這原則類似於第二期 Tian 大大的做法。

幸運的是雖然偶爾會有卡關的狀況,可是都有前兩期的課程直播引導方向,所以仍然可以在每週的最後一刻交出作業。

作業提交後要放鬆

說這是制約,比較像我的懶惰性格出來放風,每次提交作業的當晚都會放過自己,不管任何課程的東西,單純就爽爽耍廢。

享受

成效如何?

覺得成效不錯,畢竟撐過六個月的課程了。

制定這些原則,要瞭解你自己是怎麼樣子的人,才能讓你的課程進行順利,比如我知道自己三分鐘熱度、容易放棄,那就必須在課程剛開始最有動力的時候讓自己每天在某個地點開始寫 code,這樣走到後面有點累的時候,也能保持繼續寫 code 習慣。總之就是努力找個符合個人性格的方式,讓自己有辦法在這場學習馬拉松持續跑下去。

所以課程進行 200 天,我就寫 200 天心得,總計約 20 萬字;作業最遲會在當週禮拜天晚上交出去。

每天寫心得變成像儀式般,是我寫程式的開場;進度不能拖延則是讓我習慣評估工時、分配時間。這過程我覺得自己不是只在寫程式,也在學習如何學習,了解自己的習慣和性格來訂定計畫。

計畫 Start!

在第三期開始後新增了「複習週」的設定,也就是每五週會有個類似馬拉松休息站的地方,讓你在學習的過程中稍微喘口氣,接下來我也會以五週為單位做分段,每五週都會附上複習週的心得,因為時間距離較近的關係,複習週心得會比較貼近當時的心境。

下文中所提到「教學太快」、「資訊太多」的基準,都是以「我這位零基礎學生在當週用 40 小時學習」當作判斷。

課程前期(Week1 ~ Week5)

Week1 | Git、Command Line | 我是坂本龍馬,你是版本控制

Git、Command line 放在 Week1 超級棒,因為課程作業的提交是依照 Github flow,讓初學者從小養成版本控制的概念,並且熟悉 Command line 的操作。

Week2、Week3 | JavaScript 基礎

JS101 有部分資訊因為知識的詛咒而太唐突的進入課程,「想講的東西很多,但時間太少。」對於零基礎學生來說,還在習慣「程式碼一行一行地跑」的概念時,就突然要他提升好幾倍的運算速度,不一定能習慣這樣的速度。

但對於有程式基礎的學生來說會很適合,特別是 immutable 的概念講解的很詳細且易懂,超喜歡。廣度和深度兼具,不會蜻蜓點水的跟你介紹各種變數、迴圈就開始實作,而是一步一步講解後,配合簡單的程式解題,讓你慢慢建立計算思維。

Week4 | jest、npm、網路基礎

這是我在前期最鬼混的一週,看完影片跟著做,隨意翻翻文件就結束了,連筆記都沒做。

我會認為 jest 放在這時有點太早,學生不太知道單元測試實際能達成什麼樣的效果,此時因為接觸到的問題很小,可能是一兩個 function 來解出一道初學者的題目,那時候都用 console.log 來看 output 是什麼就可以快速看結果,跑 test 還要自己寫輸入輸出,然後等待它測試,再看個結果,以當時的觀點來說就是 console.log 就可以辦到跟 Jest 一樣的事情,就不願意多花時間去琢磨,一直到現在我對測試都不太熟悉。

但其他方面非常棒,網路基礎概念、API 是什麼、如何用 node.js 送 request 給 api 都在這週有簡單的介紹與實作,幫助日後串接 API 鋪梗,對日後接 API 的理解超級有幫助。

Week5 | 複習週、Lidemy 解謎

Week5 複習週心得

實體聚會 | 跪拜 Tian、Amelie 前輩

人生第一次參加這種性質的聚會,兩位分享的學長姐是截然不同的人,但共通點是各有自己獨特的學習方法,以及在轉職上這件事的堅持。

印象特別深的地方是 Amelie 說過她理想的公司不能像在養老、樂於學習新技術,還有 code review 必須嚴格。Amelie 講話時發光的眼神,還有做一件事的決心觸動到我了,讓我在計畫初期就開始思考「我想進怎麼樣的公司?」以及「我想成為怎麼樣的工程師?」

課程前中期(Week10 ~ Week15)

Week6 | HTML、CSS

Week6 開始學習 HTML、CSS 練習切版,這週可以改進的地方是作業要求可以更高點,在 RWD 也可以著墨更多,Huli 的想法應該是日後的作業都能練習切版,所以這週都先當作暖身,但日後的作業其實更注重功能的實踐和程式碼結構,版面就比較依賴個人美感和自我要求,因此學生的切版功力會相對弱勢。

Week7 | DOM

Week7 則是開始把 HTML、CSS、JavaScript 做結合,出發點很棒,算是將前幾週所學全兜在一起,教學步調稍嫌快速,有點難以在一週內將前幾週解 JavaScript 題目的思維一下子轉換成作業要求的邏輯,並且這也牽涉到一些規劃,或許這邊可以教學生關於「拆分功能」、「規劃結構」的概念,會讓實作更加順暢。

Week8 | AJAX

Week8 則延續 Week4 的概念,開始試著接 Twitch API,並且 render 到畫面上,有了先前的知識,花比較多時間在了解 callback 是什麼、為何要用 callback,難度剛好。

Week9 | PHP

那一天,人們想起了被留言板支配的恐懼。

留言板總共四個禮拜,不過 Week9 的課程量很多,要學習沒碰過的 PHP、SQL,還有物件導向,課綱一打開就是滿滿的內容,跟前幾週相比不是同個層級的,也是從這週開始培養出篩選資訊或先大量瀏覽文章的習慣,在此之後的每週我都會先評估這週的學習重點是哪些,如果是教學重點以外的技術、名詞,就會先放在技術債區。

Week9 因為課程量太多,課綱也只提供資源,沒有推薦的學習順序,所以我整理出了自己的學習路徑並放在複習心得中,Huli 看到後也很迅速的把課綱內容作調整,並且把之後每週的導讀內容都調整更為詳細。

這週 BE201 的產品規劃教學有幫助到我之後寫 final project 的過程,雖然內容頗為簡易,但至少有這個意識,使我之後實作 final project 能有先做規劃的概念。

Week10 | 複習週趴兔

Week10 複習週心得

經歷前面的洗禮,漸漸熟悉課程的速度,腳步站得更穩了。這階段覺得和 Huli 熟悉起來了,提交作業和等待 code review 不像之前那樣戰戰競競,反而有些期待會有怎樣的回饋、該怎麼修正方向。

學生

課程中期(Week11 ~ Week 15)

相較於前十週我偶爾都還可以聽到一些曾經有印象的詞彙,Week11 開始所有東西都沒聽過了,也就是完全脫離了舒適圈,進入未知的領域。

Week11 | Hash、Cookie、Session

講到 Hash 就想到 Hush,想到 Hush 就想聽天文特徵

大家在 Cookie、Session 的分辨沒什麼問題,都知道各自的作用。比較會出問題的應該是 Session 機制的實作,當初在這邊我看到 PHP 內建的 $_SESSION 後也矇了一陣子,後來才發現老師的目的是「用資料庫實踐 Session 機制」。如果在作業的說明加上相關的說明,應該可以解決這個誤會。

還有作業寫得非常卡,主要是因為資料結構規劃不好,改留言板的過程中牽一髮動全身,然後又不敢亂動資料庫內容,說真的超痛苦,狠下心把全部東西改掉之後才寫起來比較順。

Week12 | XSS、SQL injection、CSRF

這週我學習的方式不太對,應該要先試著駭入自己的留言板,再去做資安相關的防護,但我是先看課程、查文件後,就直接著手進行修改,修改完後再做測試,也就是我沒有直接經歷「留言板被入侵」的過程,造成的壞處就是我對這段課程的記憶淺淺的,沒有自己駭過一遍就沒痛過,以及使用的範例都只是跳出 alert 而已,因此沒什麼危機意識。

Week13 | Bootstrap、jQuery

這週延伸之前的留言板,把刪除跟新增用 AJAX 來做,第一次接觸整個前後端的溝通,也開始用到 Bootstrap 和 jQuery 兩個 Library,把留言板套上 Bootstrap 後我的感想是:

漂亮

身為很懶得切版同時美感也頗糟糕的人,這真的是福音。

我認為先寫原生 JavaScript,這週再開始用 jQuery、Bootstrap 是很適當的安排,課程中會安排幾週看「零基礎的小明要如何成為前端工程師?」,這段時間的學習就能夠體會到整個課程其實就是在走小明走過的路,親身體會技術演進的歷史進程。

Week14 | AWS、Domain、Deploy | 我是誰?我在幹嘛?

進入到這週時我馬上露出 O_O 的傻眼臉,AWS?ACID?什麼東西?超級多陌生的名詞,買網域、買 VM 這些事也完全沒概念。

因為有第二期學長姐詳細的文章 部署 AWS EC2 遠端主機 + Ubuntu LAMP 環境 + phpmyadmin 來指引如何部署,整個過程非常快速就可以解決。但 Week14 應該要先自己查找文件然後到處摸索,不然走馬看花的把這週解決後,什麼都不記得,只知道自己照樣照做就成功了。

Week15 | 複習週趴三

Week15 複習週心得

Week15 是課程的一半了,如果要半途而廢,現在是最好的時機。

這週 Huli 的隨意聊說到一件事情:

第一件事情是讓我心灰意冷(?)的時刻
就是改作業看到有同學交了很爛的 code 上來
有幾次居然就是看到有點小生氣,想說寫這什麼爛 code
但我當然也不會直接留言說你寫一堆垃圾,因為我不覺得那是件正確的事
在感性上我的確是有點生氣的,但這種被感性牽著走的時候冷靜一下才是正解

冷靜完就會想說:他寫爛 code 是誰的錯?
是他的錯嗎?還是我的錯?看到爛 code 真的有必要生氣嗎?誰沒有寫過爛 code?
背後就有很多核心的問題可以去思考
然後看到爛 code 的當下就會想說改作業好累,不想再開下一期了XDD
不過冷靜過後就好很多了,可以比較去理性地思考一些問題
我不認為去責怪學生寫爛 code 是件對的事,因為他很有可能根本沒意識到這件事
如果老師只會責怪學生,那到底要這個老師做什麼?
之前我提過同理很重要,大家一定都經歷過學校老師把私人情緒帶上課堂
若是以前我們就知道這樣是不對的,那怎麼可以自己長大之後也變成這樣?

所以我認為比較正確的做法可以是:

  1. 讓他知道他寫的是爛 code
  2. 讓他知道可以怎樣優化
  3. 讓他知道寫爛 code 是人之常情,不用太灰心

這樣好像才是真正有解決到問題

我很感謝整個課程強調「同理」這個很有人味的詞,教學從來就不是給多少 input 就得到預期的 output,「同理」的理念能讓我感受到 Huli 是和學生站在一起,他扮演的不只會是將資訊傳遞出去的角色,而是雜揉理性跟感性後,輔助學生將思維轉換,同時兼顧到你心理狀態與能力的教學者。

在這週開始我也有所轉變,開始更積極的看同學 code、當同學有問題時試著解答、互動,如果在這個課程我只扮演學習者,那我就是一個單方面接受的人,但如果可以有所輸出、互動,試著當教學者的角色,看到的視野會更不一樣。

課程中後期(Week16 ~ Week 20)

Week16 | CSS 預處理器、Stack、Queue

Week16 我印象不深,因為 CSS 預處理器先前有稍微碰過,對切版又興致缺缺,所以重點的工具就看看文件、練習語法快速的解決。

Stack 跟 Queue 這週過後其實不太知道在做什麼的,只知道在 Event Loop 有用到這樣的資料結構,但如果能夠講解更多實際的例子,讓學生明白應用到的地方會更好。

Week17 | this、Scope、Closure

這是我最喜歡的一週,原因是 JavaScript 都是我曾經想了解,但我搞不懂,或是恐懼去搞懂的。

我曾經想搞懂原型鍊,但我看不懂在說什麼,只看到 __proto__Prototype ,但根本不知道原理,只覺得更模糊了。

也曾經想搞懂 this 在幹嘛,但大部分的技術文章就是硬記,看過就忘記了,又或者是根本不知道為什麼會這樣,只看到各種情境下放上示範程式碼,然後直接跟你說指向誰。

聽過 hoisting,但只知道這個現象,不知道背後原理。

聽過 Closure,聽起來很高大上,不敢亂碰。

這週就是把我曾經沒搞懂的東西,或不懂背後原理的現象整個理解個遍,很爽!Huli 在 Week17 下足了功夫,每個章節都有搭配他淺顯易懂的文章搭配講解,讓我能在面試時秀一波,棒棒。

Week18 | Gulp、Webpack

這週首要任務是在思考為什麼要用,以及兩個的差別在哪,因為剛開始接觸會發現兩個工具可以做到的事情有重疊。

這週的重點就是看文件稍微搞懂怎麼做,在 week20 網站優化的過程中就把大部分的任務交給 gulp 了,不過踏入 React 的世界後就沒有碰到 gulp,都是 webpack。

Week19 | 前後端的最後加點

即將踏入框架的前一週,踏入這週就像踏到大魔王城堡的門口前面。

這週要寫 todo list 的前後端,很有趣的是 todo list 會和以往的寫法不同,必須是「資料有變動,畫面就要重新 render」的寫法,也就是為了之後 React 的觀念鋪路。在這邊我花了蠻多時間在思考新的思維,特別是很多內建函式不太熟,比如 filter 等等,有這週的鋪路,讓之後接觸框架的學習曲線沒那麼陡峭。

Week20 | 最後的複習週

week20 複習週心得

lazy hackthon 優化 - ChihYang41

week20 最有趣的地方是新的支線任務 - lazy hackthon 的優化!要負責優化一個載入速度慢到靠北的網頁。算是我第一次接觸到網頁優化的領域,了解網頁如何渲染的過程、什麼是 render-blocking、lazy-loading 等等。

優化的過程使用新學到的新工具 gulp 來處理,因為我超級懶惰,所以成果也不是太好,基本上只有壓縮圖片、轉換成 webp、minify 檔案而已。

很感傷這是最後一次的複習週,每次複習週都嘩啦嘩啦的打了超級多字紀錄自己的學習歷程,書寫的一大用處是可以梳理情緒,每次寫完都有不斷往前的實感,就覺得天啊我居然有辦法一步一步的走到現在。

課程後期(Week21 ~ Week 24)

Week21、22 | React、React Router

剛開始學習 React 超級困難,要把以往操作 DOM 的觀念轉換成 state 對應 UI,但這還不打緊,還算能應付,困難的是專有名詞和新東西不斷注入,還有新的寫法,比如什麼是 state、props、life cycle、父子 Component 的溝通以及模組化的開發方式,跟之前完全是不同世界,特別是模組化的開發方式,直到寫了一段時間才逐漸習慣。

React Router 則是沒什麼障礙就能掌握,作業的要求就是帶領你慢慢理解 React Router 用法,修改完之後原本亂糟糟的邏輯變得很清楚,一度覺得自己掌握 React 了,但依照 MTR03 的慣例,當你開始舒服時,就要做好下一週不舒服的準備。

Week23、24 | Redux、Middleware

Week23 是我開始嘗試新學習方法的一週。

過往我的學習方式是大量閱讀資料,看著看著腦內就會有脈絡出來,知道大概怎麼做。但 Redux 我開始嘗試新方法,先動手實作再慢慢梳理脈絡。

原因沒有別的,因為看資料還是不懂,索性直接實作,這時才發現 Redux 是個實作大於理論的技術,光是透過教學影片看 Huli 在不同檔案之間轉換是很難理解的,必須要自己寫 container、dispatch、action creator、reducer ,才能慢慢懂運作流程。

middlware 在理解 Redux 概念後就能簡單的套用,把 call API 的 code 抽出去後檔案結構的確變得清楚多了。

Week24 之後呢?

在 Week24 之後我沈寂了一段時間,每日心得沒說什麼話,和以往差蠻多的。

撞死

Huli 在 Week28 的隨意聊說到:

有些學生覺得課程結束之後失去了方向,因為沒有每週進度了,不知道接下來要學什麼,覺得茫然,覺得無助。

你自由了,但自由的代價是你要有更強大的自我管理能力。
之前六個月都依賴著課綱,知道下一步要幹嘛,知道最後自己會變成什麼樣子,但這不是一件可以一直持續的事。結業之後,你得靠自己了,不會再有人幫你規劃要學什麼,也不會有人告訴你說哪些知識是重要的。

課程之後我的確有頓時失去依靠的感覺,因為我是超級依賴每週進度的人,Week24 後的進度表突然跑完了,就很茫然。

特別是開始寫第一次的 final project 然後再砍掉,整整一個禮拜白白浪費掉,又要重新開始規劃新的 project,真的是有點懷疑自己在衝三小。覺得自己好像沒做事,每日心得就有點懶得寫,所以 Week24 ~ 面試前是沒什麼在記錄的,就是流水帳般的敷衍書寫,算是個低潮。

最後經過三個多禮拜的掙扎生出了一個不上不下的作品,自己沒有很滿意,還有很多改進的空間,但改的時候又有點沒力氣動手,因為改 code 又是個工程,需要點衝勁,衝勁卻剛好用完了。

對自己也沒什麼自信,當初期待是不斷掌握新技術的同時,可以認同自己的基礎,逐漸建立自信,但我發現不是這樣,反而是越到後期發現自己懂的很少很少,掌握得只是皮毛的程度,想說我這樣很糟糕吧?學了這半年就這樣嗎?還有好多東西不懂欸?

Huli 此時也說了另一段話:

在第一期的時候其實計畫名稱有個 prefix,叫做「從零到一」。六個月的課程你們學到很多,但沒學到的也很多,這很正常,我不可能把所有東西都放進課程裡面。而且就像我說過的,當你懂得愈多,不懂得也會愈多,你不該把這個視為一種缺陷,因為這是成長。

前面有說到我對計劃的期許是基礎變穩,並且建立自信;但隨著課程進行到後期,反而開始變得越來越沒自信,覺得懂的東西非常少,到了 Week24 結束甚至覺得自己什麼都不太會。

因此要找工作時挺沒自信的,畢竟履歷打開就空空的,作品不太完整,了解的技術也只是皮毛,有一度都想要逃避下去,躲在課程中了,但想逃歸想逃,我其實也不知道能逃去哪,逃多久,所以還是該面對。

真正開始面試反而沒那麼可怕,因為不太像是想像中的考試,而是互動、交流、聊聊天,到後面就是抱著去社交與見世面的心態,是個需要熟悉的過程,面試時我還是有很多的問題答不出來、回答的很鳥,但隨著面試次數的上升,對於這些突發狀況的調整進步許多。

在結束課程後這段時間,要幫自己建立的心態是 「不懂的很多,但這很正常。」

學習時我有個不太實際的心態,就是期待自己結業後能夠什麼都掌握,一切準備周全後才能有自信的離開課程,彷彿武俠小說裡修煉神功大成的武林高手,內力大增後,大喝一聲,打破大門出去武林大殺四方。

但似乎沒有「準備好了」這件事,直到我拿到 offer 要去工作前,都還是覺得自己尚未站穩。所以我重新回過頭看課程名字,「程式導師實驗計畫」,這也是個尚未準備周全的課程不是嗎?但依舊出來招生了,並隨著學生的回饋不斷調整與進化,演變成現在看到的樣貌,面試也是同理,這是個需要藉由回饋再調整自我的過程。

MTR03 裡,我是個怎麼樣的學生?

很愛找麻煩的學生

學習課程的時候我會思考「為什麼這樣教?」、「這樣教好在哪 or 有什麼問題?」、「如果是我會怎麼安排?」,如果覺得有更好的方式,就會在提交作業的 pull request 提出,或是在複習週寫落落長的心得給 Huli 建議。

在學習卡關時難免會懷疑自我,比如「我是不是白癡為什麼學不會??」必須承認我也常會有這種挫敗的心情,但更多時候是先思考「現在學不會,那我能怎麼學?還是課程哪裡能改進?怎麼學能更好?」,不停的修正自己學習方式。

MTR03 是個很有生命力的課程,每一期最後都會和當初預定的進行方式不同,這和寫 code 一樣,必須不停修正方向,不一定能一步到位,永遠能有更好的教法,而 Huli 心態也非常彈性,在評估可行性之後就會馬上執行,所以學生和課程都是不停在轉變的。

很愛串門子的學生

MTR 的作業提交是透過 Github flow 來進行,code review 確認沒問題之後,就會 Merge。

Huli 在前期的喊話有提到,這課程不只是看課程、交作業而已,看別人寫的程式碼也是非常重要的,所以鼓勵同學們互相去看對方的作業,了解怎麼樣是好的程式碼。

基於這次的鼓勵,以及自己默默學習真的很寂寞,我開始會到處看別人的作業,心情特別愉悅的時候會留下 comment,主要希望透過自己這項行為讓整個課程的同學互動性增加,讓 code review 的風氣更加興盛。

這邊很有感的地方是每次為了 code review 我會不斷地去搜尋資料,把觀念了解得一清二楚才敢給同學建議,可以檢驗自己的學習成果以外也和同學交流。然後觀摩厲害同學的作業也著實能提供我不同角度的思維。

MTR03 優缺點

優點

社群 hen 棒

我喜歡這種小班制以及有進度的課綱,很像回到學校上課的樣子,很累的時候稍微跟同學聊聊、看看同學心得又會有力氣繼續向前了。

Huli hen 棒

說說我認為 Huli 在教育方面哪邊做得很好:

  1. 尊敬、同理受教者

取自我對「被討厭的勇氣二部曲」的理解

教育者角色只是協助學生自立,不會參與或強迫施加自己的看法在別人身上(不然就違反了課題分離的概念)。要抱有同理心去思考學生做某件事情的目的為何、了解學生的目的是什麼。

  1. 教育是交友不是工作

Huli 的出發點是興趣使然才開始教學,就像一拳超人的琦玉那樣,所以無欲則剛。

如果只是因為完成某件事情、可以賺錢,這樣的教育叫做「工作」,然而因為這不會帶給你歸屬感,所以不會感到開心。Huli 的教育比較像是交友,老師與學生是平起平坐的關係,不是上對下的,「交友」關係是開心的。

簡單來說他是個 open-minded,個性隨和、很有人性但是有所堅持的老師。非常對我的調調,態度就是:「寫程式很好,不寫也沒有不好。」所以參加課程蠻放鬆的,沒什麼壓力。

他花費許多心力在做的事情是「把教學調整到大部分人都能懂」以及樂於分享,每週的隨意聊都可以看到他最近在幹嘛,很特別的地方是他會展現「他跟我們一樣」,會跟我們說他在耍廢、拖延症發作,講一些莫名其妙或很有道理的話。

課程內容 hen 棒

這不用多講,課程內容很多,可以讓你從前後端都了解個遍,非常紮實。

可以改進的地方

知識的詛咒

在課程剛開始建立觀念時,還是有一些地方會講得太快,或忽略了部分作業的資訊,比如前面提及的 JS101。

課程完整度

這邊講的不是資訊不足,而是有時那週是一個完整的預錄課程,有時是直播,可以的話我覺得都用預錄課程會更完整。

作業

課程前期的作業有個問題是「不知道有哪些資訊被省略」,比如 Week7 有些資訊沒有提到,作業中或許需要用到,學生會面對的問題會是「我不知道自己該知道」,可能繞了半天還是找不到該怎麼做,後來會參考同學的作法,並且一邊懷疑自己「為什麼人家知道這個東西,而我不知道,是哪裡出了問題嗎?」

或許在每個作業可以有幾個 hint,提示可以往哪方面著手,讓學生自行決定是否查看。

另外還有完整度的問題,在面試時我面臨到的問題是所有作品的完整度都不夠,就連 final project 也被嫌太小了,也許能讓學生看一下所謂完整的作品大概是怎麼樣,或者是把作業的完整度改善,可以像是留言板的做法,每週作業都是連貫的,在課程結束後會有幾個較完整的作品。

協作

整個課程都是單打獨鬥,final project 雖然鼓勵協作但不強迫,可以的話能有幾週是同學一同合作寫專案或許會更好,但因為進度不同可能會很麻煩,具體要怎麼做目前沒主意。

不知道如何形容的地方

自信心

當週課程結束、寫完作業還是不知道自己會不會寫 code,但我覺得這點很難有所改進,並且不確定這是不是課程的問題,但我的心理狀態在課程結束後反而沒特別有自信,而是認為我好多東西都不懂,從第二期、第三期的學生來看,有自信的學生似乎非常非常少。

結語

和當初的期待有落差嗎?

先說第一點,「對課綱中所條列的技術有一定掌握度」。

我認為是有滿足自己的期待,已經具備基礎的知識,絕對沒有到每個技術都非常熟悉,不一定能豪不猶豫咻咻咻的就完成,但看文件亦步亦趨的使用是沒問題的,除了建立對技術的基礎認識與使用以外,我覺得更重要的是在過程中慢慢練習看文件自學的能力。

再來是第二點,「學會對每個技術問『為什麼?』」

這點無庸置疑是有符合期待的,每次學習新技術的時候,Huli 都會講解這技術為了什麼存在,又或者是在簡答題就會有檢測,比如「為什麼要用」、「不用會怎麼樣」。很巧的是在「我是如何完成一篇文章的?」看到 Huli 說他很喜歡歷史,造就他這麼注重技術演進的脈絡,和歷史系畢業的我不謀而合。

接下來呢?

「所有的故事,都是從選擇開始。」

進入 MTR03 這個選擇,我沒有猶豫太久,並且毫不後悔,超級有趣,進行的也蠻順利的,是一個棒到不能再棒的故事,像是火影忍者的中忍考試、七龍珠的天下第一武鬥大會、司法島之前的海賊王。

不過轉職的故事不會只停在結業,順利也不會一直順利下去,面試、選擇工作、正式工作又是其他篇章,老實說,我在工作這個故事章節蠻衰小的,導致目前又必須重新回到面試的過程,故事開始有點轉折、走下坡,像是忍界大戰的火影忍者,或是現在的海賊王(和之國真的不好看)。

但我還是蠻樂觀的,在前一份短暫的工作經驗也很有趣,經歷了超級特別的事件,並且更清楚自己想要進怎麼樣的公司、想要在哪方面精進,算是繞了一圈再重新彌補當初得到 Offer 後覺得可惜的地方,而我也相信自己不會止步於此 👍