程式導師實驗計畫第二期從今年 9 月 3 號開始到現在 11 月 4 號,經過了兩個月,而前八週,被我稱之為「基礎」的課程也正式告一段落,為期四個月的計畫也過了一半。

原本是想跟上一期一樣等整個課程結束再來寫心得,但我仔細想了一下,到那時候期中的心得可能就快忘光了,而且如果等到那時候再寫,文字量一定會爆表,寫個兩萬字也是不無可能,因此才有了這一篇期中反思,與其期末一起反省,不如期中就先好好整理一次,順便跟有在關注這個課程的大家報告一下狀況。

課程狀況

目前這一週是第九週,下面這張圖表是截至目前為止有繳交作業的人數(課程總共有 38 個人):

從圖表裡面可以看到幾點:

  1. 第九週了,還是有人第一週的作業沒完成
  2. 第五週到第六週降幅最大,那週的作業是改良自己第五週完成的留言板
  3. 有「跟上進度」的只有 4 個人,佔課程的 10% 不到

在談談上面的狀況以前,先來談談這一期課程所引入的淘汰制,只要連續兩週沒交作業加上兩周內有三天沒交進度報告,就會被強迫退出。

有一個學生在第二週的時候就被淘汰了,因此總學生人數變成 37 人。

從圖表上可以看出,還沒交第一週作業的有 4 個人,而其中 1 個先交了第三周的作業,這也是為什麼第三週的作業繳交人數反而最多。而其他 3 個人則是「一次作業也沒交」。

在課程第四週結束時要交保證金 3000 元,課程沒在期限內完成是不會退還的,之後就算被淘汰了也不會退,在那時候我就有特別寫信給這些一次作業都還沒交的同學,信件內容是這樣的:

Hi,

會寄給你這封信的原因有兩個:

1. 你還沒繳交課程保證金 3000 元

2. 截止目前為止,你還沒有成功繳交任何一次作業

所以這封信主要的目的是來勸退的,以及再次詢問一下你有沒有繼續待下去的意願(兩者聽起來有點矛盾,這我之後會解釋)。

在報名的簡章裡面說的很清楚了,這個計畫要付出的時間很多,真的很多,大約是一個禮拜至少四十個小時,才有可能跟上進度。從目前的狀況看來,甚至就算付出了四十個小時,一個毫無基礎的人也沒辦法跟上進度,由此可見課程的強度與密度比我當初預估的還要再更高。

已經六週過去了, 如果連第一週的作業都還沒交的話,有可能是你每天都很認真,付出一大堆時間在這上面,可是卻還是寫不出來第一週的作業,如果是這樣的話可以來找我協助,我們再來討論看看該怎麼改進這個狀況。

但當然也有另外一個可能,那就是你在這個計畫上沒有付出相對應的時間,可能是有其他的事情在忙,這個我也能理解,畢竟每個人都有自己其他的事情要忙,而我也有,不是每個人都能全心全意投入在這個計畫上。

如果你是上面這種狀況,有其他事情在忙所以沒辦法付出時間在這個計畫上,那我會建議你退出。退出並不是一件壞事,而是讓你能夠專心在其他事情上面。對於你來說,現在這個計畫可能是一個額外的負擔,課程進度一直往前,每天還要寫進度報告可是又沒什麼東西可以報告,本身的事情已經很忙了卻還來一個課程。

這個課程的目標是讓你「轉職成工程師」,而這絕對不是一件容易的事情,這不是你隨意來參加,然後沒有付出什麼時間就能夠咻一下搖身一變成為工程師的計畫,這計畫沒有那麼厲害。

所以我才會來勸退,因為我認為這樣子兩邊忙可能只會落得兩頭空的下場。如果現在連第一週的作業都還沒交,大概就代表你落後了六週的進度,我敢說這樣子的進度在明年一月結業時課程絕對跟不完,也不可能找到工作。

如果是這種狀況的話,那其實課程保證金繳了也滿浪費的,繳了不能退回的 3000 塊,然後上了一個自己沒有很想上的課。

從你繳交作業以及保證金的狀況看起來,我個人是傾向於認為你自己也沒什麼意願繼續待在這個計畫(或也有可能心有餘而力不足,你有意願但就是還有其他事情要忙),無論是哪一種,我都覺得退出對你來說會是一件好事。

