程式導師實驗計畫第三期裡面,從第四週開始幾乎每一週的尾聲我都會跟同學講一些話,就這樣一直持續到了第三十五週。第三期結束以後我就想說可以把這些隨意聊也集合起來變成一篇文章。

目的是什麼?第一個目的是讓對這個計畫有興趣的人可以看到每一週的進展,看到每一週我說的話;第二個目的是我說的話就代表著我這個人的想法,想知道我對學生以及這個計畫抱持的態度,看這些隨意聊是最準確的。

因此,底下就是我當初在各週隨意聊的內容,可能會經過一些刪減,但想表達的意思基本上不會變。沒有的週數就代表那一週沒有講話。

原本其實是想把三十五週都放上來,但因為長度會變太長,所以就先放前十三週的了。如果想看後面的週數可以在底下留言敲碗,我再找時間開新的文章,把後面的週數一起放上來。

第一週

大家安安,明天就是第一週的最後一天了,最近有些心得跟大家分享一下。

首先跟大家分享跟作業有關的東西,因為同學都陸陸續續開始交作業了,這邊主要要提醒的點有兩個。

第一,提交 PR 之後記得要去另一個 repo 開 issue,否則我不會改作業。原因是這期同學真的太多,所以想找一個地方集中讓我比較好改作業,如果像第二期一樣的話會分散各處,我絕對會忘記現在改到哪一份作業,所以第三期才變成這樣。

第二,作業交了以後如果有一些小錯誤,自己提交 PR 之後自己 merge 就好,不用再交一次。標準很簡單,你希望我改的你就循著正常交作業管道,你覺得不用我看的就自己 merge 就行了。總之有 po issue 的我都會看,沒 po 的就都不會看。

再來就是作業有時候看太多份會看到頭昏眼花…所以有些地方有錯可能沒有看到,在這邊先跟大家抱歉一下。還有一點想說的跟作業沒什麼關係,跟網路上溝通的文字有關。

文字能傳達的意思有限,講個小故事,我有一個朋友很喜歡打「嗯哼」,在我的想像中整句會像是:「嗯哼,所以勒?」的那種感覺,有點不屑的意味;可是問他本人之後,他的意思比較像是「嗯」,就只是一個肯定句而已。這也是為什麼我們需要 emoji 跟各種表情符號,才能更完整地表達出語氣。

總之呢,希望大家看到任何語句的時候都先預設是很平和的語句,舉例來說:「你為什麼要改這個?」不要想像成是你老闆質問你的那種語氣,而是要想像成單純好奇發問的那種語氣。

再來呢,相信大家在這一週裡面都對這個計畫有了更多的一些體悟,例如說同學之間進度的快慢可能從這一週就開始慢慢彰顯出來,或者是說課程的深度以及需要的時數也能深刻體會到。

勝不驕敗不餒,第一週如魚得水的同學們,別忘記這只是第一週而已。第一週是整個計畫裡面作業最簡單的一週,因為大多數作業都只是寫寫字而已,沒什麼技術含量,之後的作業只會愈來愈難。前五週跟之後的課程內容比起來都算是比較簡單的課程內容,第五週之後大家就知道了  :)

第一週還在卡關的同學也不用太難過,其實一週能把 Git 跟 CLI 學完,甚至還會順著 GitHub Flow 交作業就已經很不錯了。我一開始學 Git 也是花滿久時間才終於搞懂 branch 跟 commit 到底在幹嘛。

而且這才第一週而已,計畫才剛開始第六天,沒必要這麼早就擔心東擔心西,跟著自己的進度走就好了。

另外,已經有些人發現 Git 除了用 CLI,其實也可以用 GUI 操作,例如說用 SourceTree 或是 TortoiseGit 等等的軟體。我之前也考慮過要不要用這些軟體來教學,有圖像化感覺會比較簡單一點。但後來還是決定堅持教 CLI,原因是我不希望大家太依賴 GUI 介面。CLI 你一定用得到,可是 GUI 卻不一定。

舉一個其他同學說的例子,你不能只考慮自己電腦上的狀況,假設你今天要連到 Server 或是臨時用別人的電腦修 bug,如果你只會用 GUI,那怎麼辦?再花時間裝軟體嗎?那如果是 Server 完全只能用 Terminal 溝通怎麼辦?你就居居了。

因此學會用 CLI 是相當重要的,而且 Git 的指令其實也不多,花一點時間就能把基本概念都搞懂,其實也沒什麼必要一定要用 GUI。先確保自己會用指令,再去學介面操作軟體增進效率,這是我覺得比較好的學習路徑。

第四週

又到了不定期跟大家說說話的時間了。

計畫已經開始 28 天了,換句話說,差不多一個月了。點開個人檔案,上面的數字跟日曆可以看到自己學習的軌跡。如果沒有意外的話,你應該會寫了差不多 20 篇進度報告。

