# 傑夫·阿特伍德：Stack Overflow 與 Coding Horror

> Stack Overflow 聯合創始人聊程式設計師問答社群的興起、技術寫作與職業成長。

- 原標題：Jeff Atwood: Stack Overflow and Coding Horror
- 期數：特別節目
- 釋出日期：2018-11-29
- 嘉賓 / 主題：傑夫·阿特伍德
- 網頁版：https://lex.qiaomu.ai/tw/ep/jeff-atwood/
- 官方頁面：https://lexfridman.com/jeff-atwood/
- 精讀字數：約 12941 字（閱讀約 29 分鐘）

> 本文為 lex.qiaomu.ai 基於原始訪談的 AI 改寫中文精讀，非官方翻譯；引用請註明出處並連結網頁版。

2018 年，Stack Overflow 滿十歲。傑夫·阿特伍德（Jeff Atwood）在部落格裡寫了一篇紀念文章，標題大意是《Stack Overflow 長大後想成為什麼》。文章裡沒什麼慶功的味道，他花了大半篇幅解釋一件事：這個網站為什麼對新人這麼兇。

他自己先給了答案：**Stack Overflow 從來就不是給初學者準備的。**

這句話從一個把「幫程式設計師解決問題」做成全球基礎設施的人嘴裡講出來，值得琢磨。一個看起來應該張開雙臂歡迎所有人的問答網站，為什麼要刻意維持一種近乎冷淡的嚴格？答案藏在他對社群、對人、對軟體該怎麼被造出來的一整套理解裡。而這套理解比問答網站本身有意思得多。

## 驅動程式設計師的是解謎，錢和名聲排在後面

訪談開場，Lex 問了個看似簡單的問題：是什麼在驅動大多數程式設計師？名聲、財富、程式設計本身的過程，還是對社群的歸屬感？

阿特伍德的回答很短：是解謎。

他描述的那種狀態很具體。一個人把自己關起來，對著一個問題反覆敲打，用近乎蠻力的方式一遍遍試，直到它跑通。電腦太快了，人要算一輩子的東西，機器幾秒鐘跑完幾百萬次。程式設計師享受的正是這種用蠻力換答案的過程。聽起來不優雅，可這確實是很多人寫程式碼時最真實的快樂來源。

他舉了個例子。大部分程式設計師寫過的洗牌演算法其實有缺陷，那種樸素寫法會讓某些排列出現的機率明顯偏高。你要是在賭場幹活，正好碰上一個不太老練的程式設計師寫洗牌邏輯，後果可能很難看。這個問題怎麼被發現？不需要多聰明，把洗牌跑十億次，看看每種排列落進桶裡的分佈，答案自己就浮出來了。

蒙提霍爾問題（Monty Hall problem）是同一回事。三門問題裡該不該換門，直覺上讓人抓狂，你寫個程式跑一遍「永遠換」和「永遠不換」，兩組資料一對比，結論就擺在那兒。你想不明白沒關係，跑出來就行。

> 你不需要聰明，你只要用資料把它跑出來就行。（傑夫·阿特伍德）

這種「用實驗代替推理」的路子，其實也解釋了 Stack Overflow 後來為什麼會變成那個樣子。它服務的人群很明確：手裡有具體阻塞問題、需要可驗證答案、願意自己動手驗證。這類人不太需要安慰，需要的是能編譯透過的程式碼。

## 語言也是程式碼

阿特伍德說自己現在很少寫程式碼。Discourse 這家公司裡，他做的是管理工作。而他年輕時當程式設計師，最看不起的就是管理者，覺得那是一群自己什麼都不幹的人。

後來他的看法整個翻了過來。他發現一件挺有意思的事：**語言本身就是程式碼。**當你能夠清晰地指揮別人做事，你能完成的東西比一個人單幹多得多。寫程式碼是用一種形式語言告訴機器做什麼，說話是用自然語言告訴人做什麼，底層是同一個動作，只是抽象層級不同。

什麼樣的領導算好的？他給了兩條。

第一條是以身作則。這話聽起來是老生常談，但他講了個特別具體的觀察：有了孩子之後你會發現，孩子無時無刻不在看你，甚至在那些你已經看不見自己的地方。人最難看清的就是自己。你看別人一眼就能下判斷，看自己卻帶著巨大的偏見，而且往往對自己比對別人苛刻得多。

所以作為領導者，你得非常勤快地反問：我現在的行為，是不是我希望別人做出的行為？他說很多領導者在這件事上栽跟頭，做出來的決定傳遞出去的訊號完全是反的。

第二條是真正投入。他看重的是對**問題本身**的真實熱情，加班時長他並不在意。對解決方案有熱情的人，聽到反對意見會防禦；對問題有熱情的人，聽到更好的解法會興奮。這兩者的區別，幾天就能看出來。