不過我開頭有講了,這封信除了勸退以外,還有一個目的是詢問你有沒有繼續待下去的意願。因為我課程規則就寫在那裡,我沒辦法想淘汰誰就淘汰誰,而你有符合每日進度報告的規則,所以不會被淘汰,因此要不要留下去絕對是你的選擇。

再者,我上面的假設可能都是錯的,有可能你真的很認真只是我誤認你沒有,那這可能是我的疏忽。但如果上面的假設都是對的,我覺得退出對你或是對我來說都比較好。

最後,我勸退歸勸退,但你依然可以選擇留下來,我只是「覺得」退出對你我可能都好,但不代表你就要退出,如果你自己覺得留下來對你是件好事,那我也當然歡迎你留下來。

總之呢,如果想繼續留下來的話,記得在 10/15 23:59 以前轉帳,匯款資訊我都有私訊到你們 slack 了,匯款完記得填表單。如果思考過後決定退出計畫,那就不要匯款就行了,這樣我就知道你的意思了。

大概就是這樣,無論你的選擇是什麼,都祝你之後順利。

huli

在信件裡面,我希望能表達的有兩件事,第一件事情是「尊重」,對我來說,尊重一個人就是我把我內心的想法全部跟你說了,但要怎麼選擇是你的事情,我不會強迫你做我希望你做的事。

意思就是,上面的勸退信我明講了,我「覺得」你沒付出一定時間在這上面,我「覺得」退出對你來說比較好,但因為你沒有違反規定,所以我沒辦法強迫讓你退出,要不要退出仍舊是你的選擇,我是「勸退」,但我不是「逼退」,我希望我有很明白地表現出這件事情。

不過人與人之間的相處真的是滿奇妙的事,上面這個勸退與逼退的問題也跟信任有關,如果你信任我是真的這樣想,你就會覺得我是勸退,如果你不相信,你可能會說:「都給你講,不就是逼退嗎,講那麼好聽」

勸退跟逼退的差別在於前者是:「我建議你這樣選,但建議歸建議,你不聽我的建議也行」,而後者是:「你可以不聽我的建議,但如果你沒照我說的選,我之後還是會用盡手段讓你照我的建議走」,從後續的發展應該可以看出我是真的勸退而已,因為他們選擇繼續留下來以後我也沒有特別做什麼事。

我不喜歡強迫被做任何事情,所以我也不會去強迫別人,所以在我的課程裡面很多事情都是你可以選擇的,你可以選擇要不要退出,選擇要不要回饋心得,選擇要不要參加實體聚會,那是你能夠選的。

有人可能會說:「可是不是有淘汰制嗎?不是強迫要交作業嗎?」,那不一樣,因為那是你進來這個課程時就知道而且你也同意的,既然同意了,那就不是強迫,而且這不是我逼迫你做的決定,是你自己做的。

第二件我想強調的事情是:「放棄不是一件壞事」,有很多人很鄙視放棄,覺得放棄就是錯,放棄就是不好。沒有這回事,很多時候放棄反而會救了你,反而會讓你走向一條更好的路。

有些人會強調永不放棄、堅持到底的價值,就像是電影裡面那樣,只有堅持到底,才能達成你想像不到你自己能做的事。但如果你是日本馬拉松比賽裡面的那個選手,你會選擇永不放棄,用爬的也要爬到終點,還是果斷放棄?

堅持跟放棄並不是互斥的,我想強調的是你當然可以堅持,但同時也要知道「放棄」是一個選項,而不是「永遠不能放棄」。我也同意這中間的標準有時候很難拿捏,如果太不堅持可能事情沒辦法做好,可是如果太過堅持又會造成一些傷害,也只能透過慢慢摸索去找到那個平衡點。

總之呢,在我寄了勸退信以後,有一個同學決定退出,其他決定繼續留下來,因此課程總人數變成 36 人。

截止目前為止,就沒有再被淘汰以及主動退出了,所以就維持著 36 人,而有些同學還是一週的作業都沒有交。

進度的嚴重落後,是誰的責任?