而明天終於要迎來第一次的複習週。再次感謝第二期給我這個 idea 的同學,這個建議真的很好。看看大家的進度,如果沒有複習週的話,這一期就要重蹈上一期的覆轍了。雖然說看進度報告好像會以為大家進度都很前面,但沒有。事實上呢,目前大概只有 30% 的同學完成了第四週的作業,其他人都還在繼續努力著。

複習週的功用就在此展現了,對於進度落後的同學來說,是個能夠追趕的好機會。對於正在進度上或是超前進度的同學們,也能夠利用這段時間好好整理之前學過的東西,做個筆記或者是去查之前沒時間查的問題、訂正以前的作業等等。

沒意外的話,之後進度應該還會越拉越大。這很正常,因為前面的東西會影響後面的,課程的編排本來就是如此,你不能期待某一週你會突然跟上去,這有點不切實際。不過這也不表示你完全沒機會,之後進入到前端,搞不好有些東西你有碰過;又或者你可以再靠著第十週的第二次複習週拉一點進度。

也可以換個角度想:為什麼一定要跟上進度?

能跟上當然是很好啦,但如果跟不上就跟不上了,也不用太過於擔心。從課程開始前我就跟大家說過了,好好地看著自己就好。如果你是擔心自己沒有寫程式的天份,或者是擔心自己適不適合寫程式,只要先問自己一個問題就好:「在這四週的時間內,你有覺得寫程式好玩嗎?」,如果沒有的話,那可能真的不太適合(也有可能是我教太差啦),如果有的話,就再多嘗試個一兩個月看看。

今天看到同學寫的一段心得很棒:

複習週的小挑戰,有些題目很快就解出來,有些則是總有些考慮不到的條件,看到提交之後出現的 100 分,這就是解出來的成就感。就像排球少年中烏野對白鳥澤的春高前哨戰月島的覺醒:『不過是攔到一球、不過是 25 分中的 1 分,不過就是個社團活動。』對應到梟谷的木兔信誓旦旦的說的:『如果,那個瞬間出現的話,那就是你愛上排球的瞬間。』大概是類似這樣的成就感,才能讓出現無數次 WA 之後的 AC 有著這麼大的魅力

在進度方面,大家要考慮到兩件事,第一件事情是同學的程度不同。我們先不談努力,因為你得要知道很多進度在前面的同學差點或曾經是工程師。第二件事情是課程的廣度與深度,對完全新手來說,其實前四週已經塞了很多東西了。

話說在教學上,前五週也是我自己比較有把握的一週。因為每一期剛開始的時候人一定最多嘛,所以樣本也最多,經歷過兩期之後我也比較知道該怎麼調整。六到十週也還算有把握,但十週以後我就真的不確定了。我有看到滿多同學給予前五週的課程好評,小弟我其實也是誠惶誠恐,因為後面的內容可能沒有前面這麼好。總之之後再看看吧!

然後我看到有些同學假日會出去玩什麼的,我覺得這很好啊,我們這裡又不是指考衝刺班,要你每一天都來補習班報到,頭上要綁必勝頭巾,早上還要喊:「我要上台大!」。學習的時候就全心學習,玩的時候就全力玩,不然一直卡在中間也是挺累的,而且更容易把毅力給磨掉。

再說,寫程式的好處就是儘管你不在電腦前,你也還是可以想著怎麼解題。例如說第二三週的作業跟 Lidemy OJ 上面那些題目,你題目看一看有個印象之後,出去玩無聊的時候就可以來想一想該怎麼解決。因為這些不用寫 code 也可以,你只要能用你的大腦想出一個解法,回家的時候再用程式碼來實現就好。

目前想說的大概就是這樣,祝大家學習愉快!

第五週

安安,又是我。

不知不覺已經在日本待了十天,而第一次複習週也默默地結束,課程要進入到了第六週。

有人說複習週好像怎麼複習都複習不完,這是正常的。就像你以前準備基測或是學測時也不會有覺得自己準備好的一天一樣。畢竟學無止盡嘛,你不可能每次考試都一百分,所以永遠都會有遺漏的部分。

第一次的複習週其實也是讓大家自己摸索一下如何複習,我有看了一下大家的複習週心得,有些人跟我一樣,同樣的影片幾乎沒辦法看第二次,因為會覺得都看過了。(相同的電影我也很難再看第二次,復四二刷我看到快睡著,這輩子我唯一進電影院看兩次還是覺得不錯的電影叫做單身動物園)

若是有人跟我一樣的話,之後可以在上課時就先稍微紀錄一下自己不理解的地方,或者是想要問的問題。這樣累積了四週之後,就可以在下一次的複習週有個明確的目標,知道自己哪邊需要加強。或者,也可以考慮換個方式重寫自己前幾週的作業。舉例來說,以前用 map 這次用 forEach;以前用遞迴這次用迴圈等等。再不然的話,複習週提供的小遊戲也是很適合打發時間的東西。

總之呢,每個人複習的方式不同,這邊也可以參考其他同學的心得來看看大家都怎麼利用複習週的。