他自己舉的例子是 Discourse 要解決的問題：怎麼讓一群人線上上溝通的時候，不至於退化成狼群互相嚎叫。怎麼處理 troll，怎麼讓人用完整的句子說話，怎麼讓人在討論裡不互相傷害，最後還能就某個議題達成共識。這些事聽起來瑣碎，可每一個線上社群每天都在面對。

## 自我認知從哪裡來

Lex 追問了個更尖銳的：你說人很難看清自己，那你怎麼知道自己哪些行為是錯的？尤其是那些你壓根沒做的事，同樣在傳遞訊號。

阿特伍德的回答分兩層。

第一層是機制。Discourse 有三個聯合創始人，他們在做決定之前會定期討論。多人討論的價值在於，誤解和盲點能被提前撈出來。至於單個人會不會犯錯，那幾乎不用討論。他對「一個領導者擁有絕對權威」這種結構評價很低。一個社群要是由一個人說了算，那個人總會有倒黴的一天，出事的時候整個社群跟著完蛋。所以他主張讓多個人共同承擔領導責任，彼此給對方反饋。

第二層更微妙。他說每個人心裡都有一個小聲音，你的直覺，你的良心，隨便你怎麼稱呼。大多數人是有道德感的，是想做對的事的。也許有極少數反社會人格不在乎，可絕大多數人希望別人覺得自己是個好人。你做的每個決定讓你感覺如何，這個訊號值得留意。

他同時承認這有副作用。程式設計師群體裡，那個「魔鬼」的聲音往往太響，自我批評過度，內向型人格尤其明顯。這就引出了更大的問題：當你必須做一個不受歡迎的決定時，怎麼辦？

答案是：**把決策過程完整地講給別人聽。**

這也是他反覆強調部落格和溝通重要的原因。直接甩一句「這是決定，執行吧」，沒人會服氣。換個說法：「我們為這個問題想了很久，中間發生了這些事，我們的目標是這個，我們看了這幾個選項，其中第二個更好。」對方的反應就會變成「行，我可能不完全同意，但我大概能理解你是從哪兒來的」。

關鍵區別在這裡：決定要讓人聽得出是從一個具體的人嘴裡說出來的，天上火雲裡砸下來那種感覺要儘量避免。如果你們的目標本來就不一樣，那達不成一致完全合理。這跟誰是壞人沒關係，只是出發點不同。

## Stack Overflow 的誕生：一次投票和一堆失敗案例

回到源頭。2004 年，阿特伍德開始寫部落格 Coding Horror。名字來自史蒂夫·麥康奈爾（Steve McConnell）那本《程式碼大全》（Code Complete）裡的一個側邊欄插圖，畫的是一個標示危險的圖示。他特別喜歡那張圖，因為它說的正是程式設計的核心洞見：每次你寫下一行程式碼，都要想「我會怎麼把自己坑死」。人太容易犯錯了，所以你得在每一步都設計好，讓之後的自己不會把事情搞砸。

他專門寫信給麥康奈爾要授權使用這張插圖，對方同意了，而且一直同意到今天。

部落格寫了幾年，積累了大約四萬名訂閱者。他當時在一家制藥公司工作，程式設計不是公司的核心業務，身邊沒人可以聊技術。於是他把對程式設計的痴迷全部傾瀉到部落格裡。他給自己的定位是執行者，出點子這件事並不擅長。所以部落格寫著寫著，他想做點更大的事，又不知道做什麼。

轉折點是喬爾·斯波爾斯基（Joel Spolsky）。喬爾的想法很明確：有個叫 Experts Exchange 的網站，資料很好，體驗極差，像二手車銷售一樣想方設法騙你。他們決定做一個更好的版本。

Stack Overflow 這個名字是部落格讀者投票選出來的。他感慨，給東西起個好名字是電腦科學裡最難的問題之一。早期 beta 使用者幾乎全部來自他和喬爾的部落格讀者。這種重合來自他刻意的經營：先透過長期寫作建立一個小社群，然後邀請他們一起參與建設。當人們看到你在認真聽取反饋，他們會跟著你走。

> 你不可能聽取所有反饋，那是不可能的。但你確實在等我們的反饋，你在乎我們在做什麼。（傑夫·阿特伍德）

關於這段創業，他還講了一個反直覺的方法論：**不要只盯著成功案例，去看失敗案例。**所有人都盯著成功產品看，那些東西很無聊。真正有意思的是失敗的東西，因為那裡有人在實驗，有人在推進，只是最後沒成。他們失敗的原因，往往跟他們的想法本身的質量無關。