接著我們來看這堂課程目前顯現的一個最大問題,那就是課程進度嚴重落後,有許多學生完全跟不上。如果把交了第一週作業的 32 人看做是分母,然後每週有交作業的人當作是分子的話,下面是第四週開始的比例:

  1. 第四週:87.5%
  2. 第五週:72%
  3. 第六週:47%
  4. 第七週:34%
  5. 第八週:28%
  6. 第九週:12%

有一半的人落後了兩週至三週的進度,只有將近一成的人跟的上課程,這樣到底是學生的問題(沒付出時間),還是課程的問題(難度太高)?

要確認這個問題很簡單,只要看學生是不是真的付出時間在這上面就好,如果學生真的都付出了很多時間,可是還是跟不上,而且還不只一個而是很多個學生,那怎麼會是學生的問題?

總之呢,根據我跟幾個學生聊一下以及收到的課程回饋,很明顯的,這是課程本身的問題。

這也是標題的由來:

這是一堂沒那麼適合初學者的課程

有些人可能會問說:「咦?你當初簡章不是說沒基礎也可以嗎?還說希望把零基礎初學者培養成工程師,怎麼現在又說這堂課沒那麼適合初學者?」

你講的很對,我當初是那樣說得沒錯,但我的理想、我的希望是一回事,實際上怎麼樣當然很有可能是另外一回事,而現在發生的狀況就是我對課綱太過於樂觀了,以為這樣子的進度對初學者來說可以,結果完全不行。

而課程進度跟不上其實就某個層面來說也還好,我意識到這件事情之後就一直跟同學們說:沒關係,大家按照自己的步調來就好,不用管課程進度,不用硬跟,你有學到東西最重要。

可是這樣是不夠的,因為影響更大的其實是心理層面。這點我也是跟同學聊過以後才意識到的,很多同學會覺得怎麼其他人跟得上自己卻跟不上,這一定是自己的問題,接著就是一連串的自我否定,甚至到最後還可能會想退出課程,因為沒有動力再繼續跟了。

我覺得我有責任跟大家好好說明一下這件事情,所以就在剛進入第八週的時候,寫了下面這段給他們(不喜歡 Medium 內建引用會產生的斜體,就用分隔符號來區隔了):

大家安安

根據最近收到的課程回饋以及跟一些同學聊過之後,發現大家對於「進度」這件事情會因為跟不上而感到無力甚至焦慮,儘管我之前說大家可以按照自己進度來,但仍然還是有種「唉,我怎麼跟不上進度的」的感嘆。

有鑑於此,我覺得我應該統一來說明一下課程狀況。

首先,我們來看一下課程作業的繳交狀況(原本一共 38 人,兩人退出後剩 36 人):

1. 第一週:34 人,94% 完成率
2. 第二週:28 人,77% 完成率
3. 第三週:33 人,92% 完成率
4. 第四週:27 人,75% 完成率
5. 第五週:19 人,52% 完成率
6. 第六週:11 人,30% 完成率
7. 第七週: 4 人,11% 完成率
8. 第八週: 2 人,5 % 完成率

不知道看到這個大家有沒有釋懷一點?目前剛進入第八週,有跟上進度,已經做完第七週作業的只有 4 人,大約只有 10% 的人有跟上進度而已。

所以你沒有跟上進度是很正常的一件事。

我之前跟一個同學聊過,他說他的壓力來源來自於:「他覺得應該要跟得上,可是他沒有;怎麼好像其他人都跟得上,可是自己卻跟不上,是不是自己的問題?」

但從這個統計數據你就可以看出來,沒有「其他人」都跟得上這回事,真相是「其他人」也跟不上,有高達九成的人都跟不上。

當初我在寫報名簡章的時候,上面寫了你毫無基礎也可以來報名,而我希望能夠在四個月內把你培養成工程師。

但經歷過八週以後,我逐漸明白以目前的狀況,這幾乎是不可能的事,我在這邊跟大家重申一次,這個課程沒跟上是很正常的一件事。

錯估情勢的原因之一是上一期沒有太多樣本可以讓我參考,所以讓我誤以為所有人都可以跟上進度。還有一個原因是我錯估「無基礎」這件事了。

