Surviving the AI Tide: Insights from NTU Web Programming

前言 / Introduction Hmm… 許久未動筆,最近軟體開發這片海被 Opus 掀起了大浪,現今,許多不具備無開發背景的使用者,僅憑 AI 就能將想法轉成一個完整個 APP / Web 等應用。 面對如此激進的環境,該如何與 AI 共存?比起當個無頭蒼蠅,我推薦大家可以參考這門課: NTU Web Programming (2025.09) 授課老師:台大電機系 黃鐘揚教授 Youtube: NTU Web Programming 2025 課程心得 這門課的核心並非將你打造成頂尖大神,而是透過啟發與引導,教會你如何與 AI 進行高效的「協同開發」。 在 AI 浪潮氾濫的時代,開發者必須學會自救,才不至於被淹沒: 背景知識 (Background Knowledge) —— 你的「游泳圈」 背景知識的紮實程度,決定了你指揮 AI 的速度。一個擁有前端框架經驗的工程師,因為熟悉底層邏輯與現成函式庫,當別人在用 AI 緩慢地「造輪子」時,他的 AI 已經在跑道上疾速奔馳了。 執行決策 (Decision Making) —— 你的「生存指南」 開發過程中,判斷優先權(P0/P1)與具備宏觀視角至關重要。在多人協作的場景下,如何界定 AI 開發的顆粒度、預留系統兼容性、並在適當時機止損,皆仰賴開發者的工程思維。 這兩點正是「善用 AI」與「被 AI 牽著走」的最大分水嶺。此外還有想像力(需求的轉化)與品味(判斷價值),這些才是人的核心競爭力。 結論 值得花時間把黃教授的課看過一遍。從開發流程、各階段的溝通策略,到實際動手做專案,這門課能幫你快速補齊在 AI 時代所欠缺的開發者素養。

March 18, 2026 · 1 min · 62 words · Daniel Ho

AI Agents, Changing Coding Habits, and a Bit of Engineer Anxiety

前言 / Introduction 聊聊發生的小事情:過去三個月,我已經不曾動手寫出完整一個功能。 從 Cursor 剛出來還得靠 TDD、SDD 啥的輔助,到 MCP、Skill 大亂鬥,現在都雲淡風輕了。然後 OpenClaw 直接殺出一條血路,一個小小龍蝦揮舞著拳頭,大廠們都快嚇死,工程師的飯碗被盯上了。 My Coding Habits Have Truly Changed 還是挺懷念當年手刻程式碼的過程;現在只要跟 AI 聊聊天、甚至讓它自己想辦法,上個廁所回來就搞定了。 少了親手 coding 的步驟,工程師好像就只剩下「畫押」的份——看似變輕鬆,其實更累,因為得花更多時間與精力去發掘更高的價值,畢竟老闆錢都花了。 花時間在更高的抽象層,本來就是工程師該負責的,只是以前被雜事塞滿,很多事只能遷就。現在這些可以交給 AI Agent,我們才有時間坐下來討論與設計。 Review is More Important Than Ever 當這些瑣事都交給 AI 後,工程師就可以躺平了嗎? 實際上不行。AI 產物 還是要有人 review。 我常遇到它寫了四、五十行,實作上兩三行就能搞定。 不是說 AI 爛,而是當你有更高維度的視角,能看見更多、想得更深,review 就變得必要。 就像每個 PR Review 都是在互相建立信心、讓同事了解你在意什麼;現在換成你和 AI 的來回過程。 Summary 沒什麼大道理,就是:試著用、試著想,可能才是正解。 AI 接下來大概還會再洗牌一次,沒人知道是年底還是下個月,說不定明早睜開眼,世界就不一樣了。

March 2, 2026 · 1 min · 56 words · Daniel Ho

從草臺班子到架構思維:為什麼我要開始學 System Design

