技术写作二三事:原创情结

2019 年的春节假期,我闲在家中,准备一次性刷完攒了大半年的“Python Weekly” 周报。在 6 月份的一封周报里,有一篇名为 “Python Idioms: Multiline Strings” 的文章,内容很精炼。前半部分先描述痛点:在 Python 中写多行字符串字面量,随后演示如何用 textwrap.dedent 函数来优化它。

部分内容摘录如下:

... The problem is that it’s just ugly, because indenting the strings actually inserts the indentation into the string. So you have to do this:

def create_snippet():
    code_snippet = """\
int main(int argc, char* argv[]) {
    return 0;
}"""

With dedent, we can indent the whole multiline string according to the current scope, so that it looks like a Pythonic code block...

巧合的是,我两个月前刚在博客上发布了“Python 工匠”的第 3 篇文章:“使用数字与字符串的技巧”。在这篇文章中,同样出现了 textwrap.dedent 函数。

我写的内容:

日常编码时,还有一种比较麻烦的情况。就是需要在已经有缩进层级的代码里,插入多行字符串字面量。因为多行字符串不能包含当前的缩进空格,所以,我们需要把代码写成这样:

def main():
    if user.is_active:
        message = """Welcome, today's movie list:
- Jaw (1975)
- The Shining (1980)
- Saw (2004)"""

但是,这样写会破坏整段代码的缩进视觉效果,显得非常突兀。你可以用标准库 textwrap 里的 dedent 函数来解决这个问题...

看出来了吗?我的写作思路和代码样例,与前面那篇文章如出一辙。

现在听上去或许有点可笑,但当时我的心情相当沮丧。为什么?因为我那时是个“原创情结”特别强的人。每次写作前,我一定要确认自己没看过类似的内容,才会下笔。也就是说,假使我在写作前一天读过 “Python Idioms: Multiline Strings”,那么 textwrap.dedent 十有八九不会出现在我的文章里。

我说不清这种拧巴的“原创情结”从何而来。似乎从十几年前,我的博客上线后的第一天起,我就已经这样了——如果有一个技术点,别人已经写的足够好了,那么我打死都不会再写一遍。但结果你们已经知道了——懂 textwrap.dedent 技巧的人远不止我一个。所谓“写出原创内容”带给我的那点虚荣感,就像小朋友吹出的肥皂泡一样,一触即破。

表面上看来,“原创情结”对作者有好处。它让后者对自己要求更高,不至于心甘情愿沦为知识的搬运工(或更恶劣一点:沦为抄袭者)。

但实际上,对于写作者(尤其是技术写作者)来说,“原创情结”带来的坏处远大于那一丁点好处。因为对“内容是否原创”的过度痴迷,会彻头彻尾地消灭一个人的创作冲动。“原创情结”像是一条无形的锁链,我们被它牢牢捆在“一举成名天下知”的幻梦中,无法挣脱。

同其他领域相比,在技术写作领域追求原创性尤其困难。在 StackOverflow 上,每天都有上百万的技术大佬,慷慨分享着自己的技巧和经验。 在各种独立博客和云厂商(点名 DigitalOcean)的知识库里,每天都有无数高质量的技术文章新鲜出炉,足以让人眼花缭乱。在这样的创作密度下,要找到一片没有其他人开垦过的处女地,难度可想而知。

在行业摸爬滚打了十几年后,我如今只有一个感触:装在自己脑子里的技巧、概念和知识,几乎没有哪一样可称得上是原创。 有时候,我以为自己写了一些颇具原创性的观点。结果过几天听英文播客时,居然从访谈嘉宾那听到了一模一样的内容——翻译成中文后,与我的原文几乎只字不差。

假如我们诚心认为自己掌握的某项知识是原创,那或许只是因为读的还不够多、不够广、不够深。除此之外,还有一种可能,那就是我们忘记了知识来自何处。

拿文章开头的 textwrap.dedent 来说。如果仔细回忆,我也许会想起在某个工作日的午后,我随意打开了某个开源库的代码,发现了这个小技巧,并记住了它。光阴荏苒,经过了足够长的时间后,我逐渐忘记了那段经历——这个小技巧被我据为己有,放进了大脑里的“原创知识”那一栏。

所以,技术文章的原创性,大多数时候只是作者们的幻觉。现在的我在写东西前,不会再考虑任何“内容是否足够原创”之类的问题。我唯一遵循的原则,就是绝不有意偷窃其他人的写作成果。

许多时候,我们想动笔写点技术文章,即不是为了硕士毕业证,也不是为了申请国家专利,我们只是想记录与分享一些朴素的经验而已。既然如此,要那么高的“原创度”顶个球用?

如果你常年琢磨着写一些技术文章,却被“原创情结”所束缚,无法下笔。每年一到年底,打开自己的博客一看,总是空空如也。我可以尝试给你一些建议:

  • 在某种意义上,任何创作都是有价值的。因为价值是由读者定义的,和作者从哪儿(原创还是抄袭?)得到的创作灵感无关
  • 你不重要,你写的东西也没有那么重要。没人期待在你的文章里,学到任何独家秘笈,别有任何心理负担
  • 假如从内容上无法创新,也可以在形式上做一些尝试。有些文章的内容光芒璀璨,却常因原作者糟糕的写作形式和文字技巧被埋没
  • 假如遇到一个你感兴趣的主题,其他人已经写过了,但你觉得你能写的比他更好,何不试一试?

上面这些话,有时我也会用来宽慰自己。

所以,别再纠结于原创与否,打开电脑,随便写点啥吧。“某个诡异的线上 Bug”;“Python 的 5 个面向对象小技巧”;“详解 Kubernetes 的某个配置项” ,所有主题都是好主题。不必想着写出什么惊世佳作,坚持写,我们总会慢慢进步。

也许某一天,你在写了许多东西以后,抬头一望,会看到一片瑰丽的新大陆,正向你徐徐展露。

😊 如果你喜欢这篇文章,也欢迎了解我的书: 《Python 工匠:案例、技巧与工程实践》 。它专注于编程基础素养与 Python 高级技巧的结合,是一本广受好评、适合许多人的 Python 进阶书。