「無基礎」並不是一個全有或全無的東西,你的無基礎跟我的無基礎,還是可以有程度上的差異。舉例來說,一個大學念文組並且寫過兩週 Java 的人,跟一個數理很強但沒有寫過程式的人,我相信後者其實在「基礎」上是更紮實的。

因為你必須承認,文組跟理組的思考模式是不一樣的,理工科的思維模式會更貼近寫程式所需要的那種思考方式,把問題切割、一步一步來、解決小問題之後解決大問題。就像我們程式裡教的遞迴跟函式,你在數學中都可以找到一樣的東西,所以數理強對寫程式有一定的幫助。

所以目前為止這個計畫的第一個錯誤是沒有把這個思考方式給培養起來,這個才是大家真正需要的基礎。而且我認為這個一但培養起來,之後的課程就會順利很多,我 JS101 那堂課其實就是想解決這個問題,給大家一堆練習題讓大家培養這種思考方式。

但這種思考方式當然不是一朝一夕可以養成的,它需要時間,而且需要的時間因人而異,有可能需要很多很多時間。

所以儘管大家可能都無基礎,但別人對這方面的資質就是比你好,他就是早已利用這種思考模式在解題,所以自然就會比你快很多。

可能有人會覺得:「既然他可以,為什麼你不行?」,但光從這句話看起來,你仔細想想會發現滿沒有道理的,為什麼他可以你就要可以?從邏輯上看起來,他可以只代表「有人可以」,跟你可不可以一點關聯都沒有。

而且這句話基本上是忽略了個體之間的差異,有些人就是天生就有某些才能,可是有些人就要花更多更多的時間才能把這個差距給補足。他做得到,僅僅代表至少有人能做得到,但我做不做得到跟他一點關係都沒有,我唯一可以做的事情就是盡力去做。

這個計畫第二個錯誤是低估了吸收的時間,我忘記了教跟學完全是兩回事,我每週都把我想教的東西教出去了,可是教學並不是你講了 100%,學生就能得到 100%,有可能學生只能得到一半或是更少。

如果你教什麼學生就得到什麼,那大家去聽個幾堂 AI 的課之後就都是 AI 大師了。學習需要時間吸收、需要練習,需要把吸收的知識自己整理過後重新組織,最後才能內化成為自己的東西。

以目前的課綱來說,真的太趕了。中間沒有時間讓你吸收,禮拜一聽概論,禮拜二三查資料,禮拜四再聽一些,禮拜五六查資料,禮拜日寫作業,作業都還沒寫完,下一週就到了,就又有新的進度了。

所以永遠都在追趕新的進度,前面的東西都還沒吸收完成,就要繼續學新的東西了。這點真的很趕,所以我才一再強調可以按照自己進度來,不然一直追逐新的進度導致消化不良其實有種揠苗助長的感覺。

講了這麼多,我想強調的第一件事情是:這堂課的確是有沒有基礎都能上,但你要跟完四個月超級無敵難。我設計課綱的時候原本「以為」人人都可以,但事實證明我錯了。

能跟完課程的都是那些已經有基礎的人,甚至多數其實都有半年一年的程式經驗,所以對真的沒基礎沒接觸過程式又不是理工背景的人來說,要跟著進度走根本就是天方夜譚。

如果你能肯定這點,那你的壓力應該會小一點。與其把這堂課想成是初學者入門課,不妨想成前兩週是入門班,三四週是初學者班,五六週是進階班,七八週又再更進階了。

就好像你一兩週還在學加減乘除,三四週背個九九乘法表再熟悉一下四則運算,五六週就突然教你開根號跟 log,靠腰勒,這樣跟不上也很正常吧。

再次強調,跟不上絕對不是你的問題,是我的這課綱對初學者不友善,希望這能讓大家心裡好過一點。

從另一個方向來講,就代表能跟上課綱的同學真的很厲害,因為課程緊湊然後教的東西又一大堆。我們這次也有收一些工程師,我相信已經在工作的工程師,看到這課綱也會嚇一跳,想說怎麼四個月就教了一大堆的東西,而且很多東西可能連你的工程師朋友也不熟悉。

那跟不上的同學到底該怎麼辦呢?

第一點,肯定自己的價值,不是你的問題,真的不是。如果你付出一大堆時間卻還是跟不上,而且不只你,有一大堆同學也跟不上,那怎麼會是你的問題?