另外,大家會發現這堂課怎麼到處都要寫心得。每天寫、每週寫、複習週也要寫!這可能跟課程的設計者(就是小弟我)很有關係,畢竟你一定也看得出來我就是個很喜歡寫東西的人,不然也不會有這個不定期跟大家講講話的時間了。除了喜歡寫以外我也很喜歡看,所以看到同學的心得寫超長就會很興奮,留到最後再看,有種拆禮物的感覺。

不過你心得寫短短的也是可以啦,畢竟也不是每個人都有這麼多心得,所以心得沒有限定字數,我不會強迫你要寫幾個字。對寫不出來的人來說是種痛苦,對寫得出來的人來說反而是種束縛。就自己舒服就好,像我有時候寫個一萬字也覺得挺舒服的。

在寫心得的時候,也很鼓勵大家 po 到自己的網誌或其他地方去,然而有些同學會有一個疑問,那就是怕說心得 po 出去會洩漏一些課程的資訊,不知道這樣行不行。

這邊統一跟大家講一次,行,沒什麼不行的。只要你不是把 Lidemy 上的影片全都下載然後上傳到免空,沒什麼不行的。你要截一些影片的圖放在你的網誌我也無所謂。

對我來說,這整個計畫的價值就在於這是「一個計畫」,是課程影片、改作業、進度報告、心得跟同儕這所有元素綜合之下產生的價值,就好像黑暗大法師你只拿到一條腿跟一條手是沒有用的,你要湊齊五張卡牌才可以。所以你心得洩漏了課程資訊什麼的我也覺得無所謂,反正得到最多幫助的一定還是在這個計畫的同學們。

所以想寫心得公開就寫,沒什麼不能寫的。不用怕會透露課程資訊或什麼的,因為透露了也沒差。這邊我要公開表揚一個同學的第五週心得,他整理了前四週的課程而且整理得很棒,非常非常推薦大家看著這個檔案也複習一下:https://github.com/Lidemy/mentor-program-3rd-ClayGao/blob/master/homeworks/week5/hw1.md

沒有被我直接公開表揚的也絕對不是不好,只是這個實在太值得拿出來跟大家分享了,因為對所有同學都有幫助。

然後再跟大家提醒一次,每週自己寫的筆記可以放在這邊跟大家一起分享:https://hackmd.io/s/SJt3KWk2E

好,複習週的東西差不多談完了,接著談談之後的課程。

再來第六週會是網頁前端 HTML + CSS,有些同學已經有基礎所以應該會比較順利一點,但難度好像還是比我預設的要再高一些。

第七週是 JavaScript,我們終於要在網頁上來使用 JavaScript,並且用它來操控網頁上的元素,會是很好玩的一週,也可以讓你體驗實際應用 JS。

第八週是如何利用「網頁上的 JS」與 API 串接。對,這跟你用 Node.js 不一樣。所以 API 串接不熟的大家不用擔心,你第八週會被強迫複習 API 串接。這邊的內容在第二期是放在第四週,所以死一大堆人,這一期才特別把第四週變成先理解 API,然後第八週再練習一次,希望能夠把學習曲線拉低一點。

第九週要進入到後端,學習 PHP 與 MySQL,也會是個滿好玩的一週。

無論你有沒有注意到,每週課程的編排背後都是有經過思考的。為什麼不先教 HTML & CSS?為什麼第一週就教 Git?這些都是有原因的。經過了前五週,大家會發現自己對 Git 愈來愈熟悉,因為每週交作業都會用到。對寫程式這件事情也不再陌生,因為第二三四週甚至複習週都在用 Lidemy OJ 寫 JS,來解一些基本的題目。

在前五週把基礎打穩之後,我認為之後的課程會更容易一些。當你在網頁上寫 JS 的時候,你知道只是換了個地方,有更多瀏覽器提供的東西可以用,也可以操控網頁上的東西。所以你要學的只是這些新東西而已,因為你基本語法都搞定了。

我覺得我一部分的工作就是要來幫大家持平自信。當有人太過自信時(但好像沒有人這樣,也是件好事),我就會跳出來跟他說:「沒有喔,這很基本,你一點都不強」;當有人太沒自信時,我也會跟他說:「不對喔,你看看你學會了這些,其實已經很不錯了」。以我的觀察來說,大部分同學是處於後者。

雖然只有五週,但我相信很多人都已經察覺到自己的改變。想想看五週前的自己,Git 是什麼?CLI 又是三小?更別提 JS 無字天書了。但現在的自己每天都用 CLI 卻不覺得有什麼問題,用 Git 交作業更是跟吃飯喝水一樣,JS 雖然只是解一些小問題,但慢慢能夠把自己的想法轉換成程式碼,慢慢地不用再用紙筆寫下來,可以在腦內就自動做完轉換。

這是程式生涯的一小步,但卻是你自己的一大步。

