# 戴夫·普拉默：程式設計、自閉症與老微軟往事

> 前微軟工程師回憶開發工作管理員與 Windows 的年代，也談程式設計這門手藝與自閉症帶來的視角。

- 原標題：#479 – Dave Plummer: Programming, Autism, and Old-School Microsoft Stories
- 期數：第 479 期
- 釋出日期：2025-08-29
- 嘉賓 / 主題：戴夫·普拉默
- 網頁版：https://lex.qiaomu.ai/tw/ep/dave-plummer/
- 官方頁面：https://lexfridman.com/dave-plummer/
- 精讀字數：約 13655 字（閱讀約 30 分鐘）

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

Windows 工作管理員每個月被大約 20 億人開啟。它的第一版是 87KB。

戴夫·普拉默（Dave Plummer）寫它的時候，是在自己家裡寫的。那時候他剛進微軟不久，白天在 Shell 團隊改 bug，晚上回家開啟編輯器，從登錄檔的 HKey Performance 裡讀效能計數器，因為他沒有內部 API 的許可權，而他又不願意在家裡呼叫內部介面。

後來這個程式被收編進 Windows NT 4.0，成了幾代人的肌肉記憶：電腦卡了，Ctrl+Shift+Esc，看看誰在吃 CPU，把它殺掉。這個動作太自然了，自然到沒人會想它是誰寫的。

## 他想給那臺機器下英文命令

1979 年，十一歲的普拉默騎著腳踏車去當地的 RadioShack。櫃檯邊堆著一摞箱子，標籤上寫著“computer”。店員說剛進貨，還沒裝。他說那我幫你們裝。

> “我完全不知道自己在幹什麼。它不比一臺組合音響複雜。問題在於 Tandy 公司用同一種五針 DIN 介面做電源、影片和磁帶機，插錯了就炸。”（戴夫·普拉默）

他照著標籤接好線，機器亮了。接下來他做了一件很有代表性的事：往 BASIC 直譯器裡敲英文句子。PRINT 2+2 能用，別的就不行了。他不理解為什麼更“正常”的英文反而不行。

那臺機器是 TRS-80 Model 1，Level 1，4K 記憶體。同一個時期，Commodore PET 2001 和 Apple II 相繼問世。普拉默今天把“史上最偉大的電腦”這一票投給 Commodore 64，理由是銷量，跟設計無關。他的判斷標準很樸素：一臺機器影響了多少人。

## 他用十六進位制手寫了一個 Galaga

他的第一臺 Commodore 64 是被他燒壞的，準確說是軟碟機。機器不是從大零售商買的，沒有保修，得寄回德國修。於是他只剩一臺磁帶機，和一個從磁帶載入的機器碼監視器。那個監視器帶反彙編功能，但沒有彙編器。

所以他直接在十六進位制裡敲 6502 指令碼。

他做的第一個東西是 Galaga 的克隆。敵人會隨時間推進，邏輯完整，純手工機器碼。6502 的程式碼沒法重定位，想往中間插一段，只能跳到別處執行完再跳回來，程式碼結構慘不忍睹。但它跑起來了。

然後他做備份。

他把空白盤複製到了資料盤上。幾周的工作，一張盤，一個方向搞反的操作，沒了。

> “我當時有很強的負罪感。你毀掉了幾周的工作，而且你知道這是因為你著急了，或者做了個蠢決定。”（戴夫·普拉默）

這是他的第一次資料管理課。他今天還記得那種感覺，說明這堂課上得夠狠。

## 輟學是一個過程，由一百個小決定累積而成

他高中輟學了。他自己強調，輟學沒有“那一刻”。

> “沒有哪一刻你決定輟學。你只是去得越來越少，少到有一天你意識到，現在出現會很尷尬，因為我已經很久沒去了。然後很快你就徹底不去了。”（戴夫·普拉默）

他說的這個機制值得每個人警惕。你每天做的是一個小決定：“今天不去上課。”但這個決定重複足夠多次，就變成了一個大決定，而這個大決定你從來沒在清醒的時候做過。

然後他在 7-Eleven 上夜班，也在油漆倉庫幹過。7-Eleven 的夜班要做賬、做行政，店長傾向於安排腦子夠用的人，但這個人得有個人理由必須留在 7-Eleven。他沒有高中畢業證，正好符合。

他形容那份工作裡最難受的部分是量油，被持刀搶劫反倒排不上號。

一根十五到二十英尺長的木杆，刻度是英寸和英尺，沒有電子感測器，你得把它捅進地下油罐再拔出來，看油麵停在哪個刻度。第一次他滑手了，重新抓了一把，零下四十度，一手木刺。

> “我意識到我不想一輩子幹這個。然後我想到‘下次我要換個方式拿’，三秒之後我又意識到這想法多荒唐。”（戴夫·普拉默）

二十一歲，他去找本地高中的校長，問能不能回來。校長說不行，你年齡超了，也沒位置。他說，從現在到開學之間，總會有人輟學，位置就有了，那我們假設位置有了，我能回來嗎。校長讓他回來了。他補了三到四門課。

