这几年写了4本书。有两本传统意义上的实体书:《JavaScript核心概念及实践》和《轻量级Web应用开发》,以及两本电子书《3周3页面》和《函数式编程乐趣》。当然,对我来说,主要工作是软件开发,写作是副业。在写作的过程中,有一些有趣的经历。写作本身是一个很好的学习过程(至少是学习的动力)写书很无聊,尤其是在校对时。写作不会让你变得富有,但它有时会让你快乐(并非总是如此)写文章与写作写博客/文章与写书有很大不同。一个明显的区别是写文章会更随意,应该尽可能简短。一篇文章足以提供一些信息,并且应该尽量远离细节(如果写教程,那就另当别论了)。写书要尽可能详尽,让读者尽可能多地从书中学到东西。投资与回报首先要明白的是,不要指望靠写书赚钱,至少前4本书是这样的。粗略计算一下:我的***书卖了3000本,每本能拿到4块钱,一共12000块钱。我断断续续写了这本书三年。它在许多周末、许多假期和许多夜晚都得到了支付。如果真要计算投入产出比(纯粹以金钱计算),这显然是一件不划算的事情。作为参考,IBMdeveloperWorks的投稿是每千字200元,一般写在5000字以内,也就是800元RMB左右。而像这样写一篇文章,我只需要一天的时间(当然需要数周/数月的积累)。12000元需要写15篇文章。如果每周写一篇文章,不到4个月就可以写完,写一篇文章比写一本书容易多了。毕竟文字比较短,容易校对。而且对于大多数开发者来说,固定一个主题要比固定15个独立的主题容易得多,因为没有必要深入。所以,根据经验,我们应该怀着公益的情怀去写书。也就是说,为了更好地分享知识,让你所学的先进科学技术帮助到更多的开发者,提高他们的开发效率,让他们在周末多休息一天。至于技术书籍的翻译,基本是免费的,而且是公益活动(花了好几个月的时间考虑词句,但价格极低:每千字60元),所以下次再来我遇到技术译书的,就捐给他,他们是为人民服务的。知识的诅咒“知识的诅咒”指的是人们一旦获得了某种知识,就无法想象没有它。这种现象随处可见。例如,当你到达一个你从未去过的陌生城市,你遇到一个当地人并向他问路。当地人感觉说的很清楚了,但是你还是不知道怎么走。又如:假设你不懂泰语,然后你打开任何一本用泰语写的小说,你只能隐约感觉到它是一种文字,你无法从中获取任何信息。但是当你学了一段时间的泰语,再看这本小说的时候,那种感觉就再也没有了。当你写一本书时,你首先需要有某种知识。但写书的目的是把这些知识传授给那些没有知识的人,而根据“知识的诅咒”,你无法确定那些初学者会遇到什么问题!解决这个问题的办法就是找初学者试读。为了保险起见,你应该找尽可能多的人来尝试一下。一种写法是bottom-up,写一些独立的文章,最后发现可以串起来成一本书,另一种写法是top-down,不过会慢慢调整。根据经验,无论您是写一篇简单的博客文章还是写一本书,您都需要遵循自上而下的方法。随便写,基本hold不住,整篇文章都是支离破碎的。看似内容很多,但没有条理,读者无法轻易获取知识。先列出大篇章,再逐步细化,但不一定按顺序。先写自己最熟悉的部分,然后逐步完善。例子的选择需要微妙恰当,最好有图例来说明。制作图表一般来说,我在书中使用两种图表:流程图和一些屏幕截图。截屏通常使用MacOSX自带的功能就够用了,流程图我会使用一些额外的工具比如:graphvizkeynote/sketch使用Graphviz画图的好处是可以把图片代码放到repository中管理。此外,我还学习了一些设计软件的基本使用方法。其实我只需要用一些简单的元素就可以做出非常专业的图片:font/font(大小,粗细变化)color(基本配色)理论上可以做出很舒服的配色)Level(大小,位置,颜色)depth)影子代码格式书中的例子需要大量的代码来说明,如果你正在制作电子书,可以使用Markdown预处理器自带的功能来突出显示。此外,如果你需要RTF格式,你可以使用这些工具:高亮工具intelij中的插件copyonsteriod这里有一篇博客来解释如何将你的代码复制到剪贴板并带格式。复制后,您可以将内容粘贴到InWord或Keynote中。jest.dontMock('../components/headline.jsx');describe('Headline',function(){varReact=require('react/addons');varHeadline=require('../components/headline.jsx');varTestUtils=React.addons.TestUtils;it('#render',function(){vartext="thisisatitle";varheadline=TestUtils.renderIntoDocument();vartitle=TestUtils.findRenderedDOMComponentWithTag(headline,'h4');期待(headline.getDOMNode()).toBeDefined();期望(headline.getDOMNode().textContent).toEqual(text);});});一些潜在的陷阱在写作的过程中,会遇到一些潜在的陷阱。这些所谓的坑,新人可能想不到。比起什么都不说,不会写,最痛苦的其实是平淡。很多时候,你也许能轻松写出开头,但很难坚持到结尾。即使你好不容易写完了第一版,后面的重读和修改也会让你苦不堪言。内容写好之后,风格是下一个重要的问题。好的内容需要有匹配的布局。在中国,作者不仅要对内容负责,还要对一些排版事宜负责。这很奇怪,但却是事实。这也是为什么我更推荐电子版的原因(排版更漂亮,选择更多样化,有问题也更容易修改)。另一个问题是错字检查!检查拼写错误对作者来说是一个非常困难的事实。对于读者来说,这是一件非常容易的事情。这与知识的诅咒是一样的。出版方式传统的实体书出版方式存在一些明显的问题,与现代知识传递方式产生了冲突:时间滞后(新技术更新速度远远超过审批、印刷等流程的时间)排版(如何降低costtoachievesyntaxhighlighting,orcolorpictures)更新频率(当技术更新时,如何更新是传统纸质书籍无法解决的问题)传统的出版方式有点像传统的软件开发,一本书从头开始写到最终发表,还有很多步骤要经过。忽略写作过程,从投稿到发表会有很多review和proofreads,可能需要4-8个月。在这个过程中,很多事情可能都发生了变化。一个典型的例子就是《用AngularJS开发下一代Web应用》,原版是英文版,翻译成中文再出版,书中很大一部分内容已经过时了。读者拿到本书后,会发现书中内容与当前版本/文档不匹配。这种情况会随着技术更新的速度和频率而加剧。第二点是排版。听说国内一些出版社已经开始接受Markdown作为稿件格式,但大部分还是使用Word或者WPS等格式,所以排版成了一个大问题。以我自己为例,我的原稿是用Markdown写的,但是写了几章就得换用Microsoftword了,我自己MacOSX下的排版在Windows下编辑会变,字符也会涉及到由于设置、字体、Word版本等问题的影响,会导致印刷稿与原稿有较大差异。最后一点是更新频率。如果发现错别字或错误(即使之前检查过很多次,还是会有漏网之鱼),由于实体书的特殊性,一般需要等到再次印刷后才能解决.这意味着先买的读者会承担一些风险,而更新后的版本又将如何被读者看到?买不起另一个。但这些问题都可以通过电子书得到很好的解决。首先,电子书可以随时更新,最大限度地减少时滞。在排版方面,作者可以使用Markdown来书写,而演示则可以使用一些预定义的模板来完成。***,更新频率完全可控,读者风险更低,因为电子版图书可以轻松追踪交易记录,从而获得免费更新版本。电子书目前发布电子书的渠道有很多,比如gitbhook、知乎陌。这些应用的出现大大降低了图书出版成本。我的《函数式编程乐趣》用了3天完成了草稿,发布只需要几秒钟。另一个问题是书的价格和作者的收入。一本书售价50元,出版商支付给作者的版税为8%。也就是说,一本书卖不出去,作者可以得到4块钱。如果您的书很受欢迎,这仍然是一个不错的价格。但也许90%的书都不会成为畅销书(就像每个班级都有尖子生,但他们只占班级的10%)。这对作者来说是一种浪费:你需要花几个月甚至几年的时间写一本书,然后市场反应很慢(毕竟你不能出版一本未完成的书)。我在selfstore.io上有两本电子书:《函数式编程乐趣》和《函数式编程乐趣》,《函数式编程乐趣》标价16元,我每卖出一本书,扣除交易手续费后可以得到14.7元。对我来说,它更有收获,对读者来说,获取更新的速度更快,而且由于有预览和一堆其他信息,对读者来说风险要小得多(更不用说快递费、等待时间和其他问题)。根据我在gitbook上的统计,《3周3页面》被下载了28861次,实际读者近5000人。而且没有审核过程,也没有排版浪费时间,我只需要专注于内容。
