程式設計與寫作
一年前,我暫停了寫程式的生活,開始撰寫一部小說,天真地以為這項新的活動與過去的工作截然不同。經過如河流般湧現的文字——寫下,卻更常是重寫——之後,我相當確信事實恰好相反:打造大型系統的程式設計與撰寫小說有著許多共通的特質與相似的過程。
兩者之間最顯而易見的相似之處在於,你都在書寫些什麼。程式碼並非以自然語言寫成的散文,卻也有一套固定的規則(一種文法),有些寫法多數程式設計師會覺得自然,有些寫法雖然在形式上正確,卻讓人難以理解。
然而,兩者之間還有更深層的連結:好的程式與好的小說,都是局部與整體元素皆運作良好的總和。好的程式碼必須由寫得好、易於閱讀的單一敘述所組成,但整體而言,程式的不同部分必須彼此正交、以一致的方式設計,並擁有乾淨的互動。好的小說也同樣必須在微觀與巨觀這兩個尺度上取得成功。句子必須寫得好,但整體的結構與各部分之間的關係也至關重要。
程式設計與寫作之間另一個較不具結構性的連結,在於從事其中任何一項所需的動力:要成功,你需要有所進展,而要有所進展,你必須持之以恆。對於程式和小說都不會自己寫出來這件事,大家早有廣泛的共識。二十年的寫程式經驗在這方面給了我極大的幫助;我知道唯有每天坐下來寫,事情才會有所進展:有時一天寫一百字,有時一天寫兩千字,但很少有一天我不在頁面上留下文字。而如果你寫過的不只是為更大系統填充空隙的「填充物」,而是你自己的創作,你就會知道寫作瓶頸在程式設計中同樣會發生。唯一的差別在於,對多數人而言你是個工程師,因此如果你沒在工作,你就是懶惰。同樣的懶惰,若發生在藝術家身上,則會被詮釋為創作過程中迷人的一部分。
差異。
我認為寫作與程式設計之間最鮮明的差異在於,小說一旦寫完、編輯並定稿,大致上就保持不變了。固然有作家在數年後回頭修改自己的小說、出版一個除錯後版本的例子,但這很罕見,即使發生,也是一次性的過程。程式碼則會隨著時間演進,被無止盡的修改洪流所衝擊,而且往往由多人執行。這個簡單的事實對兩種過程產生了深遠的影響:程式設計師常常認為系統的第一個版本可以相當不完美;畢竟之後總有時間改進。另一方面,作家知道每一部小說都只有一次機會,以至於寫散文在很大程度上就是重寫的行動。重寫句子、整個章節、聽起來虛假的對話,有時兩次、三次,甚至十次。
在這方面,我認為程式設計可以向寫作學習:當撰寫一個新系統最初的核心時,當原創者仍是獨自一人、與外界隔絕、能夠做任何事的時候,她應該假裝這個最初的核心是她唯一的機會。在系統的創生階段,她應該一再重寫這個原始的核心,以找到盡可能最好的設計。我的假設是,這個初始設計將會大大影響往後發生的一切:以有機的方式去擴展一個具有良好初始結構的東西,將會產生更好的系統,即使在與最初創作相隔多年之後,即使最初的核心只是系統最終將會擁有的龐大體量中的一小部分。
如果你感興趣,這裡有關於我的科幻小說的最新近況。在經過多次自我審閱後,我已將手稿寄給了我的編輯 Giulio Mozzi(朱利歐·莫齊)。他會在幾週內將修改建議寄給我。我將根據他的筆記展開新一輪的審閱,並希望在一兩個月內完成小說的定稿。然後,我終於就能準備出版義大利文版。同時,定稿後的小說也會寄給我在美國的譯者,當她完成翻譯後,英文版也將會出版。這是一段漫長的旅程,但我由衷享受其中的每一刻。
隨機一篇部落格