Skip to main content

課程內容

NTU Web Programming (2025.09) -- 00. Course Introduction

課程介紹與 AI 時代的變革

截圖 1

大家好,歡迎你來上這學期的 Web Programming。這門課其實已經開了將近十年,但去年我在舊金山住了一個月,深刻感受到 AI 的浪潮來得又快又猛,令人驚訝。

以往,我們習慣於一行一行地寫程式碼,花好幾個月才能完成一個 Web Service。然而,在 AI 時代來臨之後,我認為這種模式已經徹底改變了。因此,去年暑假我決定課程不能再像過去那樣,手把手地帶領大家慢慢寫程式碼來建構 Web Service。

我認為這可能已經不是未來的趨勢了。當時要準備新的 AI Enable 教學方法也來不及,所以去年停開了這門課。這學期算是重新開課,我會全面翻新課程內容和教學方式。這也意味著各位將是我的「白老鼠」,所以請大家務必斟酌。畢竟,我也沒有真正用這種 AI coding 的方式教過課。

不過,這次我非常頻繁地使用 AI 輔助編程,發現它與以往寫程式的習慣差異巨大。我希望將這種趨勢和精神傳授給你,也期盼大家在面對 AI 浪潮席捲而來時,能真正知道如何應對。

一開始,我會稍微介紹這門課,你可以聽聽看,再決定是否要選修。

課程內容開源與授權

截圖 2

我決定將所有課程內容開源,並遵循 MIT 授權。如果你不清楚 MIT 授權是什麼,可以上他們的官網查看。

MIT 授權意味著:

  • 我所有的課程內容,你都可以自由使用、複製、修改、發佈或再散佈
  • 即使你用於商業用途,我也不會有所限制。
  • 無需與我簽署任何協議,也無需支付任何授權費用。
  • 但請注意,任何散佈時,請務必附上這個 copyright notice

此外,我的教學精神是不附帶任何保證。我會盡我所能傳授我所知道的知識,但如果內容有誤,導致你使用錯誤的資訊而發生任何問題,那不關我的事。因此,請大家務必審慎學習

好,這大概就是一開始要跟大家說明的 copyright notice。今天主要會跟大家講解課程內容。

課程資訊與聯絡方式

截圖 3

首先,我來介紹一下課程的相關資訊和上課形式。

講師與助教聯絡

截圖 4

我叫黃鐘揚,稍後會再自我介紹。我沒有特別的 office hour,因為我發現訂了 office hour 大部分都沒人來,那是在浪費我的時間。

如果你需要找我,預設方式是寫信到我們的 webprogramming 電子郵件。這個信箱我跟助教都會收到。當然,如果未來真的有急事需要找我,透過 Messenger 找我會比較容易,電子郵件我常常會過好幾天才看到。

這門課理論上會有助教,但我們還沒有確定最終名單,包含 TA hours 我想之後再跟大家說明。

電子郵件溝通禮儀

截圖 5

如果有任何問題,請直接寄到 eewebprogramminggooglegroups.com (記得加 s)。這個助教群組包含我都會收到訊息。

助教們似乎蠻忌諱大家直接 DM 他們,我可以理解。因為同學們一緊張,什麼事情都直接 DM 助教,而助教沒有回覆就覺得「已讀不回」好像是不好的行為。事實上,助教沒有義務要用 DM 回答大家,有問題的話還是以這個電子郵件為主

過去幾年我們都有七位左右的助教,所以我們自己有群聊,會很快知道有什麼事情,所以大家不用緊張。沒有回覆一定有原因,例如:

  • 你的語言不詳,寄來的訊息讓人不知道你在幹嘛,那我們真的不知道怎麼回你。
  • 你的要求有點讓我們傻眼,那我們也真的不知道怎麼回。

所以我們都會內部先討論再回覆,總之不用緊張,你寄給我們,我們會盡快回應。

當然,電子郵件的基本禮儀就是要有一個清晰的主題,至少讓我們從主題知道你想幹嘛。信件內容請稍微注重電子郵件的理解性,就是你的全名細節稍微講一下。我知道大家平常傳訊息都不習慣說自己是誰(除了第一封之外),但電子郵件是不同的東西。

請大家寄電子郵件時,除非夠熟,否則我們怎麼會從你的學號知道你是誰?不知道你是誰,我覺得這種基本禮儀還是請大家顧一下。至少讓我們知道你是誰,我們回覆你的時候才知道怎麼稱呼你。

如果有一些問題,該附的附件要記得附上。我們以前常收到同學寄來的信,就說「我有問題,我遇到這個問題」,卻沒有給我們任何訊息,要我們直接「通靈」幫他解 bug,這是不可能的。所以請大家稍微將心比心想一下。如果你這些上面沒有做到,那我們延遲回覆,請見諒。

課程形式與錄影

截圖 6

目前看來是沒有超過容量,所以我們應該會實際上課。線上直播本來想做,但後來覺得網路問題太多,太麻煩了,就懶得做了。

不過,我們現在有錄影,理論上會上傳到臺大演講網,所以如果你要複習的話也歡迎。當然我知道很多同學覺得上課有點辛苦,如果你想事後自己看錄影,我不會限制你,我不會點名。我本來以為隔壁會直播,不過後來發現是沒有,所以就在這裡。

錄影我剛說過會錄影,我自己會 local 備份一份,理論上會上傳到 YouTube,到時候再把網址分享給大家。

我的內容有不少會直接用英文寫,但我的課程大部分都是中文授課。所以如果同學們對於這兩種語言有問題的話,那我想你可能要求助 AI 的幫忙,或者是停修或退選

選課與旁聽規定

截圖 7

這門課為一類加選,就是說我們有設定上限,要選的同學自己加選就好。不知道為什麼每年都有非常多人來寫電子郵件問我這個問題,那抱歉我覺得這個應該是常識,我不會回答這種電子郵件

本課程也不限制旁聽,所以你不用寫信來或任何方式來詢問這個問題。不過旁聽生就以收看線上錄影為主,實體教室請留給修課學生

今年比較特別,以往我的課程會幫旁聽生加入 NTU Cool。但今年因為我們有提供線上錄影,我想所有資源應該都會開源,那我就不提供 NTU Cool。如果你要旁聽的話,可以自己 follow 我們的 Facebook group,或者是我的 FB 都可以,我會把訊息放上去。

不過,我們 FB 的這個群組只開放修課學生加入。但它是一個開放群組,所以你只要追蹤,我想你都可以獲得訊息,你沒有必要加入。

講師的社群媒體

截圖 8

如果真的想要 follow 我或是跟我聯絡的話,我的 Facebook ID 是 ric2k1。如果需要就請自行追蹤。如果加入好友請自介,就是我可能有好幾千個人 request 都沒有理他,因為 again 我不大喜歡別人在線上(包含 Facebook online)加入好友,而我根本不知道他是誰。

當然,有的時候我知道比如說是臺大學生或是修課學生我會加。但除此之外,你就麻煩丟個訊息跟我講一下你是誰,那這樣我理論上應該都會加。

課程停修與 Cursor Coupon

截圖 9

最後這點請注意一下,為了珍惜課程資源,我們的課程停修 deadline 會設在 10 月 26 號禮拜天。學校的停修 deadline 我有點忘了,可能是 11 月中或底,抱歉這個我忘記去查。

不過請讓大家知道一下,我只會在 10 月 26 號(包含當天)之前簽署停修。所有的停修我會設一個 Google Form,直接在 Google Form 上上傳你停修單就好,不會問任何問題,你要停修我都會答應。

不過就是一旦超過停修期限,不管任何理由(睡過頭或是幹嘛之類的),我都不會簽,請大家注意。你不要跟我說學校的規定可以停修到什麼時候,那學校規定你可以申請停修,可是要不要簽是我的自由。如果不想簽我已經跟大家講過了,請在 10 月 26 號之前決定你要不要停修。

也許同學知道修這門課會免費獲得 5 個月 Cursor 的 coupon,沒有多少錢,一個月 20 塊美金而已。不過為了讓同學不要因為修這門課而額外負擔,我有跟 Cursor 老闆直接要了蠻多 coupon,所以大家就是會提供給大家。

所以為了避免有同學就是拿停修來換 coupon,請容我提早截止停修。因為我想一定有一招是可以就選,然後等到 11 月底再給我停修,那你也好歹免費使用了 3 個月。我覺得這個行為真的有點幼稚,所以我決定要遏止這種行為。

課前準備:作業零

截圖 10

另外就是說我們有個作業零,抱歉這門課理論上應該要有一些前置作業,因為可是修課名單又還沒確定,總之我們有個作業零。這個作業零大家不用擔心,它不用繳交。作業零只是協助大家順利地可以在這門課存活。

作業零的具體要求

截圖 11

  1. GitHub 帳號:你應該要馬上就申請一個 GitHub account。當然你本來就有的話就不用理它。
  2. Unix-like 系統:放眼望去 Mac 的比例好像蠻高的,就請你 install 一個 Unix-like 的系統。我們這門課大部分的內容在 Windows 或是 Linux 上面應該都可以順利進行。Windows 我不確定,有些東西 Windows 的設定都不一樣。所以說有些不管是參考程式或是我們示範的東西 Windows 上面不 work 請不用來找我們,因為我們就是沒有要特別支援 Windows。這邊有一些大家可以在 Windows 上跑 Linux 的方法,大家可以參考一下。
  3. Git 技能:我們這門課會要大家利用 Git 來上傳大家的作業到 GitHub。我們也會期待大家也學會用 Git,包含期末專題跟你的組員協作。Git 說實在蠻複雜的,大家可以看一下這個有些簡單的 Git tutorial。不過我想我們上課也會稍微簡單的示範一下,不過建議大家還是花點時間學一下。
  4. Cursor 訂閱:最後大家請去 subscribe Cursor。這點我曾經掙扎了一下,因為其實 AI tool 蠻多的,我也沒有規定大家一定要用 Cursor。我有點忌諱是因為也許同學知道我兒子在 Cursor 工作,他是 Cursor 第二號員工。不過 Cursor 當然是現在工具上的 market leader,所以我想我也不是硬要強推大家 Cursor 這個東西,那它也是唯一我可以要到 coupon 的工具。所以我想大家想要用 Claude Code 或 Codex 或 Glock 都可以,沒有規定,只是說我會提供大家 Cursor 的 coupon,那我上課也會用 Cursor 來示範。當然沒有強制你這學期修完課之後一定要買,請大家 relax。不過為了要給大家 coupon 請大家註冊一下,它有 14 天的免費使用,我會在加退選完之後提供 coupon 給你。
  5. Google Form 填寫:最後還有一件事情就是有個 Google Form 要請大家填一下。這個 Google Form 基本上要大家回傳你的 GitHub ID 跟 Cursor 的 ID。GitHub ID 是為了要從 GitHub 拉下你的作業,所以你一定要告訴我們。第二個就是為了要給大家 coupon,那這個對照的表就請大家填一下 Google Form。