進了大學，第一學期他仍然沒當回事。幾何 90 是給沒修過十二年級幾何的人開的補修課，他以 1% 的差距被教授放行。因為補修課成績不計入成績單，他等於白撿了一個新起點。第二個學期開始，他為自己學，結果完全不同。

## 他翻遍註冊卡，找微軟的郵箱

大三暑假，他在電話公司做 UNet 到 TCP/IP 的遷移。聽起來宏大，實際工作是換卡，然後搞清楚為什麼客戶的 config.sys 改完之後 Lotus 跑不起來了，因為可用記憶體少了 10K。他形容那是做計算機工作最糟糕的年代。

午休時他在美食廣場讀一本講微軟怎麼誕生的書。他讀得入迷，覺得那就是他想去的地方。但他在薩斯喀徹溫省，能做什麼？

他大學是靠一款叫 HyperCache 的軟體讀完的。那是 Amiga 平臺的檔案系統快取，機器出廠不帶，他自己寫，用 C 加 68000 彙編，賣了兩千多份，單價二十到四十美元。那時候買軟體要寄回四乘六英寸的註冊卡，上面寫名字、地址、郵箱。

他把整摞註冊卡翻了一遍，找微軟字尾的郵箱地址。找到三四個，挨個冷郵件發過去。

其中一個人叫阿拉斯代爾·班克斯（Alasdair Banks），回信說有個人可以介紹給他。那個人叫本·斯利夫卡（Ben Slifka），電話面試之後，決定招他去做 MS-DOS 的暑期實習。

這套路徑今天幾乎無法複製。一個沒有文憑、在加拿大中部、靠賣 shareware 為生的年輕人，透過翻註冊卡找到了進入微軟的門。但它背後的邏輯是通用的：**先做出可以展示的東西，再拿著這個東西去找人。**

## 他眼中微軟最可怕的地方，是人

> “那是我參與過的最強的一群聰明人的集合。你在普通計算機公司上班，那個真正懂行的人，他那個更聰明的朋友，多半在微軟上班。”（戴夫·普拉默）

他在訪談裡講這個感受的方式很實在。你從小地方來，是當地的大拿，覺得自己懂很多。到了那兒，第一個反應是不敢說話，怕顯得蠢。

關於比爾·蓋茨，他給的評價沒什麼神話色彩：蓋茨對“每家每戶桌上一臺電腦”這一個念頭 relentless 追逐，僱比他更聰明或至少一樣聰明的人來執行，搭出一臺幾乎停不下來的智力機器，然後去賣非常簡單的產品。

MS-DOS 按他的說法，一點都不復雜。它就是命令列啟動器：你輸入命令名，它去當前目錄和 PATH 裡找，找到就載入進記憶體執行。加一點環境變數，一點指令碼語言，能訪問硬碟和 CPU，不能多工，沒有圖形介面。90% 的 DOS 就是這回事。

但這恰好是那個市場需要的。微軟跟 IBM 談成了每臺 PC 都預裝 DOS，收費不高，卻拿到了一個用了幾十年的標準位。**這裡面的運氣成分和眼光成分，普拉默都承認。**

## 640K 是一個責任，不是一句名言

“沒人會需要超過 640K 記憶體”這句話不是蓋茨說的。普拉默直接否掉了這個流傳幾十年的梗。

但 640K 這件事本身，他講出了開發者視角的重量。x86 真實模式的記憶體上限擺在那兒，你作為作業系統開發者，用掉的每一 K，使用者就拿不到。你無謂地用掉 10K，全世界每一臺機器就少 10K。這是一種很具體的責任感，跟今天動輒幾十 G 的執行時環境不在一個尺度上。

他在實習期做的第一件正事，是給 SmartDrive（磁碟快取）加上 CD-ROM 快取。光碟剛出來，微軟 Bookshelf 是少數能跑的產品，快取做得好，速度能快幾十倍。更麻煩的活是把 SmartDrive 和後來的 DoubleSpace 壓縮引擎搬進高位記憶體。

x86 上有個 A20 地址線，控制記憶體指標在 1MB 處迴繞還是繼續往上。你可以把段暫存器和偏移組合成超過 1MB 的地址，從而多拿到 64K，把程式碼放在那裡，低端記憶體只留跳轉樁。他們靠這招給幾個產品多榨出 64K。他當時完全不懂 HIMEM 是什麼，因為他是 Amiga 程式設計師，來微軟之前沒寫過一行 x86 程式碼。

## 移植程式碼像闖進別人家翻抽屜

> “這就像闖進別人家，翻他們所有東西，看到他們不想讓你看的抽屜裡的玩意兒。你會發現牆上的好畫，也會在床頭櫃裡發現一些讓人不適的東西。”（戴夫·普拉默）

他參與把整個 Windows 95 的使用者介面移植到 NT 上。核心工作之一是全部轉成 Unicode，每個 8 位字元變成 16 位。他形容程式碼切換完之後是一片混亂。

他看到了寬度 200 字元的行，裡面夾著髒話。這些東西后來幾年裡被清理乾淨了，但當時的程式碼水平說不上多專業。

