iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
AI Engineering

《矽墟》:我把一部科幻小說當成軟體專案來管系列 第 8

Day 8|完稿淘汰線:不問「這樣好不好」,問「刪掉會不會壞」

  • 分享至 

  • xImage
  •  

模組二|敘事規格化(Day 5–9)

《矽墟》是我正在寫的一部科幻小說,拆成 200 回短篇連載,整部作品用管軟體專案的方式在管:敘事結構寫成規格檔,成品用腳本驗收。規格我已經訂到三層——一章要推進三件事、每回 20 句分成四個節拍、一回內部有五段追讀引擎。

本篇是這套規格的另一半:驗收。寫完一回之後,怎麼判斷它能不能交。

問題:「這樣夠不夠好」沒有答案

你寫完一回,讀了一遍,覺得還行。

然後你不確定。再讀一遍,開始覺得第三段有點鬆。再讀第三遍,你已經對這些字失去感覺了,完全不知道別人讀起來是什麼樣。

這是所有創作者都會卡的地方,而它卡住的原因是問題問錯了。

「這樣好不好」是一個開放問題,沒有終止條件。你可以無限問下去,而且每次答案都不一樣,因為你的疲勞度在變。

我需要一個能得到 yes/no、而且今天問跟明天問答案一樣的問題。

怎麼做:把驗收改成刪除測試

我的兩條驗收標準,都不問「好不好」。

第一條,完稿淘汰線:

若刪掉最後一句,讀者仍想點下一回,代表上一句已經夠強;若讀者必須等到下一回才第一次得到答案,代表本回不合格。

第二條,刪稿判準:

一段文字若拿掉後,角色仍會做同樣的選擇、讀者仍知道下一步要做什麼、伏筆也沒有少,該段就刪或縮成一句。

兩條的形狀是一樣的:拿掉它,看有沒有東西壞掉。

為什麼刪除測試比評分有效

因為它把「品質」換成了「必要性」,而必要性是二元的。

「這段寫得好不好」:要打分數,主觀,會飄。
「這段刪掉,角色的選擇會不會變」:會或不會,客觀,今天明天答案一樣。

而且刪除測試有個好處:它不需要你保持審美判斷力。 寫到第 150 回、半夜兩點、對文字完全麻木的時候,你還是能執行「拿掉這段,伏筆有沒有少」。

這個形狀工程師應該很熟:

  • dead code 偵測:拿掉這段,還會不會編譯/測試會不會失敗
  • mutation testing:把這行邏輯改壞,測試會不會抓到,抓不到代表這個測試沒在測東西
  • chaos engineering:關掉這個服務,系統會不會有反應

共同點都是:不問「這東西好嗎」,問「這東西被移除時,有沒有人在乎」。

淘汰線的巧妙處:刪掉的是最後一句

我把最上面那塊最漂亮的磚抽走,退後看剩下的十九塊站不站得住

第一條特別值得拆。它刪的不是隨便一段,是最後一句,也就是整回的鉤子。

為什麼?因為鉤子是最容易被拿來遮醜的東西。

一回寫得平淡,但最後一句丟一個「而那個人轉過身來,臉是他自己的」,讀者就會點下一回。鉤子有掩蓋前面 19 句無聊的能力。

所以淘汰線把鉤子拿掉,逼你看前面 19 句自己站不站得住。

規格裡那句「若讀者必須等到下一回才第一次得到答案,代表本回不合格」講的就是這個:這一回本身要有兌現,不能全部押在下一回。

「不用更多設定補救」

我在洞的旁邊縫上第四塊補丁,洞本身一針都沒碰到

規格的最後一句,是我覺得最重要的一句:

每回交稿前逐項標記:鉤住/回報/加碼/人物獎勵/更大問題;少一項就重寫,不用更多設定補救。

這句在防一個非常具體的壞習慣。

情境是這樣的:你發現某一回的加碼段不夠力,張力上不去。

最直覺的修法是:加東西。加一個新的敵人設定、加一段世界觀解釋、加一個之前沒提過的能力限制。加完之後那一段確實變「厚」了。

但張力沒有變強,只是變重了。

因為問題不在資訊量不足,在於角色沒有做出有代價的選擇。加設定不會產生選擇,它只會延後那個空洞被發現的時間。

而且加設定有複利成本:新設定要記、要跟舊設定對齊、之後要回收。你為了掩蓋一個結構問題,替自己增加了三個維護負擔。