想成為工程師本來就不是什麼一蹴可幾的事情,更別提我想讓大家不只成為工程師,還能成為好的工程師。資深工程師之所以資深,部分原因是因為他踩過的坑比新人多,解掉一個 bug,日後你解不開的 bug 就少了一個。你每寫的一行 code,都讓你離成為工程師更近了一步。

第六週要面臨到全新的挑戰了,一定會卡關,一定會有點崩潰(?),但也一定會很有趣。大家加油。

第六週

今天是第六週最後一天,一樣跟大家同步一些事項。

這邊更新一下課程的一些數據,計畫剛開始是收 63 人但有一個人沒回應,所以學生數其實是 62 人。第四週時淘汰 3 人,第六週時淘汰 1 人,目前剩下 58 人。

其實淘汰制的部分我沒有真的很仔細去抓,基本上我就是拉進度報告來看,然後會被淘汰的幾乎都是那種兩週內只交兩三篇或甚至沒交進度報告的,那就很明顯是沒有在跟課了。

再來是目前大家的進度分佈:

第二週 7%
第三週 7%
第四週 15%
第五週 17%
第六週 40%
超前進度 14%

可以看出來大概一半的人跟上進度,另一半沒有。原因可能有很多,有可能是我的問題(課程沒設計好)也有可能是你的(沒有付出一定時間)。不過這邊歸咎問題其實也沒什麼幫助,反正進度是自己的,只要能好好學習下去,落後一點也沒什麼關係。

今天是計畫的第 42 天,所以大家已經開始學程式一個半月左右了。雖然說系統的字數統計其實不太精準(因為特殊符號跟程式碼都會被列入),但還是稍微跟大家講一下。

大家一共寫了 63 萬字的進度報告,其中有五位同學寫了超過兩萬字,最多的甚至還寫到五萬字,實在是很會寫。但沒有寫到這麼多的也不用緊張,畢竟進度報告就只是個報告,你想寫多還是寫少都可以,本來就沒有規定字數要多少。像我遊記也是有靈感的時候就多一點,反之則少一點,不用對字數這種東西有壓力。

第六週的部分其實應該要更多實戰切版的部分才對,不然講了這麼多 CSS 跟 HTML 的東西,實際上看到要切的東西還是會傻住,根本不知道應該如何開始。這邊的話建議大家也可以上網找一些其他的學習資源或是別人切版的影片,應該會對這一塊更熟悉一點。

下一週會進入到在網頁上使用 JavaScript,下下週會在網頁上串接 API,下下下週會進入到後端 PHP,然後就又到了下一個複習週了。

學習這種事情就是這樣嘛,有高有低,有時候卡關卡得要死開始懷疑人生,但隔天突然有如神助咻咻咻就把卡住的地方解掉了,頓時覺得超級開心,然後過三秒又開始卡關。

進度報告的好處就是你可以看到別人跟你一樣在卡關,要死大家一起死(?),心情應該會開闊一些。這邊也很鼓勵同學們互相交流啦,可以去找一樣落後進度的人一起取暖(?),然後一起罵說怎麼課程設計得這麼爛,教切版也不好好教什麼的,搞不好罵一罵就覺得心情好多了然後隔天就開始繼續努力寫作業。

但當然也會看到有些人怎麼過得那麼順遂,好像作業都輕鬆解決,然後進度領先到不知道哪裡去了。可能他以前學過,或也有可能他真的跟你一樣無基礎但就是對程式這塊特別厲害,天生就程式腦。人生就是這樣嘛,大家的起跑點本來就不一樣,每個人都是獨一無二的。

一個調適心情的好方法是去看看自己所擁有的,而不是自己沒有的。你可以回去 Week1 看看你寫的 Git 跟 Command line 筆記,會發現兩個月前自己完全不懂,怎麼現在卻可以教別人了。看看 Week2 跟 Week3 的題目,重新再寫一次,發現怎麼跟那時候比起來順那麼多,順順地就可以把程式碼寫出來了。

你一定會發現自己在落後,但卻很難發現自己從另一個角度看其實已經領先了。

就祝大家第七週順利啦!

第七週

前幾週跟大家講的東西好像都差不多,這一週來講點不一樣的。

在改作業的時候,常常會看到我說:「大致上都 ok」之類的話,這句話如果要講的完整一點,大概是:「功能測起來我都 ok,基本功能都行。程式碼部分還可以,但不夠好」

當你交完作業的時候,通常你只是把基本中的基本給完成了。

但如果你想變得更好,這還不夠,還遠遠不夠。想知道有多不夠,你去看一下其他同學的作業就知道了。

參考同學的作業是這個課程裡面很重要的一環。之前應該有跟大家說過,我在看作業的時候注重的比較多在於呈現出來的結果,你只要能做的出來,我不太管後面怎麼寫的(除非真的太糟糕)。但對於工程師來說,其實背後的實作才是更重要的部分。因為把功能做出來大家都會,但是要怎麼把程式碼寫得漂亮,就是一件要花十倍的時間才能達成的事情。