Stack Overflow 的設計是把一堆已知有效的元素拼起來，像個科學怪人：Digg 和 Reddit 的投票排序、維基百科式的可編輯、部落格式的署名歸屬感，再加上聲譽系統。聲譽系統來自一個關鍵洞察：**同行的認可，是程式設計師最初做事的動力。**老闆發的錢撐不了太久，同行說一句「這人真的懂」才有效。

## 嚴格本身沒什麼可追求的，它只是達成結果的手段

系統跑起來之後，他們很快發現一個現象：有些問題下面會有幾百個回答。一個程式設計問題怎麼可能有五百個答案？點進去一看，那些根本算不上問題，全是討論。「你最喜歡的程式設計食物是什麼」「你看過最好笑的程式設計漫畫是什麼」。這些早期被允許，後來全部禁掉。

判斷標準是什麼？他給了一條特別好用的線：**這是不是你工作中真實遇到的問題？**沒人上班上到一半說「我幹不下去了，因為我不知道最好笑的程式設計漫畫是什麼」。

第二條線關於學習方式。他把學習分成兩種。一種叫「意外學習」，像刷 Reddit 一樣，本來沒打算學，刷著刷著知道了樹蛙只活三年（這個資料是他隨口編的，他自己也承認）。另一種叫「有意圖的學習」，你遇到一個具體問題，需要圍繞這個問題把相關知識補齊，可能是理論，可能是編譯器原理，但都為目標服務。Stack Overflow 只服務第二種。

這套規則隨著時間越來越嚴，原因之一是聲譽系統自己帶來的張力。如果有人靠一個笑話或者一張別人的漫畫拿到五百個贊，其他程式設計師會不爽：憑什麼他靠別人的作品拿走聲譽？這跟寫出一條刁鑽的正規表示式、並附上詳細解釋說明為什麼會這樣、以後怎麼避免，完全不是一回事。後者的聲譽是應得的。

他打了個比方：**嚴格的型別系統最終會贏。**早期 Ruby 社群覺得動態型別很爽，不用宣告變數，出問題靠單元測試兜底。然後微軟的 C# 之父 Anders Hejlsberg 做出 TypeScript，硬給 JavaScript 套上嚴格型別，現在所有人都在說「我們上線 TypeScript 之後發現了五十個潛伏的 bug」。

嚴格並不意味著刻薄，也不意味著兇，它只是嚴格。他把這個區分講得很清楚，因為很多人在這一點上誤解了 Stack Overflow。

## 程式設計師為什麼會變得像電腦

訪談裡有一段特別有意思的推論。Lex 問，為什麼程式設計師有時候給人感覺很刻薄？

阿特伍德說，你想想程式設計師整天跟誰一起工作。如果你每天跟一群混蛋工作，你最後會變成什麼？混蛋。那麼，除了電腦，還有誰是世界上最大的混蛋？

電腦對你的廢話零容忍。你只要犯一個錯，一切就崩了。一個分號能讓太空任務失敗。你把這種環境內化之後，會開始覺得：哦，我的同事，也就是這臺電腦，嚴格得要命，一點情面不講，所以我也該這樣，因為我必須在所有事情上服從它的規則。

> 好程式設計師像電腦一樣思考，因為那是他們的工作。可如果你內化得太深，你自己就變成了那臺電腦。（傑夫·阿特伍德）

這就像偵探小說裡的套路：最好的偵探能像罪犯一樣思考，因為他們自己也沾了點罪犯的影子。程式設計師也一樣。你開始覺得「錯誤程式碼 56249」是個完全合格的報錯資訊，因為電腦就是這麼告訴你的。你忘了怎麼當一個人。

這裡沒有惡意，你只是失去了對「不嚴格」的耐心。你非常簡潔，非常不說廢話，非常「錯了，下一個」。別人問「你能幫我看看怎麼修嗎」，你的反應還是「錯了，下一個」。對電腦來說這很正常，可對面坐著的是個人。

## 向上抽象：從程式碼到人

作為一個寫了十幾年程式碼、後來又做了兩個大專案的人，阿特伍德說了一句聽起來很打擊人的話：**要成為一個有效的程式設計師，你最終得停止寫程式碼。**

他自己也知道這話對聽眾不友好，所以趕緊補充：寫程式碼這件事，會變成用越來越高階的語言在寫。

最早你寫彙編，硬編碼到具體架構上。然後有了 C，可以跨架構抽象，編譯到 ARM 或者 x86。再往上，Python、Ruby 這類解釋型語言。再往上呢？他想再抽象一層，比程式語言更高的抽象是什麼？

是自然語言。

你在用英文或者中文寫作、說話、激勵別人、給出方向、說「如果我們這樣做會怎樣」。這是最高層級的程式語言。他說自己意識到這一點的時候有點難受，因為這確實是很多程式設計師不願意接受的事實。Patrick McKenzie（也就是 patio11）寫過一篇很有名的文章講這個：把自己叫作「程式設計師」，在某種程度上是職業發展的天花板。

