好想工作室 Backend Camp T15 申請文件 – 林柏儒
Hi JYu,我的申請文件如下:
Richard Lin 林柏儒,2025-05-24

自我簡介 (現居 / 過去學 / 經歷等)

現居台南,大學就讀國立臺灣大學化學系(2016年畢業)。近一年學習 programming,已完成 CS50 課程並實作了 threads-like social app(前端 React,後端 Python Django)和 chrome extension(已上架 Chrome Web Store,Github 請看這裡)。

經歷:

  • 金蘋果美學診所共同創辦人(2023-2024):負責營運、策略與財務,將瀕臨倒閉的診所轉虧為盈
  • 簡報藝術烘焙坊 SlideArt 設計總監(2014至今):負責簡報設計訂製專案,Nike、Google、BMW、Cartier 等品牌都曾是我的客戶

在這些經歷中,無論是問題解決、團隊合作、溝通表達等泛用技能,或設計、財務、行銷、公司經營等專業領域,皆為自學而成。

選擇 programming 的主要原因:

  1. 經過初步的學習與實作,我確實喜歡學技術、打造產品、甚至 debug 的過程
  2. 遠端工作的潛力,有機會讓我在台南生活的同時,服務世界各地的客戶或使用者

我的長期目標是成為能獨立開發與營運產品的全端開發者,現階段特別希望在好想工作室深化後端開發能力。

CV: https://richardlin.io/about

你認為自學的定義是什麼?你是否有自學的經驗?

主動、主動、主動去掌握知識技能,實作出成果

我一直相信,「當徒弟準備好了,師父就會出現。」這不是什麼人緣或玄學,而是當一個人真心想學時,放眼望去皆是資源。至於是透過文件、書、影片、podcast、還是實體課程來學習,這都只是形式不同而已。

重點是主導自己的學習,我要學什麼、怎麼學、用什麼樣的資源與速度去學、學到什麼程度,都由我決定、執行,並由行動來驗收。

舉 programming 的例子,我做 VoiLoad這個 Chrome 擴充功能的時候,一開始我對 Javascript 不算很熟,擴充功能的架構也一無所知,是交叉詢問 AI、讀官方文件、做整合測試的過程中,逐漸把整個擴充功能打造出來。

另一個例子是學 DSA,我是透過閱讀演算法課本、刷 Leetcode 當練習、觀察 AI 如何優化我的解法、搭配 Leetcode 討論區的神人解法來逐步學會的,目前在沒有真人老師的情況下慢慢學到可以解一部分 medium 題的程度。

你對於「分享」的看法是什麼?是否有相關的經驗?

  1. 對我個人,這是成長的一部分。在準備分享的過程中,好的老師永遠比學生成長更多,因為如果要教 100% 的內容,自己可能要搞懂 500% 才行
  2. 對我所在的社群,這是回饋與貢獻。有緣人自有共鳴,剛好能幫到人我也很高興
  3. 只要不涉及營業秘密,高手會很在乎分享,因為那是高手認親的方式之一,也不怕其他人學走

Programming 部分,我在發給朋友們的電子報中,這封信這封信都大量提及我的程式學習經驗。之前的工作中,簡報設計相關的 youtube 影片分享我都整理在 blog ,而診所經營的部份也有訪談分享

再提一個特別的經驗,在簡報團隊中,我主導建立了團隊 wiki 知識庫,記錄重要流程與技術細節。後來這個知識庫不僅大幅提升新同事的訓練效率,讓我能直接引用相關文章進行教學,也成為團隊的長期知識資產,讓關鍵知識不因人事異動而流失。這類內部分享看似沒有流量,卻依然很有價值。

描述你對於「軟體工程師」的看法

SDE 是數位世界的 builder,而我想成為能用技術去解決真實問題、回應真實需求的 builder。

我花時間打造 VoiLoad 這個 Chrome 擴充功能,始於我自己「下載 Facebook 語音訊息」的需求。一查之下,其實 Reddit 上很多人問過這個問題,也有人分享用 Chrome 開發者工具處理的方法。我認為這個作法絕對可以自動化,但現存的另一個 Chrome 擴充功能評價只有 2 顆星,實測無法運作,不如我來寫一個吧!