這件事的另一面是：**你寫的每一行程式碼，都有人要一行一行讀過去。**包括五年後的你自己。普拉默說，這就是程式設計師的宿命，你寫的時候以為沒人會看，實際上會被非常多的人看到，而且是最挑剔的看法，因為他們正在找 bug。

NT 是另一套故事。微軟從 DEC 挖來了戴夫·卡特勒（Dave Cutler），他在那邊做過 VMS 和 RSX-11。DEC 西海岸的 Prism 和 MICA 專案被取消，整個團隊一起過來了。所以 NT 是一個全新設計，起點是 OS/2，但 OS/2 是彙編寫的，NT 要用 C 寫，具體借鑑了多少，普拉默說他也不清楚。

他給卡特勒的定位很乾脆：核心的架構師。Linux 世界裡是林納斯，Windows 世界裡是戴夫·C。

> “這人聰明得可怕，但他也像個農場主。他會跟在你後面，確保活兒幹完了，而且幹對了，確保你沒往他的作業系統裡塞垃圾。他不容忍這個。”（戴夫·普拉默）

他今年八十五歲，還是微軟 Fellow，據說每天仍然寫程式碼，仍然去上班。

## 他輸過一場架，至今不服

移植時他們在 MIPS 機器上幹活，RISC 架構不允許非對齊地址訪問。而 Windows 的 ID 列表是把 C:\、Windows、System32 這些元件拼起來的字串表，字元數一變成奇數，後面所有資料的地址就錯位了。

從非對齊地址讀字串，要麼開異常處理器逐位元組複製，要麼付出極大代價。他在郵件列表裡主張：乾脆保證 ID 列表永遠是偶數長度，或者用個 hack 強制對齊，這樣所有引用它的程式碼就能全速跑。

爭論升級成人身攻擊級別的對吵。他輸了。

> “我今天仍然知道，Windows 裡那段程式碼比它本該有的速度慢幾千倍。沒人在乎，因為已經夠快了。但它本可以快得多。”（戴夫·普拉默）

他講這件事的語氣裡沒有怨恨，更多是那種工程師特有的、對某個技術判斷長期不服氣的執拗。二十多年過去，他還記得。

這類爭論他也見得多。兩個聰明人吵到最後，技術優劣變成次要的，贏過對方變成主要目標，這時候討論就不再產出任何東西。

## 他們那時候除錯，全程看彙編

半天時間在除錯，而除錯的大部分時間花在純彙編的呼叫棧上。沒有原始碼級除錯，你可以在旁邊看原始碼，但螢幕上永遠是機器吐出來的彙編轉儲。

更麻煩的是同時支援四套指令集：Intel、MIPS、Alpha、PowerPC。機器在哪套平臺上崩，你面對的就是完全不同的暫存器和指令。他在 MIPS 上經驗多，所以 MIPS 的活兒會流到他這兒。

這活兒在今天是難以想象的耐力消耗。他說自己職業生涯裡 20% 在創造，80% 在除錯和修東西。他有點修理工的名聲，所以他總能接到這類活。

他講了一個和工作管理員有關的 bug。程式偶爾會顯示 CPU 總佔用超過 100%，這對一個工作管理員來說非常難堪。他加了一堆斷言，確保加起來之前每一項都不超 100，最後總和也不超 100，結果斷言一次都沒觸發，使用者那邊照樣能看到。

最後他把自己的電話號碼寫進了斷言訊息裡：如果你看到這條訊息，打 425-836 找 DavePL。

後來壓力測試的偵錯程式真的抓到了，問題出在核心的計數邏輯，不在工作管理員。核心那邊改了。電話本該刪掉，他們只是註釋掉了。

> “所以它就這麼釋出了，現在網上洩露的 NT 原始碼裡到處都是。我找工作管理員程式碼的辦法，就是在谷歌搜我的電話號碼。”（戴夫·普拉默）

他對斷言有一套近乎宗教的態度：

> “我不去斷言我希望不成立的事。我斷言我知道不可能成立的事。這才是斷言的本意。一旦它觸發，那就是 bug，絕不能當成一條可以忽略的提醒。”（戴夫·普拉默）

他也知道很多人不敢加斷言，怕它真的響。他的比喻是：你在路口轉彎，覺得可能有車來，但你不往左看，因為你不希望有車。**不敢斷言，本質是不想知道真相。**

他強調斷言要長在程式碼裡，不是事後補上去。寫到某個函式，你知道這個指標不可能為空，那就斷言它；你知道計數永遠小於兩倍位元組寬度，那就斷言它。

## 那個 87K 的程式，是從家裡長出來的

工作管理員的起點是他自己想要一個東西：看清哪些程式在吃資源，哪些卡死了，然後能殺掉。他在家寫了基本功能，用的登錄檔效能鍵，因為在家不能調內部 API。

收編進公司之後，他才能調 NtQuerySystemInformation 和 NtQueryProcessInformation，直接拿到真實資料，這讓程式變得極快、極靈敏。