因為程式碼周圍的所有事情，比如人，才是真正難的部分。他在部落格裡早就反覆寫這個：程式設計更多是關於人，關於程式碼的比重沒那麼多。聽起來不合邏輯，可事實如此。這些人能不能彼此相處？能不能互相理解？你能不能跟我講清楚你到底在做什麼？你解決的是不是正確的問題？

他推薦了另一本經典：《人件》（Peopleware）。核心觀點是，軟體就是人。人本身就是軟體。

他把這個邏輯推到底：**一旦你的程式設計能力過了某個門檻，任何合理的工程問題你都能解決。**你不需要從零寫演算法，那種事基本不會發生。所以技術問題很少是瓶頸。真正的瓶頸是「我的經理是個混蛋」，這個問題你沒法用程式碼解決，可它對你的傷害比「我們得用那個我討厭的框架」大得多。Dave 在角落裡寫著誰也看不懂的東西，Sam 天天提交爛程式碼，這些都沒那麼致命。真正讓整個團隊停擺的，是那個有毒的同事或者上級，所有人都被壓得喘不過氣，誰也沒法幹活。

## 心跳：迭代速度是軟體公司的核心競爭力

這是整場訪談裡最實用的一段。

阿特伍德說，Discourse 早期他和 Robin Ward 兩個人乾的時候，他意識到一件事：每當他跑去問 Robin 一個關於 Ruby 的蠢問題，Robin 就在花時間回答他，而這段時間本來可以用來寫 Discourse 的第一個 alpha 版本。對兩個人的時間都是浪費。解法很乾脆：**去僱更多合格的程式設計師。**至於「我要自力更生學 Ruby」這條路，他很早就放棄了。

然後他給出了一個判斷軟體公司健康度的指標。他發過一條推文，很多人喜歡：你想衡量任何一家軟體公司的核心能力，就看這樣一件事，從有人提出「我們產品裡這個詞該改一下，使用者會更清楚」，到這個詞真正改完、上線、送到使用者手上，需要多長時間。

> 這就是你的生命週期。這就是你的健康度，你的心跳。如果你的心跳特別慢，你基本上已經死了。（傑夫·阿特伍德）

他說得很重。如果一個詞的修改要花兩週甚至一個月，那這家公司就沒救了。這跟閒著沒事改詞玩是兩個概念，一個明顯更好的改動，所有人都同意，然後花了幾個月才上線。這意味著你沒法迭代，你什麼都做不了。

他也澄清了另一面：心跳快不等於要像蜂鳥一樣狂跳。重點是健康，是合理。可必須跳得起來。因為軟體開發就是這麼工作的：你做出改變，推上線，跟它相處一段時間，看看感覺如何，然後說「天啊，這主意太糟了」，或者「如果加上 Y 會更好」，接著繼續轉曲柄。你轉得越多，最終跑得比競爭對手越遠。一年之後你已經在幾英里之外，他們才追上來。

他還提到一個反直覺的點。使用者抱怨「軟體又變了」的時候，他的反應是「對，就該變，一直變」。可塑性恰恰是軟體最酷的地方。你反抗這個特性，等於在跟你所建造之物的本質作對。當然他也承認有些改動確實很爛，但總體而言，擁抱這種流動才是對的。

## Discourse：社群應該擁有自己

講完 Stack Overflow，話題轉向 Discourse。為什麼一個做問答網站的人，要跑去做論壇軟體？

起因是 Stack Overflow 的邊界被看清了。它只適合那些答案可以被驗證的領域，有資料、有事實、有科學依據，或者有一本權威的知識典籍可以翻。一旦離開這個範圍，引擎就失靈。

他們做過實驗。Stack Exchange 網路允許使用者提議新的問答站點，票數夠了就開站。有人提議了「撲克」和「樂高」，結果慘敗。為什麼？這兩個領域太社交了。玩撲克的人真正想聊的是「我們抽什麼雪茄」「用什麼牌好看」「這手牌我該怎麼打」，樂高玩家想說的是「看我搭的這個，帥不帥」。這些都不是問題，是分享，是討論。

> 沒有人會因為「我拿到同花順時該怎麼辦」而被卡住。那算不上會阻塞你的問題，只是一個聚在一起聊天的機會。（傑夫·阿特伍德）

於是他轉向論壇。2012 年底到 2013 年初他重新看了一圈論壇軟體，發現從四年前他上次看的時候到現在，一點進步都沒有。這讓他很生氣，因為他喜歡那種一群人圍繞共同熱愛的東西聊天的社群，而他們居然沒有像樣的工具。

