从写代码到写文章:
程序员的辩证法练习

写代码 12 年之后开始写公众号,最意外的不是写作本身的难,而是发现写代码和写文章本质上是同一件事。这件事困扰了我很久——直到我把辩证法重新翻出来。

这篇文章是我这两年来反复校对的一个观察:程序员转向写作,不是换工具,是换坐标系。理解这一点之后,写文章就没那么痛苦了。

写代码是分解问题,写文章是重组世界。 —— 本文核心命题

一、写代码:把混沌切成可控的模块

写代码的人都知道"分解"是什么意思。一个看起来庞大的需求,被拆成接口、被拆成函数、被拆成变量,最后变成几百行可以单独运行和测试的逻辑。

这个过程的快感来自哪里?来自从混沌到有序。需求是混沌的,代码是有序的;需求是模糊的,函数是清晰的。你做的每一步都是"降熵"。

我前 8 年的工程师生涯都活在降熵里。把不可控的需求变成可控的实现,把不可测的逻辑变成可测的函数,把难复现的 bug 变成可重放的脚本。这种训练让我以为:世界上所有问题都应该这样处理。

二、写文章:把已有的有序重新打散

然后我开始写公众号。第一篇、第二篇、第三篇——全部写得很烂。烂在哪?烂在我还在用写代码的方式写文章。

我想表达"程序员的思维方式",于是我列了 5 个特点,每个特点一段,配上代码示例。结构很工整,对仗很整齐,像一篇技术文档。没人看。

后来我才意识到:写文章不是分解,是重组。你手里已经有大量的"有序"——你自己的经历、读过的书、见过的现象——文章要做的事是把这些有序的东西打散,再以另一种结构重新组合,让读者看到一个他自己拼不出来的画面。

代码世界是由少到多:你从 0 开始,一点一点往上加。

文章世界是由多到少:你手里已经有 100 个点,要砍到 10 个,再以新的顺序排出来。

三、矛盾的双方:分解与重组

这两件事看似相反——一个加,一个减;一个收敛,一个发散。但它们处理的是同一类问题——把混沌的东西变得有意义。

这正是辩证法里最基本的一对范畴:分析与综合。

分析是把整体分解为部分,综合是把部分重新组合为整体。两者互为前提——没有分析无从综合,没有综合分析只是肢解。

写代码侧重分析。写文章侧重综合。但写好代码的人,必然要会综合(系统设计);写好文章的人,必然要会分解(论证结构)。

四、我自己的练习方法

意识到这一层之后,我给自己定了三条规则:

1. 写作前先列"我已经知道的所有事"

不列观点,列事实和现象。哪怕是"我今天吃饭时看到一只猫"也可以列进去。这个阶段是收集材料,不做判断。

2. 强制自己找出"还没意识到的事"

从第一步的清单里,挑出两个看起来不相关的事实,强迫自己建立联系。这个联系就是文章的"洞察"。这一步是综合的开始。

3. 写到 1500 字就砍到 800 字

不是为了凑字数而存在的内容,统统删掉。这一步是分析的回收——把已经组装好的逻辑重新拆,删掉冗余。

三步循环走下来,每篇文章都是一个"分析—综合—再分析"的小循环。


五、回到正题:程序员的写作优势

写代码和写文章不是两件不同的事,是一件事的两个面。程序员转写作的优势不在于"逻辑好",而在于已经受过多年的"分析—综合"训练。

很多非程序员写作者其实有很好的文章直觉,却缺少归纳的能力——这是他们写 100 篇之后还在原地踏步的原因之一。

反过来,只写代码的程序员写不好文章,是因为只用了自己的一半能力,缺了另一半。

会写代码的程序员去写会写,本身就是一个从自在到自为的过程。 —— 否定之否定

写代码时,你是自在于工具——工具在手里,你不知道你不知道什么。

写文章时,你是自为于思考——你意识到自己在用什么、缺什么、还可以往哪里走。

再回到写代码时,你就进入了自由——工具和思考都是你的,代码不再只是代码,文章也不再只是文章。

这是我这两年来最受益的一个观察。希望对你有用。


阿杰 · 写于第 13 篇公众号文章之后
杰