這成為我工作的核心動力,即便有時不小心 debug 到半夜,我也不覺得那很煩,反而是一連串解謎的過程。我是偵探,程式死了,要從哪裡推敲怎麼死的、兇手是誰、怎麼復活?這個過程中我學會了測試、logger、從 error log 推測問題來源、Git,以及各種我本來不知道的軟體知識。

過程中有一個技術挑戰:我如何獲得語音訊息的持續時間?這是產品 UX 的核心部分。一開始我去比對 HTTP request header 與 URL 的模式,但這在 Facebook 更新機制後馬上壞掉。最後我找到「HTML5 Audio API 下載 metadata」這種方法,大幅提昇產品 robust 程度,這是我強烈體驗到技術價值的時刻。

在閱讀 Clean Code 的時候,我一邊驚嘆作者的工藝與思想,一方面也了解我不是這種本格派的匠人。我的思想更貼近 Paul Grahan,是創業者角度的 builder,這大幅度影響我怎麼排序 feature/fix/refactor 的工作。核心惡性 bug 馬上修,高價值 feature 優先,軟體架構跟著使用者規模與需求成長重構,而不是過早最佳化,後來才發現前面定義的架構要大改。

坦白說,我在開發過程一直很想重構成 typescript,並建立 CI/CD 機制。但我知道,在我的擴充功能開始有成千上萬人使用、需要進一步擴增模組之前,這些都是無效工作。我隨時可以去學 typescript,但我要先專注在對使用者有用的工作,這才會讓產品進入到下一階段,而不只是技術上升級,卻沒有交付更多價值。

我想走的,是始於 builder、終於 entrepreneur 的道途。

為什麼想學習後端的技術?有學習過 Web or Mobile 的技術嗎?

動機:

  • 我的長期目標是成為能獨立開發與營運產品的全端開發者,以現在的時間點,跟投入前端或使用全端框架相較,我認為先扎實做後端工程師,長期而言會是更好的發展路徑
  • 想獨立開發產品的話,基於我現階段的願景與技能模組,後端是是重中之重,為此我願意賭上長達半年的正職時間來打好這個技術基底

學習經驗:

  • CS50 系列的延伸 web 課程實作是使用 Python Django 全端框架來做 social app,但為了不受框架限制,我再重構成前後端分離的架構,後端 Django 前端 React,兩者用 JSON 資料溝通,這個過程讓我深刻感受到 API 設計好壞的影響。
  • 舉例來說,我當時想增加一個「前端顯示讚數」的功能,結果因為前面 API 沒規劃好,後端就需要跟著大改資料庫結構和 ORM 查詢,才能給出合理的 JSON response。這讓我發現後端真的很重要,表面上看起來是前期需求定義問題,但我相信需求一定會調整,好的架構一定是可擴充可維護的,才能用較少的工作來應對需求變更。

想來好想工作室的主要原因?

選擇好想工作室,主要有兩方面:

  1. 在模糊範圍中直接做中學,這是我最認同的學習模式
  2. 自學可以獲得知識,但「真實社群交流」對技術成長的重要性無可取代

每個人都可以上網接觸世界最頂尖的技術課程,但這裡有第一線工作的進駐者,有 mentor,有一起學習的同期學員,這一定會是半年期間中最珍貴的部份。

現在有種論調是,有 AI 就能速成工程師,甚至跳過工程師直接 vibe coding,junior 工程師沒用了,但這是危險的迷思。AI 是回應使用者「已知的未知」,但很難觸及「未知的未知」。就像沒有資安觀念的 vibe coder 洩漏自己的 API_KEY 到 GitHub,這些「未知的未知」往往只能通過真實交流才能察覺,而這正是好想工作室所在乎的。

為了確認這裡是否適合我,之前我直接過來拜訪好想工作室,實際體驗這個空間中的互動。雖然時間不長,但我可以明顯感受到學員之間的信任,彼此歡迎交流但也各自專注於目標。進駐者也願意分享他們在業界前線的見聞,而不僅是技術指導。

而最後,我相信好的社群必然互相貢獻,想要什麼就先貢獻什麼。如果有完全零經驗的同學有需要,我很樂意分享我已知的 Python、演算法分析或 Git 版控知識給大家,成為南部技術社群的一份子。

回憶過去,感恩、生氣、沮喪的經驗各描述一件事

感恩