他講了一段經歷。很多創業者來找他，說「Jeff 我有個創業點子」。他第一句話總是「你為什麼要問我？我又不懂你這行。你為什麼不去問你的使用者，問對這個社群感興趣的人？」對方說「好主意，怎麼問？」這時候他就在心裡拉起了悲傷的長號，因為所有能讓創業者和使用者、客戶、受眾對話的軟體，全都爛得他不願意推薦給別人。

而那恰恰是創業者能拿到最有價值輸入的地方。Stack Overflow 自己就是這麼做的。他花了大量時間泡在 Meta Stack Overflow 上，那是公開的社群反饋站點。**90/10 法則**：90% 的反饋沒法用，可能是爛反饋、瘋反饋，或者你現在根本沒法執行的反饋。剩下 10% 是金子，是鑽石，是對核心產品的真正改進，而且不太難實現。其中他最喜歡的那 5%，是他完全沒想到的：「天啊，我從來沒想到這個，但這主意太棒了。」Stack Overflow 的很多功能就是這麼來的。

Discourse 的核心理念是**興趣圖譜**，跟 Facebook 的關係圖譜對立。Facebook 理解的世界是狀態更新：你的朋友在餐廳吃了飯。論壇圍繞的是一個具體興趣：我熱愛電動車，我熱愛特斯拉，我熱愛他們解決問題的方式、創始人的風格、設計的倫理。他引用 The Oatmeal 那篇關於特斯拉的漫畫，說那篇東西基本上就是所有興趣社群的起源神話：一個人把自己熱愛的東西挖到極深，然後分享出來。

他對自己的描述是：他是那種會對少數幾件事極度投入、然後一頭扎進去好幾年的人。廣泛地淺嘗不是他的方式，深入扎幾件事才是。論壇正好解鎖了這種體驗。

然後是那句最關鍵的話：

> 我不想要一個一切都屬於 Facebook 的世界，至少我不想要。我想要一個社群能夠擁有自己的世界。（傑夫·阿特伍德）

他打了個特別形象的比方。你每週四在 Barnes & Noble 書店聚會，某天書店說「你們走吧，你們買的書不夠多」，那你就完蛋了，因為書店擁有你。換到自己有聚會空間、有俱樂部小屋，你就能定自己的規則，決定聊什麼，產出比在書店角落裡擠著好得多。

他對 Facebook 的評價很有意思。他先誇：Facebook 的執行力非常強，收購 WhatsApp 和 Instagram 是極其聰明的決定，他們還免費送 VPN 軟體，間接把所有流量資料喂回給 Facebook，讓他們看到什麼在變流行。緊接著一句：**Facebook 沒什麼道德指南針，Facebook 只在乎 Facebook。**它不在乎你和你的問題，只在乎自己能做多大。

## 社群怎麼從零長起來

Lex 問了個很實際的問題：怎麼把一個社群從一個人做到一千人？運氣、技巧、時機還是堅持？

阿特伍德的答案回到他關於部落格的那套話。他引用一位他很敬佩的人的說法：所謂寫部落格，就是你必須有一些有意思的東西要說，而且用有意思的方式說，然後堅持十年。

「有意思的東西」意味著不是所有人都在說的東西。「有意思的方式」意味著一種帶娛樂性的表達方式。

然後是儀式感。你宣佈「我每週寫三篇」，然後你必須做到。因為在你堅持幾年之前，你根本到不了任何地方。這件事要花好幾年。如果你真的熱愛它，它就不會感覺像工作。

他特別提到寫作的一個技巧，說這可能是他能給的最好的寫作建議：

> 把文章大聲讀出來，讀好幾遍，讓它聽起來像你在說話。因為好文章的目標就是這個。（傑夫·阿特伍德）

好的寫作應該聽起來像你說的話，只是措辭稍微好一點，因為你有更多時間思考。它念出來要自然。

關於選題，他的方法是從舊書裡挖。世界上的有趣事物太多了，如果你一天想不出一個可以聊的有意思的點，那是你不夠努力。讀經典程式設計書是一條很好的礦脈，那些書裡提出的概念往往經久不衰，你可以拿幾句話出來，同意或不同意，比較兩個概念，或者討論「這在今天還適用嗎」。你不用假裝是自己的原創，可你有了一個可以持續聊下去的常青話題。

2007 年，有人出價大約八萬到十萬美元要買他的部落格。那是一年的工資，一次性到手。他猶豫過，跟人聊過，最後還是拒絕了。理由很簡單：賣了之後，這個部落格就不再屬於他了。

他給了一條他自己也不太愛給人建議、可覺得確實有用的原則：**當你面對一堆選項時，選那個讓你稍微有點害怕的。**跳崖那種害怕不算在內，要的是讓你緊張的那種。選安全的那個，通常意味著你沒在推自己，沒在選那個能讓你成長的東西。