他從來沒把功能多當目標。功能就是那一套，他想要的都有了。他要的是**絕對的健壯，和絕對的小**。第一版 87K。

做到這個體積的手法今天看有點硬核：完全不連結 C 執行時。他確保自己不呼叫任何執行時函式，也不連結它們，省下大約 96K，那幾乎是程式本身的大小。代價是他得手動從分派表裡呼叫所有物件建構函式，因為沒有執行時會替他做。

不卡死的關鍵是不做假設。你調 Shell 去啟動一個程式，那個路徑可能在某臺 TCP/IP 共享上，超時要等 90 秒。所以任何可能耗時的 API 呼叫，都得放到單獨的執行緒裡。程式因此變得多執行緒，複雜度上去了。

他還順手發明了一遍漢明碼。工作管理員的每一行每一列都有髒位，他透過行列兩個方向的髒位反查哪些單元格需要重繪，配合 ListView 控制元件做到只重畫變化的那一格。所以它能畫得極快，縮放極其順滑。縮放是他個人給這個程式定的最大目標：拖到任何尺寸都不崩，即使有 32 個 CPU（那個年代不可能），它會畫八張圖然後迴圈，今天還能跑。

這些程式碼今天大部分還在。上面疊了深色模式、XML 配置、GPU 和溫度監控，體積從 87K 變成四兆。

> “這就是我們生活的世界。”（戴夫·普拉默）

## 掃雷和紙牌是滑鼠教程

這兩款內建遊戲放進作業系統，充當的是教學工具。紙牌教你拖拽，掃雷大機率是右鍵，每一個都在教你一個操作。普拉默說得很直白，這是給新使用者熟悉滑鼠用的教具。

結果一整代人在這上面耗掉了無法統計的時間。

太空軍校生彈球（Space Cadet Pinball）是他另一段經歷。有人走進他辦公室問他接下來三個月想幹什麼，他說不知道，對方問要不要移植彈球。當時 NT 需要一個視覺展示，證明它能跑高速圖形或者至少是響應靈敏的圖形。

麻煩在於原版大量程式碼是彙編。他在 MIPS 機器上，只能先全部改寫成 C，才能往各平臺移。遊戲核心是一個巨大的狀態機，他記得大概是五十個分支的巨型 switch。裡面還有彩蛋。他把這塊當黑盒處理，自己的程式碼在上面做繪製和聲音。

有個細節他一直被問到：為什麼移植版的物理跟 Windows 95 原版略有不同。答案是 bug。他按每秒能畫多少幀就畫多少幀，在現代機器上彈球能跑到五千幀，於是物理被插值了五千次，而原來只有三十次。**結果物理反而變“好”了，或者說至少不一樣了。**後來這個問題被修掉了。

## 他把一棟房子的照片貼在顯示器上

1993 年，他和妻子開車在附近看房。有一棟三層臥室的房子，車道上停著一輛 93 年款紅色科爾維特敞篷，售價三十萬美元。他拿不出三十萬，連首付都拿不出。

他拿了傳單，剪下房子的照片，貼在顯示器上。

晚上回家他做兩件事：一是釋放白天修 bug 時無處安放的創造力，二是掙點外快。他照著一份 MSDN 的示例寫 Shell 擴充套件，做出一個能在資源管理器裡開啟資料夾的東西，然後往裡加 ZIP 支援。每一步都是增量。

他把它當 shareware 賣，19.95 或 29.95 美元，賣了幾百到幾千份。

某天早上他準備上班，接到一個電話。對方問，你是戴夫·普拉默嗎，你是寫 Visual ZIP 的那個人嗎。他說是。對方說，我是微軟的貝琪，我們想收購它，你能來談談嗎。

他問，你在哪棟樓。

對方愣了。他說我過來一趟就行。對方說不行，得先聯絡差旅，聯絡法務，要走流程。來回幾句之後兩個人才反應過來：貝琪不知道他就在微軟上班。他們是照著作者資訊冷電話打過來的。

他接受了報價。理由很實際：不接受的話，要麼繼續賣自己的版本然後辭職，要麼停賣然後繼續上班，兩個都不好。

然後他買了一輛二手的 93 年紅色科爾維特。

收編進 Windows 之後功能砍了不少。加密去掉了，因為那個年代加密演算法算軍需品，不能隨便往作業系統裡塞。多卷支援也去掉了，為了簡化。

ZIP 本身的來歷他也講了。BBS 時代，人們用調變解調器撥號下試用軟體，需要壓縮。可執行檔案大概能壓到一半。一個叫菲爾·卡茨（Phil Katz）的人做了 MS-DOS 上的命令列工具 PKZIP，從此在整個 PC 行業無處不在。Windows 出來的時候，市面上已經積累了十年的 ZIP 檔案，系統卻打不開，這就是內建支援的動力。

這套程式碼今天還在用。他補了一句：它是單核時代寫的，完全沒有多執行緒。你有一塊 96 核的 7995，解壓時它只用其中一個核。

## 啟用是他做的，他知道這東西招人煩

Windows XP 快釋出時，原本負責把 Office 的啟用機制移植到 Windows 的人一再延期，做不完了。普拉默有“能快速修好東西”的名聲，於是被找上門。