如果我要每一份都非常詳細地去看過,那滿沒有效率的,而且也太花時間。比較好的方法就是你交完作業以後自己去看同學的程式碼,因為你可以從不同人的程式碼上面都學到一點,這些是連我都還難直接給到你的經驗。

然後通常一週結束以後我會 po 前一週的作業注意事項之類的,基本上就是我改了這麼多份作業之後統整出來的一些心得,就代表有一大堆人會犯這個錯誤,所以我提出來一起講。因為一起提出來講了,所以在改作業的時候我就不會特別再提一次,因為注意事項是你應該注意的東西。

大概就是這樣,happy coding!

第八週

沒想到已經來到第八週的尾聲了,從計畫開始到現在居然快兩個月了。

如果你是落後進度的那群人,不用擔心,因為有七成的同學跟你一樣。所以你要知道你並不孤單,孤單的反而是有跟上進度的那一群人。

今天跟大家分享幾個小故事好了,

以前在工作的時候,我偶爾會陷入倦怠期,這個倦怠指的是我看到新的需求,下意識就會覺得:「這好麻煩喔…好懶得做」。可是畢竟是領人家薪水嘛,再不想做也得做,所以最後還是做了。

可是當我真的開始下去做的時候,會發現:「咦?好像沒有想像中麻煩」
於是就用了比自己想像中還要快的速度把東西做完了。

這個故事想告訴大家的是,無論東西看起來多麽困難,至少要先去嘗試
搞不好嘗試之後發現怎麼那麼簡單(當然也有可能相反),所以踏出第一步是很重要的,你沒有踏出那一步,就不會知道後面有什麼。

第二個小故事一樣關於工作,那時候從外包那邊接來程式碼,發現靠杯怎麼程式碼亂成這樣,而且一大堆東西亂寫,瞬間覺得頭很痛,實際下去改過一點東西之後也一樣覺得好難改,這樣纏在一起要怎麼去改它?

但沒辦法,我知道如果現在不改,以後只會愈來愈亂,所以還是利用一些時間一點一點去改它。就這樣改著改著,大概過了兩三個月,發現程式碼已經乾淨很多了,要加新功能也容易許多。

有些人對寫程式有點誤解,以為吧是一氣呵成的。不是,我跟你寫程式的時候一模一樣,是跌跌撞撞的。這就是為什麼我在教學的時候你通常都可以看到我錯誤的地方(我不否認還有一個原因是因為我懶得剪輯啦…),因為這才是真正在寫程式的樣子。

你以為你外面看的那些程式教學影片,老師都是直接咻一下就寫出來給你看的嗎?不是,要嘛就是剪輯,要嘛就是程式碼先準備好在旁邊(雙螢幕所以你看不到),要嘛就是老師真的靠杯強。

寫程式本來就是跌跌撞撞的,先完成一部分,再完成一部分,最後再把它組裝起來;而且也不是寫完就寫完了,也有可能邊寫邊改之前的地方,這些都是再正常不過的事。我寫的比你順是因為我經驗比你多,寫過的程式碼比你多,就像個出過書的作家一樣。所以當我下筆時我大概知道這邊要放什麼句子,要下怎樣的標題,但你沒經驗所以你不知道,所以你寫完之後要再回來想一個吸引人的標題。

最近無聊沒事時我會看《這就是街舞》,一個跳舞的節目,其中有一些是跳 breaking 的,他們放那些大招放得那麼帥,都是摔了幾百幾千次之後才換來的結果,搞不好還曾經練到手斷掉之類的。強者之所以強,不是因為他們比較厲害,是因為他們受過比較多傷。

講到跳舞,來提第三個小故事,我在新加坡的時候曾經學過一點 popping(但回台灣之後完全荒廢,現在幾乎忘光了,其實有點可惜),當老師教我一個新動作的時候,做起來超級無敵卡,想說老師怎麼可以做得那麼流暢。

老師跟我說:「你就一直做就對了」,結果過了兩三個禮拜的偶爾練習之後,還真的把動作練會了,跟原本剛學的時候相差許多,至少順很多。很多事應該都是這樣,像健身、像跳舞,像寫程式,只要一直練一直練就會變強。

但我提這個小故事,不是要跟你說你要一直努力,我只是想強調「一直練就會變強」這件事。努力是你的選擇,我不會要你一定要努力。但至少不能欺騙自己。你不能說著「我想跑全校第一」卻不練習跑步,要嘛就放棄想跑全校第一這個想法,要嘛就乖乖練習跑步,不能什麼都不做卻還妄想著不勞而獲的成果。

我想說的是,當你卡關的時候,可以想一下兩三週前的自己。不是之前也卡關了嗎?但還是過來了。我覺得這會是讓自己更有力量的一件事,知道自己曾經辦得到,所以會更相信自己現在也辦得到,「無論怎樣的難關,最後都會跨過,只要你持續前進著」。