對他來說，更可怕的選擇是說不。「不，我們就看看這事能走到哪兒。」因為這樣它還是他的。

他說，假如當年說了 yes，世界會多不一樣。可能就沒有 Stack Overflow 了。

## 關於未來：手機是文化變遷，AI 還沒到魔法

訪談後半段聊到未來。Lex 問了兩個方向：智慧手機和人工智慧，會不會根本改變程式設計這件事。

阿特伍德對智慧手機的判斷是：**它帶來的主要是文化層面的轉變，程式設計層面的變動沒那麼大。**2010 年之後，每個人都隨身帶著一臺電腦，這確實是巨大的社會變化，我們到今天還在消化它的正面和負面影響。他提到自己作為極客的夢想世界就是「人人隨時隨地都在電腦上」，然後補了一句「小心你許的願」。現在人人都有電腦了，可它沒能長成我們想象的烏托邦，電腦能被用來做很多未必好的事。

至於程式設計本身，他越來越相信 Unix 那套。命令列、基礎工具，這些東西在未來很長很長時間裡還是程式設計的樣子。他不相信會有什麼神奇的視覺化程式設計顛覆這一切。他甚至想不出手機上有什麼操作能跟程式設計直接對應，想半天也沒想出什麼。

關於人工智慧，他的態度是：這個概念被過度吹捧了。很多所謂的 AI，本質上是「人非常可預測」。他舉了 Discourse 裡的一個檢查：你一小時前從紐約登入，現在從舊金山登入，那就標記為可疑。那只是條啟發式規則，一小時跑兩千英里不合理。你可能用了 VPN，可這條規則建立在「人基本上不會到處移動」這個觀察之上，非常樸素。

他說好的軟體應該預判你的需求，比如 Google 預測你的通勤路線。電腦在這塊能做得更好，可他不太願意把它叫「完整的 AI」，那只是電腦變強了。現在人人有智慧手機，我們突然有了大量以前沒有的位置資料、通訊資料，餵給一些基礎的啟發式，再加點漂亮的演算法，就變成了對你需求的預測。就像一個朋友說「我看你到家了，要不要一起吃個飯」，因為這是我們這個點通常會做的事。

落到程式設計過程本身，他覺得 AI 確實有可能幫上忙，因為程式設計裡重複太多。他舉的反面教材是 Clippy，那個「看起來你正在寫一個 for 迴圈」的曲別針。他更看好的方向是「更好的樂高積木，更大的樂高積木」：庫本身就是這類東西。你不用自己寫 HTTP 請求庫，用一個久經考驗的現成的就行。WordPress 在他看來就是一個讓非程式設計師也能做出東西的工具，透過外掛，你可以把它變成任何東西，甚至有點瘋狂。他說未來可能更多是「粘合」而不是「真正的程式設計」，這是好事，因為你需要的大部分東西已經在外面了。

至於 Unix會不會一直被沿用，他的回答很乾脆：會。他年輕時是 Windows 的忠實信徒，覺得 Unix 是浪費時間。後來他完全翻轉：**Unix 那幫人基本是對的，微軟和 Windows 在伺服器端和桌面端，至少在那個年代，基本是錯的。**現在蘋果的桌面系統底層也是 Unix（Darwin）。他說，不管上面套了多少層外殼，剝掉一兩層，底下還是 Unix，這個狀態會持續很長時間。

他還順帶提了一句 Discourse 自己的架構。Discourse 就是客戶端程式設計，伺服器把一大碗 JavaScript 遞給你，剩下的排序、分頁、基本計算全在你自己的機器上跑。資料當然還是要從伺服器拿，可本地的算力用得越來越多。這是程式設計重心往客戶端偏移的一個例子。至於服務端那部分，他的判斷是 Unix 哲學會繼續贏下去。

## 為什麼 Discourse 不做廣告

聊到商業模式時有一段很有意思。Lex 提到，廣告在最理想的狀態下其實是在服務使用者，把使用者和他們感興趣的東西連線起來，這跟 Discourse 連線興趣社群的邏輯一致。

阿特伍德說自己對廣告持一個反常的看法：他其實同意這個觀點。如果廣告就是「把你會感興趣的東西推給你」，那挺好，甚至是件好事，透過看廣告來支援做這些工作的人也是合理的。

可他還是裝了 Adblock，而且裝得很不情願。原因很實際：現在的廣告太重，為了給你看廣告要載入三四十兆的東西。他說現在的廣告像當年的 Experts Exchange，等你做出 Stack Overflow 的時候，它就什麼都不是了。廣告技術領域公司多到離譜，一張圖上密密麻麻全是 logo，小到看不清。