這個作業零不用繳交,不過請你盡快在這個週末完成。

課程難度與成績分佈

截圖 12

我想在上課之前可能很多同學也會好奇這門課到底硬不硬?當然很硬,不要懷疑。

甜不甜?我也不知道為什麼,不過算了,我很多開課的成績都會有這種海嘯的效應。海嘯就是成績分佈呈現一個海嘯的狀態,這個是岸邊,所以就這樣鋪過來,海嘯的狀態。

這是兩年前開課,當時有 202 個人修課,可是兩年前我嘗試了這個叫做溺水式學習,就是很硬的要大家很快地進入這個 web programming 的狀態,所以我們東西其實丟的蠻多也蠻快的。當然我相信存活下來的同學一定收穫滿滿,不過也很多同學就直接溺斃,所以停修了 71 個,這個我想應該就破紀錄了吧。

當然我一點也沒有因此而感到高興,只是覺得沒辦法。AI 的幫助是沒有那麼溺水,不過我想內容應該也是會非常的多,請大家做好心理準備。

這是修課的人數,大家可以看到這個應該是當初選修的人數,大家可以看到大概電機、資工跟資管還是佔多數,不過其他系的人也蠻多的。

這是最後成績的比例,當然最後順利修完的 131 個,35 個 A+,40 個 A,這其實比例真的是蠻高的。當然我不是故意要把分數弄那麼甜,我們的成績最後還是會根據大家的表現,會把平均調在大概 80 分上下,也許表現不錯的話平均大概 81、82,那 81、82 大概是 A-。我記得去年兩年前平均應該 82 點多吧,有點忘了,80.03 其實不高,可是 3 號後面可能有太多人貢獻分母導致海嘯的現象。

原則上你有順利地繳交完所有的作業,有完成 final project 應該都不會有事,都可以站在海嘯上面的浪頭上。不過當然如果你有些作業沒繳,你可能就直接被淹沒,所以要搞清楚,因為一個作業大概 7 分、8 分左右。

這是成績的分佈,大家可以看到外系的也不見得表現就不好,還算是平均。電機資管的,這個有 highlight 起來是有人的,零的就沒有 highlight,所以大家可以參考一下。當然我沒有打算公佈這個,那不會有錄影,如果你真的看不清楚,你回去放大來看。

好,那以上課程資訊,大家有沒有什麼問題,我會再介紹課程內容,大家先不用緊張。

講師背景與課程願景

截圖 13

稍微簡單介紹一下我自己,我是電機系的教授,今年已經回來 21 年了,所以教蠻久。我一直都是教跟除了我自己的專業(就是電路設計的正規驗證)之外,我都會提供一門跟程式相關的課程,因為我從小就蠻喜歡寫程式的。

在我前 15 年,我教的是 C++ 的一門課,叫資料結構與程式設計,應該還算蠻有名的,那也是修課人數是蠻多的,我也是很硬的一門課,大家有興趣可以去 Google 一下。後來有把那門課的講義跟作業都開源了,如果你有興趣的話,可以去搜尋 dsnp.open,然後 GitHub 就可以找到他的內容。

業界經驗與創業觀察

截圖 14

總而言之,我自己的經歷也算是跟一般的老師不太一樣,也是去美國念 PhD,不過我在 PhD 念第三年的時候,因為研究的需求,也因為老闆知道我還蠻會寫程式的,我在博士班第三年就被老闆送到矽谷一家 startup,他同學開的公司,所以我等於是博士班第三年開始就待在矽谷一家 startup,一邊完成我的 PhD,一邊 startup,是那個公司的第三號員工

事實上更辛苦的是,我不小心在計畫內,在那時候我老婆也懷孕了,所以我是白天 startup,晚上幫忙帶小孩,然後半夜寫 paper,算是有順利地在唸完五年多一點之後畢業。公司也算蠻 lucky 的在後來賣給 Cadence,算是一家大公司,所以算是有蠻多在業界從頭打造一個工具,跟看到一個新創公司怎麼起來,還有看到很多公司掛掉的經驗

包含剛才有說過,我兒子現在在 Cursor,他事實上是念到大三休學加入,他是在美國唸的,當然也看著他們公司從四個 founder 連他六個人,到現在長到兩百(不到兩百,將近兩百)個人,也是有很多很多令人值得學習跟警惕的故事,那當然以後有機會再跟大家分享。

總而言之,如果你想要跟我聯絡或是說成為我的臉書好友的話,我是不會拒絕,不過就像我剛剛講的,請傳訊息給我

開課動機:填補臺灣軟體教育的空白

截圖 15

我想在介紹課程內容之前,讓我稍微講一下為什麼要開這門課。簡單地說,我覺得臺灣雖然自稱科技大國,臺大又是第一學府,可是卻沒有一門在教最新網路服務實作技術的課。也許有,也許資工、資管有什麼課不知道,可是據我所知,好像內容不是很新。

我覺得這其實是一件有點丟臉的事情,因為我想大家知道現在你可以講得出來的全世界這些軟體巨擘,包含 Google、Facebook 或什麼,大家知道裡面的員工,其實大部分的人都是在寫 JavaScript,就是在開發這些東西,他們都是網路服務。這麼重要的技術,臺大居然沒有人在教,我覺得這是有點誇張。

所以大概在十年前,因為自己開公司的關係,接觸到這些技術,然後就覺得這樣真的不行。所以自學了幾年之後,就決定自己來開這門課。不過這個網路技術真的是進步非常快,我記得過去幾年,每一年基本上課程內容都要重新打造,因為不斷有新的框架、新的技術出來。我也不希望我教的東西是幾年前已經被大家棄用或淘汰的東西,所以準備這門課不容易,不過還是硬著頭皮開了十年。

挑戰傳統觀念:網路服務的複雜性

截圖 16

不過我想跟大家講的是說,有些人講到網路服務程式設計,就會覺得這不是很簡單嗎,幹嘛教自己學就好了,或是覺得這應該是 XX 體系的人的事情,跟臺大沒有關係。我覺得這樣講真的是井底之蛙,就是網路服務的設計一點都不簡單

那當然也有人覺得現在 AI 之後有直接 Live coding 就好了,就是只要會講話就會寫程式了,那這為什麼要教,而且覺得這樣之後未來的軟體工程師是不是都要失業。

首先這門課不叫網頁程式設計,就是做一個網路服務並不是寫個網頁這麼簡單,差非常多。就算你只是需要寫個純前端的網頁,現在前端的技術真的是進步到非常誇張,我想大家應該要知道。

我想會這樣講的人可能從來沒有了解過現在的軟體產業是什麼,他們可能還是活在這個軟體產業演算法,就是 ACM 競賽這樣的東西而已,我覺得這是臺灣軟體產業沒有辦法起來的一個很大的原因。包含了 B 系還有隔壁系的很多老師,其實我覺得他們對軟體的認知還是停留在演算法跟 ACM,就是不管是從系統的角度來看,或從網路服務的角度來看,這是一個非常複雜也非常先進的學問,希望大家要能夠知道。

AI 時代的軟體工程師

截圖 17

再加上現在自從 2000 年底 ChatGPT 橫空出世,2023 年 Cursor 出來之後,我想這個 AI Coding 真的正在大幅改變人類的一些軟體工程的習慣。我覺得很多老師,不要講同學,可能也真的就是沒用過。

我覺得我如果是教計程,或教演算法,或教資料結構老師,我真的會挫咧等,因為這些東西,你的所有作業 AI 都是秒殺,你要怎麼教,同學沒有可能學,我覺得是要重新思考的實驗性

老師阻止學生用 AI,這是絕對是不對的,或者是說老師硬要同學每一行 code 都要自己寫,這也是不對的。當然你一定還是要會,包含我們這門課還是會,今天應該還有兩個鐘頭時間,還是會認真地教大家 HTML 或 Javascript 這些東西,可是僅此一堂課,之後其實大家要學習的方法其實不大一樣。

我想大家也許用過的人應該知道就是說,現在 AI 的 coding 能力已經相當於一個專業的,不是業餘的,而且不是普通的 junior,是 super junior。那我想同學們可能不知道 super junior 是誰,反正他就是一個 super junior 的一個 software engineer,那他絕對會取代目前的一般的 junior software engineer,因為他真的是蠻厲害的。

不過他並不代表會在未來取代所有的 super junior,我想這點也是容我花一點時間跟大家分享一下我的看法。

未來軟體工程師所需能力

截圖 18

第一個,什麼是未來 super junior 所需要具備的能力?我想過去我們常覺得程式能力是非常重要的一件事情,可是什麼叫程式能力?我想會寫程式的同學可能可以去思考一下。

程式能力大概就是你有一個想法,你有那個能力去思考它的大致上演算法,然後你有那個能力透過電腦語言把它實踐出來,而且寫出來盡量不要有 bug,這是我們所認知的程式能力。當然有 bug,你有那個能力很快地去 debug,debug 也是程式能力之一。可是這一整個過程裡面,中間從想法到寫 code 這一段其實被 AI 取代,可是從需求想法到想演算法的一部分,到寫出 code,到 debug,中間這裡有一段被 AI 取代。

可是前後還有很多其實還是人類需要操作的部分,所以我想什麼叫程式能力?程式能力已經要被重新定義了。這幾年 AI 技術的突飛猛進,寫程式這件事情已經不再是一個絕對的技術門檻。反而是說怎麼去跟 AI 溝通,透過 AI 有效地幫你寫程式,以及如何有邏輯、有系統地將你的需求轉換成一系列的工作項目。注意是一系列的工作項目,不是講完它就會腦補幫你寫完。

重點是大家要去想像的是,你要用來指揮管理一群不會累的 super junior 的 software engineer,所以你的角色其實是你有一堆這些 super junior 的 software engineer 幫你工作,所以你就像他們的主管一樣,你要懂得去叫他們幫你工作,這樣不會累。

而且大家知道現在的 Agentic mode 其實還蠻流行的,很多同學可能沒用過。所謂的 Agent 就是代理人,代理人就是說我今天要,比方說等一下我會示範 Cursor,比方說我叫 Cursor 幫我寫程式,你當然就是像聊天一樣把你的需求用英文或中文寫下來,他就會開始幫你寫。