他帶著做 DRM 的團隊和做產品金鑰數學的研究人員，趕在 XP 釋出前做出來了。

他也承認這東西煩人，尤其是電話啟用。你得把硬體引數（記憶體、硬碟、繫結的各種硬體特徵）和產品金鑰一起編碼成字母數字，讓人在電話裡念出來。

> “你要是覺得電話啟用很痛苦，想想在電話另一頭幹活的人是什麼感受。連著八小時聽產品金鑰，那是份能把腦子磨平的工作。”（戴夫·普拉默）

## 作業系統不該成為對手

話題轉到 Windows 11 的工作列。他做過一期講“為什麼工作列不能移動了”的影片，反響極大，憤怒是實打實的。

他給的解釋不站在使用者這邊，也不站在微軟這邊。可以移動意味著渲染、佈局、標籤頁排布的所有程式碼複雜度上升，bug 面變大，程式碼量變大，可能需要多一個開發者或者某個開發者的一部分時間。問題是，為了滿足一小撮使用者的小眾需求，到什麼程度還值得。

萊克斯·弗裡德曼（Lex Fridman）的反駁是：VS Code 什麼都能配，為什麼開始選單不行。這種對小眾需求的照顧會形成聲譽，會形成一種“這裡每個細節都被認真對待”的氣場，對招人也有好處。

普拉默的猜測是排期決策。重寫開始選單的時候，砍掉左右上下、雙行標籤這些特性，能提前四個月交付。他不認為這是對的決策，但很可能是真實的動因。

他提了一個更根本的問題：你希望作業系統是你的對手嗎。Windows 有時候給人的感覺就是這樣，它不站在你的利益這一邊。

萊克斯舉的例子很具體：登入時不想用微軟賬戶，系統把這個過程設計得像在騙你，你得反覆點“跳過”，還要確認“你確定嗎”，一個介面的意圖變成了讓你做不到你想做的事。

普拉默補了另一個：升級時的“使用推薦設定”。聽起來像該選的，實際上會把你重置回 Edge 和一堆別的東西。推薦是給他們推薦的，跟你沒什麼關係。

> “我寧願每年付 199 美元用 Windows Pro，或者一個月 20 塊，別再往上推銷，別把我的資料變現。”（戴夫·普拉默）

## 老虎機的真相

他玩老虎機，明知整體是虧的，但那些強對比色和燈光對他是實打實的多巴胺盛宴。

機制他也講清楚了：機器內部有個黑盒，只幹一件事，生成下一個隨機數和對應的賠付結果。然後遊戲說，我得編一段電影來配合這個結果。三個 7 還是別的什麼，跟結果沒有因果關係。**轉輪停下、看落在哪兒、再判斷你贏沒贏，這個順序是顛倒的。**

至於跑什麼程式碼，他不知道。他試過接觸，很難。都是基礎 Windows PC，架在某種他不知道細節的安全飛地裡。

他還講了七十或八十年代拉斯維加斯的一個技術員，自己燒 ROM，把後門寫進去，藉著維修的機會換上自己的 ROM，半年後回來觸發。

## 他給一臺 PDP-11 裝了四個兆記憶體

這幾年他的特殊興趣是老硬體。他修 1960 年代的肌肉車和卡車，也修 PDP-11。

他攢了多年零件，決定裝一臺他能裝出來的最好的 PDP-11，就像給 PC 超頻那樣把一臺小型機拉滿。四個兆記憶體，那個年代是天文數字。上面是 PDP-11/70 的控制面板，下面兩個機箱，旋鈕控制 LED 顯示哪條匯流排，你可以暫停機器，用開關改地址，往記憶體裡塞資料。

燈的驅動不是現成的。他得重寫 BSD 核心才能讓燈按他想的方式閃。加一塊新磁碟控制器，就得重新編譯核心，就得去翻原始碼找裝置驅動的位置。

他現在對 BSD 核心已經相當熟了。

## GitHub Primes：用一百種語言寫同一個演算法

他有個專案叫 GitHub Primes，同一個素數篩演算法，用大約一百種語言實現，規則統一，每晚跑一次基準測試，看誰快。

規則很硬：必須是素數篩，每個整數最多用一位，不能用一位元組，因為那樣更便宜也更容易。記憶體分配必須在計時迴圈內。每個實現裝進單獨的 Docker 容器跑，多核全開，五秒內儘可能多次篩到一億。

有些語言做不到，比如 6502 只有 64K，篩不了一億，那些就當表演專案跑。

他最初只寫了 Python、C#、C++ 三個，發了期影片，然後別人往裡扔實現，扔到失控，現在由歐洲的兩個人接手維護。

目前的榜首是 Zig。C++ 那邊最佳化一下能領先一陣，然後 Zig 的人不服氣，回來再改快一點。**這是一場沒有終點的接力。**

## 他用 Lua 加 Python 教 AI 打 Tempest

Tempest 是 1980 年的 3D 向量街機遊戲，360 度移動，螢幕上最多八發子彈，十一種敵人，還有尖刺。普拉默在這個遊戲上持有世界紀錄。

