geekdoc-python-zh/docs/pythonlibrary/how-i-write-books-about-pyt...

124 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 我如何写关于 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 出版的利与弊。如果你有任何问题,欢迎在评论中提问。