祝大家學習順利,然後我明天要飛紐約了,之後會跟大家有點時差,先跟大家講一下 XD

第九週

經過了六十多天的努力之後,終於迎來了第二次的複習週,一樣隨意跟大家聊聊。

我相信相對於第一次的複習週,這一次的會很不一樣。因為上一次在複習週的時候真的在複習的人不少,但這次複習週可能很多人是拿來趕進度用的。
不過複習週其中之一的用途本來就是這樣,空一週完全沒進度,讓大家自由調配。

先來幫大家叮嚀一下這次複習範圍(第六到第九週)的重點好了,前五週我們有了一些程式跟網路的基礎,至少你知道怎麼發 request 怎麼收 response,你也知道怎麼寫基本的程式。

第六週學了 HTML+CSS,前端頁面的排版,雖然說對有些人來說有點趕,但仔細想想也是正常,因為你要知道,你看到的所有網頁,對,所有(好啦應該沒有所有,大概八九成)就是用這些 CSS 屬性刻出來的。

Facebook 也好 GitHub 也好,你右鍵檢查元素,一樣是你熟悉的那些 padding margin display,所有複雜的東西,都是由這些再基本不過的屬性組合而成。在第六週你只要稍微熟悉一下就好,因為之後還有很多機會讓你切版,就算你不想練習,作業也會推著你繼續向前走。

第七週我們把 JS 給搬上瀏覽器,並且說明了 JS 對於瀏覽器的重要性:操控畫面,這是你唯一可以操控瀏覽器畫面的方法:透過 JS。前五週大家有了程式基礎,在這周要補的是瀏覽器跟 JS 怎麼互動,基本上就是透過 selector 選到特定元素,然後 addEventListener 加上事件互動,最後寫一下程式邏輯並改變畫面。

就這樣,就是全部了。

你只要知道怎麼選到元素、怎麼加事件然後怎麼改變畫面,就幾乎可以做出所有你看得到的網頁(但當然會比較複雜啦)。

第八週延續第四週跟第七週的內容,現在變成要在瀏覽器上面發送 request 去拿資料。重點有兩個,第一個是瀏覽器因為安全性會有一些限制,你必須知道有哪些限制以及如何突破,第二個重點是學會在瀏覽器上面發 request 以後,最後一塊拼圖就補齊了,這次你真的可以做出所有你看得到的網頁。

隨便舉個例子,臉書訊息的對話視窗:幫 input 加上按下 enter 鍵的 event listener,當按下 enter 鍵的時候,ajax 發送資料到訊息相關 api,等 response 確定成功之後,選到對話框然後 append 一筆訊息,打完收工。

第九週進入到一個新的領域:後端。有兩個重點,PHP 跟資料庫,資料庫就只是個儲存資料的地方,你可以寫 code 把資料拿出來,就只是個用 code 操作的 excel 而已。

PHP 呢?會選 PHP 就是因為夠簡單,他就只是一個後端的程式,你在 PHP 裡面 echo 什麼,response 就長什麼樣子,就是這樣子而已。如果放到 JS 來講,大概就是你在 JS console.log 什麼東西,你的 response 就是什麼,所以你在  .php 檔可以寫 html,可以寫 CSS 也可以寫 JS,因為最後都會變成 response 的一部分,跟你直接寫 html 相去無幾。唯一的差別是你可以「動態」產生出內容,若是你不理解後端跟前端的差異以及整個運行流程,之後一定會碰到一大堆問題。

前九週學完以後,其實只要發揮一點想像力,你就可以做出任何你想做的東西。

Facebook?可以啊,不就是比較複雜的留言板嗎?
GitHub?可以啊,不就是留言板的內容變成 code 嗎?
Google?可以啊,不就是去資料庫搜尋關鍵字嗎?

當然,我這邊指的做出任何東西指的是陽春版的,真正要變成那種規模還需要懂一大堆東西。但我只是想表示,前九週的內容把前後端基礎講得差不多了,你已經具備做出一個很陽春的產品的能力,剩下的就是你怎麼把小的東西組裝成大的。

之後的十一二週會延續後端,繼續加強後端與資訊安全相關的能力,十三週跳回來學一些前端的函式庫,十四週把後端程式部署上去,接著就又到了下一個複習週。

最後來簡單談一下拖延症,看到滿多同學在進度報告說自己開始漸漸拖延,或者是慢慢不想寫作業。啊這很正常啦,本來就很容易會這樣,我自己也拖延症啊,沒拖延症的話每一週一定都會有更詳細的影片教學,搞不好還搭配文字內容輔助。

二十週以後的課程也因為拖延症所以還沒有開始動工,我也希望我近期能夠稍微克服一下拖延症…大家共勉之。

happy coding!

第十一週

第十一週開始了,所以理所當然的,又到了我隨意講些話的時候,先給大家看一下目前進度比例:

第六週(含)以前:20%
第七週:22%
第八週:16%
第九週:14%
第十週(含)以後:28%