可是 Agentic mode 就是說這件事情其實可以送到 Background 去做。像我兒子就跟我說他常常晚上睡覺前有很多 idea,把這個 idea 就丟給 Agent,讓他在背景去跑,可能一送送個十幾個,隔天早上回來去收割,可能每一個都已經做好,每個人都已經做到七八成了,他在 Background 那邊去跟他互動就完成。

這個也不是什麼秘密,在 Agent 上他們都有自己自嘲的貼文,就是在 Cursor 裡面 commit 最多的帳號就是 Cursor 本身,他們一般人 commit 的時候都是已經遠遠落後 Cursor,所以他們是用 Cursor 來 build Cursor。所以我時候在想說從這個角度來想,如果今天有一個 Startup 是不是可以用 Cursor 重新 build 一個 Cursor 呢?這是一個有趣的問題,我想會一直跟大家 repeat 這個概念。

人類需求的複雜性與 AI 的極限

截圖 19

就是其實一個夠複雜的應用程式,它之所以複雜是因為人類的需求並不是那麼簡單的講出來的。比方說你可以想像,我可能要叫 Cursor 直接講幾句話,他就幫我做出一個簡單的 Game,像一個 Flappy Bird 或是一個簡單的網頁,這個絕對可以 one shot 他就幫我做好。

可是我今天想要幫他做出一個像 Notion 這樣的一個服務,當然如果 Notion 這個 idea 已經是 way of define on web 當然也許有機會,可是如果你心中有 Notion 這樣一個服務的 idea,你如何讓 AI 就你跟他講完他就做好。

現在的問題並不是 AI 的能力問題,而是你如何去描述這個 Notion 的服務。你光把這個 Notion 的服務這麼複雜的各種功能各種應用描述好,可能是上百頁的規格書了對不對?當然如果可以把上百頁的規格書 way 給 AI,那也許真的有機會就 one shot 幫他做好,可是問題是我們跟 AI 的溝通你可能只是寫個一千個字好了,一千個字的描述怎麼可能完全代表 Notion 這個服務,大家知道我意思嗎?

所以 Notion,就是 AI 怎麼可能幫你腦補你心中剩下的那個九百頁的規格是怎樣,所以這個過程仍然不會是說我有個想上百頁 Notion 這樣的一個 idea,就直接告訴 AI 就幫我做好,你心中的想法需求才是最珍貴的。這個東西 AI 雖然有能力幫你做好,可是因為他不知道你的需求是什麼。

大家去想像,你帶了一群可能都是臺大畢業、MIT 畢業非常厲害的 Software Engineer,他們非常厲害,然後你是 Manager,你有這個偉大的想法,那你就跟他們說幫我做一個什麼東西,你覺得只要這個東西如果是夠複雜,那你的想法在腦筋裡面,你覺得他們會腦補就幫你完全做到符合你的想法,這是不可能對不對?

這樣講大家也許理解,所以 AI 會取代的是把你的想法能夠用有限的文字描述的情況下,faithfully 實踐出來,這個 AI 可以做到,可是人類的想法其實是夠複雜的,那這個想法來自於你的需求,所以這個東西其實只要人類還存在,我覺得不會被 AI 取代,AI 也許會弄出一個非常複雜的服務,可是這個服務可能跟你想要的其實是不一樣的。

所以我我想大家還是要學習成為一個懂得去管理這些 Super Junior 的 Super Senior,我想這是未來不會被淘汰的角色,你不要再去抱著這種打 ACM 或打這種演算法很熟,當然演算法很熟是一種基本的技能,可是我說這個絕對不是絕對的門檻,那大家一定要認清這件事情。

所以有一群 Super Junior 幫你工作,你未來可以更 focus 在商業模式或是想法創新。那不過講到這個我想也不是大家就直接不用去學電機系或學資工系的這些像傳統的這些影像辨識或很多很多這些專業的東西,很多專業或真正的服務它背後還是有很多很多理論在支撐的。那你如果完全不知道這些理論的話,你根本也講不出這些需求,所以我想有這些專業的涵養還是重要的。我想強調的還是說把這些想法實踐成產品,中間有很大一段開發的過程,未來會被 AI 取代。

軟體工程師的真正價值

截圖 20

我剛有講過我在博士班的時候在一家新創公司,我前後待了將近六七年,那我後來也算是個主管,因為我管他們第二套(他們有兩套工具),我是管他們第二套工具,那我也寫了應該也是十幾萬行 code,可是如果想想我六七年才寫了十幾萬行 code,除起來我每天大概只寫我忘記多少,也許搞不好沒有一百行,搞不好一兩百行而已。

所以一兩百行 code 我可能只是半個小時一個鐘頭就寫完了,所以這個故事其實要告訴大家,軟體工程師的生活並不是都在寫 code,而是大部分時間都不是在寫 code。所以 AI 幫你省掉的時間其實只有寫 code 的那一小部分,大家必須要認知,所以軟體工程師的工作為什麼會被取代呢?那是表示那些人根本不知道其實軟體工程師大部分時間都不是在寫 code。

那大家知道這件事情,你就知道其實軟體工程師還是有他的價值,這個價值就在於你的思考、你的設計演算法、你的 debug,或者是休息,總之這個都不是沒有辦法被 AI 取代的部分,大家不用太擔心。

AI 與人類的未來

截圖 21

好,我想結論一下,人類因為夢想而偉大。很多人會擔心 AI 是不是會對人類造成傷害,會造成毀滅。其實會毀滅人類的東西太多了,槍砲彈藥毒品甚至網路也許都會毀滅人類,所以毀滅人類其實是看人類有沒有想要毀滅人類。

我想只要人類對於未來的共同夢想是讓人類可以繼續幸福生活在這個地球上,我想大部分人類應該都是這樣想的吧,人類應該都會想包含自己還有身邊的人應該是更幸福的嘛。當然也許有些人他不知道因為任何原因有那種就想要破壞這個世界,可是畢竟那應該是少數。

所以只要大家的共識是這個世界還是希望能夠幸福快樂的運作下去,我想這個群體的力量就不至於讓任何東西包含 AI 來毀滅人類,所以大家不用去想像這種事情。

所以我更希望的是大家知道這些 AI web programming 的知識跟技術之後,能夠在未來去設計跟創造出符合人類需求且符合人性的服務。我常在想也常感受到其實很多服務如果不符合人性的話,其實在未來是不會流行的。

我就不要點名了,免得有些人太尷尬,就是大家可以想像過去有很多看起來很炫炮的服務或是很流行的這些東西,可是它的使用,不管是使用方式或是使用情境並不符合人性,那種東西就不會流行。

所以我我覺得大家在想這件事情或創造這件事情的時候,還是要去想像它是不是真的是符合人性,那人性是什麼?我想人性還是基本上追求讓生活更好,所以如果有個東西它的出現會是讓人類生活變得更糟,我覺得基本上不會流行。

所以你說社群是不是會讓人類生活變糟,我想還是利大於弊。我記得大概在十幾年前社群剛出來的時候,我有一個朋友他一針見血的說明了社群網頁,他說這是一個無聊產業,我忽然感受到還蠻有道理的。

就是所謂的無聊產業就是,就像我剛剛說的,軟體工程師其實寫 code 時間久一點點,很多時間是需要閒晃休息或是無聊發呆,那時候上網或社群互動是一個很好的解決方案。大家想在沒有網路或沒有社群的時候,我就常常跟我老婆在想,我們以前年輕的時候無聊的時候都在幹嘛,真的就是閒晃,就是不知道在幹嘛,做一些無腦無意義的事情。

我覺得人類本來就會花時間在做一些打發無聊的事情,所以我覺得社群網路的流行的初衷就是滿足人類本來就醒著,除了睡覺八個小時,工作八個小時,另外八個小時就是休息跟玩樂,就是打發那段時間的需求,所以我覺得它還是算符合人性的服務。雖然很多人也許因為社群,不管是上癮或是什麼,造成一些生活的問題,不過我覺得它還算是利大於弊。

知識與技術的快速發展

截圖 22

我想知識跟技術的發展速度絕對遠超乎你的想像力,尤其如果你去回想這十幾二十年來科技的發展,如果你再去觀察現在科技的進步,真的就是超乎你的想像。

我想在這個浩瀚的知識技術前面,我們還是要稍微保持謙虛跟好奇心。我想這句話不是在給你什麼雞湯,而是要提醒你,你如果覺得自己技術很棒,自己已經什麼很厲害的話,你還是要稍微了解這個世界其實是在快速進步的,你現在會的東西如果你不進步的話,過個兩三年你就是並不厲害了,所以大家還是要保持這個好奇心。

很多東西我覺得尤其是在網路或 AI 的時代,老師本來就沒有辦法教了,學校本來就沒有辦法教了。沒有教的一個很大的原因是因為老師也沒學到啊,拜託,就像我說我要學這個東西,我也必須要在過去這年也算是有點用功的去學,我才有辦法在今天教大家對不對。那算了,我不是要批評老師不用功,我是說大部分老師教的東西可能都是他十幾二十年前會的東西。

你不可能期待老師每年都學新東西教你們,你說不是應該這樣嗎,像是,可是事實上不是啊。所以我說這個未來是學生的責任了。比較有趣的是電機系,我是三十差年前在那邊念電機系,我發現現在電機系的課可能還是有一半吧,可能沒有到一半,還是跟我三十年前學的差不多,這不是詆毀的意思,而是那些就是很基本很重要的東西。

所以我相信很多老師上課的確是在上或教這個已經是非常成熟重要的技術,可是很多新的技術的出現它的量其實真的是遠超乎傳統的知識跟技術,那那塊老師是跟不上的,大家必須要認清這件事情。

在網路的時代,另外一個現象是這些知識跟技術很多都是開源的,就算不是開源的,你其實可以用非常廉價,比方說幾百塊臺幣就可以學習到的東西,大家不要去省這樣的錢,真的,你如果真的有心學習的話,你就是要花你的時間跟花你那些一點點的錢去學它。

兒子自學程式的啟示

截圖 23

Again,如果我提到我兒子不是要吹牛什麼或吹噓什麼,請大家不要有這樣的一個想法,不過我想我真的必須要 admire 我兒子現在他的技術以及他在 Cursor 的一些貢獻,就是他真的還蠻猛的。不過我接下來想講的只是說我兒子學程式是在他高中的時候,那時候我正在開公司,非常忙,我根本沒有時間理他。

