Weekly Issue 第 14 期:Product Hunt 已死
近期台灣技術圈新聞應該要算 Vibe Coding,無獨有偶的是,HN 上也談到類似的議題:行銷跟技術的界線在哪?哪些東西可以包裝成商品販售,哪些則是應該要有基本的自我審核?
🗞️ 熱門新聞
Product Hunt is Dead
有位產品創辦人寫了篇 Blog,標題比較聳動:Product Hunt 已死。
我沒特別 Follow Product Hunt,只有偶爾看看,但看完還是五味雜陳。依照文中所說,當你在 Product Hunt 發布產品後,會有一堆人來跟你說需不需要買讚,這讓我想到以前書市買榜的例子。
有人可能會覺得這是行銷,只是對我來說,行銷跟欺騙還是兩回事。我比較不確定的是,假設今天換個場景,改為無傷大雅的善意謊言,我會同意嗎?
✨ 科技觀點
How to Lead in a Room Full of Experts
談技術領導力,最打動我的是這段:「執行語言:『我們在這個衝刺階段將系統穩定性優先於功能開發速度。這樣可以降低影響營收的使用者端停機風險。』 」
我忍不住回想,自己是不是也這樣跟人溝通呢?我能清晰告訴別人「應該要做什麼,為什麼做」嗎?如果不能,又是為什麼?我猜大多是因為我習慣迴避衝突,傾向妥協,然而一味的妥協只會讓大家都不開心,問題也沒有解決。
每次看這類文章,最後都會提醒自己,勇氣很重要,至少還是要面對問題。
Pulling an Inverse Conway Maneuver at Netflix
談 Netflix 對康威定律的觀察,還有組織設計。
DevOps 的本質是康威定律,近期跟一些朋友交流,也會聊到工具真的不重要(文中提到 Netflix 用了 20 幾個工具),如何建立 DevOps 的意識才是重點。Otel 的願景就很 DevOps,他們不只是給你函式庫,也會教你如何讓溝通更順利。
實務上我沒那麼贊成由團隊主導工具選型,convention over configuration,有一套約定慣例,對降低溝通成本真的很有幫助。
The XY Problem
無意中看到還有個網站專門介紹 XY 問題。
所謂 XY 問題,是提問時你會講自己想要的解決方案,而不是實際問題。這會浪費問答雙方很多時間。我曾遇過問我如何設定 VM,但結果只是要安裝個不用 VM 也能裝的東西。
有點好奇 KPI 是不是 XY 問題的另一種展現?例如明明要提高 MAU,給出的 KPI 是交付 AI 產品。
📌 工程實務
Fixed Hugo alias noindex bug
看到個很有趣的狀況,Google 可能會不索引 Hugo 有別名的頁面。
當使用者設置 alias 時,Hugo 會創建一個頁面,然後用 meta refresh 重新導向 canonical 頁面,同時標註別名頁是 noindex。有趣的點就在這,依照文中的實驗,Google 不只依照指示不索引該別名頁,連標準頁面都不會索引。
這個如果是真的,難道不會變成一個攻擊點嗎?但因為 Google 也沒講他們會怎麼處理,只能說,如果你用 Hugo 有類似狀況,可以考慮升版或拿掉 alias 看看。
I think “agent” may finally have a widely enough agreed upon definition to be useful jargon now
Simon Willison 也同意 Agent 的定義是「以循環執行工具來達成目標 」。
作為對比,他舉了 OpenAI 的例子:「能獨立為你工作的 AI 系統 」,聽起來確實不是個好定義,我知道該怎麼建立一個在 For Loop 中用 LLM 調用 Tool 的系統,但「獨立工作」可就模糊多了。
How to Name Your Metrics
Otel Naming Practice Part 3,如何命名你的指標。
不得不說 Otel 的技術文章寫得真好,例如 kubelet_volume_stats_used_bytes 這樣的命名,的確會讓聚合跟維護變得更困難。Prometheus 的命名大多就是這樣。
文中還附有遷移指引,很值得參考。
Be careful with Go struct embedding
看到 HN 在討論 Go 的 Embedding 是不是個好設計。
主要問題是,當你將結構 Embedding 到另一個結構時,假設兩個結構有同名稱欄位,如果沒有顯式要用哪個,預設會用淺層的結構欄位。
原則上,我同意它是個反模式,從使用者角度,幾乎不太可能分辨出用到的欄位是哪個結構。既然這是個反模式,為什麼會存在呢?我猜是因為方便實作組合,從我的角度來說,如果加個 lint 能在重複時要求顯式處理會好些。
平常在處理 DAO 或 DTO 時還是很有用啦,畢竟 DTO 很常出現跟 Entity 只差一兩個欄位的情況,這時直接嵌入在反序列化時簡單很多。