這樣看起來應該是以第八週為分界點,一半的人在這之前,一半的人在這之後,現在是第十一週的開頭,所以進度平均是落後兩三週左右。

然後目前平均大約每兩週會淘汰兩個人,學生人數從 62 來到了 54 人,但有些同學消失了你應該也察覺不到,因為被淘汰的本來就是不常出現才會被淘汰 XD

接著跟大家講一下從第九週一直到第十四週的課程設計,之前應該跟大家提過,這要從課程演變的角度去想。

第一期直播上課,而第二期讓大家去看第一期,順便補充第一期沒講清楚的地方,後來發現後端這塊還是講不清楚,於是有了 BE101 這堂課程;可是我又發現 BE101 好像對於整個大架構講得沒那麼清楚,沒有第一期那麼清楚
而這就是為什麼後端這幾週的指定教材會這麼多。

其實很多影片內容都有重疊,但沒重疊的部分又是我覺得重要的,所以才會都列在一起,我想說也可以讓大家當做複習(?)

第九週我有更新上去同學推薦的順序,十一週以後的順序我這兩天有時間應該會再看一下,會把順序講得更詳細。這樣大家也比較知道每個影片到底有哪些內容。

然後九到十四週除了十三週塞了一個前端,其他都是後端的內容,內容是循序漸進的,每週的內容都跟上一週有關,你會不斷加強留言板。所以寫作業的時候如果你覺得這樣怪怪的、這樣做會有問題,沒錯,你是對的,因為我是故意的,你的疑惑在下週或是下下週很有可能就會被解答。

在學習的量上面因為這幾週是連續的主題,所以我自己設計的時候是估說應該 ok,至少比新學一個東西需要的時間要少,希望我是對的,不然大家進度又要再落後了 XDD

還有,每五週一次的複習週都會要大家寫一下這幾週的心得,每個月回憶一次其實不一定記得起來,所以建議大家平時就可以先整理了,學習的時候有什麼心得感想都可以先寫起來,之後交的時候就比較方便。

happy coding!

第十二週

給大家幾個可以讓課程比較順利進行的小撇步,但是僅供參考,如果底下這些點你真的很 care,照著你自己的步調走其實也 ok。

第一個,別碰挑戰題。

沒記錯的話我之前應該有講過挑戰題的由來,會有挑戰題是因為(1)有工程師(2)有強者同學超前進度,為了怕這兩者無聊,所以放入一些挑戰題,避免他們進度太快不知道要幹嘛。

所以,如果你是個剛接觸程式沒多久的人甚至是完全新手,可以直接略過挑戰題,因為那本來就不是給你做的。

我其實對學生的標準只有做完作業就好,不包含挑戰題,畢竟大家都知道,光是做完作業就要花一段時間了,何況是難上不少的挑戰題 XD

不過如果你很想挑戰自我,我也是不反對啦,只是你可能會需要在那週多停留好一陣子。

第二個,拋棄你的完美主義

很多人都會想把作業做得很完美,或者換句話說,弄的很漂亮。

以前端工程師來說,我覺得分成兩個走向,一個偏視覺一個偏功能,像吳哲宇那種就是偏視覺的,我個人則是偏向功能的,或者更精確來說是偏向工程,而這堂課程的作業也是以功能為主,所以在第九週第十一週,才會看到我 live coding 寫出來的留言板這麼醜,因為我不在乎美觀程度,只在乎功能是不是有寫出來。

為什麼呢?因為去工作之後會有設計師幫你搞定,輪不到你來決定。就算沒有設計師,大家一定也都是找現成的 UI 框架之類的,都已經幫你做得美美的,你只要照著用就好

我看到有滿多人糾結於畫面要美觀所以卡了很久,但這邊我其實會建議大家只要功能完成就好,美觀的部分就再說。不過之後如果要把這東西放上作品集,美觀程度的確是會有差啦,但可以靠 bootstrap 之類的 UI 框架來補足這部分,或是跟我一樣很沒有美感的人可以直接照抄同學的 UI(?)

畫面醜歸醜,但只要功能做的出來,就是個合格的工程師,因為這邊不是設計師養成班,是工程師。

第三個,克制住求知的衝動

我知道滿多人查到某個東西很好奇,就會一路查下去,把祖宗十八代在幹嘛全部查出來,然後一天就這樣過去了,留下毫無動靜的作業。

這是好事也是壞事。當然,你很有求知慾,這個值得鼓勵而且是好的特質,但如果學習的太發散,就會變成什麼都學不到。

這就好像以前我有一陣子很喜歡看一些科技類的心得文,例如說什麼 Netflix 怎麼設計架構,騰訊怎麼加強前端效能,看一看覺得:哇,我簡直看一篇文章就功力大增,知道得愈來愈多,但看久以後才發現我什麼都沒學會。

因為我沒有動手做,而且對於文章裡面講的那些,我也沒辦法做,因為離我太遙遠了。在寫程式這一塊動手做是很重要的,你沒辦法只靠看書或是看技術好文就增進你的技術,你必須自己跳下去實做,你才會更有感觸

