一年前,我暂停了编程生涯,开始尝试写小说,曾以为这是与编程截然不同的新旅程。然而,经过无数次的写作和反复修改,我现在深信两者其实有着诸多相似之处:无论是开发大型系统还是撰写小说,它们都有许多共通之处和类似的过程。
这两种活动最明显的相似之处在于,不管是编程还是写作,你都在创作文字。尽管代码不同于自然语言写就的散文,它同样遵循着一套固定的规则(即语法),某些代码形式对大多数程序员来说颇为自然,而其他的即便形式正确,也可能难以理解。
然而,编程和写作之间有更深层的联系:一个出色的程序和一本精彩的小说都是由各自的局部元素和整体构成精心编织而成。优秀的代码不仅要求每一条语句都写得清晰易懂,而且整个程序的不同部分需要保持独立性,设计上协调一致,互动清晰。同样,一本好的小说在字句的精准与整体结构和章节间的关系上也同样重要。
编程和写作之间还有一个较为非结构性的联系,那就是在从事这两项活动时所需的驱动力:要想成功,你需要不断取得进步,而要取得进步,你必须保持持续的努力。大家普遍认同,无论是程序还是小说,都不会自己完成。我从二十年的编码经验中深刻理解了这一点;我知道,只有每天坚持写作,无论是一天一百字还是两千字,都不放弃在纸上留下字迹。如果你曾经不仅仅是为了填充一个更大的系统而编写代码,而是创造了属于自己的作品,你就会明白,编程中也会遇到类似写作的阻滞。唯一的区别在于,对大多数人来说,你是一名工程师,因此,如果你停止工作,你就被视为懒惰。而对于艺术家来说,同样的懒惰却被视为创作过程中的一部分。
差异
我认为写作和编程之间最明显的区别在于,一旦完成、编辑并定稿,小说基本上就固定不变了。虽然有些作家会在几年后重新审视他们的作品,发布修正错误的版本,但这种情况相对罕见,而且即使发生,也通常是一次性的。而代码则随时间不断发展,经常会有许多人参与其中进行不断的修改。这个简单的事实对这两种创作过程产生了深远的影响:程序员通常会认为一个系统的初版可以不够完美,毕竟未来总有改进的机会。而作家则清楚,他们对每本小说只有一次“开枪”的机会,以至于写作往往成为了反复修订的过程,包括句子、整章甚至对话,有时需要修改两次、三次,甚至十次。
我认为,在这方面,编程可以向写作学习。在创作一个新系统的核心时,当初始创作者还处于孤立、独自面对一切时,她应该把这个初步核心看作是唯一的机会。在系统的初始阶段,她应该不断地重构这个基本框架,寻找最佳的设计方案。我的假设是,这种最初的设计会极大地影响后续的发展:一个拥有良好起始结构的系统,即使在离初始创作几年后,即便原始核心只是未来庞大系统的一小部分,最终也会发展成为更为出色的系统。
如果你对我的科幻小说感兴趣,这里有一个简短的更新。经过多次自我审查后,我把手稿交给了我的编辑 Giulio Mozzi。他将在几周内给我提出修改建议。接下来,我将根据他的建议开始新一轮的审稿,并希望在一到两个月内完成小说。然后,我将准备发布意大利语版本。同时,定稿的小说也将发送给我在美国的翻译者,待她翻译完成后,英文版也将随之出版。这是一段漫长但我深感愉悦的旅程。