124 lines
12 KiB
Markdown
124 lines
12 KiB
Markdown
# 我如何写关于 Python 的书
|
||
|
||
> 原文:<https://www.blog.pythonlibrary.org/2019/02/26/how-i-write-books-about-python/>
|
||
|
||
我不时会被问到关于我写书过程的问题,我一直想写这个话题。我写第一本书 [Python 101](https://python101.pythonlibrary.org/) 的主要原因是因为我博客上的读者。他们鼓励我写一本关于 wxPython 的书已经有一段时间了,我决定我应该从写一本介绍性的书开始,这样我就不需要在我的中级书籍中包括一大堆介绍性的信息,如果我有时间去写它的话。
|
||
|
||
当我在写那本书的时候,我不得不寻找生成 PDF、mobi (Kindle)和 epub 格式的方法。我跳过了 Microsoft Word,因为我还没有找到将这种文档类型转换成其他文件类型的好方法,而且它在跨平台上也不太好用。
|
||
|
||
### 工具链
|
||
|
||
我最终选择了[重组文本](http://docutils.sourceforge.net/rst.html)。我也尝试过 Sphinx,但是在我给自己的时间框架内,我无法让它按照我想要的方式工作。然而,RestructuredText 允许我用 [rst2pdf](https://github.com/rst2pdf/rst2pdf) 轻松地转换成 PDF。
|
||
|
||
然后我用 [rst2html](http://docutils.sourceforge.net/docs/user/tools.html) 创建了这本书的 html 版本。当你有了 HTML,你就可以使用图书转换工具 [Calibre](https://calibre-ebook.com/) 来转换成 mobi 和 epub 格式。最后,我得到了一个 Python 脚本,它会调用 rst2pdf、rst2html 和 Calibre 将我的书转换成适当的格式。
|
||
|
||
这工作得很好,但是没有创建一个非常好的目录。
|
||
|
||
当我在开发 Python 101 的续集 [Python 201:中级 Python](https://leanpub.com/python201) 时,我发现了 [Leanpub](https://leanpub.com) ,它对他们的书使用 Markdown,并将该格式转换为我想要的所有输出格式。输出看起来不错,最棒的是,它有一个合适的目录。
|
||
|
||
因此,我目前的工具链(截至 2019 年初)现在是用 RestructuredText 编写,并使用 [Pandoc](https://pandoc.org/) 将其转换为 Markdown。我这样做是为了在我出于某种原因决定放弃 Leanpub 的情况下,更容易切换回我自己创作的图书制作脚本。坦白地说,我想做的是使用 ReportLab 创建一个脚本,可以将 Markdown 或 RestructuredText 转换为 PDF。我怀疑我可以得到同样质量的东西,至少是 pdf。
|
||
|
||
**2020 更新**:我最终放弃了 RestructuredText,转而使用 Markdown,因为我发现 Pandoc 没有正确地转换代码示例和其他特殊结构。这导致语法突出显示无法正常工作。
|
||
|
||
### 研究与开发
|
||
|
||
当谈到为我的书选择主题时,我通常会使用我知道在我的博客上流行的主题。对于 Python 101 来说,有点不同,因为我已经阅读了许多关于 Python 的初学者书籍,并决定涵盖许多我在初学者书籍中不常看到的主题。其中一个例子是展示如何将代码发布到 PyPI 或者用 Python 创建可执行文件。
|
||
|
||
我密切关注我博客上的统计数据,以了解哪些文章做得很好,因为这也给了我关于书籍内容的想法。在 [ReportLab](https://leanpub.com/reportlab) 上创作我的书的两个原因是
|
||
|
||
1. 没有这方面的书籍
|
||
2. ReportLab 上的文章往往在我的前 10 名中
|
||
|
||
Kickstarter 在这里也发挥了一些作用,因为我会问我的支持者他们认为书里应该有什么,然后我会把这些想法排序,决定哪些会成功,哪些不会。
|
||
|
||
### 评论这本书
|
||
|
||
作为一名自行出版的作者,我的管理非常严格。我没有出版商付钱让人评论我的作品,所以我必须有创意。在某种程度上,我最终把我的博客当成了一个测试网站。我通常会在我的博客上发布我的书的新章节,以被动地获得读者的反馈。我也相信让我的书大部分是开源的,所以把章节放在那里对我的读者和我需要查找的时候都很好。
|
||
|
||
我也用 Kickstarter 做一些小的测试。通常会有支持者想要尽早阅读这本书,他们也给了我很多反馈。这很有帮助,这些书也因此变得更好。
|
||
|
||
在这一点上,我已经和两家出版商合作过,他们都没有给我读者给我的那种支持和反馈。我感谢你们所有人。
|
||
|
||
### 从读者那里获得反馈
|
||
|
||
说到反馈,我主要通过 Kickstarter 和我博客上的评论获得反馈。我所有的书都有电子邮件地址,读者也可以用它给我发邮件。我确实通过这种方法收到了不少读者的邮件,但我认为我从我提到的前两个来源得到了更多。
|
||
|
||
大多数反馈都是积极的,真的鼓励我继续写作。我偶尔会收到一些脾气暴躁的邮件,但即使是那些罕见的情况也有助于我看到我可以做得更好。
|
||
|
||
### 更新您的图书
|
||
|
||
当你选择写科技或计算机科学时,你知道你的书会随着时间的推移而过时。自助出版的最大好处之一是,我可以接受反馈,在几个小时或几天内修改一本书,并将这些更新直接推送给最终读者。在收到错误报告的几个小时内,我已经修复了错误并推出了新版本。
|
||
|
||
我更新书籍有几个不同的原因:
|
||
|
||
* 这本书现在已经过时了
|
||
* 这本书有一个印刷错误
|
||
* 这本书错了(该死!)
|
||
|
||
我尽量写一些暂时不会改变的话题。例如,wxPython 和 ReportLab 不会经常以中断的方式进行更改。所以我可以写它们,而不用担心我的例子在书出版时会被破坏。Python 本身在很大程度上也是如此。然而从 3.5 开始,Python 的变化超出了我的预期,所以我确实需要重写 **Python 101** 来解释这些差异。
|
||
|
||
### 卖你的书
|
||
|
||
谈到卖书,我最初的想法是把它贴在我的博客上,看看会发生什么。然后我意识到我可以用 Kickstarter 来衡量人们对我的想法的兴趣,所以我决定这么做。Kickstarter 在这方面很棒。这真的帮助我与我的读者建立了联系,并保持了早期采用者的反馈回路。
|
||
|
||
Kickstarter 在更新书籍和我未来的作品方面也很好。请注意,Kickstarter 确实收取总额的 8-10%,所以如果你决定使用它,你需要记住这一点。
|
||
|
||
我读到过,如果你做广告,你应该用不超过 5%的毛收入。我没怎么尝试过,因为我在网络广告方面的体验不是很好。
|
||
|
||
现在我有多本书,我可以把它们以不同的方式捆绑在一起。Leanpub 还支持将你的书与他们平台上其他作者的书捆绑在一起,如果你能找到一些想要这样做的人的话。
|
||
|
||
我最近开始在 Youtube 上做视频,我认为这有助于提高我的博客的知名度,但不是很多。Youtube 是一个非常不同的媒体,目前真的没有带来太多的流量,但我认为如果利用得当,它是可以的。
|
||
|
||
你也可以使用 gum road 来销售你的书。如果你能找到代销商,你可以使用他们的代销商计划。我已经尝试了一下,看起来效果不错。Leanpub 停止了分支机构,这很不幸。
|
||
|
||
### 与读者保持联系
|
||
|
||
与你的读者保持联系是困难的。根据您的销售平台,您可能无法做到。例如,亚马逊和 Leanpub 根本不共享买家信息。读者可以在 Leanpub 上选择接收更新,但我看不到他们的任何信息。Gumroad 确实给了卖家一个电子邮件地址,所以你可以用它来建立一个邮件列表。只要确保你除掉了所有不感兴趣的人。
|
||
|
||
正如我提到的,Kickstarter 对此很有用。我可以通过他们的网站向我所有的支持者发送更新。我还从他们那里得到了发送电子书的电子邮件地址。从技术上讲,你也可以用这种方式建立一个邮件列表。
|
||
|
||
我应该指出,我没有这样做。我只使用电子邮件地址来递送他们的货物,然后我不会再打扰任何人,除非我需要。
|
||
|
||
### 时间管理
|
||
|
||
在你为一本书设定最后期限之前,你应该尽可能多地勾勒出这本书的轮廓。我发现创建一个我想涵盖的章节列表有助于我缩小书的范围。我通常会把章节列表拿出来,用几种不同的方式重新排序。然后我把它们削减到必须拥有的章节和想要拥有的章节。
|
||
|
||
必读书籍是我所说的最少出货的书。这是我非常喜欢敏捷开发的一点,它确实很好地教授了范围界定。我想写的其他章节将在时间允许的情况下添加。这些是我通常在我的 Kickstarter 中作为延伸目标保留的章节,尽管除了这些延伸目标之外,我还有其他章节放在我的后兜里。
|
||
|
||
额外章节的好处是,你可能会发现你的主列表没有足够的内容。然后你可以添加一些想拥有的章节来弥补差异。
|
||
|
||
总之,所有这些都是说你需要写 4-10 章才能真正发现你的写作节奏是什么。一旦你知道了这一点,你就可以算出平均值,并预测你要花多长时间才能写出一本最少出货的书。这对我很有效。我知道我的速度是多少,然后我通常会在此基础上增加 1-3 个月,因为假期、旅行和不可避免的疾病似乎会在你最意想不到的时候突然出现。
|
||
|
||
### 代码示例
|
||
|
||
Github 已经成为事实上存储代码的地方。为了让我的读者简单起见,我已经开始把我的书的所有源代码放在与书相关的特定存储库中。然后,我可以在书的正文中添加一个链接,还可以从我的各种供应商网站上添加链接。
|
||
|
||
理论上,您可以将一个持续集成服务挂接到 Github 或类似的可以针对您的代码运行 linters 和测试的服务上。虽然我没有这样做,但我认为这可能是一个非常好的想法,我可能会在未来的书中尝试这样做。
|
||
|
||
### 外国观众
|
||
|
||
让外国读者看到你的书有点难。幸运的是,亚马逊、Gumroad 和 Leanpub 确实在国际上销售,所以从技术上来说,世界上任何地方的人都可以看到你的书。然而,如果你想让他们能够用自己的语言阅读,那就变得困难多了。
|
||
|
||
有几个人就翻译我的书找到我。你必须小心这类事情,因为你不知道他们是否有信誉。如果你想和某人一起工作并分享利润,Leanpub 提供了一种方法。然而,如果你把你的书的来源给了他们,他们就不会保护你,他们最终会把翻译贴在别的地方。
|
||
|
||
有类似于 [Babelcube](https://www.babelcube.com/) 的服务,你可以用它来翻译你的书。我还没有尝试过这些,所以我真的不能评论
|
||
|
||
### 电子书与印刷品
|
||
|
||
你会从电子书中赚到大部分的钱。因此,创建所有三种最流行的格式是绝对值得的:PDF、epub 和 mobi。据 Leanpub 称,PDF 是目前最流行的。
|
||
|
||
对于纸质书,我用的是 [Lulu](https://www.lulu.com/) ,最近用的是亚马逊的 [Createspace](https://www.createspace.com/) 。亚马逊的设置向导比 Lulu 的好。然而,他们每个人检查你的内容不同。如果你的截图分辨率太低,他们会告诉你。亚马逊会对你的作品进行拼写检查。
|
||
|
||
你需要一张 300 dpi 的封面图片,正面和背面都要。否则会显得模糊。你应该有 300 dpi 的截图,但我发现在那个分辨率下获取截图几乎是不可能的。尽你所能把它们弄高。
|
||
|
||
请注意,对于电子书封面,您不需要 300 dpi 的图像,因为这将使书籍的下载大小比它需要的大得多。这意味着你可以保留这本书的两个版本。
|
||
|
||
还要注意,亚马逊和 Lulu 都不希望封面成为 PDF 打印版本的一部分。封面需要分开。
|
||
|
||
### 书籍修订
|
||
|
||
作为一名技术作家,我喜欢对我的书进行修改。所以我用 Git 来做这个。我所有的源文件都进入 Git 存储库并保存在 Dropbox 和 Bitbucket 中。如果我开始使用技术评审员,我会考虑转而使用 Gitlab,因为他们对私有库有更好的政策。
|
||
|
||
### 包扎
|
||
|
||
我希望这篇有些脱节的文章对你有所帮助。我将在另一篇文章中写更多关于 indy 出版的利与弊。如果你有任何问题,欢迎在评论中提问。 |