我写完了《Python 工匠》一书的初稿

去年 6 月底,在写完“Python 工匠”系列的最近一篇文章“在边界处思考”后,我在写作上陷入了迷茫。我迷茫的点在于,我不知道是否该继续写下去,如果写,我又该写点什么东西?

当然并不是真的没内容可写。关于编程和 Python 的话题何其多,我写过的内容只是沧海一粟。异步编程、单元测试、新版本的新功能,等等,所有这些之前没写过的知识点我都可以写。

但问题在于,我说服不了自己去写新东西,因为我自己对已有的 15 篇文章质量其实并不满意。

“Python 工匠”的第一篇文章“善用变量来改善代码质量”发布于 5 年前。假如现在的我再去读,会发现文章里的许多措辞都不够精确,文法不通的地方也很多。这就和看到自己五年前写的代码一样——哪哪都是问题。

因此我做了一个决定。在写第 16 篇文章之前,我要先对“Python 工匠”的所有内容做一次精细的 Review,重写所有内容,在质量上至少做到让自己满意。

重写“Python 工匠”

但在重写文章的过程中,我发现了一个问题——对于我想写的内容来说,文章是个很糟糕的载体。在重写文章时,为了增加技术内容的描述性,我很容易就会把文章越写越长,很快就字数过万。

但在互联网世界里,能读长文,愿意读长文的人已是凤毛麟角。因此,即便我重写了所有文章,让它们变得更好(也更长),但我同时也能断定,它们不会帮我吸引更多读者,读我文章的人只会比现在更少。

也就是在这时,我的一位朋友,时任图灵社区编辑的 HY 找到了我。在她的一些鼓励下,我动了写书的念头。我觉得和碎片式的文章相比,“Python 工匠”也许更适合作为一本书来整体发布。也许经过一些重写,我能把 15 篇文章重整成一本 200 页左右的小书

随后,在图灵社区编辑英子女士的帮助下,我确定了新书的写作框架。在这个框架下,我的内容可以被体系化的组织成一本书,同时也能最大程度保留“Python 工匠”系列的特色。随后我向图灵社区提交了选题报告,很快选题便通过了。

在签约了图书出版合同后,我便开始了漫长的写作过程。

我从事着一份全职程序员工作,还有一个即将幼儿园毕业的女儿,工作之外,我并没有特别多的时间可以用来写作。我的主要写作时间,来自每天早上的 90 分钟,以及大部分周末。因为只能在业余时间写作,所以我写的不快,写作周期被拖得很长。在持续写了 9 个月后,上周我终于写完了这本书的初稿。

虽然整本书的核心内容和框架来自“Python 工匠”,但新书几乎没有任何一个句子,与“工匠”中完全相同。我重写了所有的旧内容,同时写了许多新内容——比如面向对象编程、单元测试、数据模型,等等。

这带来的结果是,新书相比目前的 15 篇“Python 工匠”文章,内容量翻了近三倍,页数也从预期的 200 页变成了将近 400 页。

书的结构

在写作新书的过程中,我最大程度维持了“Python 工匠”的特色,那就是注重细节,注重案例,同时尽量让文字有些故事性。

和文章相比,书的每个章节结构更规范,更成体系。大部分章节的内容都分为三部分:

1. 基础知识:有关本章内容的一些语言基础知识,比如在“容器类型”一章,我会简单介绍列表、字典的基本操作,同时说明可哈希/不可哈希等一些常见概念; 2. 案例故事:以案例和故事的方式,描述如何写出更好的 Python 代码; 3. 编程建议:有关写好代码有关的细节与建议。

全书目前共 13 章,目录如下:

  • 第 1 章 变量与注释
  • 第 2 章 数值与字符串
  • 第 3 章 容器类型
  • 第 4 章 条件分支控制流
  • 第 5 章 异常与错误处理
  • 第 6 章 循环与可迭代对象
  • 第 7 章 函数
  • 第 8 章 装饰器
  • 第 9 章 面向对象编程
  • 第 10 章 面向对象设计原则(上)
  • 第 11 章 面向对象设计原则(下)
  • 第 12 章 数据模型与描述符
  • 第 13 章 开发大型项目的建议

书的未来

同在网上发布电子内容相比,传统图书出版简直慢的惊人。上周,我已经把初稿提供给了出版社,假如一切顺利,也许你能在 6 个月后,也就是 2021 年底买到我的新书。

最后的话

假如只看数据,“Python 工匠”并算不上什么特别成功的系列文章。截止目前,我的微信公众号 “piglei” 的订阅数也不过 2000 余,不及许多技术公众号的零头。

但支撑我写完整本书的东西,其实不是什么漂亮的数据,而是一些独立的读者个体曾“千方百计”给我的鼓励。其中有一位读者我印象最深,他用了一种非常让人意外的方式,向我反馈了他对“Python 工匠”的喜爱。

去年某一天,一位女同事突然在公司内的企业微信找到我,问我是不是“Python 工匠”的作者,我回复说是的。

我本以为她是一位来咨询 Python 问题的普通读者,但当我习惯性的点开她的资料卡后,发现她的岗位根本不是开发,她的工作内容和 Python 半毛钱关系都没有。

“是这样的,我老公前几天在网上读到你的文章,觉得写的特别好。他从你的 GitHub 资料里看到你在 TX 工作,所以非得让我到内网告诉你一下。你写的文章很好,希望能看到你写出更多好文章。”

写作是件很孤独的事情,你关上门,把自己放在电脑前,然后就只剩下你和你自己开始对话。但孤独归孤独,正是上面这些读者让我清楚认识到,这世界上有许多从事编程工作的人,曾与我有过同样的问题与困惑。而当我用键盘把自己的思考和经验写下来时,我其实替他们说出了许多想说但没说的话。通过文字和代码,我和成百上千的 Python 程序员们连接在了一起。

几个月以后,当你在书店里在京东上有意无意邂逅我的书时,希望你能驻足瞄上几眼、翻上几页。假如书写的合你心意,那就买一本吧。毕竟用我老婆的话说:“现在书可太便宜了!买书简直是世上性价比最高,最让人快乐的事情!”

题图来源:Photo by Kelly Sikkema on Unsplash