我唯一對他的影響大概就是兩件事情,就是我剛開始開 Web Programming 的時候,我叫他來我的課程旁聽,因為那時候我白天要忙公司的事情,所以我的課是開在禮拜三的晚上,所以那時候我記得他那時候還在唸初三,念延平,所以他禮拜三下課以後叫他來課堂聽,我就說就來聽一下長知識,大概知道一下現在網路是什麼。

他那時候已經開始喜歡寫程式,他要學 C++ 這樣子,那我就告訴他其實 C++ 之外還有很大一片世界,你來聽一下,所以他就來聽一下,那聽完之後就覺得,那時候當然我開公司,所以他看我公司的員工用這些網路技術創造一些很有趣的東西,所以他就覺得說真的蠻有趣的。

所以他事實上是在高一的時候,後來才知道,他花了自己有限的零用錢,大概買了十幾門課,就去 Codemy 去買了十幾堂課,他那時候還跟我說,他那時候有 Special Deal,好像是不知道幾門課才幾塊美金這樣子,總之他買了一大堆課,什麼都學,包含了演算法,還有一些簡單的這個 Python,Javascript,什麼都自己自學

不過就是有這樣的一個精神,而且他就因為自學,所以他後來在高二的時候就自己用 Javascript 寫了一個網路版的 Minecraft,然後因為這件事情他就自己很白痴,或者覺得好玩,就把他 Po 到這個 Reddit,就是網路論壇去,然後就爆紅。然後 3 號他的 Minecraft Report 還上 GitHub Trending 的第一名,然後還被臺灣的 Web Conference 找去演講,總之這些事情都不是我主導他的,所以他就是自學這樣自己弄出來的。

所以他從此之後,我記得高中每次他放學回家,我看到他吃完飯就是坐在電腦前面就寫自己的 Project,我問他說你不用寫功課嗎,他說他功課都還需要寫完。所以他就是花那麼多時間在自學跟寫程式,然後去美國念大學,不過去美國念大學也是算是在交朋友,大部分時間還是在寫自己的 Project,所以他才會 3 號在 GitHub 上有蠻不錯的成績,然後他會被挖去是因為他算 Cursor 的 Early User,那他們的 CEO,那時候公司 Cursor 可能創立不到一年,他就是去 Sort by,去找他的 Heavy User 的名單,然後 Sort by GitHub 的 Start,然後去找到我兒子,然後他就寫信問我兒子要不要去工作看看。

那我兒子本來就問我,那時候就問我說為什麼要念大學,這話可以講,總之他就問我為什麼念大學,對我其實那時候也在很掙扎,因為我知道這個趨勢做下去很多東西都是自學的,所以我就說好啦你去交朋友。因為他就問我說為什麼不能直接去找工作,因為他那時候其實有拿到這個 Cisco 的 Intern,然後他說 Cisco 都給他 Return over,然後為什麼不能直接去工作,就去交朋友好了。

那總而言之他在大三期末考,上一期期末考的時候就被 Cursor 挖去,然後期末考也沒有考完就決定加入新創,工作非常辛苦。他們的工作是每天從早上大概九點多工作到晚上十二點,然後禮拜天他常常也是又跑去工作,我說你這樣不會累嗎,是公司逼你的嗎,他說不是,他就覺得寫程式很好,而且他覺得不斷地用 AI 創造出這些新的東西是非常有趣的一件事情。我想他們公司就是一群這麼厲害這麼拼的人所創造出來的工具。

對資工系學生的期許

截圖 24

我想講的是說,稍微拉回來一點,我不是要跟大家吹噓自己小孩的故事或什麼,而是我真的覺得這個過程蠻神奇的,當然也是他的運氣蠻好有這樣的一個機緣。

可是我想真的要提醒大家的就是這句話,尤其是各位資工的同學,在座如果有資工的同學的話,千萬不要只是在乎課堂教的東西,恕我說句實話,我不知道為什麼,我覺得臺大資工的同學特別在乎成績,以往每次來跟我要成績的,盧成績的很多都是資工系的同學,這點真的讓我火大,拜託,沒有 A+ 不會死,學到東西比較重要

你們如果再跟我一直這樣盧的話,以後就拒絕收臺大資工的學生了,我說真的,你們真的不要以隔壁那個系館當作是你們的天花板,雖然我知道你們有天花板,可是真的是差太多了。

如果你有空看看外面的世界,看看那些神人他們如何打造他們的開源的套件,他們如何工作,如何認真如何努力的話,我真的覺得各位真的差太多了,你們的程度你們的努力程度差太多了。為了這樣去爭取 A+ 不是 AI,真的是沒有必要,大家真的要去自學啦。

當然有些同學也會說這門課,我看到很多過去同學 comment 說修這門課要花好多時間去查資料,在那邊看影片,在那邊自學,在那邊抱怨。我覺得本來就這樣啊,如果那些東西都是我這樣教大家的話,大家一定無聊到睡著,真的,大家知道坐在課堂上上課最痛苦的一件事情是什麼嗎?跟線上學習,就不能暫停跟快轉,對不對?

因為很多同學線上學習是用兩倍速在快轉,然後聽到這邊老師又在講故事,像剛剛的十分鐘同學可能就會快轉過去,那樣學習效率才會快,沒錯啦,我知道,所以我才說我上課你不來聽沒關係,真的,你要回家快轉是可以,那當然你要來這邊捧場一下,我很 appreciate,沒問題,或者是你覺得你回家大概就不會看了,那當然來這邊九點逼自己努力學一下也很好。

可是我想講的是說自己學習是很重要,那我課堂上教的東西真的是我想傳授的只是開一扇窗而已,外面的世界真的要靠大家去探索,千萬不要在那邊抱怨,修這門課還要自己去看資料,這本來就是應該要這樣子,請大家認清這件事情。

所以這門課只是幫大家開一扇窗,那讓大家可以一窺現在軟體科技的進步,那千萬不要再當一個自以為是的井底之蛙。所以也千萬不要期待聽完這門課就有辦法做作業,我盡量啦,不過大家要做作業還是要自己去真的花時間去弄懂,吸收,看不懂的地方自己看影片或是上網查資料,那你不要以為做完作業就真的能夠成為 web programming 的專家

真的就像我說的,大家去看看真的專家,他們是怎麼學習,他們做的東西的複雜度跟程度是什麼,這個大家真的要去好好的謙虛的去學一下,那也要懂得自己去探尋學習更深的網路服務技術。

臺灣軟體產業的困境與機會

截圖 25

我覺得臺灣的軟體產業之所以起不來,當然有很大一部分跟我們的這個環境。那這個環境除了本系跟隔壁系造就不出太厲害的學生,說真的,因為我們大家太習慣我們這種教學方法,我覺得就是創造不出太厲害的學生,就是國外的很多教法或要求我覺得就是基本上其實課堂只是真的來教朋友。

真的厲害的人都是自己靠自己的努力做 project 或交朋友學來的,那如果你太在乎這個學校的成績或太在乎老師教的東西,我們就是教不出夠厲害的學生,那當然這是一個原因,另外一個就是當然這整個環境因為我們的市場或很多資金的關係。

不過我覺得我當年公司雖然被賣掉,不過我如果不要因為太愛臺灣,不是啦,當然很多原因啦,就是會覺得說想回臺灣,然後我不是這樣,然後繼續留在那邊的話,其實早就退休了。那不過我覺得我並沒有後悔這件事情,因為我覺得回臺灣教書或跟大家互動是一個非常有趣的,對我來講非常有意義的事情,可是我也深刻感受到兩邊產業跟資本市場的落差

我不知道講這些大家有沒有感受啦,不過真的尤其是這幾年這個資本的膨脹,大家可能完全沒有辦法想像。給你如果在座的同學真的有心想要創業的話,你們知道現在矽谷算是蠻 ok 的 startup,他們在可能連產品都還沒出來,就只是幾個看起來很年輕有為的年輕人,然後能夠講出一個聽起來還蠻不錯的 startup idea,他們就有機會拿到所謂的種子基金

所以有投資人就是覺得年輕人不錯,你的 idea 不錯,我就給你錢,大家知道那個種子基金是什麼 scale 嗎?你的產品根本還沒出來,我注意到很多例子,大概拿到的都是 10 個 million 美金的 scale,就是上千萬美金。

如果你真的已經產品做出來,而且已經感受到你的產品已經有市場的 potential 的時候,他們可能就會拿到 Aaron 的資金。大家知道現在比較厲害的新創公司,Aaron 的資金拿到是多少錢?Cursor 的 Aaron 拿到 60 個 million,那是一年前的事情,60 個 million 是多少?6 千萬,大概 18 億臺幣,他們那個時候公司才八個人,當然不是 Cursor 這樣而已,還有很多算是做得還不錯的公司,其實在 Aaron 都拿到這樣的資本。

臺灣如果沒有辦法拿到這樣一個資本的挹注的話,你很難在 AI 必須要比軍備的時代更加競爭,我想這是臺灣的軟體產業,也不是只有臺灣,很多國家的軟體產業很難突破的一個天花板,一個困境。

不過我覺得還是有機會,只是說這門課真的希望可以讓大家開一扇窗,讓大家可以去理解所謂的人家厲害的軟體公司是怎麼樣厲害,希望大家不要固步自封。希望這門課之外真的能夠有那個野心,創造這件事情。大家知道 Cursor 的幾個 founder,我兒子現在 23 歲,Cursor 幾個 founder 只比我兒子大一歲,他們都是在 MIT 大學畢業就出來開這個公司。

所以都是很年輕就開這個公司,他們去挑戰一個像 Cursor 這種,大家會覺得這根本就是很難挑戰的題目,不過人家做到了。那我希望大家真的如果你心中對軟體有夢想有熱情的話,你能夠一方面認清這樣的一個現實一個事實,另一方面我希望你的夢想要能夠更偉大更堅持一點點。我想這是想跟大家講的話。

課程期望與學習方法

截圖 26

不好意思我沒有打算下課,我可能講一個段落再下課。也許廢話前面多一點點,那大家如果要上廁所就請便,不用等我,那我可能很快把下面這個講一下我們再來下課,我後面還有一個單元,那我這個單元也是我以為我今天可以講。

不過我也許應該有機會講,所以我的講的可能會很快。

程式基礎與 AI Coding 練習

