iT邦幫忙

2026 iThome 鐵人賽

DAY 3
1
AI Engineering

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

Day 3|不可覆寫規則:一條規則要能擋人,得先有右邊那一欄

  • 分享至 

  • xImage
  •  

模組一|為什麼把小說當專案管(Day 1–4)

夜市、蒸籠、熱氣——我寫到那個場景,很自然地讓一個角色吃了東西。而我的世界觀文件裡寫得清清楚楚:矽魂不進食、不老死,食物與氣味只以記憶的形式留在殘志裡。我當下完全沒有想起那條規則,因為這種矛盾不會報錯。今天講的就是那條擋不住我的規則後來被改成什麼形狀:有些設定不是拿來查的,是拿來擋的。

先交代背景,這篇不需要你認識這個作品。我在做一個個人科幻創作專案《矽墟》——20 章長篇拆成 200 回短篇連載,13 個主要角色 + 8 個 NPC。我把它當軟體專案在管:設定進版控、規則寫成文件、動筆前先讀一份執行表。

今天要解決的問題是其中最工程的一個:一份寫得很清楚的規範,為什麼擋不住寫規範的人自己,以及把它改成什麼形狀才擋得住。如果你手上也有 coding style、review checklist、設計守則這類沒人真的照做的文件,這篇講的是同一件事。

先把犯罪現場完整講一次。

問題:我自己推翻了自己寫的規則

廢棄夜市——我讓角色吃東西、推翻自己規則的那個場景

我的世界觀文件裡有這麼一條(矽魂是這個世界裡「曾經是人」的矽基存在,殘志是它們存放記憶的地方):

矽魂不進食、不老死。食物、氣味、口感這些「活著的細節」,只以記憶的形式留在它們的殘志裡,那是它們維繫「曾經是人」與彼此羈絆的錨,不是生理需求。

寫得很清楚,理由也完整。

然後我在某一回讓一個角色吃了東西。

不是刻意破例,就是寫到那個場景,很自然地寫下去了。夜市、蒸籠、熱氣,這些畫面自己就會把「吃」帶出來。我當下完全沒有想起那條規則。

這不是記性問題。 一個人寫 200 回,隔了三週回到某個設定,忘記是必然的,不是失誤。

而且更麻煩的是:這種矛盾不會報錯。 寫的當下順暢、讀起來合理、沒有任何東西會提醒你。它只會在很久以後,被某個記得前面的讀者指出來。

到那時候,你要嘛改設定(前面全部要重審),要嘛改那一回(後面引用到它的地方全部要重審)。兩邊都是連鎖的。

怎麼做:把規則和它的執行結果綁在一起

我在執行表(NOVEL-STATE-SYSTEM.md,我每次動筆前必讀的那份檔案,它管的不是設定內容,是我下筆當下要遵守什麼)裡加了這張表。以下是它現在的完整內容。

先說明:表裡的專有名詞(調律者、牧械、霜瞳、零式、綠語、共弦、香門、島外)都是《矽墟》裡的角色代號或世界觀設定。不認得它們不影響你讀這張表——這篇要看的是左右兩欄之間的關係,不是欄位內容。

規則 寫作結果
調律者才能完整接回意志 牧械只能維繫程序;霜瞳、零式不是自行完成調律。
第一聲可答路,第二聲不可答名 遇到熟人聲音時,隊友以觸肩/位置確認代替回答。
名字是關係,不是系統欄位 不能把人直接以編號、功能或「修好」取代;本人可選擇留白。
香門一式一規則 戰鬥先讓讀者看懂規則,再看角色反制;勝利必有明確代價。
島外只露碎片 只給無名船、異語、信物、未署名來電;不給國名、完整勢力圖或穩定航線。
每次救援都有同意 綠語先問能不能碰;牧械只修被指定的接頭;共弦與霜瞳先確認訊號。

六條。而重點完全在右邊那一欄。

左邊是原則,右邊是可執行的判斷

霜瞳——「第二聲不答」這條規則的實際承擔者

看第二條。左邊寫「第一聲可答路,第二聲不可答名」:這是世界觀規則,講的是這個世界裡聲音可以被模仿,所以回應熟人的呼喚是危險的。

如果只有左邊,我在寫作現場能做什麼?我得先回想這條規則的完整脈絡,再判斷眼前這個場景適不適用,再想出一個符合規則的寫法。三個步驟,每一步都可能想歪。

有了右邊那欄,它變成:遇到熟人聲音 → 寫觸肩或位置確認,不寫回答。