他先把 ROM 從機器裡取出來逆向，搞清楚程式碼在記憶體裡怎麼分佈、零頁變數在哪、哪些位置有意義。然後寫一個 Lua 程式，在遊戲執行時把這些記憶體位置讀出來當特徵，透過 socket 送給 Python 那邊，Python 做強化學習，用的是 dueling Deep-Q，兩個網路互相追逐。

現在 AI 能打到第 36 關，比大多數人強，但那遊戲一共 96 關，路還長。

他說得很實在：目標是想打贏他自己。

他的大腦一次只做一件事，但做得極深

自閉症的核心理論叫單otropism，普拉默的解釋是：他的大腦做一件事，做得非常投入，做完了再換下一件。他不是多工處理器，是徹底的序列單任務者。

好處是可以在一個任務上投入驚人的專注和堅持。前提是這件事他得喜歡，得有回報，得能看見進展。他說這感覺跟小孩玩火車是一樣的。

壞處是他同時有相當程度的 ADHD。獲取專注本身是難點，他極容易被分散，睡覺要戴降噪耳機，或者乾脆睡不著。但一旦進入狀態，很難被打斷。這兩件事同時存在，聽起來矛盾，實際上是一個門檻極高、進去之後極難出來的房間。

更大的困難是：他不知道別人在想什麼。

> “我知道如果我是你，在這個位置，我會怎麼想。這是我所能做到的全部。大多數神經典型的人會有一種感覺，萊克斯大概是這麼想的或者那麼想的，因為他的舉止是這樣，反應是這樣，表情是這樣。這些對我來說全都丟失了。所以我給每個打交道的人跑一個代理 NPC 小遊戲。”（戴夫·普拉默）

電話對他格外難，因為只剩聲音。FaceTime 好得多，因為對方講完笑話可能會笑一下。在電話裡他分不清你是諷刺還是認真。

字面理解也是一部分。他小時候爺爺給媽媽在廚房做花架，用了很大的角鐵，五歲的他問這夠不夠結實能托住花盆。爺爺說，夠托住一匹馬。他當時非常困惑：為什麼要把馬弄進廚房，為什麼要把馬放在花架上。

他和妻子結婚三十一年，在一起三十七年。他們最早意識到彼此不同，是一天晚上坐在車裡，看著對面那棟房子，磚柱之間用錨鏈連成圍欄。他盯著那些兩英尺見方的柱子想，這是空心的還是回填了混凝土。妻子看著他，說，你腦子裡為什麼會有地方關心這個。

## 他在比爾·蓋茨面前糾正了“三個月”

第一個暑期實習，蓋茨把所有實習生請到家裡吃漢堡喝啤酒。他的導師本帶他去介紹。

本說，這是戴夫，我們從加拿大來的實習生，四個月裡他做了這些功能，還寫了 SmartDrive 的副本，然後開始列他做過的事。

他打斷了。

他說，其實是三個月。

兩個人都愣了，對視了一眼。他當場意識到，這個時機不對。

> “小地方的不準確會把我逼瘋。”（戴夫·普拉默）

他現在的說法是，自己比過去好多了。以前他不知道，也不知道在對話裡毫無意義地插一句糾正會影響對方、讓對方有什麼感受。現在他有更好的判斷力了。

## 十秒測試，和十把椅子

他設計過一個粗糙的自測。第一個問題：對一個社會整體而言，合作和創造力哪個更重要？多數神經典型的人傾向合作，譜系上的人傾向創造力，傾向個體解決問題的價值。

想提高精度可以加第二題：一個房間裡有十把椅子，六個人進來坐下，還剩幾把椅子。

多數人會說四。他說十，因為椅子還在那兒。

> “我並沒有在抬槓。我也不想把事情搞複雜。但我的腦子就是這麼運作的。”（戴夫·普拉默）

## 他回家後會重放每一個做選擇的瞬間

這套方法他叫情緒後處理。見完人，尤其是新認識的人，回家之後他會把當天所有需要做選擇的時刻重放一遍，先挑最不舒服的那些。剛才那一瞬我做錯了什麼，我漏掉了什麼，對方當時在想什麼，下次這種情況怎麼處理，要不要去補救一下。

他講了一個例子。他父親 1969 年買的新車，他留著，開了五十年。二十多年前他把車送去翻新，三個工匠做了三年，幾千小時。他去提車，檢查，很滿意，說這個好那個好，然後飛回家，寫支票，車送到。

十年之後他才意識到：一群工匠圍著他的車幹了三年，他當時應該說點讓他們高興的話，誇誇他們幹得多好。他沒說，因為那一刻他不需要那些話，也沒想到別人需要。

他給那家店的老闆發了封郵件：不知道你還記不記得，十年前我來提車，可能看起來並不滿意，但我想讓你知道，我對整臺車的工藝和水準非常佩服。

> “他回信說，那個場面我想過很多次。”（戴夫·普拉默）