然後他回到現實：**非常非常少的 Discourse 站點能靠廣告模式活下來。**太分散，太奇怪，給的錢太少，使用者還討厭它。理論上他同意「乾淨、快速、正好是你感興趣的廣告」很棒，可我們離那個理想狀態太遠了。連 Google 在重定向那塊也只是做得還行。

真正有效的是訂閱、Patreon、亞馬遜聯盟連結這類。有人點了一個連結去亞馬遜買了東西，站點拿 2% 到 5% 的佣金，他覺得這完全公平。你在他站點上看到一輛溜溜球，點過去，買了，他分一點，合理。他自己幫過一個站長，基本上算是付錢讓對方換到 Discourse，理由很直接：「這軟體太爛了，我沒法再來了。」同時他建議對方別再做使用者討厭的廣告，全力做 Patreon，做亞馬遜聯盟。那個人照做之後效果很好，尤其是對一個內容創作者來說，這條路走得通。

## 機械鍵盤是一種信仰物品

訪談最後聊到 Code Keyboard，阿特伍德自己參與設計的機械鍵盤。Lex 說自己用 Kinesis，樓上就有一把。

阿特伍德的坦白很有意思。他說機械鍵盤帶不來任何功能上的必需性，你在任何鍵盤上都能程式設計，甚至螢幕鍵盤也行（說這話的時候他自己都覺得可怕）。薄膜鍵盤也能用，只是手感很差，那種薄薄的橡膠膜，按下去沒有明確的反饋點。

它本質上是一種信仰物品。它真正表達的是：我在乎鍵盤，因為鍵盤是我和電腦溝通的主要方式。就像播客要用好麥克風一樣，你想要一把好鍵盤，因為它有明確的觸感反饋，你按下鍵的那一刻能清楚感覺到那一下咔噠。

> 它表明你關心基礎。因為你知道什麼讓你成為一個好程式設計師嗎？打字快。（傑夫·阿特伍德）

這句話他說得很認真。打字足夠快，能把腦子裡的想法搬到程式碼庫裡，本身就是一項核心技能。練打字真的能讓你成為更好的程式設計師。

更深一層，是那種觸感帶來的愉悅，最終反哺熱情。他說自己彈鋼琴，道理一樣，技術性的、觸覺性的東西會讓人開心。他提到機械鍵盤社群已經爆炸了，Massdrop 上可能有五百個鍵盤專案，他關注的一個前 Tech Report 作者每週都在發鍵盤圖，各種炫酷的鍵盤，多到他數不過來。

Lex 說自己有一堆溜溜球，阿特伍德說這正是他講的道理。技術上你只需要一個，可你就是喜歡很多個。機械鍵盤也是一樣。

他的結論是：這些非必需的、近乎宗教性的物品，恰恰構成了人之所以為人的那部分。它讓生活值得過。嚴格來說它們都不必要，可你想想，什麼東西是真正必要的呢？

## 一個普通程式設計師能從這裡拿走什麼

這場對話跨度很大，從演算法聊到領導力，從社群治理聊到鍵盤手感。如果只挑幾條能馬上用上的，大概是這些。

- **遇到搞不懂的問題，先跑資料，別硬想。**洗牌演算法、三門問題、任何反直覺的邏輯，寫個程式跑一百萬次，看分佈的桶，答案比推理可靠。這也是為什麼哪怕你已經在做管理，最好還是保留一點動手做實驗的能力。
- **把決策過程完整講出來。**帶團隊也好，在社群發言也好，別隻拋結論。講清楚背景、目標、你考慮過哪些選項、為什麼選這個。別人的反對往往會變成「我理解你的出發點，雖然不完全同意」，這跟「憑什麼」是兩種完全不同的對話。
- **衡量所在團隊的健康度，看「改一個詞要多久」。**從提出改動到使用者看到改動，這個時間就是團隊的脈搏。兩週以上就是警訊，一個月以上基本停擺。想辦法縮短它，比最佳化任何單點技術都更值。
- **寫東西的時候，把稿子大聲讀出來。**讀好幾遍，直到它聽起來像你在說話。這是區分「能讀」和「好讀」最有效的一招，成本幾乎為零。
- **在重要選擇上，挑那個讓你稍微緊張一點的。**跳崖那種冒險不算，要的是讓你心裡發緊的那種。安全的選項通常意味著原地踏步。當年拒絕賣掉部落格的阿特伍德，後來做出了 Stack Overflow。
- **如果你是新手，別把 Stack Overflow 當學習平臺。**它服務的是「有具體阻塞問題、需要可驗證答案」的人。新手真正需要的是實時螢幕共享、聊天、可以隨便玩的沙盒，這些它從來不提供。找錯工具，受傷的只會是你。
- **想建社群，先寫十年部落格。**這話不是比喻。先有值得說的東西，有有意思的說法，有穩定的節奏，然後邀請讀者一起參與建設，讓他們投票命名、參與測試。社群拉不來，只能長出來。
- **開會前先問一句：我們聊的是問題還是解決方案？**對解決方案有熱情的人容易防禦，對問題有熱情的人容易吸收。團隊裡這兩種氣氛的差別，幾個月就能體現在產出上。