一個查表動作。不需要理解,不需要推導。

禁止而不給替代,等於製造空白

https://ithelp.ithome.com.tw/upload/images/20260808/20183479VCxeg4c6z1.png
第六條是我覺得最值得講的:「每次救援都有同意」。

如果只寫這條原則,實際寫作時我會卡住:那不然要怎麼寫?角色衝過去救人是最直覺的動作,禁止之後那個位置就空了,而空白會讓人乾脆繞過規則。

右邊給了三個具體替代:

  • 綠語先問能不能碰
  • 牧械只修被指定的接頭
  • 共弦與霜瞳先確認訊號

三個都是可以直接寫進場景的動作。禁止有了去處,就不會被繞過。

這件事在工程上有完全對應的版本:一條只說「不要用 X」的規範,一定會被違反;說「不要用 X,改用 Y」的才會被遵守。 deprecation notice 如果沒有 migration path,大家就繼續用舊的。

這六條的共同點:全部都是關於角色會怎麼做

https://ithelp.ithome.com.tw/upload/images/20260808/20183479NthQr1F3EC.png
我後來才注意到,這張表裡沒有任何一條在講世界的物理設定。沒有「島有多大」、沒有「大靜默哪一年」、沒有「義體怎麼運作」。

六條全部都是限制角色行為的。

這不是巧合。能擋住我的規則,必須落在「我下一句要寫什麼」這個層級。 島有多大不會擋我,因為我寫的時候根本不會碰到它;「遇到熟人聲音不能回答」會擋我,因為它就發生在對話裡。

我在分層設定文件時用的那條判準,在這裡又出現了一次:會不會改變下一步的動作。 不會的,放知識庫。會的,才有資格進這張表。

代價

代價一:這張表沒有自動檢查。

我必須誠實講:這六條規則的執行,靠的是我每次動筆前讀執行表,然後自己記得。

沒有 linter,沒有 CI,沒有任何機制會在我寫出「矽魂吃東西」的時候跳出來。它是一份規範,不是一個約束系統。

這是這整套做法最弱的一環,我到現在沒有好的解法。能做的只有把表壓到夠短(六條,一眼看完),提高每次都真的讀一遍的機率。

代價二:規則一旦寫死,改的成本是連鎖的。

「不可覆寫」四個字聽起來很帥,但它的意思是:如果哪天你發現這條規則是錯的,你要改的不是規則,是所有已經照它寫的內容。

我有一條規則差一點想改,算了一下要回頭調整的回數之後放棄了。所以寫進這張表之前,最好先確認它真的是公理,而不是你這禮拜的偏好。

代價三:六條是我憑感覺定的上限。

為什麼是六條不是十五條?沒有標準答案。

我的實際理由很土:六條我掃一眼記得住,十五條我就會開始跳著看。 一旦開始跳著看,整張表就失效了。

所以與其說六是最佳解,不如說它是「我的注意力上限」。你的數字可能不一樣,但上限存在這件事是一樣的。

帶走什麼

一、規則要成對寫:禁止什麼 + 改寫成什麼。

只有左欄的規範是宣示,有右欄的才是可執行的。

檢查你手上的規範文件(coding style、review checklist、設計守則)有多少條只寫了「不要」?那些就是會被繞過的那些。

二、能擋住人的規則,必須落在動作層級。

判斷方式:這條規則會在我做某個具體動作的當下浮現嗎?

  • 「命名要有意義」→ 不會,太抽象,擋不住任何人
  • 「布林變數必須以 is/has/can 開頭」→ 會,你打字的當下就會撞到

前者是價值觀,後者才是規則。價值觀放文件,規則才進 checklist。

三、寫進「不可覆寫」之前,先算改它的成本。

不可覆寫的價值來自它真的不會被改。如果你三個月後就想改,那它從一開始就不該進這張表,應該當成「目前的預設做法」放在別處。

判斷句:如果這條規則錯了,我要回頭改多少東西? 答案愈大,你愈該在寫進去之前想清楚;但也正是這個答案,讓它有資格叫「不可覆寫」。


明天 Day 4,模組一收尾,講另一種會失控的東西:專有名詞。我會講一條看起來很嚴苛的規則(每章最多引入一個新名詞)以及為什麼這條限制救的不是讀者的記憶力,是我自己的。


上一篇
Day 2|世界觀當 single source of truth,但別只做這一步
下一篇
Day 4|每章只准放一個新名詞,這條規則救的是我不是讀者
系列文
《矽墟》:我把一部科幻小說當成軟體專案來管9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言