今天修網頁時,遇到一個很奇怪的 bug。
頁面上有一塊模擬氣候的裝飾文字,本來只是背景裡的小東西,用來製造一點遙測終端的感覺。它正常的時候很普通:溫度、輻射、氧氣含量、污染狀態、酸雨警告,像某個災後生態監測站留下的殘餘介面。
重新整理頁面時,它總是正常的。
但只要我打開別的頁面,或者讓網頁運行一段時間,再不經意地回頭看它,它就會壞掉。
不是徹底壞掉。不是那種一眼就能判定為「頁面出錯」的崩壞。它只是開始輕微錯位,字元重複,詞語互相侵蝕,像一段訊號在漫長傳輸後被雨水、灰塵和時間磨損。原本清晰的 POLLUTION 變成扭曲的殘片,ACID RAIN 被拉長成幾乎無法辨認的回聲,最後只有 OXYGEN DEPLETION 還頑固地浮在那裡,像一個系統在失去表達能力之前,仍然試圖報告最重要的災難。
我第一反應當然是修。
計時器,狀態殘留,元件卸載,路由切換,隨機文字生成,所有前端裡可能出問題的地方都逐一檢查。bug 倒是能修好。問題是,修好以後,它也不好看了。
我試著重新設計這種效果。模擬字元漂移,控制噪聲密度,保留關鍵詞,加入終端風格的斷行和符號。邏輯上更乾淨,效能上更穩定,視覺上也更「正確」。但它始終少了點什麼。
後來我意識到,少掉的正是 bug 本身。
設計出來的故障,往往知道自己在扮演故障。它會刻意製造亂碼、掃描線、錯位、抖動,彷彿在不斷提醒你:「看,我壞了。」 而真正的 bug 不一樣。它沒有表演欲。它只是錯誤地繼續運行,錯誤地繼承上一次狀態,錯誤地把一段本該清理掉的東西留在了頁面裡。
它不知道自己好看。
也正因為如此,它反而更接近真實的損壞。
很多美感大概都是這樣來的。老膠片的漏光、磁帶的失真、CRT 螢幕的烙印、壓縮損壞後的圖像塊,一開始都不是為了好看而存在。它們是材料、設備、演算法或時間留下的傷口。後來我們可以模擬它們,卻很難復刻第一次失控時的自然感。
因為人為的仿製總會太聰明。 而故障最迷人的地方,恰恰在於它不聰明。
所以我最後不想完全修掉它。
當然,程式碼還是要健康。不能讓計時器無限疊加,不能讓狀態洩漏,不能讓頁面越跑越慢。這些是真正需要修復的部分。但那段意外生成的異常文字,我想把它留下來。
不再讓它作為 bug 繼續失控,而是把它保存成一段舊日誌。
一段網頁曾經真實壞掉過的記錄。
它不再是一個效果,而是一件遺物。一個小小的證據,證明這個系統曾經在某個下午偏離了設計者的意圖,並在錯誤中短暫地長出了自己的表情。
這大概也是我喜歡它的原因。
正常的介面只說明:有人完成了設計。 而這個故障像是在說:系統曾經活過一瞬間。