2025 年的文章
goroutine 與 channel
goroutine 便宜但會 leak,channel 自帶同步語意,讓一個 goroutine 獨佔狀態就不用鎖,但純計數與小塊狀態用 mutex 或 atomic 更簡單,別迷信 channel。
ClickHouse 入門:MergeTree 與用 S3 做冷熱儲存
ClickHouse MergeTree 把每次 INSERT 寫成排序好的 part 再背景合併,storage policy 加 TTL 就能把舊資料自動搬到 S3,附 Docker 快速上手。
事件迴圈不是多執行緒:Node.js 併發最常見的誤會
Node.js 的非阻塞 I/O 看起來很像多執行緒,但骨子裡是單執行緒事件迴圈,這一字之差在 CPU 密集場景會踩到很痛的天花板。
interface 與組合
Go 的 interface 隱式滿足,型別有方法就算數,小介面加 embedding 取代繼承,對介面寫程式配 adapter 就能抽換實作,gortex 換 OTel tracing 就是例子。
跨邊界的語意流失,與 monolith 一直有吸引力的原因
大型系統難組合,根因多半是語意在跨服務邊界被壓成 bytes,型別系統與重構工具接不住。monolith 的吸引力在於語意留在同一套工具鏈裡,拆之前先算這條邊界要犧牲多少語意。
能 build 不等於設計合理:JS 工具鏈的厭世日記
能 build 只證明工具鏈設定沒有互相衝突,跟設計是否合理無關。設定檔比業務邏輯長、出問題先怪 bundler,都是該停下來檢討設計的訊號。
型別不是安全感
TypeScript 的型別在 runtime 不存在,tsc 綠燈只代表型別自洽。型別是幫你想清楚資料與邊界的工具,外部輸入要靠 schema validator 在邊界擋,別把型別當安全感。