古有三不朽,所谓立德、立功、立言。程序员出一本属于自己的书,如果说是立言,可能过于高大上,但终究也算一件雅事。
出书其实不挣钱,而且从写作到最终拿钱的周期也不短。但程序员如果有一本属于自己的技术书,那至少在面试中能很好地证明自己,也能渐渐地在业内积累自己的名气,面试和做其它事情时也能有不少底气。在本文里,本人就将结合自己的经验和自己踩过的坑,和大家聊聊程序员出书的那些事。
先说下出书的收益和需要付出的代价,这里姑且先不谈“出书带来的无形资产”,先谈下真金白银的稿酬。
如果直接和出版社联系,一般稿酬是版税,是书价格的8%乘以印刷数(或者实际销售数),如果你是大牛的话,还可以往上加,不过一般版税估计也就10%到12%。请注意这里的价格是书的全价,不是打折后的价格。
比如一本书全价是70块,在京东等地打7折销售,那么版税是70块的8%,也就是说卖出一本作者能有5.6的收益,当然真实拿到手以后还再要扣税。
同时也请注意合同的约定是支付稿酬的方式是印刷数还是实际销售数,我和出版社谈的,一般是印刷数量,这有什么差别呢?现在计算机类的图书一般是首印2500册,那么实际拿到手的钱数是70*8%*2500,当然还要扣税。但如果是按实际销售数量算的话,如果首印才销了1800本的话,那么就得按这个数量算钱了。
现在一本300页的书,定价一般在70左右,按版税8%和2500册算的话,税前收益是14000,税后估计是12000左右,对新手作者的话,300的书至少要写8个月,由此大家可以算下平均每个月的收益,算下来其实每月也就1500的收益,真不多。
别人的情况我不敢说,但我出书以后,除了稿酬,还有哪些其它的收益呢?
2我还在做线下的培训,我就直接拿我最近出的python书做教材了,省得我再备课了。
3和别人谈项目,能用我的书证明自己的技术实力,如果是第一次和别人打交道,那么这种证明能立杆见效。
尤其是第一点,其实对一些小公司或者是一些外派开发岗而言,如果候选人在这个方面出过书,甚至都有可能免面试直接录取,本人之前面试过一个大公司的外派岗,就得到过这种待遇。
在和出版社编辑沟通前,我也和图书公司的工作人员交流过,不少工作人员对我也是比较尊重,交流虽然不算深入,但也算客气。不过最终对比出版社给出的稿酬等条件,我还是没有通过图书公司出书,这也是比较可惜的事情。下面我给出些具体的经历。
1我经常在博客园等地收到一些图书公司工作人员的留言,问要不要出书,一般我不问,他们不会说自己是出版社编辑还是图书公司的工作人员。有个别图书公司的工作人员,会向作者,尤其是新手作者,说些“出版社编辑一般不会直接和作者联系”,以及“出书一般是通过图书公司”等的话。其实这些话不能算错,比如你不联系出版社编辑,那么对方自然不会直接联系你,但相反如果作者直接和出版社编辑联系,第一没难度,第二可能更直接。
我交流过的图书公司工作人员不多,交流也不深,因为我现在主要是和出版社的编辑交流。所以以上只是我对个别图书公司编辑的感受,我无意以偏概全,而和我交流的一些图书公司工作人员至少态度上对我很尊重。所以大家也可以对比尝试下和图书公司以及出版社合作的不同方式。不管怎样,你在写书甚至在签出书协议前,你需要问清楚如下的事项,并且对方有义务让你了解如下的事实。
1你得问清楚,对方的身份是出版社编辑还是图书公司工作人员,这其实应当是对方主动告之。
2你的书在哪个出版社出版?这点需要在出书协议里明确给出,不能是先完稿再定出版社。而且,最终能出版书的,一定是出版社,而不是图书公司。
3稿酬的支付方式,哪怕图书公司中间可能挣差价,但至少你得了解出版社能给到的稿酬。如果你是通过图书公司出的书,不管图书公司怎么和你谈的,但出版社给图书公司的钱一分不会少,中间部分应该就是图书公司的盈利。
4最终和你签订出书合同的,是图书公司还是出版社,这一定得在你签字前搞明白,哪怕你最终是和图书公司签协议,但至少得知道你还能直接和出版社签协议。
5你不能存有“在图书公司出书要求低”的想法,更不应该存有“我能力一般,所以只能在图书公司出书”的想法。图书公司自己是没有资格出书的,所以他们也是会把稿件交给出版社,所以该有的要求一点也不会低。你的大纲在出版社编辑那边通不过,那么在图书公司的工作人员那边同样通不过,哪怕你索要的稿酬少,图书公司方面对应的要求一定也不会降低。
如果你明知“图书公司和出版社的差别”,并还是和图书公司合作,这个是两厢情愿的事情。但如果对方“不主动告知”,而你在不了解两者差异的基础上同图书公司合作,那么对方也无可指摘。不过兼听则明,大家如果要出书,不妨和出版社和图书公司都去打打交道对比下。
我在清华大学出版社、机械工业出版社、北京大学出版社和电子工业出版社出过书,出书流程也比较顺畅,和编辑打交道也比较愉快。我个人无意把国内出版社划分成三六九等,但计算机行业,比较知名的出版社有清华、机工、电子工业和人邮这四家,当然其它出版社在计算机方面也出版过精品书。
如何同这些知名出版社的编辑直接打交道?
1直接到官网,一般官网上都直接有联系方式。
3本人也和些出版社的编辑联系过,大家如果要,我可以给。
那怎么去找图书公司的工作人员?一般不用主动找,你发表若干博文后,他们会主动找你。如果你细问,“您是出版社编辑还是图书公司的编辑”,他们会表明身份,如果你再细问,那么他们可能会站在图书公司的立场上解释出版社和图书公司的差异。
从中大家可以看到,不管你最终是否写成书,但去找知名出版社的编辑,并不难。并且,你找到后,他们还会进一步和你交流选题。
这里给出我和出版社编辑交流合作,最终出书的流程。
第二,定好选题方向后,你可以先列出大纲,比如以python数据分析为例,你可以定12个章节,第一章讲语法,第二章讲numpy类等等,以此类推,你定大纲的时候,可以参考别人书的目录,从而制定你的写作内容。定好大纲以后,你可以和编辑交流,当编辑也认可这个大纲以后,就可以定出版协议。
然后是写书,这是很枯燥的,尤其是写最后几章的时候。我一般是工作日每天用半小时,两天周末周末用4,5个小时写,这样一般半年能写完一本300页的书,关于高效写书的技巧,后文会详细提及。
在写书时,一般建议每写好一个章节就交给编辑审阅,这样就不会导致太大问题的出现,而且如果是新手作者,刚开始的措辞和写作技巧都需要积累,这样出版社的编辑在开始阶段也能及时帮到作者。
当你写完把稿件交到编辑以后,可能会有三校三审的事情,在其中同我合作的编辑会帮助我修改语法和错别字等问题,然后会形成一个修改意见让我确认和修改。我了解下来,如果在图书公司出书,退稿的风险一般就发生在这个阶段,因为图书公司可能是会一次性地把稿件提交给出版社。但由于我会把每个章节都直接提交给出版社编辑审阅,所以即使有大问题,那么在写开始几个章节时都已经暴露并修改,所以最后的修改意见一般不会太长。也就是说,如果是直接和出版社沟通,在三校三审阶段,工作量可能未必大,我一般是在提交一本书以后,由编辑做这个事情,然后我就继续策划并开始写后一本书。
最后就是拿稿酬,之前已经说了,作者其实不应该对稿酬有太大的期望,也就是聊胜于无。但如果一不小心写了本销量在5000乃至10000本左右的畅销书,那么可能在一年内也能有5万左右的额外收益,并能在业内积累些名气。
什么叫案例书?比如一本书里用一个大案例贯穿,系统介绍一个知识点,比如小程序开发,或者全栈开发等。或者一本书一个章节放一个案例,在一本书里给出10个左右python深度学习方面的案例。什么叫经验类书呢?比如介绍面试经验的书就属于这这种,或者一些技术大牛写的介绍分布式高并发开发经验的书也算经验类书。
那么具体而言,怎么高效出一本案例书呢?
1对整本书而言,先用少量章节介绍搭建环境和通用基本语法的内容。
2在写每个章节案例时,用到总分总的结构,先总体介绍下你这个案例的需求功能,以及要用的技术点,再分开介绍每个功能点的代码实现,最后再总结下这些功能点的使用要点。
3在介绍案例中具体代码时,也可以用到总分总的结构,即先总体介绍下这段代码的结构,再分别给出关键代码的说明,最后再给出运行效果并综述其中技术的实现要点。
这样的话,刚开始可以是1个月一个章节,写到后面熟练以后估计一个月能写两个章节,这样8个月完成一本书,也就不是不可能了。
写书时,一般多少都需要参考现有的代码和现有的书,但这绝不是重复劳动。比如某位作者整合了不同网站上多个案例,然后系统地讲述了python数据分析,这样虽然现成资料都有,但对读者来说,就能一站式学习。同样地,比如在python神经网络方面,现有2,3本书分别给出了若干人脸识别等若干案例,但如果你有效整合到一起,并加他人的基础上加上你的功能,那对读者来说也是有价值的。
1不能抄袭网上现有的内容,哪怕一句也不行。对此,作者可以在理解人家语句含义的基础上改写。
2不能抄袭人家书上现有的目录,更不能抄袭人家书上的话,同样一句也不行,对应的解决方法同样是在理解的基础上改写。
3不能抄袭github上或者任何地方别人的代码,哪怕这个代码是开源的。对此,你可以在理解对方代码的基础上,先运行通,然后一定得自己新建一个项目,在你的项目里参考别人的代码实现你的功能,在这个过程中不能有大段的复制粘贴操作。也就是说,你的代码和别人的代码,在注释,变量命名,类名和方法名上不能有雷同的地方,当然你还可以额外加上你自己的功能。
用了上述办法以后,作者就可以在参考现有资料的基础上,充分加上属于你的功能,写上你独到的理解,从而高效地出版属于你自己的书。
在上文里详细给出了出书的流程,并通过案例书,给出了具体的习作方法,这里就特别针对新手作者,给出些需要注意的实践要点。
1技术书不同于文艺书,在其中首先要确保把技能知识点讲清楚,然后再此基础上可以适当加上些风趣生动的措辞。所以对新手作者而言,甚至可以直接用朴素的文字介绍案例技术,而无需过多考虑文字上的生动性。
2内容需要针对初学者,在介绍技术时,从最基本的零基础讲起,别讲太深的。这里以Python机器学习为例,可以从什么是机器学习以及python如何实现机器学习讲起,但如果首先就讲机器学习里的实践经验,就未必能确保初学者能学会。
3新手作者恨不得把自己知道的都写出来。这种态度非常好,但需要考虑读者的客观接受水平所以需要在写书前设置个预期效果,比如零基础的python开发人员读了我的书以后至少能干活。这个预期效果别不可行,比如不能是“零基础的python开发人员读了我书以后能达到3年开发的水准”。这样就可以根据预先制定的效果,制定写作内容,从在你的书就能更着重讲基础知识,这样读者就能有真正有收获。