截圖 27

  • 程式基礎:最好要有些程式基礎,因為一直有同學問我如果完全不會寫程式可不可以修這門課。其實我自己在用 AI programming,我曾經有幻覺覺得可以,直到我教我女兒(我女兒是不會寫程式的)做一些事情的時候,我認真的覺得她如果沒有一點點程式的概念的話,有很多背景知識很難跟她講。所以我我覺得當然不用到很會寫程式,至少要有一些程式基礎,那時候我不知道學什麼,你可以去看一些基礎的 HTML, CSS, Javascript 等等。當然如果你在座你是其中一個完全沒有基礎的也沒關係,我覺得你可能還有一個禮拜的時間,趕快去培養一點程式基礎,或者是今天我們後半部你如果上的覺得完全很吃力的話,那也許可能你後面會更吃力,也許大家自己斟酌一下。
  • AI Coding 練習:另外一個就是要趕快練習用 AI coding。我知道在座可能大部分同學都用過 ChatGPT,那不過我想強調的是說用 ChatGPT 寫程式跟用 AI coding tool 是兩件事情。當然你完全可以用 ChatGPT 跟他講一講之後寫好 code,然後把它 copy paste 到任何一個文字編輯器,然後就好像會寫程式。可是寫程式我已經強調過,不是只有寫程式這件事情。它有前後很多相關的知識或概念或是需要知道的東西,所以我們還是希望大家可以在一個比較完整的環境,像 Cursor 這樣去學會寫程式這件事情,所以請大家就開始使用這樣一個工具。這個工具有 14 天免費,大家可以先用一下,那在家退學就會給你 coupon,大家不用太擔心花費這件事情。

作業與學習步調

截圖 28

另外我們現在一個學期有 16 週,第 16 週是期末考,所以我們其實這門課會有 7 個作業。因為我覺得這門課其實很多東西,我們沒有考試,那這門課很多東西要學會,一定要親自透過作業去學會。所以作業是學習的非常重要的部分,所以我的作業就是會有 7 個,那這個 7 個作業就從今天開始,第 1 週是作業 1,1、3、5、7、10 到 13 週。那第 7 個作業的定案是 15 週,所以你這學期大概每兩個禮拜會有一個作業要繳交的步調。

所以如果你中間要什麼大墊杯啊,或是中間可能有潛在因為失戀心情不好不想寫功課的風險的話,你要自己斟酌一下。

做中學與自學能力

截圖 29

好,所以做中學跟自學能力非常重要。那雖然大部分的作業都可以靠 AI coding(AI coding 就是憑著感覺直接跟 AI 講,它就會幫你寫出來),可是我還是會希望大家要花時間去看它到底寫了什麼。而且大家要知道它幫你寫什麼,這樣你才能夠真的有能力變成那個 senior engineer

大家可以想像,其實在業界也是有啦,業界有些那種靠一張嘴就變成主管的人。大家知道意思嗎?就是他其實技術或是專業其實不怎麼樣,可是就是很會嘴。然後可能他的老闆可能沒有搞清楚,然後就把他升成主管,那樣主管其實將來他的職涯會有點慘。也許在年輕的時候可以嘴一下變成主管,可是他底下的人他就是用嘴的方式去跟他說,你幫我做這個這個,可是底下的人問他問題或是有狀況他其實是沒有能力 handle。他也沒有能力去規劃規格或是定義一些演算法的一些想法。

如果你純粹只是靠 AI coding 然後不去搞清楚背後的技術或是說 AI 幫你寫什麼的話,你就會變成那種只會嘴的主管,那種主管你就會有很快的天花板。你的天花板可能就是當了警察主管之後你就只好轉行去當網紅,我們要講網紅是什麼?不過的確很多是這樣子,就是你千萬不要,不是千萬啦,當然那也是一種 career。

只是我覺得你如果有心往 engineering 這條路上走的話,你必須專業的知識還有要看懂你的底下的人,就是 AI 幫你寫什麼,還是要有一定的 know how,detail 你不用懂,可是你上面要知道。而且你要有那個 sense,給他 guidance,這還是很重要。

Top-Down 學習法

截圖 30

更我從教我女兒身上我體會到她如果不花時間去學這些東西的話,她連一個稍微複雜的 app 可能都做不出來,因為她根本不知道發生什麼事。很多人會怪 AI 說 AI 很笨,因為給他做完之後他就做錯了,然後就很笨。可是我覺得就像你如果帶了一群 MIT 或臺大學生,他們厲害,可是做出來的東西就是爛,到底是他們爛還是主管爛,大家可以想像一下,那是因為你沒有辦法告訴他們要怎麼修怎麼改怎麼做更好。

所以大家要準備好當這群 super junior 的主管,這是我希望大家修這門課要學習做的事情。所以就算大家可能作業一作業二,我相信前兩個作業真的有機會 one shot。所以 one shot 就是我等一下也許會示範給你,所以你可能只要貼一段話給他,他就真的做出來啦,又不用改,其實就還蠻 ok 的。

可是就算是這樣,還是希望你可以去看他的 code,而且了解他的背後原理,這樣會讓你的學習更紮實。我覺得這樣的學習方法沒有什麼錯,大家知道以前我們學習真的就必須要去看語法啦,看一大堆東西,從很抽象的這個語法概念去拼出到底這個東西要怎麼寫。不知道大家可不可以想像,這個過程其實是很燒腦也很痛苦也很容易犯錯的。那這樣子終於經過好幾次的輪迴之後,我終於更熟悉文法,我終於可以比較快寫出東西了。

這是以前學習的方式,可是現在我覺得這個過程我真的覺得沒有必要。因為所謂的電腦語言是電腦講的語言,你幹嘛學會他的語言,對不對,就像你要跟一個阿拉伯人講話,你可以透過翻譯嘛,對不對,你不需要真的會阿拉伯語,你還是可以跟他溝通啊。電腦語言就讓電腦自己會,真的不需要,大概知道他在講什麼就好,所以我覺得這是未來 programming 的趨勢

所以我想講的是說,就是大家要能夠大概了解他在寫什麼,可是很 detail 的東西你真的沒有必要去跟他計較。那這是我想要的 top-down 學習法,就是說其實你也許不會這個語言,可是你也許不會這個技術,也許我不知道怎麼去串這個東西,可是你就叫 AI 幫你做,做完之後你就去看。從這個看的過程你學習的速度絕對會比你重開文件然後自己在那邊 try an error 快很多。

人類的記憶有限,相信我,你就算學會一個很 detail 的技術,你只要幾個月幾年沒用你也是忘光光。你記得的還是那些還練過的東西,那我覺得本來就是這樣,那大家不要花力氣去學習那些本來就是會忘記的東西。那些東西就交給電腦,電腦只要沒有 down 掉它是永遠記得的,那我們應該要學會怎麼去跟電腦 co-work

期末專題:創造你自己的應用

截圖 31

另外這門課還有一個重要的要求,就是請大家想一個自己會使用的應用來做你的 final project。這很重要,你未來如果要好好學會 web programming 的話,你將來設計的東西一定要是你自己或者是你身邊有人他就是每天會用的。

這個是我自己花了很大學費才學會的事情,你不要因為某某領域很紅,那你對那個領域也不是專家,你就跳進去想說就是不管是顧一堆人或是怎麼樣,然後去做那樣的一個產品。那你自己不是那方面領域的專家,其實你做出來的東西是不會到位,所以我希望大家從我們這門課的期末專題開始。

當然如果你自己想在學期或想在半學期,你也想不出任何的 web programming 的 application 是你可能會用的,那就表示你可能對 web programming 根本沒有需求,那我其實真的覺得你不用來修這門課。所以我希望你至少要對這門課教的東西未來對你怎麼用要有至少要有一個想法。

所以這個是我對期末專題的要求,可以嗎?你做的東西當然不見得一定要自己用,至少你身邊的人要用,這樣才能夠得到第一手的使用回饋。因為真正的一個 web application 絕對不是做完的第一個版本就是好,那一定離理想差很多。那是必須透過不斷的這個 iteration 才會做好,那這個 iteration 要往哪邊去,其實都是要透過真的使用才會變好。

很多新創公司很多產品之所以會失敗在於它做完第一版之後,它後面的版本的修改並不是真的從使用者忠實的回饋,而是來自於創造者的腦補,他覺得說這樣好像會更好,他覺得別人有這個東西應該會更好。我真的親身慘痛的經驗,這樣做出來的東西就算有點像,可是還會是一個失敗的產品。

所以你千萬要創造出一個自己會用的 application 這點非常重要。我想這個也是大家修這門課你至少可以帶走一個你自己可以用的東西也算是一個紀念品,這是非常重要的事情。

學術誠信與抄襲

截圖 32

好,那最後這門課不見得會抓抄襲啦,就是真的網路程式這些東西 Ctrl+C,Ctrl+V 就有了。那當然如果你這樣做我覺得是你自己的損失啦,如果你為了這三學分,為了自己的成績這樣做,我覺得我之前還會花力氣去抓抄襲,可是我後來覺得我浪費我的時間去為了從一百個人去抓幾個抄襲,我真的覺得我在浪費我的時間,那這些人我覺得就讓你們自己墮落就好了。

我為什麼要花時間去注意到你的墮落,或去告訴你你這樣墮落是不對的。我現在已經講了,你墮落是不對的,你說你自己要抄襲,讓你真的學得不紮實學不好,你就算拿到那幾個學分我覺得是沒有意義的,所以我覺得你應該勇敢的選擇停修,而不是在那邊抄襲。當然如果我們不小心,比方說正常海巡發現看到你的東西怎麼跟別人完全一模一樣,那很抱歉,我們只要抓到抄襲就是當掉了

課程目標與內容架構

截圖 33

等我再繼續講下去。

三大核心學習目標

截圖 34

我對你修這門課的期待,或我覺得我希望教給你的有三件事情:

  1. 希望大家可以了解這個 web service 背後的非常複雜高深的 technique
  2. 我希望大家知道這些技術之後可以利用它們來去實現一個夠複雜的 web service。這個實現過程當然是希望透過 AI。
  3. 第三個也是這門課在這學期我會新加入的東西,就是以往的課程學習一學期之後大家可能勉強做出一個全端的服務,然後勉強可以 deploy。可是我覺得有 AI 的幫忙之後,大家應該在學期中就可以做完一個全端的服務,也可以把它 deploy 到網路上面去了。這些東西都可以靠 AI 幫忙,就算你不是很了解要怎麼做也都可以完成。所以我我覺得我剛剛講過一個服務上低版只是一個開頭,後面怎麼去做更好也還有很多的技術要學習。所以希望大家可以經歷後面那一段從上低版 prototype 到真的可以學習怎麼做更好的過程。那這個東西會是我們也是課程要求的部分。

課程內容概覽

截圖 35

好那這門課的內容包含了這四大部分:

  1. 前面會有一些介紹跟 background
  2. 然後我們還是會先從 frontend 這邊開始教。
  3. 然後當然我們的重點是希望大家可以學習做好一個全端的 web service
  4. 然後最後一點會希望大家從做好一個 project 到一個把這個 project 做到一個夠成熟的 product,這個中間的過程可以學習到更多的知識跟工具。