最後那條關於鍵盤的建議，阿特伍德自己也承認它是非必需的。可他講得對：一把手感好的鍵盤，會讓你更願意坐在那兒多敲一會兒。而多敲一會兒，往往就是所有進步的起點。

整場訪談裡他說的最實在的一句話，可能是那句「你不需要聰明，你只要用資料把它跑出來就行」。這句話能用在演算法上，也能用在帶團隊上，還能用在寫作上。把想法變成可以跑的東西，看看結果，然後改。這可能就是他十幾年裡做的全部事情。

## 那場關於舊金山的對話，後來沒人再提

訪談裡有個細節容易被略過。阿特伍德講到 Discourse 裡那個異地登入檢測的時候，語氣很輕鬆：「你一小時前在紐約，現在在舊金山，嗯，這挺有意思。」他把這當作啟發式規則的一個平凡例子，用來論證所謂 AI 沒那麼玄。可這段話背後藏著一個更大的判斷：**軟體對使用者行為的預測，大部分時候只是把人類的重複性寫成程式碼。**

他說人非常可預測。你每天大致在同一時間起床，走同一條路去上班，在同一個便利店買咖啡。Google 預測你的通勤路線，靠的就是這份重複。它沒什麼魔法，只是把你的行為模式記住了。他說這更像一個朋友說「我看你到家了，要不要一起吃飯」，因為它知道你這個點通常幹這個。

問題在於，這套邏輯在社群產品裡會變得微妙。預測得準，使用者覺得貼心；預測得太準，使用者覺得被盯著。Discourse 是開源軟體，每個站點自己託管資料，這件事上他站在使用者這邊：資料在你自己手裡，你才有可能決定它被怎麼用。這又繞回他那個核心主張，社群應該擁有自己。

## 為什麼他總在誇對手

整場訪談裡有個反覆出現的模式，值得單獨說一句。他批評 Facebook 的時候，一定會先誇一句「他們執行力非常強」「收購 WhatsApp 和 Instagram 是極其聰明的決定」。他批評微軟早年的方向，緊接著承認 TypeScript 出自 C# 之父 Anders Hejlsberg 之手，是軟體史上最聰明的頭腦之一。他談到自己已經完全轉向 Unix 陣營，仍然會說蘋果的桌面系統底層也建在 Unix 上。

這種既能批評又能準確承認對方強項的能力，在技術圈並不常見。多數人一旦站定陣營，就會把對面的所有東西都歸為垃圾。他的做法更像一個工程師在評估方案：這個選擇在什麼條件下是對的，在什麼條件下是錯的。他討厭 Facebook 的道德取向，可他不會因此說 Facebook 的技術爛。這兩件事在他腦子裡是分開的。

這可能也是他做社群能做這麼久的原因。一個總覺得對手一無是處的人，沒辦法設計出一個真正好用的替代品，因為他不知道對手到底做對了什麼。

## 十年這個數字，他反覆提到過

把訪談裡散落在各處的「十年」串起來看，會發現一條挺清晰的線。

他說寫部落格要「堅持十年」，才可能到任何地方。Discourse 一開始他定的是五年計劃，很快就改成十年，因為三年才能把產品做成你想要的樣子，而第一版一定是爛的，可你還得先把它發出去。Stack Overflow 到 2018 年正好十年，他寫文章反思它長成了什麼樣子。學 Unix 的知識幾十年不失效，學人性的知識也同樣耐用。

十年在他這裡像是一個基本單位。短於這個尺度的事情，他沒太大興趣談成功或失敗。這個時間感跟當下技術圈的主流節奏差得很遠，今天的標準節奏是三個月做出 MVP，一年內找到 PMF，兩年內要麼規模化要麼死掉。他那套「三年才做出想要的產品，十年才算走完一輪」的說法，聽起來像是另一個時代的話。

可他自己給了辯護。他說你轉曲柄的次數越多，最終跑得越遠。轉曲柄這件事本身需要時間，而時間沒法壓縮。你能壓縮的只有每次轉動的週期，也就是他說的那個心跳。心跳快一點，同樣十年能轉更多圈。這可能就是他全部方法論裡最核心的一條：**把迴圈週期壓到最短，然後一直轉下去。**

演算法是這樣，跑十億次看分佈。寫作是這樣，每週三篇讀出來聽。社群是這樣，每次反饋都回應。公司也是這樣，一個詞的改動從想法到上線，越快越好。

這套東西樸素到有點無聊。可他在訪談裡從頭到尾沒換過別的說法。
