自我簡介 (現居 / 過去學 / 經歷等)
現居台南,大學就讀國立臺灣大學化學系(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 的主要原因:
- 經過初步的學習與實作,我確實喜歡學技術、打造產品、甚至 debug 的過程
- 遠端工作的潛力,有機會讓我在台南生活的同時,服務世界各地的客戶或使用者
我的長期目標是成為能獨立開發與營運產品的全端開發者,現階段特別希望在好想工作室深化後端開發能力。
CV: https://richardlin.io/about
你認為自學的定義是什麼?你是否有自學的經驗?
主動、主動、主動去掌握知識技能,實作出成果
我一直相信,「當徒弟準備好了,師父就會出現。」這不是什麼人緣或玄學,而是當一個人真心想學時,放眼望去皆是資源。至於是透過文件、書、影片、podcast、還是實體課程來學習,這都只是形式不同而已。
重點是主導自己的學習,我要學什麼、怎麼學、用什麼樣的資源與速度去學、學到什麼程度,都由我決定、執行,並由行動來驗收。
舉 programming 的例子,我做 VoiLoad這個 Chrome 擴充功能的時候,一開始我對 Javascript 不算很熟,擴充功能的架構也一無所知,是交叉詢問 AI、讀官方文件、做整合測試的過程中,逐漸把整個擴充功能打造出來。
另一個例子是學 DSA,我是透過閱讀演算法課本、刷 Leetcode 當練習、觀察 AI 如何優化我的解法、搭配 Leetcode 討論區的神人解法來逐步學會的,目前在沒有真人老師的情況下慢慢學到可以解一部分 medium 題的程度。
你對於「分享」的看法是什麼?是否有相關的經驗?
- 對我個人,這是成長的一部分。在準備分享的過程中,好的老師永遠比學生成長更多,因為如果要教 100% 的內容,自己可能要搞懂 500% 才行
- 對我所在的社群,這是回饋與貢獻。有緣人自有共鳴,剛好能幫到人我也很高興
- 只要不涉及營業秘密,高手會很在乎分享,因為那是高手認親的方式之一,也不怕其他人學走
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。這讓我發現後端真的很重要,表面上看起來是前期需求定義問題,但我相信需求一定會調整,好的架構一定是可擴充可維護的,才能用較少的工作來應對需求變更。
想來好想工作室的主要原因?
選擇好想工作室,主要有兩方面:
- 在模糊範圍中直接做中學,這是我最認同的學習模式
- 自學可以獲得知識,但「真實社群交流」對技術成長的重要性無可取代
每個人都可以上網接觸世界最頂尖的技術課程,但這裡有第一線工作的進駐者,有 mentor,有一起學習的同期學員,這一定會是半年期間中最珍貴的部份。
現在有種論調是,有 AI 就能速成工程師,甚至跳過工程師直接 vibe coding,junior 工程師沒用了,但這是危險的迷思。AI 是回應使用者「已知的未知」,但很難觸及「未知的未知」。就像沒有資安觀念的 vibe coder 洩漏自己的 API_KEY 到 GitHub,這些「未知的未知」往往只能通過真實交流才能察覺,而這正是好想工作室所在乎的。
為了確認這裡是否適合我,之前我直接過來拜訪好想工作室,實際體驗這個空間中的互動。雖然時間不長,但我可以明顯感受到學員之間的信任,彼此歡迎交流但也各自專注於目標。進駐者也願意分享他們在業界前線的見聞,而不僅是技術指導。
而最後,我相信好的社群必然互相貢獻,想要什麼就先貢獻什麼。如果有完全零經驗的同學有需要,我很樂意分享我已知的 Python、演算法分析或 Git 版控知識給大家,成為南部技術社群的一份子。
回憶過去,感恩、生氣、沮喪的經驗各描述一件事
感恩
在我大學畢業的時候,自雇者的工作型態難以和同齡人互相參考優化,但幸運在其他課堂上遇見了自雇者前輩 Snow,她的指導讓我扎實打底了工作基本功,例如待人接物的原則與小技巧,至今我仍感念在心。她的人生階段比我超前太多,連請她吃飯也不恰當,只好在每次見面帶點小禮物之外,再把這些經驗分享給我的後輩。有些人根本是無法回報的,那就把這些恩情再傳遞下去。
生氣
婚禮籌辦過程中,有些長輩在未知會我與伴侶的情況下擅自大改禮金收受規則,影響金額不小,這無視主辦人是誰的做事方法實在荒謬。我和伴侶可以接受彼此有情緒,但遷怒不可接受。我們會讓對方知道,生氣並不是對方的錯。對空氣咒罵一頓後,還是可以坐下來估計影響範圍、盤點可能的處理方式,並為未來與長輩的互動模式設下界線。最後還是會發現,他們也不是故意,只是做事太雷,畢竟家人還是感情為重,就順水推舟也調整另一部分的禮金規則,達到平衡。
沮喪
在我的前一份工作中,我是醫美診所的共同創辦人,在團隊共同奮鬥一年半後終於進入客源穩定、金流健康的階段。但最後,醫師創辦人沉迷投資,已無心經營事業,我思考後決定離開。我難以形容這些努力以如此愚蠢的方式破滅有多令我傷心,這一切也沒有我能努力的餘地,但這也讓我重新認識到,長期價值觀的對齊,重要性遠超過利益對齊。而我在技術上的投入,就是離職後拿這份工作本來所佔的時間培養出來的,畢竟終於有大把時間可以研究自己有興趣的議題。現在的我,不可接受我的事業核心技術集中在另一人身上,我自己一定也要懂得深入,這也是我研究技術的動力之一。這段故事,可以參考我的這篇與這篇文章。
請描述之後工作想要在的城市
首選是台南,有幾個層面的考量:
- 我和伴侶都是台南人,當初從北部搬回故鄉就是為了與伴侶一起生活,至今我依然認為這個選擇非常正確。
- 軟體產業存在大量遠端工作、接案與事業發展的機會,雖然 junior 階段我希望透過 inhouse 工作來加速成長,但一旦超過這個階段,去挑戰台灣或世界上的事業機會是理所當然的。能讓我在伴侶身邊追求事業成就的可能性,正是軟體行業對我最具吸引力的地方。
- 遠端工作的可能性,也讓我有機會把經驗與能量帶回台南,而不是都被磁吸到北部或國外
- 回到培訓階段的話,好想工作室就位於台南,這裡的培訓不需要我遠走高飛去其他縣市,就能讓我實體和業界前輩接觸,這很重要。
請分享你最近用到,覺得很好用的數位工具(網站、電腦程式、手機 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,也記錄一下我在兩小時內的自學與開發過程。