前言 / Introduction 工作上經常會寫一些自動化小工具,去解決日常的問題,開發過程不免俗與其他同事的專案有重疊的功能,因此會互相 Code Review,但此時常會覺得羞於見人,既沒有 Diagram 描述架構,文件描述又異常地空乏,總覺得少了點甚麼。 一開始我會覺得:「反正只是個小工具嘛」,但當聽到大神們聊起「模組設計 OOP」、「可維護性」、「容錯設計」等架構問題時,才意識到,我寫的不是工具,是妥協出來的程式碼。 初期的盲點:解決問題 ≠ 解決得好 對我來說,小工具只要「能跑」、「能交差」,就算完成。但這樣的 mindset 讓我忽略了幾件事: 沒人看得懂的 code,會變成團隊的負債 架構思慮不周,容易留下技術債 擴充性很低,重構等於打掉重練 沒有良好的錯誤處理、資源釋放、IO timeout 大神們思考的是「系統的運作」,而不是「功能的存在」 有一次 Code Review,學長只用兩句話,就打醒我: Function 過度耦合,缺乏可維護性和可擴展性 架設方式過於複雜,沒考慮使用者的背景 這時我才發現,System Design 不是只有在面試時才會遇到的 buzzword,它是真正在工作中,讓專案變得可靠、可維護的核心能力。 我為什麼決定開始學習 System Design 技術長大了,但腦袋沒長大:寫得出複雜的程式碼,但無法抽象出整體結構 專案開始有接觸多人合作:你不能只靠自己看懂,還要讓別人接得下去 我想寫出讓人放心的程式,而不是「現在能跑,之後爆炸的程式」 學習路線 我規劃一個 System Design Study Plan,希望能夠利用空閒的時間去補齊這些知識。 週次 主題 核心關鍵詞 重點問題 Week 1 Scalability & Load Balancer Vertical / Horizontal Scaling, Auto Scaling, Round Robin, IP Hash 如何應對高併發?如何分散負載? Week 2 Cache 設計與策略 Read-Through, Write-Through, TTL, LRU, Redis 如何用 Cache 提高效能又保持一致性? Week 3 Database 選型與 Sharding SQL vs NoSQL, Sharding, Replication, CAP 什麼情況選 MySQL?什麼情況拆 DB? Week 4 Data Consistency & Message Queue Eventual Consistency, Kafka, RabbitMQ, Idempotency Key 系統怎麼確保資料一致?怎麼防重複? Week 5 Rate Limiting & Circuit Breaker Token Bucket, Leaky Bucket, Retry, Backoff, Hystrix 如何保護系統不被濫用或雪崩? Week 6 CDN & Global System Design Cloudflare, Geo DNS, Edge Cache 如何設計給全球用戶?如何用 CDN 加速? Week 7 Monitoring & Reliability SLA, SLO, SLI, Prometheus, Grafana, Healthcheck 如何設計一個穩定且可觀察的系統? Week 8 Design Real Systems & Interview Case Design YouTube, Messenger, TinyURL, LLM Infra 如何答出一個完整的系統設計題? 結語 System Design 不只是為了寫出能跑的系統,而是為了寫出能活得久的系統。 ...

June 23, 2025 · 1 min · 170 words · Daniel Ho

113 年度研替小記

前言 / Introduction 在研究所畢業在即,相信許多人跟我一樣,被未來的迷惘給殺地措手不及,而沒有相對應職涯規劃。 在經濟現實和兵役壓力雙重夾擊下,我開始思考:研發替代役,也許是個不錯的出口? 那我又是怎麼規劃接下來的人生?中間又跌了哪些坑?就讓我一一分享吧~ 找研替的具體行動 將四個月的兵役,延長至一年六個月,從而換取直接在公司工作的機會。 研替時程、用人單位 通常以畢業前的最後一個暑假,用人單位集會釋出職缺。 以我為例,預計在114年的六月畢業,那113年的8月暑假,就可以開始找職缺。 通過下方的用人單位網路發表查詢,即可看有哪些公司、研究單位、政府機關等等 投遞履歷 如果想去MTK, RTK 等等IC大廠,必須上網查詢,往年的投遞履歷以及面試的時程,才不會錯過。 大公司: 通常暑假(七、八月)就會開始面試 校招宣傳: 通常會安排在九、十月上旬 就業博覽會: 通常安排在二月、三月下旬 校招宣傳和就業博覽會,HR通常是把機會留給畢業即就業的新鮮人,也就是不卡兵役的即戰力。 Notes: 所以想要申請研替最好提早一個學期,就開始打聽,好好把握時間。 準備面試 面試準備,大致有下面幾種: 根據職缺描述,複習相關的知識 刷題、刷題、刷題: 考古題很重要,所以說三次!!! 兩種程式語言,建議要有 C/C++ Leetcode Top Interview 150 LeetCode 75 Daliy challenge Weekly Contest or Biweekly Contest 準備履歷 整理作品 Linkedin, GitHub 工作、實習經驗 發表過的論文、碩論題目(方向) 像我當初找研替(軟體與韌體相關),除了擅長Python以外,但為了更多的面試機會,又加入了C++,作為第二程式語言,刷題的時候,就可以切換練習,增加熟悉度。 而準備履歷,就是把求學歷程攤開來,讓大家檢視,哪怕只是課堂作業,包裝後也會是一份有趣的經歷,不要怕丟臉,多展現自己。 心境變化與成長 在整個找研替的過程中,我經歷了不少情緒的起伏。一開始滿懷不安,對未來的選擇感到焦慮,總覺得自己是不是「不夠好」,才需要靠研替來拖延人生的進度。 在收到錄取通知前,我前前後後投了不下數十個職缺,其中包含研替與預聘的機會。每一次面試,都是一次對自己的重新認識與審視,也讓我在過程中慢慢釐清真正想追求的方向。從一開始被動地「找一個落腳處」,轉變為主動地「尋找一個起點」。也讓我重新回想起,當初選擇念研究所的其中一個初衷,就是希望找到一份與自己的專業和學歷相匹配的工作。 當我收到錄取通知的那一刻,雖然它不是最理想的職缺,但我很清楚,那是自己一步一腳印努力換來的成果。或許人生的本質,就是在不斷的妥協中前進,但即便是在命運的玩笑裡,我們仍然可以做出屬於自己的選擇 —— 因為這是你的人生,不是別人的。 結語 回頭看這一路,從猶豫要不要找研替,到投遞履歷、準備面試,再到最後真的錄取,過程中經歷了不少挫折和懷疑。 研發替代役不一定適合每個人,但如果你也正面臨「畢業後要去哪裡?」這個經典難題,也許可以先靜下心來,思考自己真正重視的價值是什麼。希望我的經驗可以給你一點方向或靈感,不論你最後選擇的是什麼,重要的是——那是你想走的路。

May 19, 2025 · 1 min · 62 words · Daniel Ho