第二點,試著照著自己的步調來,如果你都已經知道這堂課要跟上進度基本上是一個不合理的行為,那應該也會對跟上進度這件事沒有壓力了。

這就好像你今天是一個不會踢足球的人,然後你直接去修校隊開的高級足球課程,你會覺得其他人都踢得很好只有自己踢得不好很奇怪嗎?不會嘛,因為人家本來就是校隊練足球練超久,你才剛開始而已,這很正常。你也不會看到 NBA 球星球打得很好就覺得自己籃球爛到爆。

把這點套在課程上也是一樣的,這不是堂適合初學者的課,所以進度跟不上很正常,只要跟著自己的進度來就好。

第三點,不要把這個計畫想成四個月就可以轉職。

其實我覺得還是有機會的,但機會真的不大,可能要再多加個兩個月。不過四個月過後還是可以出去求職看看,到時候你也會有一定的實力在,可以先試試水溫。也有可能面試官看你基礎滿穩人格特質不錯,就直接錄取你了。

再次重申,我原本以為四個月對初學者來說可以,但已經被打臉了,這真的太困難,以目前的課程架構來說我覺得沒辦法,但如果能把時間多延長一兩個月,我覺得還是滿有希望的,所以跟不上的同學可以把時間抓在明年三月左右跟完課程。

所以如果你跟不上進度,可以找其他也跟不上的同學互相聊聊然後互相砥礪一下,繼續跟著自己的步調寫作業。為了要讓自己繼續投入在課程上,你也還是可以跟每週的直播,作業沒寫也可以看檢討,也可以看教學,例如說你還在第四週,你一樣可以看第七週的教學,第七週的教學你可能看得不是很懂,但至少會有個感覺。

等你從第四週慢慢進度跟到第七週的時候,可以再看一次影片,到時候一定會有全新的體悟,而且這中間有三週的時間讓你慢慢吸收,其實也挺不錯的。

好啦,大概就是這樣,落落長的一篇是希望能讓大家好好想一下自己之後步調應該怎麼調整,心態上也可以調整,因為心態也滿重要的。

如果你跟不上,那很正常,不要灰心,你就把這課程想成是進階班,你一個無基礎小白兔能慢慢跟已經很厲害了,只要多延長兩個月把課程跟完,一樣很有機會找到工作。

如果你跟得上,那也很不錯,只要能繼續保持,我覺得四個月出來以後找工作應該不是什麼問題(只是「我覺得」,現實狀況還是要等大家出去面試才知道 XD)

就是這樣啦,有什麼意見都可以再跟我說,感謝大家。

上面這落落長的文章其實對同學們滿有幫助的,對有些人來說可能就像是心裡的一個結被解開了,他們知道自己並不孤單,知道不是自己的問題。

以上這些也大概說明了目前課程的狀況,就是課綱比我預期中的還要難,導致大多數人都停留在第四週(Ajax 與 API 串接)與第五週(PHP 留言板)。

Fail fast, fail often

如果我今天自己想做一個產品,我絕對會先做一個 MVP 丟下去試水溫,然後再根據回饋不斷改善產品做快速迭代,實際下去試一遍比自己空想一大堆可能根本不存在的假設有用多了。

可是一開始在做這課程的時候不知道為何,我卻忘記這種 mindset 了,一直到近期我才想起來。

儘管我在第六七週就意識到課程的問題,但那時候我還沒想到什麼解決方法,因為我必須要維持課程的主進度,也就是一週週持續前進,沒辦法把課程往回倒,因為一但往回了,那主進度怎麼辦?

可是我後來重新想過一遍,我想通了。對於前面的學生來說,其實他們的進度是很 ok 的,而且主進度也有上一期的直播可以來補,講的東西都是差不多的,再者,這堂課的目的就是希望能幫助大多數人轉職,而不只是服務前段班已經對程式概念比較熟悉或是很快就能抓住重點的學生。

如果今天有一半的人都跟不上進度,那就應該先跳回去協助那一半的人。

因此我在之後的課程做了些調整,原本第十週第十一週一共四次的直播都改成大家卡住的第五六七八週的 PHP 留言板教學,而原本就跟上進度的學生一來可以複習,二來也可以跟我約另外的時間好好檢討一下之前的作業,所以無論進度有沒有跟上都會被照顧到。

