在过去的四年中,我一直在写一本书, 《程序员的数学入门》 。 它教给具有编程知识和经验的人如何进行数学学习。 我之所以能够实现这一目标,很大程度上是因为数学与编程之间的内容和思维方式存在隐含的重叠。 尽管如此,从一个世界到另一个世界之间没有通畅的桥梁—一座桥梁,可以解释不熟悉的部分,并专注于重要概念,同时利用编程来演示应用程序。
到现在。 如果您是想真正掌握数学的程序员,那么这本书适合您。
在本文中,我将解释如何编写和自行出版该书。


撰写技术博客文章已有八年之久,写作过程自然而然。 在开始学习后的几个月内,我写了本书的三分之一,而我对本书的内容感到100%满意,尽管不是风格。 “编辑。”
我本可以继续写作,但我知道我必须将自己限制在某种适合一本合理大小的书中。 我的目标是300页(最后一本书的内容约为375页),但是当我意识到需要剪切某些内容时,我已经写了约100页。
前100页涵盖了“多项式”,“集合”和“图”这三章。我想要有关微积分,线性代数,优化,概率,群论,复数和微分方程的章节。 但是,多项式,集合和图在内容方面是最简单的章节。 这些其他章节可能会更长。 我想将每一章保持在50页左右。 包括所有章节在内,这本书将超过500页。 我也不希望它太稠密(如果我忽略了实际上使我的书值得一读的展览,我可以将线性代数填入50页中!)。
切出整个章节并将剩余的每一章消磨到其核心,同时仍然提供有用的高级见解的过程,被证明是写作中最具挑战性的部分。
这导致明显的遗漏。 本书有一章关于微积分,但省略了积分。 相反,微积分一章主要关注导数和泰勒级数。 这很大程度上符合我的个人经验-Taylor系列比计算卷积积分更适用于数学(以及编程中显示的那种数学)。 泰勒级数在以后的章节中也用于优化,大O表示法和物理。
减少集成是一个刻意的选择。 我希望读者能够了解近似的一般性,一旦学习完成,为什么集成才有意义。 对于大多数我省略的主题,我都有这种感觉。 一旦您对组合和组合语言的基本术语有了深刻的了解,关于离散概率的一般书就更容易理解了。 也许那是一厢情愿的想法,但是我不得不在某个地方做出让步,否则我将永远无法完成这本书。
我没有试图补习本书中的每个主题或猜测最佳主题,而是选择了使基本技能和模式具体化的主题,也可以通过代码进行演示。 然后,通过大量练习去探索本书以外的数学,读者将建立认知技能,以学习他们想要的任何数学主题。
我不得不为这本书做一些额外的研究。 虽然图和特征值很容易在我的大脑中出现,但我已经学习并长期忘记的其他主题。 双曲线几何是一类(特别是如何在双曲线平面中进行计算),我不得不参考几本物理学书籍来介绍它们呈现波浪数学模型的典型方式,而且我承认我确实获得了对核心的更新和更完整的理解。多变量演算的定义。
正如我在书中重复的,每次您重新学习一门学科,您都会获得新的有用的见解。
整本书都是用LaTeX排版的。
因为我从Overleaf的复制/粘贴书模板开始,所以我可以不加思索地投入写作。 我最终对该模板进行了相当多的更改(由于某种原因,它混合了衬线和无衬线文本?),主要是对其进行了简化,配置了代码示例,练习列表(使用练习包)和定理环境。 如果您稍后再问我,我将很乐意上传这些结构化的TeX文件,以便可以重用它们,但是请注意,我不是TeX专家,因此从模板开始可能更好。
我将所有文件存储在Dropbox上。 在2014年,这对我来说很有意义,因为我刚开始认真使用git。 如果我今天要再做一次,原则上我会在git中做,但是在Dropbox上存储并没有主要缺点。
每个章节位于不同的文件中,并且任何TeX文件的长度都不得超过3k行。 每行80个字符,整本书几乎正好是2万行(包括章节文件中的所有TeX注释,如索引标记和图形)。
我用vim编写了这本书,并使用latexmk来自动进行编译(更多详细信息)。
在这本书的最后,我意识到我想要一个索引,并且遍历了整本书,只是在寻找放置索引标记的地方。 LaTeX会自动为您建立一个索引,但是您必须准确地告诉它要索引的位置,以及哪个单词指的是该位置。 在某些方面,这个效果很好。 例如,我索引了定义新符号每一位的位置。 这也是一个口号。
最终,在最后,我使用chktex对书进行了另一遍修改,并进行了一些细微的配置,以告诉它忽略代码清单,texttt等。这样做时,我学到了有关TeX的一些新知识,但可能没有杀了我跳过这一步。
封面艺术是彼得·蒙德里安(Piet Mondrian)在1900年代早期的绘画。 我使用Sketch进行封面组织和布局。 一个小问题是,Sketch不会以您可以选择分辨率的方式导出pdf(默认情况下使用72ppi),因此我不得不使用其他工具(ImageMagick转换CLI)来调整分辨率。
在写作过程中,我阅读了每章草稿大约三遍。 整本书写完后,我读了两遍。
我犯了许多令人尴尬的错误,并修复了发现的错误,但是我敢打赌,书中仍然存在错误。 如果发现任何错误,请在pimbook.org上提交勘误表。
在早期的编辑中,我重写了每一章的大部分内容。 在最初的几章中,我一直在努力实现正确的速度和密度。 我希望这本书能有所发展。 任何人都应该可以访问前面的章节,而没有(如我稍微敏感地说)分数恐惧症。 这些章节的目的是介绍符号,使读者摆脱对文化的期望,例如写下示例,列出基本的定义和证明技术,并克服阅读数学中不可避免的部分, 因为您的眼睛注视着公式 。
除了自己打样,我基本上还通过邮寄清单将其发送给任何需要它的人。 我浏览了Hacker News的帖子,程序员在其中沉迷于数学,并溜走了广告,其中许多人通过电子邮件与我联系,其中一些提供了有用的反馈。 我还给所有想看的朋友提供了早期的草稿,许多人都提供了很好的反馈。
但是,一个明显的遗漏是对数学和程序进行了全面,有偿的技术审查。 我很难找到愿意致力于阅读不止一章的人。 我认为部分原因是因为朋友和同事不想建立业务关系并希望获得友谊之类的东西(我永远也不会因此而终止友谊!)。 最后,我在布达佩斯数学学期与一位老同学取得了联系,他们同意复习我特别关注的两章。 如果我再做一次,我会更加努力地寻找多个技术审核员,并在这方面获得更好的报道。
出版几天后,很明显我应该花更多的时间进行编辑。 我以某种方式跳过了“设置”一章的最终拼写检查,一位早期的读者提交了许多错字更正。 老鼠
但是在我最终出版日期的一个月左右之前,我对所有编辑都精疲力尽。 我觉得我最终可以发布一些小瑕疵,并为此感到自豪。 这就是我决定完成编辑的方式。
多年来,我一直在与包括O’Reilly在内的一些出版商讨论过一笔图书交易。 从这些对话中我脱颖而出的是,与发布者合作所增加的工作以及所增加的截止日期均不值得。
报价就像是“现在先付了5000美元的预付款,然后在这些特许权使用费返还了5000美元的预付款后,就收取了10-15%的销售特许权使用费。”我得到的是复制编辑,品牌,印刷和发行渠道和广告。
有一些收获。 大多数非学术出版商都不会允许作者使用LaTeX编写(对于数学排版,根本没有其他办法),所以多次被告知我必须将现有的150页草稿转换为Word或OpenOffice格式。
如果这不是一个破坏交易的事情,那么一些出版商告诉我,我自己寻找技术评论员。 加上我很难满足截止日期(请参见“时间安排”),我觉得出版商会比支持更多地施加压力。 我还深知,它们迫使我以多种方式改变我的书的风格,这增加了一些不确定性。
我已经通过博客建立了一个受众群体,其中有1000人的邮件列表(出版时接近2,000人),所以我觉得自己有品牌和良好的发行渠道。 我相信我可以专业地对这本书进行排版。 编辑不是完美的,但是我可以接受。
最重要的是,我了解诸如CreateSpace之类的按需发布者,因为(免责声明)我在大学期间兼职于CreateSpace。 CreateSpace(由Amazon拥有)可让您上载书籍内部的pdf和封面,并立即“发布”。 然后,只要有人在亚马逊上订购该书,他们就会在当天将其打印并寄出。 涵盖了发行。 我可以注册Google Ads并安排促销演讲和采访。 我无法完全停止打印,存储和运送书籍给客户。 因此,CreateSpace在我的选择中至关重要。
CreateSpace还提供了更好的版税,约为平装书定价的40%。 自我出版也使我可以灵活地选择销售电子书的场所。 我的一个朋友使用Gumroad出版了一本书,而且看起来不错,提供了约95%的销售版税。 该电子书只是pdf下载。
除了本书,我还关联了一些程序,其中一些程序很长,其中的重要内容也显示在本书本身中。 因此,我需要一个网站和一个GitHub存储库,以使读者能够查看完整的代码。
我在雨果(Hugo)建立了一个简单的网站,轻松愉快。 虽然,大多数工作是在弄清楚如何制作一个一页的网站,但是大多数教程和模板都是针对博客的。
本书的代码是用Python 3.x编写的,并且自然有一个完整的测试套件,其中Travis CI和Coveralls在代码存储库中运行,以确保其健康。 我已经收到一个我忽略的版本不兼容的请求请求。
当我精通Python时,我写了早期的章节,但是我没有专业地使用它。 当我完成初稿时,我决定我应该回过头来重写所有早期的Python代码,以使其符合更好的工程实践文档字符串,更模块化的组织,标准化的测试框架等。我希望使用更现代的Python诸如数据类和类型提示之类的功能,但是我觉得它们太新了,可能抛弃了一些习惯于Python 2或完全不熟悉Python的读者。 类型提示特别增加了很多噪音。
我还在d3中为特征值一章编写了一个交互式可视化文件,该书托管在该书的网站上。
我从事这本书工作了四年。 在那段时间里,我完成了博士学位论文,结婚了,搬到了美国,两次换了工作。
我完全失去精力的一段时间。 我很无聊,或者碰壁,试图确定要涵盖的主题或要使用的应用程序。 我出去结识新朋友,结识了喜欢攀岩和制作鸡尾酒的新爱好,玩了视频游戏,回到博客,并从事了随机项目。
我想告诉自己,如果我全职工作,一年之内就可以完成这本书。 但老实说,我认为这本书的等待效果更好。 现在,我编写了更好的软件,并且自从读完研究生课程以来,对行业有了更深入的了解。 而且我的写作风格不断提高。
我将这本书的平装书定价为35美元,将电子书定价为20美元以上。 (即20美元或支付您想要的价格)特许权使用费计算为每次销售约15至18美元。 我原本以为我应该以便宜的价格列出这本书,但我卖了自己,于是我环顾四周,看看其他书的售价是多少,我自己想像自己以为是合理的价格,然后加了10美元。
最初的销售非常好。 我为自己设定了一个基准,即如果我不能卖出一千本书,那我会认为这是一次失败。 在撰写本文时,我已经售出了2500多本,其中大约60%是平装本,大部分销售来自美国。 更重要的是,最初的接待令人心动。 我等不及要看人们在阅读整本书后的感受。
许多人一直在要求与Kindle兼容的电子书格式(epub或mobi格式)。 他们想调整文本等的大小。 可悲的是,我不知道有什么好办法可以做到这一点,这对我来说是合算的,但仍能生产出我期望的质量的书。 尤其是,我浏览过的每个网站都展示了如何在epub / mobi中放入数学公式,从而产生了令人恐惧的结果。 而且,您必须手动重写所有偏移公式,以使它们适合预期的外形尺寸。 六英寸负边距对于方程式来说是很小的! 我敢肯定有一种工程方法,但是我没有时间自己做。 我宁愿写另一本书。
到目前为止,有两个客户要求与电子书格式有关的“退款”,而我收到了一些其他要求客户服务和可及性的赔率要求。 少数人问是否会以其他语言提供(到目前为止,西班牙语和中文)。 如果工作量不大,我很乐意解决客户的担忧,但是像翻译这样的重大工作可能不会再发生一小会了。
最后,我将开始组织一系列的讲座和访谈来推广这本书。 我可以谈论以软件工程师的身份学习数学,独自学习很酷的数学知识,甚至可以谈论所有细腻排版的自我发布过程。
如果您想协调,请发送电子邮件至meat book@jeremykun.com。