我創辦的線下實體工程師培訓營火箭隊,第一梯已順利結業。目前第二、三梯仍在持續培訓中。
在培訓過程中,我看到無工程背景的學員,一步步掌握到程式邏輯的過程,想趁記憶鮮明的時候記錄下來,如果你也是正在投入程式開發,歡迎一起參考 :D
火箭隊是什麼?神奇寶貝?
火箭隊是我與其他共同創辦人,在高雄創辦的軟體工程師實體培訓營,組別有前端與後端組,培訓過程完全免費,不需保證金。
受訓的學生會在週一~週五的 9:00~18:00 到我們的場地來進行培訓,為期半年的時間,
方法一:探索適合自己的學習吸收方式
我們的培訓方式是不提供教材,讓學員自主尋找網路教學資源的方式。原因是軟體工程師其中培養的技能,就是在培養「獨自解決問題」、「自我研究技術」的能力。
只有在前期為了引入門,我花了些時間在分享安裝網路編輯器,以及基本的 HTML、CSS 後,接下來就讓他們自主摸索程式開發。
這過程中我觀察到一個有趣的現象:
- A 同學他在講者實體分享、看技術書籍的吸收效果很差,但跟自己同程度的學員實體交流時,效果竟是最好。
- B 同學在學習 JavaScript 時,嘗試 YouTube 影音教學、與同學交流都效果不佳,反而是看到一本自己容易吸收的 JS 書效果比較好。
- C 同學表示,他不排斥所有資源,會像是用拼圖的方式將知識拼湊起來。
這也打破以往我的觀點,以為只要有一個完美的教材,就能解決任何問題,沒想過大家背景不同,在吸收知識管道上都有自己拿手或沒接觸的領域。
當意識到這點後,我就開始鼓勵學員去做各種嘗試,探索自己在文字/影音/實體的吸收上,哪種最適合自己。
我自己的觀察,也是看到培訓學生多數都是用複合吸收的方式,讓自己能夠完全搞懂。舉例來說一個 JavaScript 知識,可能會藉由某個熱門 YouTube 教學搞懂了 70%,其中 20% 搜尋了很多的技術部落格慢慢的拼湊起來,而最後的 10% 就是經由跟其他學員反覆討論而達到貫通。
像是下面影片則就是火箭隊的日常,一有問題就拉出電視或白板討論程式問題。
小建議:我較常遇到的學員狀況是,只找一個教學資源,就試圖想搞懂全部觀念。沒進展時,就得開始尋找其他學習資源,讓你有辦法持續推進。看不懂的東西有時就算練習 N遍 還是看不懂,
方法二:用週迭代來推進目標
半年時間說長不長,說短不短。為了確保學員每週都能有進度,我讓他們每天都寫日記。以成效來說,我覺得蠻不錯的。
我會讓他們在禮拜一時訂個目標,而要確保週五的時候可以達成。而每天的日記需要寫的欄位有:
- 您覺得距離本週五前訂定的目標,已達成多少?(百分比)
- 您覺得今天整體心情如何?
- 【學習歷程描述】請紀錄你今天的投入中過程學習了什麼,完成哪些項目?遭遇到什麼困難?
- 【心情寫照】今天的情緒高峰與低峰是如何呢?
- 【每日獲得】您今天學到了什麼?今天獲得最重要的領悟是?
- 【明日行動】您會如何用一句話形容今天的投入?有哪些工作是明天需要繼續努力的?
- 【週五填寫】您覺得本週訂定的目標是否適合?是否有改善的空間?
我認為比較好的成效有四項:
【1.反省與改善】
可以很明確知道自己當天的進展,同時也了解明天到底可以朝哪個方向投入。會導入這機制也是我觀察到很多初學者,在學習時很像是無頭蒼蠅,沒有方向,有時那個摸一點,有時這個摸一點。但藉由此機制,可以幫自己檢視學習狀況,才能進一步優化自己的學習過程。
【2.每週升級學習效率】
半年的時間大概是 26 週左右,我讓學員訂定週目標的用意也在於,加速自己的學習效率。因為當你去工作時,主管也會詢問你的工作時程,你必須藉由你的解決/研究問題能力,來解決工作任務。
所以像是學員當週沒達到目標時,我就會跟學員討論像是以下對話,讓他們更加了解自己的學習狀況:
「這週你要完成的前端介面,看起來是卡在 AJAX 非同步觀念,還有操作 DOM 不熟,所以研究曲線超乎你預期,要不要下週我們先將這兩個觀念搞懂後,再來嘗試這個版型?」
「我看你的日記,好像你都只有專注在 A 學習資源上,但看起來成效你也覺得沒有很好。Mike 在上週也卡在同個問題上,他是用 B、C 學習資源才突破的,你要不要試試看?另外也可以想想看當遇到一個細節卡關時,可以再找多方資源幫助自己突破」
「你這次訂得目標好像太貪心了?一週想做四個事情好像有點太多無法消化,不然後面兩週我們先專注在某個事情上來試試看。」
【時間管理上也較於彈性】
如果你是兼職準備的話,工作上會有很多變數需要加班。而當歲數越大時,學習時間也會變得更碎片化。
所以假使你的目標是以「日」為單位,失敗風險就很高,所以用週當單位的話,一週你抓 10 小時總學習時間,禮拜一如果臨時加班沒辦法學習時,也不會太沮喪,因為你會思考該如何在其他時間將進度補回來。
而在軟體敏捷開發的精神中,甚至也會抓兩週的時間當作一個目標衝刺,目的也是在於時間緩衝上比較有餘裕。
【遇到低潮時,日記會是你的最佳良藥】
半年培訓期間,除了與學員一起訂定目標外,絕大部分時間都是在他們低潮時給予建言精神支持。我發現此時日記也變成是一個很不錯的回顧方式。就會有了以下對話:
「你看這日記表,十幾週前你都還不會寫程式,但現在都能排電商版型,也能教學弟妹了說」
「你其實都是目標設太大,給自己太多壓力了啦,你看上上週日記你研究的東西,是 B 同學的兩倍量欸…你把自己逼那麼緊幹嘛,你其實進度是沒問題的,不要給自己太大壓力是你首要處理的課題」
【小結】
如果你不知道怎麼訂定目標,這裡我們也有開源第一梯學員們的目標日記,也提供給你參考,網址連結。觀看特定學員後,點擊各週就能觀看當週的禮拜一~五的學習狀況,如下圖。
小建議:設定目標其實不是為了達成,而是幫助你更了解自己,知道自身的學習吸收狀況,只要每週都能穩健推進,自然可以達到自己訂定的目標。
小建議:如果沒辦法每次學習完後寫日記,也可以嘗試寫部落格,好處在於可以順便幫自己梳理程式脈絡,也是藉由寫作再教自己一次
方法三:自主設計中型里程碑
為什麼要設計中型里程碑呢?原因是避免好不容易燃起的學習之火,不會隨著時間而等比降低。來上一張圖解釋下。
左側的指數是學習意願,下側為培訓時間。在一開始七月學員進來培訓時,什麼事情都很新鮮,所以學習意願是高的,但隨著學習程式容易撞牆,所以指數會慢慢降低。
在中間時間我穿插了全部人參加 IT 鐵人邦活動,的在於拉回學習意願外,也讓他們團結凝聚感更高,這樣在 run 最後一個月的專題設計時,溝通上才可以更順暢。
為了在學習過程中,能將學習意願拉回來,必須設計中型里程碑,好處在於會認為自己過了一個對他而言不小的成就、再來就是也會覺得自己距離最終目標更近了。
說到這個也可以聊一下,我遇到絕大部分的學員問他們最終目標是什麼,不外乎都是「想找到一份軟體工程師的工作」、「想成為前端工程師」,但問到的短中期目標,通常都答不上來。這樣就很容易變成下圖的狀態。學習意願呈現斷頭台方式,以致於放棄。
如果你想建立中階里程碑,最好拿你在學該技能時,普遍大眾所認可的成就,如果不曉得也可關鍵字搜尋該行業部落來了解。
這裡我也分享要成為前端工程師時,比較常見的中階里程碑:
- 網頁切版:會將 UI 設計稿轉化成 HTML、CSS 網頁版型,並會手寫 RWD 響應式網頁設計,或者會使用 Bootstrap 4 框架達成。
- JavaScript:了解各 JS 面向,並掌握 SPA 三大框架其一 (Vue、React、Angular)
同時也必須藉由獨自完成一個前端作品,讓自己覺得其強度有達到里程碑才算 ok。如果你找不到版型練功,可以到 The F2E 前端修煉精神時光屋的「單元」練功,兩屆設計稿都有提供授權使用,方便您練習或參考他人的程式碼。
方法四:培養程式邏輯是偽議題,如何將知識轉換成技術才是重點
我在教育上經歷過一對一教學、小班制教學、線上直播、學校學期、工作坊等等教學方式,而火箭隊是我與學員相處時間最長的。這樣一點一滴看他們突破程式邏輯大門,也終於讓我自己突破盲點。
以往我都很拘泥於到底要怎樣,才能快速讓學員掌握「程式邏輯」,在經由我反覆實驗總結了標題的結論,也就是要專注於將知識轉換成技術上。這裡我們就分二個階段,分別是 知識 > 轉換技術。
【知識】
什麼是知識呢?我們拿騎腳踏車來當例子,以前你學腳踏車,可能是自學,也有可能是你家人教導你,他們可能會給你一些知識。例如:
- 龍頭要持續保持平衡
- 腳要一直踩,才會往前進
雖然你當下知道要這樣做,但光是保持平衡就很困難,更別說要同時掌握這兩個方法。接下來就會進入到轉化的過程
【轉換成技術】
為了讓你「學會騎腳踏車」,你的家人就會提供給你各種「他們當初是如何學會的方法」,例如以下對話:
- 「你跟我以前學一樣,眼睛都看地下,你下次試試看一直看前面就好,我之前都看前面就不怕了。」
- 「你就先不要管那麼多,就一直狂踩就對了!」
- 「背要挺直!不然平衡感會不好」
最後你發現到「一直狂踩」好像比較容易抓到訣竅,或者是你自己找到適合的方法。而這過程中,你必須持續探索「哪種方法有讓你感覺有慢慢學會該技術」後,再加強持續投入。
而通常轉換的時間是會花最久的,畢竟要讓自己好吸收的方式並不容易,而這也是為什麼需要找老師的緣故。如果要有足夠的知識量,那麼看書跟網路上的資源就一把抓,但看歸看,實際要自己下手做時,就發現自己不會活用。
而專業的老師,則可以看出你對哪種吸收方式最有效,提供最適合你的轉換成技術的方式來進行講解。
像是我經營的六角學院,也常有學生說他都「看完」影音課程了,但還是一頭霧水。相信大家都看出癥結點,光只有「看」還不足夠,你必須「動手做」,才能內化成自己的技術。
所以當學員反應進度有障礙時,我會反問他兩點:
- 是不是知識量不足夠,得先把相關知識補齊?
- 如果知識量夠了,在轉換成技術上遇到了什麼困難?要不要去看看其他人都怎麼突破?並能駕輕就熟變成自己會的技術?
最後我再附上幾句對話給各位參考:
【情境一:單純知識量不足】
學生 A:「老師,這陣列我知道怎了加東西進去了,但陣列可以去做搜尋或刪除嗎?」
老師:「可以啊,你看這本書有講解很多陣列的語法,先去理解吸收一些你想知道的吧!」
【情境二:了解知識量,但找不到轉換成技術的方式,所以無法培養成技術】
學生 B:「老師,我在學 Flexbox 的時候,都不知道 display:flex 到底該下在哪裏,東西才會並排在一起」
老師:「我那時學也跟你有一樣的問題,我是用父層跟子層的概念去聯想的,一看到版型就先想爸爸要管兒子,所以爸爸要去做設定才對。」(轉換技術經驗傳承)
學生 B:「這口訣我一聽就通了誒..那我再來試試看」
學生 C:「我還是沒有很懂..冏」
老師:「我這裡有篇文章,他有寫自己是怎麼學會 Flexbox 的,而不是只教你知識而已,你看看他怎麼突破的,而且你看它畫得 Flexbox 的使用時機判斷圖好完整!」(不要看語法教學,而是尋找多個作者轉化技術的文章心得,試圖找出能讓學員通的轉換點)
學生 C:「哦哦哦,這張圖再搭配老師剛講的範例我通了!但可能要多用這方法來熟悉一下,這樣我才運用得習慣」(找到一個有進展的轉換突破口,並持續練習變成技術)
【情境三:不知道自己知識量夠不夠,也不知道怎麼轉換成技術】
學生 D:「老師我 JavaScript 語法基本的都會了,但這個 UI 互動介面我還是沒什麼頭緒,都不知道怎麼下手。」
老師:「我那時學也會這樣,我之前突破的習慣是先去從使用者行為去畫流程圖,就他按了按鈕,如果沒填資料會發生什麼事,有寫資料就做什麼事情,這樣比較能思考到 DOM 跟監聽的關聯性。」(提供轉換技術經驗傳承)
學生 D:「我這樣大概有頭緒了,老師我這樣是不是有點笨 QQ..」
老師:「其實大家都是這樣過來的,別擔心,還有一個作法就是去 Codepen 或 GitHub 上找類似的程式碼,盡量找那種自己可以看懂 70~80% 的 Code,這樣你可以了解他技術邏輯,又能多一些知識量,學起來也比較快。」(觀看他人作品也是增加知識量方法與觀看別人轉換技術的好方式)
學生 D:「對吼,我想到宜蓁幾天前才剛寫完這段,她的 Code 我比較看得懂,我去問他那時是怎麼思考做這段的」(不是看 CODE 本身,而是詢問尋找轉換技術的切入點)
小建議:將知識量轉換成技術這點,可以觀看「方法一:探索適合自己的學習吸收方式」,尋找適合自己從知識轉換成技術的學習方式才是重點。
總結
最後也幫大家做個總結,希望大家都有所收穫 :D
- 先設計中型里程碑與週目標
- 探索適合自己的學習方式
- 遇到進展不如預期時,判斷是知識量不足,還是找不到將知識轉換成技術的關係