這件事在寫程式上完全對應:一個模組的職責沒切乾淨,最常見的錯誤修法是加參數、加設定檔、加一層 wrapper。做完之後它「支援更多情況」了,但原本那個切錯的邊界還在,而且現在更難改。

加東西比拿掉東西容易,所以它永遠是第一個被想到的修法,而且經常是錯的。

這條線的實際結果

刪除測試跑了 200 回之後,文字被壓到什麼程度?

每回正文字元數  中位數 230   平均 253.0   最短 181   最長 567
每句字元數      中位數  12   平均  12.6   最短   3   最長 109
總句數 4007
超過 40 字的句子: 7 / 4007 = 0.2%

每句中位數 12 個字。四千句裡只有 7 句超過 40 字。

**這個密度不是我的文風偏好,是刪除測試的產物。**每一句都被問過「拿掉會不會少東西」,能留下的都是承重的。

昨天講的那件事在這裡對上了——Day 6 說 20–35 句的規格塌到 20,就是這條刪稿判準造成的。它是單向的,只會讓東西變少。

所以這兩條規則其實是同一套機制的兩個尺度:句子層級的刪除測試把每句壓到 12 字,回層級的刪除測試把每回壓到 20 句。

代價

代價一:所有「不承重但好看」的東西都會被砍掉。

刪除測試問的是必要性,不是價值。一段風景描寫、一個閒聊、一個不推進劇情但讓角色更立體的小動作——這些拿掉之後,角色的選擇不會變,伏筆不會少,所以全部不合格。

但它們有價值。文學裡的呼吸、留白、閒筆,就是靠這些東西撐出來的。

我的作品因此偏緊、偏硬、資訊密度高,缺乏鬆弛感。這是這套方法最明顯的代價,而且我沒有解掉。

刪除測試會給你一個沒有贅肉的東西,但沒有贅肉不等於好看。

代價二:淘汰線需要一個我沒有的東西(讀者)。

「刪掉最後一句,讀者仍想點下一回」:這個判定的主體是讀者,不是我。

我只能模擬。而作者模擬讀者的準確度,前面幾天已經反覆講過了,很低。

所以這條線的實際執行是打折的。它比「好不好」好,但它不是真的客觀。

代價三:五項標記靠自覺。

「逐項標記鉤住/回報/加碼/人物獎勵/更大問題,少一項就重寫」:這五個標記沒有欄位、沒有檔案、沒有工具,就是寫完在腦子裡過一遍。

過得多認真,取決於當天有多趕。這是模組二所有規則的共同弱點,我在 Day 3 講過一次,到這裡還是一樣。

帶走什麼

一、驗收標準要用刪除測試,不要用評分。

把「這個夠不夠好」改寫成「拿掉這個,有什麼會壞」。

好處是三個:答案二元、不隨疲勞度飄、不需要維持審美判斷力。

實際可以套的地方:

  • 這段註解刪掉,讀的人會不會誤解 → 不會,那它是雜訊
  • 這個設定項移除,有沒有人的流程會斷 → 沒有,那它是遺留物
  • 這個測試刪掉,有 bug 溜出去時我會不會知道 → 不會,那它沒在測東西

二、驗收要針對「最容易被拿來遮醜的部分」。

淘汰線刪的是鉤子,因為鉤子最會遮醜。

同樣的邏輯:review 一個 PR,要先把最漂亮的那部分蓋起來看剩下的;評估一個系統,要先把 demo 場景排除看其他路徑。

問自己:這個東西如果表現不好,最可能靠什麼撐場面?把那個拿掉再看一次。

三、發現東西不夠力的時候,先確認你不是在加重量。

判斷句:我加的這個東西,有沒有讓原本的問題被解決?還是只是讓它比較難被看見?

加設定、加參數、加抽象層、加文件——這四個都有「做完感覺有進展、但原問題原封不動」的特性。

真正的修法通常是拿掉或重切,而那比較痛,所以我們都會先試加的。


明天 Day 9,模組二收尾,講跨回的一致性怎麼管:連載狀態表。我會坦白一件事:我的狀態表落後了 180 回,以及這個失敗告訴我什麼樣的狀態追蹤會活、什麼樣的會死。


上一篇
Day 7|追讀引擎的第四段最容易被跳過,而它是讀者回來的唯一理由
下一篇
Day 9|同一個檔案裡兩張狀態表,一張活到最後,一張在第 20 回就死了
系列文
《矽墟》:我把一部科幻小說當成軟體專案來管11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言