淡灰色是給誰看的
打字打到一半,遊標右側浮出一段自己還沒寫的程式碼。它比正文的字淺一階,字體略斜,像墊在紙下的複寫紙。輸入一個函式名稱,或寫下一行註解,AI 助理隨即把接下來的整段程式補在後面:按 Tab 收下,按 Esc 退回,或者繼續打字把它擠掉。
這行灰字是一個完整的介面決策。舊式的自動完成一次只補一個單字,從彈出選單裡挑;新的建議是一整段,像別人替你先打好的草稿。它刻意做得比作者的字更輕,對比更低,隨時可以消失。同一行裡坐著兩種文字,色階分出主從:亮的是已經成立的,暗的是候選的。按下 Tab 的那零點幾秒,寫字的人換成了審字的人。
知乎熱榜上有人把這件事倒過來問:現在的大學生還有必要學習古法編程嗎。親手寫程式先被命名為古法,像古法釀造與古法造紙那樣,然後才被提問。順序本身就是設計:先命名,再提問。
等寬字格是程式碼的閱讀介面
價值問題先擱著,看材料。程式碼的載體是文字,而它的字體選擇近乎信仰:等寬。每個字元佔同樣的寬度,i 和 m 一樣寬,分號和 W 一樣寬。這條格線承襲自打字機。一九五五年問世的 Courier 原本為 IBM 的電動打字機設計,後來被終端機與編輯器沿用,成了程式碼的預設底格。它撐起一種閱讀方式:上下兩行的同一個欄位精準對齊,眼睛走直線就能掃出括號有沒有配對,縮排有沒有少一層。
深色主題的由來也值得一提。終端機的黑底並非美學偏好,早期螢幕本來就是黑底綠字,後來的深色編輯器沿用了這段視覺記憶,把工程感做成一種配色傳統。縮排則是另一種材料,用空白鍵一格一格堆出的層級,在 Python 裡甚至是文法本身。結構由看不見的空白撐住,這大概是所有文字工作裡最依賴留白的一種。
語法高亮是第三層。註解沉到灰色,字串轉成橘色,關鍵字浮上藍紫,行號以更低的對比退在最左邊。色彩標示每個字元的文法角色,讀的人在理解邏輯之前,先看見結構。
手寫程式的考卷因此值得設計師多看一眼。紙把整套閱讀介面卸下:沒有等寬格線,沒有語法色階,所有筆畫同一個黑色。剩下的閱讀介面只有縮排的層級與命名的品質。寫的人得在腦內重建那套色彩系統,判斷哪個字是結構、哪個字是內容,這種考試考的其實是重建的功夫。
古法兩個字先排好了位置
回頭看命名。古法在消費市場裡是成熟的手工藝詞彙:古法醬油、古法黑糖,它承諾慢工與職人在場。把這個詞搬到寫程式上,詞面先完成了一次歸檔。親手寫程式從預設動作變成手工選項,寫的人從工程師變成職人。討論還沒開始,雙方的位置已經排定。
這套敘事有現成的先例。石英錶危機之後,機械錶以工藝之名存活,價位反而翻高;自排車普及之後,手排成為駕駛玩家的選配。技能一旦被稱作古法,市場通常給它兩種結局:收進情懷的玻璃櫃,或者轉成高價的差異化。危險也在這裡。一旦基礎訓練被歸檔為情懷,刪減課程就有了聽起來合理的理由。大學面對的問題因此比字面尖銳:課堂教的是地基,還是收藏品。
按 Tab 之前,總得有人讀完那行字
介面細節裡藏著回答。幽靈文字的設計前提,是使用者讀得懂那行灰字。它做得輕,因為要隨時可退;它隨時可退,因為有人要判斷它該不該留。整條生產線上最貴的環節,仍然是人的閱讀。生成得越快,讀得懂的人越顯得稀缺。
新工具還在編輯器裡疊上更多層。側邊的對話欄把開發排成聊天,輸入框貼在底部,回應是一整段可以直接貼上的程式碼。差異比對視圖把修改濃縮成幾行紅綠。每一次簡化,都把閱讀的責任往後推一格,推到最後按下確認鍵的那個人身上。
除錯是另一個躲不掉的場景。錯誤訊息以紅色列出,堆疊追蹤一行行往上翻,讀懂它們向來是手藝;生成的程式碼出錯時,這門手藝是唯一的出口。同樣的結構在其他 AI 介面裡也看得到。英國 Citizens Advice 籲請停止依賴 AI 客服,理由是對話氣泡裡找不到真人的出口。這與我們先前拆解的AI 客服迴圈指向同一件事:工具接管流程,接管不了判斷,而判斷的前提是讀得懂材料。
系館裡的工作室
設計教育早有類似的處理。CAD 普及之後,建築系仍保留手繪與圖學;字體排印課至今有學校從鉛字排起,讓學生用指腹理解字距與行距。學校留下這些慢的環節,理由很實際:判斷力需要材料在手上磨過的那段訓練。紙筆考試與白板推導的共同點是慢,慢到每一層縮排都要自己決定,慢到沒有人替你先打草稿。
古法編程這個詞大概會留下來,像手排與機械錶一樣成為標籤。學校的答案可以更務實。AI 宣稱證明了數學猜想,最後仍要靠 Lean 證明代碼裡那行 No goals 來驗收,這是AI 破解哥德巴赫猜想的傳聞留下的教訓:輸出的可信度,最終回到可讀的文字。課綱不會因為一則熱榜詞條改寫,但它決定下一批按 Tab 的人,知不知道自己收下的是什麼。遊標繼續閃,頻率沒變,變的是遊標後面那行字由誰負責。