上週結束時,我在週報裡寫道「放下固有習慣,擁抱 Kotlin 哲學」。
這週,我真正體會到這句話的含義。
第二週的變化很明顯。程式碼產出比第一週大幅增加。功能完成了專案管理、資料庫、狀態管理、錯誤處理、UI 元件。每次重構都讓程式碼更簡潔。Debug 時間從幾小時降到幾十分鐘。開發信心從有點擔心變成非常有把握。
是什麼造成了這樣的轉變?
答案是我停止了對抗,開始了學習。
第一週,我像是揹著 20 公斤的登山包爬山:
// 第一週的程式碼風格
class ProjectManager {
// 帶著 Spring 思維寫 KMP
@Autowired lateinit var repository: ProjectRepository
@Transactional
fun saveProject(project: Project) {
// 200 行的「企業級」邏輯
}
}
我在試圖把過去 10 年的經驗「移植」到 KMP。
結果呢?框架不支援就自己造輪子。慣例不同就強行適應。生態不熟就繞路解決。
這週,我放下了包袱:
// 第二週的程式碼風格
class ProjectRepository(private val database: GrimoDatabase) {
suspend fun save(project: Project) =
database.projectQueries.insert(project.toDb())
}
30 行解決了之前 200 行的問題。
關鍵轉變就是從「我知道怎麼做」變成「KMP 怎麼做」。
這週最大的收穫是創造了 ARS(Architecture Research Specialist)角色。
以前的學習方式很痛苦。遇到問題就 Google,然後看 Stack Overflow,試錯,不 work 就繼續 Google,找到過時的解法,勉強能用但不知道是不是最佳實踐。要花 2-3 天。
有了 ARS 之後就不一樣了。定義問題,讓 ARS 研究,30 分鐘後就得到 3-5 個可行方案、每個方案的實際案例、2025 年的最新實踐、具體的實作程式碼。只要 1-2 小時。
我寫了 200 行的 MigrationManager。結果 ARS 研究發現 SQLDelight 2.0 有 deriveSchemaFromMigrations
。我在用 2023 年的方式寫 2025 年的程式。Cash App 只用 30 行就搞定。
結果呢?程式碼大幅減少,效能顯著提升,維護成本大幅降低。
Compose Desktop 的錯誤追蹤像謎團。ARS 研究發現 Result Type Pattern 是 KMP 的最佳實踐,Sealed Class 完美支援跨平台,try-catch 在 KMP 已過時。
除錯時間大幅縮短,iOS 相容性問題提前解決,錯誤處理變得優雅。
MVI、MVP、MVVM 選哪個?ARS 研究發現 JetBrains 官方推薦 MVI + StateFlow,Compose 天然支援單向資料流,50+ 團隊的 Cash App 也用這套。
狀態管理 bug 大幅減少,UI 更新可預測,測試變得簡單。
這週我悟出了重新學習一套生態系統的心法:
「我有 10 年經驗,這應該很簡單」這是錯誤心態。
「KMP 是新世界,讓我重新當學生」這才是正確心態。
當我放下「資深工程師」的身份,反而學得更快。
不要對抗框架,自己造輪子。要擁抱框架,相信框架。
deriveSchemaFromMigrations = true // 相信框架
框架的設計者比我更了解框架。
不要試圖一次學會整個生態系統。
第一週學基礎語法,第二週學核心框架,第三週學進階特性,第四週做最佳化。每週專注一個主題,深入學習。
不盲信教程,要看實際案例。
Cash App 有 50+ 開發者,驗證了 MVI + StateFlow。Expedia 從 Room 遷移到 SQLDelight。Signal Desktop 證明了 SQLite 方案可行性。
真實案例比理論更有說服力。
第一週平均功能開發需要幾天,第二週幾小時內就完成。Debug 時間佔比從很多變成很少。重構信心從不敢輕易動變成有信心重構。程式碼從每個功能需要很多行變成簡潔許多。測試覆蓋率也明顯提升。
第一週的程式碼充滿擔心、防禦、過度設計:
try {
try {
// 業務邏輯
} catch (e: SpecificException) {
// 處理
}
} catch (e: Exception) {
// 再處理
} finally {
// 清理
}
第二週的程式碼簡潔、自信、恰到好處:
// 簡潔、自信、恰到好處
repository.getProject(id).fold(
onSuccess = { /* 處理成功 */ },
onFailure = { /* 處理失敗 */ }
)
第一週的一天很痛苦。早上 9 點開始寫功能,10 點遇到問題,11 點還在 Google,中午找到可能的解法,下午試錯,傍晚勉強能 work,但不確定是否最佳實踐,帶著疑慮下班。
第二週就不一樣了。早上 9 點開始寫功能,9 點半遇到問題,10 點 ARS 給出研究報告,10 點半選定方案實作,11 點半功能完成、測試通過。下午開始下一個功能,4 點完成兩個功能,5 點重構優化,6 點滿意地提交程式碼。
這週我的「團隊」:
我負責產品決策,ARS 負責技術研究,SA 負責架構設計,DEV 負責實作細節,QA 負責品質保證。
每個 AI 角色都有專門的能力,組成了一個「虛擬團隊」。
grimo/
├── docs/
│ ├── decisions/ # ARS 的研究報告
│ ├── learnings/ # 學習筆記
│ ├── patterns/ # 發現的模式
│ └── mistakes/ # 踩過的坑
├── CLAUDE.md # AI 協作指南
└── templates/ # 程式碼模板
每個學習都被記錄,形成組織記憶。
想法出現,ARS 研究,原型實作,測試驗證,重構優化,進入下個想法。
幾小時內完成一個完整循環。
不只是技術本身,還要考慮生態系統的成熟度、社群的活躍度、學習資源的豐富度、AI 的熟悉程度(對,這很重要)。
與其死記 API,不如建立高效的學習方法(如 ARS)、掌握查找資訊的能力、培養技術決策的框架。
即使是一人公司,也可以有「團隊」。AI 助手團隊(不同角色)、開源社群(學習案例)、技術部落格(他人經驗)。
每個框架都有其設計哲學。Spring 是企業級、配置驅動。Django 是 batteries included。Rails 是約定優於配置。KMP 是簡潔、類型安全、跨平台。
理解並擁抱,而非對抗。
2 週前我覺得「KMP 好難,文件不全,生態不成熟,坑很多...」
現在我覺得「KMP 真優雅,程式碼簡潔,類型安全,開發體驗很好!」
同樣的技術,不同的心態,完全不同的體驗。
這週完成了專案管理功能、資料庫 Migration 系統、錯誤處理框架、狀態管理架構、UI 元件庫。
如果沒有重新學習,可能要花 2 個月。
最大的改變是信心。
第一週每寫一行都擔心是不是錯的。第二週知道什麼是對的,為什麼是對的。
這種信心來自於理解了生態系統的設計理念、看到了成功案例的驗證、掌握了最佳實踐。
這週我深刻體會到,在變化的世界裡,學習能力比知識本身更重要。
保持初心,永遠當自己是新手。系統學習,用 ARS 這樣的系統化方法。實踐驗證,學了就用,用了就懂。分享記錄,寫下來,教別人,記更牢。
「重新學習不是歸零,而是升級。」
關於作者:Sam,一人公司創辦人。正在打造 Grimo,一個智能任務管理和分配平台。
專案連結:GitHub - grimostudio