這十年的時間差，是理解自閉症的一把鑰匙。他並非不感激，只是感激的訊號在當下沒有生成，十年後才被後處理機制撈出來。

也正因為這套機制存在，他要澄清一個流傳很廣的說法。

> “社群裡有一種看法，認為自閉症的人缺乏共情。我認為完全不是這樣。我只能代表我自己說，我共情能力相當強。問題出在溝通上，而且是雙向的。我不知道你此刻感覺如何，所以在你說出來之前，我很難對你共情。可一旦我知道了，一旦我理解了你腦子裡在發生什麼，我可以非常為你難過。”（戴夫·普拉默）

在沒有資訊的情況下，他的預設設定是：你會像我一樣處理這件事，用我所知道的方式。

所以他對神經典型的人的建議只有一條：說具體。別指望他能接住暗示、微妙和言外之意。如果你想把他推向某個行為，最好的說法是“戴夫，你需要做這個”。

萊克斯在訪談裡當場問：我今天有哪裡做得不對嗎？沒有。那打分呢，一到十分？7.5 分。浮點數打分，很符合這個人。

## 假裝正常是一份全職工作

所謂 masking，用他自己的話講，就是表演正常。

> “你在社互動動裡做的每一件事，揮手、表情、語調、姿態，全都是刻意構造的，全是工作量。對多數人來說這是自然的，他們就是這麼做的，有些人還做得特別好。但對譜系上的人來說，你得把這一切都假裝出來。”（戴夫·普拉默）

他提到 Rush 樂隊那首《Limelight》，尼爾·皮爾特（Neil Peart）寫的詞，大意是世界是個舞臺，我們只是演員、表演者和描繪者，互為彼此的觀眾。歌裡反覆講無法把陌生人當朋友、必須偽造情感。普拉默只對已故的人做推測，但他覺得寫詞的人大概也在處理同樣的問題。

這首歌之所以能擊中那麼多人，可能正因為這份疲憊有普遍性，只是在他們身上被放大到了一個必須每天面對的強度。

## 崩潰是一個開關，不是一段情緒

他描述 meltdown 的方式很像在講一個系統故障。情緒過載到某個點，你不再能管理自己的行為。他舉《雨人》裡機場那場戲，或者某些影視劇裡那個被禁止做手術的外科醫生。

> “開關一翻，你就掉進原始大腦。額葉皮層在某種程度上關閉了，你不再擁有決策和過濾的能力。那種狀態下你是一條爬行動物。這本質上是恐慌，是面對無法忍受的當下現實的戰鬥或逃跑反應。”（戴夫·普拉默）

萊克斯順口把它比作大腦的藍色畫面。普拉默說，差不多。

觸發它的一般是一連串事情的累積：糟糕的出差、工作上的爭吵、被隨機打亂的一天，堆到臨界點，任何一件小事都可能成為最後一根稻草。

## “你還好嗎”需要兩個步驟

他和妻子最近幾年養成了一套明確的檢查機制。她會問，你還好嗎。他答，還好。

> “這裡面有兩步。第一步是‘你還好嗎’，第二步是我的回答。因為如果我只是說‘好’，她就知道有事。”（戴夫·普拉默）

這套機制存在的原因很樸素：他沒法透過看一個人就知道對方狀態如何。所以必須顯式地互相 ping。

他對感情這件事的自我評價很低。“我從來就不擅長跟人打交道。有人喜歡我，我大概也接收不到。”他給兒子買過一件 T 恤，上面印著：如果你在追我，請明確告訴我，因為我毫無察覺。

> “我得在一個人身邊待很久，慢慢長進去，因為我沒有任何技巧，那種社交舞蹈需要的能力我一點都沒有。我唯一的選擇就是做我自己，而這對某些人是行得通的。”（戴夫·普拉默）

## 被這些問題吸引的人，大概有一兩成

他寫過一本書叫《自閉症百萬富翁的秘密》（Secrets of the Autistic Millionaire）。書裡提到一個概念：很多人會覺得自己“有一點點自閉”。

他的估計是，可能 10% 到 20% 的人處在譜系的某個位置，但影響程度沒有高到構成障礙。這些人仍然帶有許多源自自閉症的特徵。如果能識別並最佳化地管理這些行為，既可以借力，也可以緩解它帶來的缺陷。

這本書主要是寫給他孩子的。據他所知，幾個孩子都沒到 ASD 的診斷標準，但身上都有他某些跟這個相關的行為特徵。他想給他們寫一本手冊。

至於為什麼程式設計師裡這樣的人格外多，他的答案很直接：那種單向的專注，把問題不斷化簡的能力，以及對“裡面到底是什麼”的終極好奇。他一輩子都在拆東西，拆媽媽的烤箱，就為了搞明白翻頁鍾怎麼工作。他認為這是程式設計師的好習慣。

## 他剛好趕上了需要懂所有層的年代

關於 AI 寫程式碼，他的用法非常務實。Python 他不熟，幾乎是新學的，所以這個專案裡大量用生成式工具。他覺得很有用，因為看不懂的地方可以看它生成什麼，從中學到東西。他自己從零寫 Python，長度大概是 AI 產出的四倍，因為 Python 寫得好的話可以非常簡潔。