在我大學畢業的時候,自雇者的工作型態難以和同齡人互相參考優化,但幸運在其他課堂上遇見了自雇者前輩 Snow,她的指導讓我扎實打底了工作基本功,例如待人接物的原則與小技巧,至今我仍感念在心。她的人生階段比我超前太多,連請她吃飯也不恰當,只好在每次見面帶點小禮物之外,再把這些經驗分享給我的後輩。有些人根本是無法回報的,那就把這些恩情再傳遞下去。

生氣

婚禮籌辦過程中,有些長輩在未知會我與伴侶的情況下擅自大改禮金收受規則,影響金額不小,這無視主辦人是誰的做事方法實在荒謬。我和伴侶可以接受彼此有情緒,但遷怒不可接受。我們會讓對方知道,生氣並不是對方的錯。對空氣咒罵一頓後,還是可以坐下來估計影響範圍、盤點可能的處理方式,並為未來與長輩的互動模式設下界線。最後還是會發現,他們也不是故意,只是做事太雷,畢竟家人還是感情為重,就順水推舟也調整另一部分的禮金規則,達到平衡。

沮喪

在我的前一份工作中,我是醫美診所的共同創辦人,在團隊共同奮鬥一年半後終於進入客源穩定、金流健康的階段。但最後,醫師創辦人沉迷投資,已無心經營事業,我思考後決定離開。我難以形容這些努力以如此愚蠢的方式破滅有多令我傷心,這一切也沒有我能努力的餘地,但這也讓我重新認識到,長期價值觀的對齊,重要性遠超過利益對齊。而我在技術上的投入,就是離職後拿這份工作本來所佔的時間培養出來的,畢竟終於有大把時間可以研究自己有興趣的議題。現在的我,不可接受我的事業核心技術集中在另一人身上,我自己一定也要懂得深入,這也是我研究技術的動力之一。這段故事,可以參考我的這篇這篇文章。

請描述之後工作想要在的城市

首選是台南,有幾個層面的考量:

  1. 我和伴侶都是台南人,當初從北部搬回故鄉就是為了與伴侶一起生活,至今我依然認為這個選擇非常正確。
  2. 軟體產業存在大量遠端工作、接案與事業發展的機會,雖然 junior 階段我希望透過 inhouse 工作來加速成長,但一旦超過這個階段,去挑戰台灣或世界上的事業機會是理所當然的。能讓我在伴侶身邊追求事業成就的可能性,正是軟體行業對我最具吸引力的地方。
  3. 遠端工作的可能性,也讓我有機會把經驗與能量帶回台南,而不是都被磁吸到北部或國外
  4. 回到培訓階段的話,好想工作室就位於台南,這裡的培訓不需要我遠走高飛去其他縣市,就能讓我實體和業界前輩接觸,這很重要。

請分享你最近用到,覺得很好用的數位工具(網站、電腦程式、手機 App等等)

雖然其他申請者可能也提 AI 提到爛了,但我還是要承認絕對是 Claude Desktop!

這個工具大幅改變了我的自學方式:

  • 先用 AI 存取官方文件後問問題,實際嘗試後再深入讀或 google / stackoverflow
  • 沒那麼明確範圍的問題,也可以丟出來探索潛在關鍵字
  • 訓練資料可能包含很多 Leetcode 題,回答品質非常好,可以提出多種寫法的時空複雜度分析,對演算法學習很有幫助

Programming 的部份也有所調整:

  • 把 codebase 加入上下文後,直接畫出 flow chart 來幫助我掌握模組、函數間的資料流
  • 如果是資料庫 schema,還可以直接用 mermaid 畫出 ER diagram
  • 先準備好測試案例,AI 的 code 先通過測試再回頭優化,沒通過可以 debug 或直接捨棄重來
  • 基於幻覺特性,Git branch 的使用變得頻繁且嚴謹,讓我隨時可以回退版本
  • 吃到飽計價模式 + MCP 功能,相較其他 AI IDE 更鼓勵我大量使用,讓我沒有後顧之憂的探索與 AI 協作的方式
  • 但最好不要放手讓 agent mode 狂寫 code,很容易寫出大量不必要的額外設計,導致重構複雜度顯著增加

使用 Claude Desktop MCP programming 的方式介於 chat 和 AI IDE 之間,很期待在 Backend Camp 中分享這些經驗,以及和其他學員交流不同的 AI 協作方式。

描述你過去深入研究的主題(不限課業、興趣或是與朋友討論而進一步研究都可以)