我想這些細節我就不念了,你有興趣可以自己再看一下。

第一部分:基礎與背景知識

截圖 36

這個第一部分我發現我的講義的準備也不是完全 follow 這個。我大致上包含這些:

  1. 第一個我想會有一些基本網路跟 internet 的這些 concept,我等一下第一個單元還是會跟大家介紹一下。
  2. 那至於怎麼開發這個 web service 也會簡單跟大家介紹一下。
  3. 然後第三個單元會跟大家介紹基本的網路的語言。我這邊不小心寫了一些其他語言,不過後來想想我沒有要教這些東西,我還是只會教 HTML, CSS 跟 Javascript
  4. 那在我們的這個第一個單元裡面我們會跟大家講解這些東西,我覺得也算是有些瑣碎了,所以如果你完全沒有基礎我等一下會跟大家教一下。
  5. 然後最後在這個 modern web service 的開發其實不是只有寫網頁程式那麼簡單,它背後包含了怎麼去完成一個,怎麼去善用一些套件。現有的套件,因為一個複雜的服務絕對不是你每一行 code 自己寫,可能百分之八九十的東西都是用現成的套件。所以說怎麼去搜尋使用對的套件其實非常重要,你不要在那邊自己造輪子,重造輪子。
  6. 另外一個寫好之後怎麼去完成,因為大部分複雜的服務都是要跟人家協作。那在這個協作過程裡面怎麼去利用工具來協助跟你跟朋友或同事間的協作,怎麼樣有一個所謂的 CI/CD 的一個流程,就是 Continuous Integration, Continuous Deployment,Continuously Deployment 的這個過程也是非常重要。因為我們不希望一個越來越複雜的系統到後來爛掉完全不知道怎麼收拾,所以有一個好的開發的環境是非常重要。
  7. 那包含怎麼去 Deploy 到網路上,這個是怎麼去 Maintain 它,這是一連串的學問,絕對不是只有學會這三個語言這麼簡單而已。我知道有些課在講 Web Programming 只在教這個語言,那我覺得那個真的只是工程師生活裡面的也許 10%,而且這部分還會被 AI 取代,那大家千萬不要只會這個東西。
  8. 那最後也會跟大家講一下現實的這個 Project 的一些管理。那這邊可能會帶入一些我對於新創公司的一些經驗跟觀察,如果你真的有興趣,未來真的想要把你的專利服務變成一個新創或變成一個產品的話,或者是你想把它開源讓更多人用的話,我覺得有很多關於專案管理的一些 Know-how 大家也要知道。

第二部分:前端開發

截圖 37

我們正式進入比較技術的部分會先從前端開始教。

  1. 那當然一開始還是會用一個個人網頁當作一個簡單的示範,這個示範也會是你的作業一。你的作業一就是開發自己的個人網頁,那這個我相信 AI 應該是非常輕鬆,應該不用寫到半完後,就可以幫你做出一個看起來算專業的個人網頁。
  2. 第二個也會開始跟大家介紹一些身為工程師應該要知道的事情,包含了大家要知道 Localhost 是什麼。其實我們大部分的網路開發事實上會在我們的本機端,以它當作是一個 server,當作一個主機,就 Localhost 來處理這件事情。
  3. 那接下來我們會跟大家介紹一些開發的一些套件。那我們還是,雖然這個已經是十年前的,十一年前的框架,不過包含到現在還是有很多很多最熱門的網路服務還是用 React,所以我們還是會讓,而且它我想算是一個經典。我們會跟大家介紹怎麼利用 React 來打造一個至少是前端的一個服務。
  4. 我們會跟大家介紹 TypeScript,就是 TypeScript 跟 JavaScript 的差別是在於 TypeScript 就是一個有強型別的 JavaScript,這個我等一下會跟大家講,總之我們會跟大家介紹 TypeScript,那也會讓大家去練習。
  5. 那這個 TodoList 其實我們今天就會讓大家利用 JavaScript 練習了,那這個用 JavaScript 其實也是可以寫,不過會利用把它 migrate 到 React,讓大家理解 React 裡面的一些 component-driven 的這種寫法是什麼意思。
  6. 然後最後會開始讓大家去思考這整個 programming 的 logic。比方說一個稍微有一點點複雜的一個遊戲,比方說 Gomoku 是五子棋,那五子棋也沒有到多複雜,不過比方說我要怎麼去設計這個遊戲的邏輯,這個也是要寫出幾條規則。那當然事實上大家只要把這些規則寫完之後,AI 其實有很高機率 one shot 就寫出一個五子棋的遊戲,那這個也是大家可以要知道的事情。
  7. 那最後就是要大家做一個 single person 的 game。我想大家可以去挑戰任何你覺得有趣的遊戲,那這些遊戲都有很高的機率,你不用寫任何 code,AI 就可以做出來。當然美工的部分 AI 基於 copyright,它不會讓你直接用一些有 copyright 的東西,所以做出來可能有點醜,不過基本上還是可以玩。我等一下可能可以示範給你一下,我前幾個禮拜就簡單幾個 shot 做出來的設計,不是那種設計遊戲,是很簡單的那種設計遊戲。下一節課好了,那大家可以作為 2 可以練習一下這個東西。
  8. 那接下來要跟大家介紹一個現在 modern web service 很重要的觀念,前端很重要的觀念就是 single page application。所謂的 single page application 就是說,你的這個應用服務其實都是在一個單一頁面。比方說這是一個頁面,那我這邊 click 在其他的頁面,它是右半邊的視窗更改掉,它並不是整個畫面重新刷新,它是停留在同樣的網址上面。這個是有用 frontend 的 client 端的 routing,不過它其實還是一個同樣的 page,那這樣的東西就是 single page application。你現在大部分的網路服務其實它只有刷新動態要更新的部分,比方說大家看 YouTube,它其實只有更新那個播放的部分,其他部分其實是並不會因為你 click 任何東西刷新的,這種是 single page application 的一個概念。
  9. 那這邊就會讓大家開始練習,那我們就算是會讓大家練習一個把一堆資料轉換成一個服務的一個練習。那我會給你一個蠻大的一個 Excel 檔,那這個 Excel 檔是臺大過去某一年的所有開課的資料,直接跟教務處要。那個 Excel 表可能有上萬門的課,然後有上百個欄位,那大家要從這個 raw data,大家想像如果你有這樣的 data 的話,我怎麼去創造一個選課系統的服務。我知道大家可能會對臺大選課系統有意見,那沒關係,有意見你就自己來做啊,那自己來做一個你理想的選課系統。你那個選課系統要能夠有社群功能,要有什麼手機功能,我會給你全臺大的課程資料,那你利用它來練習如何把這個資料轉換成電腦看得懂的資料,比如說 JSON file,然後怎麼去變成你的前後端的服務,那是作業三。
  10. 那當然這個服務做出來的 UI 可能有點醜,那大家要學會用一些 modern UI 的 framework,像比如說 Material UI。我這邊簡單示範一下,其實有很多這些現成的,反正就是你的 UI 包含了所有的這些 component,這些都是大家不用自己在那邊掃刻,它有現成的 component 可以讓大家很快的做出來。這個我應該先漏了,anyway 這個是我們要跟大家講的。
  11. 那接下來在我們 move 到全端之前,可能有些部分要跟大家教一下,包含了你的 coding 的 style,要怎麼樣 code 不要寫太醜,CI/CD 還有 deployment 的部分。

第三部分:全端 Web Service

截圖 38

接下來會進入到全端的部分。

  1. 那會先從一個很簡單的 service computing 的概念跟大家介紹。
  2. 然後會跟大家講一下,怎麼去 leverage third party 的 service,比方說像怎麼去 leverage Google Map 的 API。所以我們的作業是請大家 leverage Google Map API,做一個你自己旅遊的 planner,這樣一個 service。
  3. 那這樣的 service 當然希望是有後端資料庫的,所以我們接下來會跟大家介紹一個很經典的後端,就是 Node.js,也會介紹它的一些基本知識。
  4. 那當然在這部分也要跟大家介紹一下,像 HTTP resource 這些基本也重要的網路的這些觀念。
  5. 那接下來會跟大家介紹資料庫的意義,以及怎麼使用。
  6. 那最後會跟大家講說,當你服務做好之後,第一個可能要做的就是一個 login page,那這個 authentication 的一些觀念,跟一些基本的網路安全的觀念,也會在這邊跟大家講。那本來有要做一個自己部落格的這個作業,我後來想算太多了。
  7. 那有了這些觀念之後,我們接下來會跟大家介紹另外一個,也是我覺得蠻重要的觀念的一個框架,叫 Next.js。它是一個前端的框架,它提供了前端跟後端的服務端,它也完全實現了一些,講說像 server-side rendering 的一些概念的一個技術。那我想會大家練習用它來做一些服務,包含了作業五
  8. 那這個作業五就是會大家做一個 X,X 大家也許沒用過,不過 X 就是 Twitter。Twitter 也用過嗎?就是一個論壇,就像大家知道 Thread,就是這個東西,anyway,如果你想要去追比較新的科技的話,建議還是去看原文的 X。那裡面有很多就是蠻新的技術。那這邊會要讓大家去打造一個可以發表 post,讓大家留言 comment,可以按愛心的一個這樣的一個可以互動的前端服務,那是作業五。
  9. 那接下來在這樣的一個服務,牽涉到社群或是這種有使用者互動服務的時候,資料的快速的取得其實就是非常重要。大家光想一下,比方說你用 IG,你用 IG 你去按你朋友一個貼文的愛心,你的朋友幾乎在同時間,他就可以看到他那邊貼文被人家按愛心,大家可以想像,IG 背後是幾億人在使用,幾億人在這樣用的時候,他如何這麼即時的就把這個訊息傳過去,絕對不是點對點,他絕對是中間有個資料庫。所以怎麼去,然後你在 load 你的朋友的資料進來的時候,然後你在快速往上滑的時候,他如果很快速的把資料漏進來,這個都會牽涉到,怎麼去做 real time communication 跟資料的 update。那我想這邊會跟大家去做一些介紹,包含了怎麼去透過 Websocket 去跟人家做溝通,比方說聊天室這些東西。
  10. 那當然接下來也會希望大家,能夠去 leverage 現在 AI 的一些服務。比方說大家知道 OpenAI,其實所有東西都有提供 API,所以你除了用 ChatGPT 的服務之外,你其實可以在你的程式裡面去呼叫 ChatGPT。所以這一類會要大家就是,透過這樣的一個服務,去做一個 AI 的機器人。那這機器人可以幹嘛呢,就是可以幫你做你的代言人,如果你做了一個產品的話,他可以當你的客服,或如果你覺得無聊的話,你可以做 AI 確保跟你聊天,就是有個聊天介面的這個。那你說 ChatGPT 就可以,ChatGPT 就是一個 AI 確保,只是說你要利用他那個技術,做一個屬於你想要介面的一個聊天機器人。那這個聊天機器人,我們會要大家坐在 LINE 上面,就是大家會在 LINE 上面,開一個 LINE 機器人,然後那個 LINE 機器人去串 AI,然後你可以讓這個 LINE 機器人,去跟你聊天,所以這個另外一個挑戰,也是大家要知道,怎麼去 leverage 這個第三方的這種服務。
  11. 那最後就是說,當你的應用到最後,最後這樣越來越複雜的時候,你怎麼去做這些服務的管理。那甚至說你這個服務要去,能夠放上網或是給人家使用的時候,你就必須要有這種 container,像 Docker 這樣一個概念。那你的 deployment 這些東西,這個會再重新再講更深一點點。那這些東西都是你要從你的 project 變成產品的時候,需要知道的這個觀念。