他承認自己是在 vibe coding 這個專案。

萊克斯追問了一個關鍵點：這必須建立在你已經會程式設計的基礎上。普拉默同意。他說你不可能在自己完全不會程式設計的情況下靠 vibe coding 做出一個東西，但如果已經是個好程式設計師，AI 能讓你變得極其強大。因為你能讀懂它生成的東西，能判斷下一步該讓它做什麼。

關於二三十年後的程式設計，他給的類比是橋樑工程。曾經有一批人在下面焊鋼樑，現在人們在 AutoCAD 裡拖拽預製件。程式設計大概也會變成那樣：你不再逐行扔程式碼，你搬動元件和介面，向 AI 描述它們之間該怎麼互動，讓它把元件造出來。但我們離“憑空生成一個相容 Linux 的核心”還差得很遠。

萊克斯問他會不會覺得遺憾，從機器碼、彙編、C、C++ 一路走到用自然語言寫程式碼，抽象層爬得這麼快。

> “我出道的時機其實很幸運。技術是在三四十年裡一層層長出來的，所以我理解 TTL 邏輯，也能用 AI 寫程式碼，中間那些零件我大概都知道。我的知識當然有洞，但要把這張圖拼得這麼完整，恐怕只有親身活過那段時間才行。現在起步的人，很難複製這個。”（戴夫·普拉默）

這句話點出了一件事：他這一代人的知識結構是歷史給的禮物。硬體、編譯器、驅動、介面、網路，每一層都在他職業生涯的不同階段被推到臺前，他被迫全部學一遍。今天入行的人，一上來就站在十層抽象的頂端，底下九層是黑箱。這不是能力問題，是時代問題。

## 意義這件事，他答得很乾脆

萊克斯最後問的是那個大問題：這一切的意義是什麼。

> “做出很酷的東西。歸根到底，我在乎的是能做出對別人有用的複雜東西，這件事能調動我的能力，讓我有創造性，讓別人用得上。如果把我限制在繪畫、雕塑那些傳統藝術裡，我毫無希望。對我來說這就是意義所在。然後再養出幾個好孩子，把接力棒交出去。”（戴夫·普拉默）

訪談的結尾，萊克斯引用了本賈尼·斯特勞斯特盧普（Bjarne Stroustrup）的一句話：世界上只有兩種語言，人們抱怨的，和沒人用的。

這句話放在普拉默身上挺合適。他寫的東西被幾十億人用過，也被人抱怨過，工作管理員被人抱怨，Windows 啟用被人抱怨，ZIP 資料夾被人抱怨。他本人對這些的態度是一致的：先把東西做出來，做小，做穩，然後接受它被使用的方式。

這期對話裡最值得帶走的，可能不是那些微軟往事。是一個人在明確知道自己大腦如何運作之後，圍繞這個事實重新設計了生活和工作的方式：用作品代替自我介紹去爭取機會，把社交規則顯式化成檢查機制，把每次失誤放回家之後重放一遍，把 640K 當成對全世界每一臺機器的責任。

還有他那句關於專注的坦白。他能對一件事投入極強的注意力和堅持，但前提是這件事他得喜歡、得有回報、得看得見進展。這三條其實也是所有人能進入心流的條件，只是大多數人可以在狀態不佳時硬撐過去，而他的大腦不提供這個選項。

最後是他自己給出的那份清單。

- 如果你正走在“今天先不去”的路上，注意那個決定正在變大。想走非標準的路，就明確地做大決定，別讓一百個小決定替你做。
- 找工作的時候，賣你能做的東西，不要賣你自己。GitHub 記錄、你寫過的演算法、你做出來的成品，比性格展示有效得多，尤其是在你不擅長社交表演的時候。
- 斷言要寫在你確信不可能成立的事情上，而且要長在寫程式碼的過程裡，不要留到事後補。它響了是在幫你。
- 寫任何要給別人用的工具，先假設所有 API 呼叫都可能卡住九十秒，把所有可能耗時的操作放到獨立執行緒。程式的可靠性和體積可以同時追求，87K 的工作管理員就是證據。
- 不要在程式碼裡留自己的電話號碼，除非你已經準備好它會在二十年後被谷歌索引到。
- 如果你身邊有人在譜系上，把話說具體。不要說“你覺得那樣行嗎”，直接說“你需要做這個”。不要指望對方接住暗示，那不是不願意，是收不到。
- 如果你是那個收不到訊號的人，建立顯式的檢查機制。跟親近的人約定一個固定的問法和答法，把“讀空氣”換成“直接問”。
- 每隔一段時間，回頭重放那些你當時沒反應過來的社交時刻。十年後才想起來誇一句工匠的手藝，也比永遠不說好。
- 想學一門新語言，最快的路徑是帶著一個真實專案去學，讓 AI 生成，你負責讀懂和判斷下一步。前提是你已經會程式設計。
- 如果某件事讓你痴迷到想拆開看裡面到底怎麼運作，別壓著它。這種好奇是能吃飯的本事。