下週才是第十週,所以成效要到兩週後才會知道,但我相信我自己跳下去實際一步步再教一次,效果應該會不錯才對。

課程優化

前面談了一大堆這次課程不足或是設計不良的地方,最後該來談一些做的很正確的地方了。

第一點是我有重看一次第一期的檢討,試圖把我想改進的地方加進去,例如說這一期很早就開始講物件導向的觀念了,並且從物件導向就可以帶到 this 跟 prototype,而 hoisting 跟 closure 也有提到不過算是額外補充。

第一期幾乎完全沒提到的 fetch 與 Promise 也加了進去,在後端的課程中也一併加了 View、Stored procedure 以及 triggers,把課程的內容變得更豐富也更完整了,一步步在優化課程大綱。

不過現在的課程大綱與進度還是不適合初學者,因為速度真的太快,而且內容其實也教滿多的,至於會不會塞太多東西,我倒是覺得還好,很多東西概念抓住就好,實作可以慢慢來,有用到再練習就好,至少先知道它是什麼東西,之後要查資料也比較容易。

然後關於一些基礎概念,因為 coding 火球術回歸的關係所以這方面就解決了,他們可以自己去看火球術的影片學到一些跟計概比較有關的東西,不至於說什麼都不懂。

還有一件事情我一直跟我的學生強調,那就是我這堂課的「基礎」其實跟很多人定義的基礎不太一樣,我覺得我這堂課的基礎扎實很多,儘管在我這邊稱作基礎,可能在其他課程就當作是進階的內容來上了。

下面是課程大綱,歡迎路過的工程師大大們幫我鑑定一下我這樣的課綱深度如何:Lidemy/mentor-program-2nd

總結

教學的過程中,其實我大部分都是迷惘的,我還是拿捏不到深與淺的界線。

上一期完課的人寥寥無幾,我原本以為是因為很多人退出的關係,現在經過第二期的驗證才發現不是的,是課程本身就規劃的沒那麼好,為了趕進度所以速度太快,一大堆東西都沒有教好,對有基礎的人會覺得充實、覺得進度很快但還跟得上。

可是對沒基礎的人來說,「靠杯你在快三小,怎麼這麼多東西塞在一週裡面,鬼才寫得完作業」。而且吸收是需要時間的,有些事情聽的時候只有個模糊的概念,搭配實作才能將迷霧逐漸撥開,看清楚事情的本質。

除此之外,也學習到幾件很重要的事情。

第一件事情是教跟學是兩回事, 教歸教,學歸學,不是你講了什麼,學生就一定能夠吸收到什麼。有可能你講了 100%,學生吸收到的只有 50%,想一想也發現這很正常,不然每個人隨便看完一本相關的書籍就是程式大師了。

儘管我課綱列出來所有我覺得重要的技能而且我都教了,但不能保證學生就能完全吸收,變成我心目中所想的那樣子。

第二件事情是對於「無基礎」的重新理解。

很多課程都標榜是「無基礎」,可是無基礎是怎樣的無基礎?我在這次教學過後,才了解到無基礎是一個光譜而不是二分法。

一個數理邏輯超強但沒寫過程式的人,跟一個數理邏輯很差可是有寫過一個月程式的人,前者真的「沒有程式基礎」,可能他的表現很有可能會比後者好。

最重要的其實是「寫程式的思考方式」,你一拿到這項技能就輕輕鬆鬆鬆,沒拿到就跌跌撞撞。這種思維模式就是 computational thinking,也是我很認同教育應該要教的。

最後則是再次體驗到教學真的是一件很難的事,你在成長,我也在成長,我看你的程式碼我只會越看越覺得:「不就這樣嗎?到底難在哪裡」,可是你看自己的或是看別人的都會想說:「現在到底是怎樣?這段到底是在幹嘛?為什麼我都看不懂?」

尤其是當程度差太多的時候,教學已經不能光憑著「感覺」,憑著「同理」,而是要憑著過去累積起來的經驗,才能試圖去靠近學生的想法。

總之呢,課程還有一半的路沒有走完,我還可以繼續優化,還可以試著把那一半的人往上拉,試圖把課程改善得更好。