第四部分:專案管理與產品化

截圖 39

好那最後一部分會跟大家講一下,這個 project management 的這個部分。

  1. 包含了怎麼去做一些一個專案團隊的這種,比如說快速開發,Lean Startup 或是這種 Sprint 這樣一個管理
  2. 那第二件很重要的事情就是,你如果做了一個服務的話,你如何去知道使用者,怎麼去使用你的服務。那這件事情,其實你可以在你的服務上面去埋一些 code,那這些 code 就是當使用者點擊的時候,甚至觀看的時候,你都可以去把他的行為,log 到你的 DB 上面去。那你這樣就會知道,使用者到底怎麼去使用你的服務,那這個是你要去 improve 你的產品重要的事情。就是說你要 improve 你的服務,不是靠什麼 interview 啦,或是訪談的,我希望大家可以知道,包含你現在做我在使用 Notion,或使用 Facebook 任何東西,我的行為都是被監看的。那大家不要從高道德標準來 judge 這件事情,這已經是一個網路服務的正常行為。那你如果想要知道你的服務別人怎麼使用的話,那大家也要知道怎麼去在你服務裡面去埋這些東西。
  3. 那埋完這些東西之後,大家可以透過像 Google Analytics (GA4),或 Amplitude 這些,其實他都有提供相當使用量的免費 quota,你可以看到這些使用者行為,那這會教大家到時候怎麼去使用。
  4. 那這個最後就是 data 怎麼去做分析,去 visualize 這些事情,所以這個機會讓大家自己去建立一個 dashboard。所以現在是暫停版,你可以看到你的使用者,怎麼去使用的這些 behavior。
  5. 那最後還有幾個東西,包含了怎麼去爬資料,怎麼去寫個爬蟲爬資料。
  6. 那包含了怎麼有這些 AI service 之後,你甚至可以去建造自己的一個 Agentic service,那這個會是非常有趣的事情,那我希望大家都能夠有這樣一個能力。
  7. 然後最後如果有時間,會跟大家提醒一下說,最後真的要想要把你做的東西變成 startup,有些你可能一定要知道的知識。

好,那抱歉已經快兩個鐘頭了,不過我想講清楚,提供給你比較完整的資訊,你來決定你要不要來修這門課是很重要的。

課程時程與作業規範

截圖 40

那這個大概就是我們的 schedule,那當然大家就自己去慢慢看。

作業時程與挑戰

截圖 41

比較需要注意到就是每兩個禮拜的作業。然後呢,可能到停修的時候,我們就已經把前端這邊都交完了,而且這時候就要繳交作業,就是 X-clone,10 月底,就是兩個月後。

Again,大家現在可能沒有辦法想像,可是我想跟大家講的是,你當然不可能用傳統的方法,你當然不可能有那樣的技術能力去寫那樣東西。可是你如果知道它背後的一些原理,跟知道一些設定,跟怎麼去架這些網路的一些東西的話,其實你完全有辦法透過 AI 做出來。我也是期待修課學生到兩個月後,有能力做到這樣一個 full stack service,所以就自己判斷,看你有沒有願意接受這樣的挑戰。

好,那作業的 schedule 就不重複了。那這七個作業讓你 review 一下:

  • 前兩個作業很輕鬆,基本上 AI 幾乎可以幫你搞定。
  • 三四個作業你基本上可以透過跟 AI 多輪迴的溝通,也是可以搞定。
  • 五六七你可能就需要有一些還算專業的,網路相關的專業知識,否則你可能就會你也不知道錯在哪裡,你也不知道怎麼改,你也不知道跟 AI,你不知道怎麼去教他改,所以這個還是要來上課或知道才有辦法做。

GitHub 繳交與作業評分

截圖 42

好,那我們會希望大家所有的作業都是 push 到你 GitHub 的 repo。當然請記得把你的 repo 開成 private,否則你的作業就全部公開了。好,那你的 repo 我們等一下會講,就是在,是這樣子。那這個,啊,我這邊寫錯了,抱歉,這寫錯了,這個沒有 homework,那直接是 hw1,hw2,這個。

那個,雖然不知道修課有多少人,不過其實請大家體諒,就是去改一百多人的作業,是一件浪費生命的事情,只為了確保你到底是一百分還是八十分還是六十分,這件事情對於從教學資源這件事來講,我覺得是 CP 值非常低的。所以我們並不是不想幫大家改作業,我們還是覺得這件事情,當然最好是 AI 改,可是我後來想想,讓同學們可以 mutual review,至少可以有機會參考到同學們是怎麼寫的。所以這個機制我覺得還蠻好的,那我們從過去兩年我們就這樣做。

所以你在作業上傳完之後,你應該在可能一個鐘頭後就會收到三份不一樣同學的作業,那你要負責去幫他 review。那 review 不用幫他 debug 或是改 code,你要的只是給他一個整數的分數,從零分到六分。那這個 review 機制我們會再跟大家公佈。另外也請你寫至少一百字的 comments,是讓同學覺得有被愛到。

你的作業成績當然就會是 based on 別人的 review。所以我們總共有七個作業,那每個作業會有零到六分,所以最多四十分。那你當然如果每個都拿六分會四十分,抱歉我會把你砍到四十分,所以你不用期待每個都可以拿到六分。那這邊的作業成績六分就是你真的覺得這個人做得太棒,如果基本上他覺得已經非常好可以給到五分,就是已經超出你預期就是六分。那如果覺得說還可以就是三分,那真的就是大概只有一些很基本的功能就是一分,那中間的四分兩分請大家自行腦補。如果東西直接打開就是四題就是給零分。

那旁聽的學生不會被包含在所有作業的 review 或評分的過程。

期末專題團隊與時程

截圖 43

再跟大家講一下 final project。那 final project 的這個團隊一定要兩個或三個修課學生組成,我們不會允許單一個人的 project,那也不會希望超過三個人,因為超過三個人一定會有人沒事幹。

你說我可不可以找外掛,因為我本來做的一個 project 就是有外面的同學一起合作,那我怎麼辦,可以。那只是說請你在你的 project 的這個說明團裡面,講清楚外面的人負責什麼,那當然我們的評分會盡量移除外面人的貢獻。

你說那我的期末專題可不可以是我已經在做到一半的專題,也可以。那只是說你是要講清楚。那當然如果你覺得你是 I 型人或是什麼之類的,找不到隊友怎麼辦?這個我們會試著幫助你。不過如果你最後真的,大家知道這個至少可以兩個人嘛,所以最糟可能就是獨自一人。那你如果是全班的那個獨自一人,那我會建議你就停修。因為我相信還有很多兩人組,就是兩個人一組的,你還是可以試著加入一下,我會讓大家有各種社群的管道讓大家可以媒合。可是如果你最後真的是班上唯一那個找不到人,班上如果剩下兩個三個四個八個獨自一人的,我會讓你們互相認識互相湊對,不至於最後變成獨自一人的。所以我是覺得不會是一個大問題,如果你真的就是那個獨自一人的我覺得就停修吧。

好那期末專題的這個選擇我說過任何東西都可以,那不過你一定要有真的 user。當然最好就是你自己,或者你身邊的這個朋友,當然這個我沒有辦法幫你查核,不過這個就請你自我確認一下。那當然你的期末專題不要做一個跟我們教的沒關的,比方你做了一個完全用 C++ 寫的東西,那我就不知道那你為什麼要學我們這門課。所以你要做的專題必須要跟我們教的是高度相關。而且我們希望你做的東西要可以 deploy 到一個 public 的 service,是可以有個網址可以讓大家包含所有客人跟不是所有客人使用的。

那這個大概是我們的 schedule。簡單說就是我們在十月初,就是五六個禮拜後就會請大家 propose 你期末專題的 idea,這只是個 proposal 並不代表你的 idea 一定就是你專題的 idea。我們只是希望大家每個人都可以貢獻一兩個 idea 出來,然後我們會把大家的 idea 全部分享給你,所以你可以看到修課的人不管是一百個人或是三百個人的 idea,你可以從這些人的 idea 去想想其實這個 idea 不錯,我也可以做看看,就請大家發揮包含貢獻一下 idea。

那有這個 idea 的時候請大家在兩個禮拜內找好你的組員,找好組員之後你可以再去調整或者是修正你的 idea。那我剛有講過我們停修的期限是十月二十六,所以你基本上希望你不要找好組員之後才停修。當然你說如果你本來有兩個人停修變一個人那就沒辦法,不會逼你停修,不過希望不要這樣。

那我會讓大家有將近一個月的時間去做一個出版的 prototype,那你可以在這個一個月的期間去修改修正你的 project idea,那去把它更 define 的更清楚。那不過我們的 prototype 不是只有 define 清楚,我們是希望你要能夠 deploy 到一個網路上去。那我們當然不期待你這個服務多完整,不過至少它是一個可以點擊的網址。所以我們會做一個 libraries need support,那來做一個簡單的檢查。那這已經是大概期中考時間了,期中考過後了。

那最後我們在期末考前最後一週會請大家做一個互相的 review,那這個 review 是希望給你一點點壓力,希望大家的 final project 不要,我知道很多人過去都是在期末考周結束之後一個禮拜 camp 出來的結果,真的只有 camping 喔,你可以到系館或是就是看到一群人就是彷彿 camping,就是在一個禮拜 camp 出來。我覺得是當然一定會有 camping,還是會有 camping,只是我希望大家可以提早 camping,不是啦,提早做這件事情。