在簡報設計領域,我已經分享過的部分內容整理在我的 blog,這些專業領域知識就先不贅述。以下我會大致說明簡報設計的自學過程,當初如何從一個社團興趣,發展成市場上報價相當高的設計師。

整個過程經歷幾個關鍵:

  • 基於興趣去尋找社群資源,加入學校的英語演講社
  • 社團學長姊教學入門
  • 自己成為教學長來帶學弟妹
  • 整理作品並公開分享心得
  • 接案接觸市場需求
  • 極大量的實戰與復盤
  • 和同業朋友交流心得
  • 向前輩學習更底層(溝通、設計領域)的心法、方法與技法

以上除了社團部分,通常是同時發生的。這些節點會像飛輪一樣,分享觸及會累積受眾,裡面一部分會是商業機會,商業機會帶來實戰經驗、市場回饋與作品,作品又可以整理分享,成為一個正向循環。

其中冷啟動的關鍵在於刻意練習並發表,和 side project 很類似。一開始程度自然不會太好,但要開始才有機會走到現在的程度。

至於心法、方法與技法的學習順序,我的理論是「貪婪學習」:直接學現在就要用的東西,底層內功先不管,非常類似貪婪演算法。這種作法和學校中循序漸進的教學大相逕庭,但在我的實戰經驗中非常有效,因為同樣數量的學習素材,交換學習的先後順序其實不會影響花費總時數太多,但立刻派上用場的學習可以馬上透過實戰回饋來加速,反而學的更快。

那底層內功怎麼辦?其實絕對不會跳過,因為只靠表層技法很快就撞牆了。如果分析撞牆原因是因為不懂原理,那就是學習底層知識的時候,這時學習動力會更高,不會空學一堆抽象理論而感到茫然。經常遇到的狀況是,底層還有更底層,這時就會像 call stack 一樣,一路鑽到最深的原理。

將這套方法論應用到後端學習上,我會先從框架開始掌握。要用框架當然要去熟悉語言,而 API 設計會先從需求開始界定,接著很快就會觸及資料庫查詢與優化,後面雲端容器化佈署也是必然的,才能形成一個可用的後端服務。這個過程會打開無數學習支線,我打算先做出最粗糙但可行的後端服務,再回頭探索各種優化方法,透過前後對照來確認這些優化是否真的有效。

我的學習方法論大致如此,剩下的就交給時間。

請描述什麼是 API?並根據你的描述試著實作一個 API。請盡可能紀錄實作的過程。

API 是一組預定義的程式互動模式,規範了 client 如何提出請求,以及 server 如何回應。

舉之前 social app 中 Web API 的例子,這個 urls.py 檔案寫好了請求連結,搭配 GET / POST / PATCH / DELETE 等不同請求方法,就可以觸發我在 views.py 檔案中寫好的後端邏輯,並取得對應的 JSON response。

由於這已經是年初時寫的,距離現在也有段時間了,我今天就花點時間做個我一直想找時間做的 get_time MCP Server,這也是 API 的一種。

我在使用 AI 管理生活時,非常需要 AI 了解我現在的時間。這是個非常簡單的需求,但意外的不容易只用內建功能實現,就算搜尋網路也要消耗很多資源,我決定自己寫一個。

首先我參考以下資源:

根據這兩個資源,我建立了 get-time 專案,與 AI 協作產出可用的 API,並測試成功。與 AI 協作的完整對話請參考這裡,包含需求討論、debug 的過程都有詳細記錄。

其中主要的挑戰在於:

  • 第一步要先了解 MCP 本地佈署的方式,包含 uv 套件的使用方式等
  • 搞懂官方測試套件的使用方式,建立程式測試機制
  • 確認需求,先規劃時區的處理方式,最後使用能直接取得使用者時區的 datetime 方法
  • 決定輸出格式,考量是提供給 AI 的參考資料,ISO string 包含的資訊最完整
  • 最後則是在程式通過官方測試套件後,也在自己的 Claude Desktop 實測成功

如果需要非常完整的話,之後會考慮加入 datetime 套件出錯時的 try-exception 機制,但基於這是個非常知名的套件,我想優先度不高。目前 MCP 多數是 local server,整理成 package 給使用者下載。如果要做成雲端服務的話,或許做個 Web API 給 client fetch 也可以。

很高興能藉由這個機會,完成一個我自己有強烈需求的 MCP Server,也記錄一下我在兩小時內的自學與開發過程。