別人寫的文章那是他實作完、解決問題完之後的總結,那只是他把技術消化過後吐出來的產物而已,對你的幫助很有限,自己動手做才是最重要的。

所以呢,如果你對一些東西有疑問,然後這些疑問又沒有這麼緊急且重要,不妨先開個記事本把這問題放著,等複習週再來研究,或搞不好課程跟著跟著之後就會講到了。

以上簡單提供三個我認為可以增進你跟課效率的小撇步,如果嘗試了之後不習慣,you can do it in your own way, it’s fine

Happy coding!

第十三週

yo 到了每週隨意聊的時間,在開始之前先講一些正經的(雖然其他也沒有不正經啦)。

第一是記得找時間跟我的 master 同步,我有更新了作業的一些描述(例如說 week11, 12 不會用到 $_SESSION 這東西),以及新增了作業檢討(就是我放在 examples 資料夾裡的東西),同步的話自己發 PR 自己 merge 就好,不用我 approve。

第二是請記得在作業寫完之後自己看作業檢討,在我改完前或是改完後去看都可以,但推薦是你寫完作業然後交作業之前就去看。

為什麼呢?因為你一定會在作業檢討上看到一堆你做錯或沒注意到的東西,而我在改作業的時候如果看到這些,通常我是不會特別點出來的。因為每個人在看作業檢討的時候就應該會看到這些然後自己修掉,所以我就沒必要再點出來一次了,這點請大家切記,要自己看然後自己修正,這真的超級重要,因為沒修掉的話你的作業就是漏洞百出 XDD

第三是大概講一下目前課程近況,學生共 54 人,前兩週都沒有淘汰人,進度的話大概六成的同學開始進入後端了,其餘四成還在跟前端奮戰,這週是第十三週,意思就是課程差不多進行到一半了(居然到一半了…)。

我有看到有些人好像卡關滿嚴重的,如果真的卡到懷疑人生,可以直接看看同學的 code 看看作業檢討之類的再回來做作業,不一定都要自己親手把作業寫出來。

好,跟課程相關的差不多是這樣。

接著先來分享一下這兩週在灣區的心得好了。有見了幾個朋友,在 Facebook 實習還有在 Google 實習的,我朋友講了一句話滿發人省思的:「在這邊最簡單的是寫 code」,最麻煩的就是一堆人的問題例如說跨部門溝通之類的,那些真的累人。

然後灣區的天氣真的很不錯,我有去了 Apple 訪客中心參觀,很弱,就是離總部比較近的 Apple Store,Google 園區也比想像中弱很多…後天要去的 Facebook 好像比較厲害,應該可以期待一下。

再來的話,這週其實主要想分享的是為什麼會有這個每週隨意聊。

我覺得身為一個教學者,自己有沒有在學習也是一件很重要的事,你必須同時是老師也是學生,才有可能當一個好老師,否則你無法同理。畢竟教跟學差很多,你教的時候會覺得自己什麼都講了,學的老師會發現老師怎麼都輕描淡寫帶過,能不能同理是一件很重要的事情。

身為一個自己偶爾也會學一下東西外加拖延症末期患者,我是很能夠同理拖延症患者的。我自己得到的心得是儘管有拖延症,還是會有一些時刻會讓你想要主動努力,就像「三分鐘熱度」一樣,如果你沒辦法解決這個問題,那就要學會與它共處。

怎麼共處?不是把時間延長(因為做不到),而是每隔三分鐘點燃一次就好,無論拖延再怎麼嚴重的人都還是會有主動的時刻,你要做的就是把握那個時機點。

那要怎麼點燃?以我自己的經歷,就是講一些勵志的東西哈哈,我自己很不喜歡心靈雞湯,但我也能漸漸理解為什麼很多人需要那種東西,自己沒有的東西只能往外去尋求,而心靈雞湯就補足了很多人沒有的那一塊。

有時候看完別人的一些故事,或者是看一些學習成功之後的心得感想,瞬間就會燃起那種:「哇!我也要繼續努力!」的感覺,在這之後的一段時間內就會比較有動力,有點像是加了油的那種感覺,就能夠繼續往前進。

但油也是會用光的,所以每隔一段時間就要加一下油,每週隨意聊大概就是扮演這樣的一個角色,希望大家看完之後有加到油的感覺,然後在這一週之內可以盡情燃燒。下一週沒油時又會有不同的內容,讓你再一次有著動力。

不過這樣太倚靠他人不是一件好事,希望大家能夠慢慢找到自己的動力來源
並且知道該怎麼幫自己補充動力。

喔對了因為美國待不慣而且沒車太不方便,我機票改早了,週六就會回到台灣了,就可以大吃一波臭豆腐滷味雞排鹹酥雞之類的。

happy eating! 喔不對,happy coding!

中集傳送門:/2020/01/12/weekly-note-part2-20fb2472d432/