所以會有一個 midterm 的 review,希望你在這個在期末之前你至少可以實踐幾個功能,可以真的自己已經有在使用的 product,這個是一個 live 的 product。希望大家做出來的都有 AI 的幫忙,希望做出來不是一個非常陽春的服務這樣,而是一個看起來這裡有點像樣的,所以有 AI 的服務我們對於期末專題的期待也會提高,所以你做出來如果只是一個非常陽春,感覺隨便用都會有點問題,不管是 UI/UX 的問題,那可能會分數有點差。

好,那 final project 會是在期末考周結束,23 號禮拜幾啊,我忘了,總而言之期末考完的一週。我忘記是禮拜四禮拜五還禮拜六,大家幫我查一下 23 號禮拜幾好不好,禮拜二喔。那期末考周什麼時候,都那麼殘忍。期末考周完三天就要大家繳了,真的嗎,真的。好吧,那先這樣,那我記得以往都會迫於群眾的力量,會把 deadline 往後延個幾天,去年還延了一個禮拜。可是這樣子會犧牲掉大家的 Christmas,我是很不想要這樣,所以訂在 12 月 23 號,讓大家可以快樂的放掉網服去過聖誕節。那如果你寧願選網服不要選聖誕節的話,可以,不過這個是主流的意見的話,我會再延長 deadline,不過我想這也是希望大家有個期末考前早點開始做到一定程度,否則你兩三天可能會做出來的東西可能有點差。

評分標準

截圖 44

好,最後講一下評分。我們的評分是作業 50 分,final project 50 分

作業評分

截圖 45

這個作業 50 分裡面包含的 reviewer 的 score 是 10 分。大家記得七個作業,那你是會每個作業 review 三個,所以你理論上你會 review 到 21 個,那 21 個只要有繳交 review,有符合我們的規定,就有給分,有給 100 個字以上的這個分數的評論,你就會得到 0.5 分的期末的分數,所以 21 個理論上你會得到 10.5 分。當然我們一樣會把它砍掉,最高 10 分,最低 0 分。我們是用扣分的,就是說你少繳一個就會扣 0.5 分,扣到 0 分為止。

好,那你的作業成績就是同學的評分,那你說如果同學給我亂打,我覺得有三個人給你評分,理論上如果三個都給你很難看的分數,那我覺得你應該要自己檢討,還是檢討同學,我相信同學還是會發揮同學愛,互相給一些鼓勵的分數。

那當然我們就會做一些防呆的機制,包含了第一個,如果你的分數,三個分數裡面有任兩個分數差距差到 4 分,比方說 0 分到 4 分,1 分到 5 分,一個人說他很糟,一個人說他很好,一個人說他 2 分,另外一個說 perfect,這個我們覺得可能就是有誤會。那我們會把這些人挑出來,TA 會幫大家評分,那最後的成績就會以 TA 的分數為準。當然我們不會去懲罰那個分數給太高或給太低,大家不用擔心。

另外一個就是如果有人沒有給評分,會有同學太忙了,結果 review 忘記繳,那怎麼辦,你可能只收到兩個評分,那如果收到的只有兩個評分的話,我們會幫大家補一下,所以你的評分就會是以助教的評分為評分,所以大家不用擔心。

最後一個,no late submission,包含了作業跟 review,是 zero tolerance。當然我們可能會有一點點幾分鐘的時間差,就是我們從 GitHub 拉下來可能需要幾分鐘的時間,可是超過之後,你在 push 上面我們就不理你了。那 review 的機制也是晚上 9 點後,我們的 deadline 都是禮拜一晚上 9 點,因為希望大家可以 9 點以前完成,可以睡飽一點隔天來上我們的課。所以是 9 點不是 12 點,也不是早上 9 點,我記得我以前 DSNP 的 deadline 是早上 9 點。那每次看到同學來上課就是很慌,所以我覺得雖然這樣比較符合電信系的同學習慣,不過大家應該是禮拜天晚上熬夜,我是禮拜一上熬夜,我沒有說要犧牲禮拜一的課,不過我覺得這個意思。anyway 就是 9 點請大家記得這件事,那沒有遲繳,超過時間就是零分,你不要來跟我說我忘記了。忘記了大不了影響,每個作業是幾分,6 分,學習成績 6 分而已,不過搞不好你寫還是 2 分,所以影響 2 分而已,所以沒有那麼嚴重。

期末專題評分

截圖 46

那 final project 50 分,其中有 40 分當然是由我跟助教的評分。那這個評分我們會評大家的 deployment 的版本跟 localhost 的版本。所以就是說假設我們有四個人評分的話,有三個人會評大家 deploy,就是直接用你的網址去試用看看,看你的做的東西怎麼樣。那有一個人會真的把你拉下來,在他的 local 去安裝你的 client 端,server 端,db,真的去裝起來看看,你有沒有唬爛,有沒有真的寫的跟你網頁是一樣,所以這個會是這樣評分。那成績會以我跟助教的評分為主,當然我的評分比重會佔比較高,記得是 40%,另外三個助教會各佔 20%,就加起來 60%。

那另外的 10 分 final project 的分數其實很容易拿

  • 你只要有繳交 proposal 就有 2 分
  • 你只要 prototype 是活的,你 deploy 到網路上,我們去點它是活的就有 3 分
  • 那你的 mutual review 繳交就是可以拿到 5 分。當然這包含了兩個部分,一個是你真的有繳交,另外一個是會有 review 分數跟 review 的部分。

總而言之大概就是我們的成績,沒有考試,就是靠作業跟 final project。

結語與課前提醒

截圖 47

最後我再講一下,如果你在懷疑要不要修課,那第一個我想這絕對是一門很硬的課。因為我個人認為,我希望我既然花那麼多力氣準備這門課,我嘔心瀝血在教這門課,我希望同學就真的能夠學到東西。

我覺得如果你在一個學期內要同一門課學到東西,那就不應該同時修七八門課,你要同個時間修完把七八個東西學好,這裡面必然有至少四五個東西是簡單的,可能一個禮拜就可以學好。我沒有在暗示什麼課是這樣子,可是我就是這個意思,真的,我覺得每一門課應該都是十二學分,九學分,所以大家只要修三門課就二七學分,我覺得這樣比較合理。那有很多東西根本不需要修課,自己去學就好,或是你需要的時候再學就好,幹嘛學那麼多,對不對,大四或研究所同學應該可以感受到,你學了一堆東西都沒用,幹嘛學那麼多,不過沒辦法。

所以現在的教育制度就是這樣子,可是我還是要鑽一下,所以我覺得這門課就是要逆風一下,這門課就是九學分的 loading,可是沒辦法,學校最多只可以學三學分。所以剩下六學分請你從其他課去補,或者是你就不要修那麼多課。所以你自己想清楚,下面這個就不囉嗦了。

AI 工具與先備知識

截圖 48

  • AI 工具:你要用哪個 AI 工具,我會提供 Cursor Pro,Cursor Pro 一個月二十塊,所以它還有進階版更貴,當然沒有辦法跟它標那麼多。就是五個月到一月底,最近很有誠意,但應該只是用到十二月底。所以如果你忘記 unsubscribe,你還有一個月的時間忘記。那如果超過一月,你被扣錢,你不要來跟我揮,就表示你喜歡用,就繼續用,當然歡迎,可是你不想用就記得要 unsubscribe。
  • 先備知識:我需要先學,我覺得當然加減要知道。如果你不知道的話,我等一下第一個單元,等一下可能等不到,不過我還是會盡量教一點點,就是關於這個部分。那今天沒有講,我在下一節課也是會跟大家教這個基礎的語言。那就算今天沒有講,我相信這個講義已經在這邊,大家可以等一下自學一下也可以。那完全沒有 background 的人,我覺得真的是一個問題。不過你還是可以修啦,就是你可能在前半段的部分,你可能要稍微努力一點點,試著去 catch up。那我想我們還有五十分鐘的時間,那我會休息個十分鐘。那我等一下會示範一下,那大家可以感受一下,我等一下用 AI coding 去示範,寫一個 todo list,我覺得臺大同學的能力一定都可以做到。所以這樣的一個程度,可能會是頭一兩個禮拜的程度,所以你只要能夠,如果你完全沒有 background,只要能夠 catch up,我等一下的操作,我想還是可以。那後來可能會越來越硬,那你可能要真的要能夠花時間吸收我們上課教的東西。我們上課教的東西,again,我覺得很多都是知識性的東西,你只要聽過,然後有練習,都會,它並不是什麼需要非常強的數學頭腦,或是非常強的邏輯,或是什麼才能夠學會的,大家不要擔心這些事情。這個對,就是我希望大家可以理解。

課前準備清單

截圖 49

那最後如果你確認需要這門課,請盡速完成。這邊有些東西我們還沒準備好,先讓大家知道一下,盡量在本週前完成:

  1. 完成作業零:作業零不用繳交,主要我是要蒐集你的 GitHub 跟 Cursor 的帳號
  2. GitHub Repo 設定:這點大家可以明後天再做,昨天半夜才想到這事情,所以我還沒有把 template 弄好。我也還沒有確定我 template 要怎樣。總而言之我們希望你的作業是一個 GitHub repo,應該說這學期所有的東西都放在一個 GitHub repo,然後這 GitHub repo 裡面的所有的目錄架構,所有東西要 follow 我們的規定,這樣我們可以自動化幫你拉下來。你不要大小寫或是一些東西,就是自己創造出根本不一樣的東西,那我們拉不到你的東西,每年我們都要花很多力氣跟大家推這個東西。所以這個也沒有什麼困難,就是這邊有個影片,大家可以看一下這個影片,只是說我們的 template 容我再修改一下,再給你。
  3. 加入課程社團:那我們這個課程有個社團,那這個社團我想功用只有兩個:

* 第一個就是到時候你找不到人的時候,我在這邊讓大家在這個社團裡面去 match 一下。 * 第二個是在期末專題,我會希望大家在這個社團發一篇文,留下你到底做什麼東西的紀念。那其他的同學也可以透過在這個社團裡面的發文,去看到你做什麼去適用你的工具,因為有些東西我並不會公開。那當然這個社團只開放給有修課的同學,那沒有修課的同學當然我會索請加入,不過大部分的陌生人我是不會讓他加入,請大家知道一下。

不過還是本來是打算一個半鐘的講完,所以花了一點時間,那我們還是休息 10 分鐘到 11 點 25 分好了,那我們會繼續跟大家講這個第一個單元。

那關於這些獎勵去哪拿呢?我都有公告在 NTU Cool,大家可以自行去查看。