作者:研究僧
文章地址:http://blog.puppeter.com/read.php?13
开篇
虽然工作多年,但是对系统技术痴迷热情从未改变,所以在2015年初,历时1年多写的《Puppet权威指南》书发行了。在与很多朋友技术交流过程当中了解很多人也有类似写书的想法,经常有人问你出书的流程是什么? 如何来写一本书?出书的收益又如何?等问题。综合这些问题,我也来分享一下:
如何萌生写书想法;
写书的流程是什么;
如何将过程转化为收益。
希望通过介绍整个过程,能让更多有意的朋友能为业界提供更多的思路与创新技术(注:由于笔者能力水平有限,在写作过程中难免会有错字、语句不通顺等情况。如果大家有任何疑问可以给我留言,我会尽快回复与更正,非常感谢)。
如何萌生写书想法
回忆了一下,首先从来没想要写书,只是偶然的机会而已。在2001年左右,上高中时很喜Photoshop和3Dmax,在那时我就已经会安装Windows 98操作系统,在班级中公认的是一个计算机高手。另外,我也经常买《电脑报》、《网友世界》和《黑客X档案》杂志,通过XCAN来扫描远程服务器开放端口,并根据扫描后端口确认是否有漏洞,这些对于那时的我会带来很多的成就感与自豪感,记忆中曾多次一条命令就可以让网吧远程的系统蓝屏,但有一次在网上遇到了牛人,他能随意改我的QQ密码,盗取我的163账号,查IP地址能定位到我的家门牌号,那一刻我觉得自己弱爆了,后来经常与他交流学习经验,那时我最不喜欢学习编程语言,而他说你要做为一个优秀的黑客就要去学习编程语言和网络协议,也是那时他让我第一次知道TCP/IP协议的三卷书,通过与他交流与指导,我开始自学C编程语言,学了才知道C语言并没有想象中那么难。
后来上了大学,操作系统中学了Linux,了解他历史的都应该知道玩Linux才是真正的黑客,所以那时去电脑市场买了一个Redhat6.0版本的系统盘来安装,安装后不知道怎么用,在网上查资料时知道了www.chinaunx.net(简称CU),那年是2006年,因为我的CU ID(研究生)注册时间就是2006年。从CU学到了很多东西,譬如记忆深刻的《门户网站运维abc》、《Shell能力测试》和《Shell基础20篇》等都是很好的学习资料, 还有一篇文章来描述如何学习Linux,大概中心是要想学好Linux;
多看书;
多实践;
多总结沉淀;
遇到问题自己查找资料解决,解决不了再寻求帮助;
如果学习的知识点都掌握了,多去帮助他人解决问题,其实帮助他人也是自己学习的一个过程。
所以,在CU经常找别人问的问题,看是否能解决,如果解决不了再去网上找解决思路与过程,那时也是因为这原因,我写了很多文档,由于看了Shell编程13问的文章,忽然觉得我的文档总结可以写成一本书的形式与别的朋友进行分享,经过对文档总结提炼与打磨,最终在2008年写出了第一版本,不过现在已经找不到最初的版本了,在电脑里找到了2010年最后变更时间的书,无意间人生的第一本书就这样的写完了。
2008年在北京工作后,一天在QQ忽然有人问我,看你CU比较活跃是否可以可以来我们这里帮讲一些网络的课程,我抱着试试看的态度应邀去了华章的编辑社,去了才知道这是有名的机械工业出版社,我很喜欢买他们书。到了后是一位美女来接我,交谈中我说我写过书,美女说是否可以发我看看,几天后我提交了一份书的原本发给编辑社,美女帮我指定了出版策划(杨福川),第一次与福川见面时在中关村的麦当劳,感觉一见如故与技术人交谈很开心,他看过我给的文档后,给了我很多出书的建议,说对于刚出茅庐的我书的内容还是很好的,但对于出版来说要走的路还要很多,不过也鼓励我,希望有机会能合作出一本书。就这样几年过去了,应该是2012年系统架构师大会,再次遇见福川,福川问是否有兴趣来写书,我说OK没问题,正好由于内部部门产品变动,我负责的系统没有运营工具,我对Puppet进行研究并在线上应用。那时Puppet知道人并不是很多,所以一拍即合开始写人生的第二本书《Puppet权威指南》。
写书的流程
下定决心后写书并不复杂,以下为写书流程:
1)寻找一个靠谱出版社,因为他会有渠道帮你做后续推广;
2)确认写书的标题与大纲,其中大纲很重要,有一个目标才好量化时间与写作进度。写作大纲中一般还包含选题思路、读者对象、内容简介、市场分析、卖点分析、作者简介和营销建议这7项;
3)签约合同,合同是双方利益保障,对于出书者来说写完出版社不出版,可以通过合同来约束。当然,反过来没按照预定写出来,还是要陪违约金的(这也是签约后动力之一)。除此之外,还要确认付款方式,两种:
方式1:一次性买断书的版权,即一次打完所有歀。
方式2:是按出版发行量计费,根据书的售卖情况打款(我签约的这种)
大家可以自己来确定付款方式(写书并不挣钱,但是收益还是有很多的,一会会介绍)。
4)合同确认后,策划会分配一个编辑给作者。我的编辑(孙海亮)海亮给我的感觉三个词形容,积极、专业和耐心。编辑会把控整体的进度、写作风格、语句是否通顺、是否能很好的读者学习了解书中的专业知识内容,然后就是定期发文稿给编辑;
5)最终出版社收到完整的书稿(齐、清、定)后会制定编辑加工计划,并以书的形式打印出来各章,确认排版与最终效果是否一致,前后有三次校对过程;
6)最后确定封面,出版与推广;
7)根据约定出版社付稿酬。
流程中有很多值得分享的案例:
案例1:(做任何事,大多数人都会有一个热情期,当热情变成负担,这时如何来磨练自己让负担再转为热情?)
开始我写书很有热情第一个月就写了两章,将文稿发给海亮很快回复了我的邮件,当我打开文稿到是挺喜庆的,满篇的红字,感觉像老师改小学生作文一样,在其中提出了很多意见与建议,如何从读者的角度来写书等,其实那一时刻热情已然不在,更多的是觉得变成的负担,心想如果按照这样写下去何日能写好,用一个月写的文稿按海亮要求基本要从改一遍。果不其然,开始一个月写两章,到半年时我才写了4章。不过,需要承认海亮提的意见是非常好的,在写过第6章回头再看的时候,首先觉得是有成就感的,因为我真的总结出了很多内容,接着对文章不断的实践与打磨,我对Puppet认识也更加深入,所以日常的实践打磨到后续的价值转化,最后负担又转为了热情。
案例2:(出版社很专业从一些细微的案例可以体现到)
在Puppet编程语言中有自己的if..else,如果作为我专业人士来描述,我会写if 为真,怎么样,否则为假怎么样。海亮很耐心的和我解释这里应该如何写,建议借鉴谭浩强老师写的C语言编程中的对if..else描述,当时我做了对比差异确实很大。
另外,我的书大约是2014年10月份最终完成,11月份印刷完毕,直到2015年1月份才正式出版,推迟两个多月,原因是很多书店年底会清货,11月份出版很容易被清理到书店不容器看到的地方,所以推迟发行。我相信这些建议与意见都是从日常工作中摸索总结出来的,是专业的表现。
案例3:(工作+写书的时间分配)
如何的合理利用时间,通常我是周一到周五每天早上拿出半小时来阅读之前写的内容,中午午休1小时来实践Puppet,晚上1小时来继续写Puppet 。周六也拿出半天或一天时间来写和改,保持一个节奏,这样会比较轻松一点。
案例4: (如何丰富写作内容)
如果单写Puppet工具应用确实内容不是很多,所以我从对比角度出发,首先是业界流行的配置管理工具都有哪些(Puppet vs Cfengine vs Chef)他们优缺点是什么、我为什么选择Puppet、与老牌配置管理工具Cfengine相比Puppet为什么可以弯道超车、Puppet都谁在应用它、未来前景如何、它整套架构与运行原理如何、到最后实践如何应用它、都哪些场景适合使用它等。Puppet与很多工具软件一样,官方提供了详细的文档(http://docs.puppetlabs.com/)我们可以从这里获取很多信息。更主要的是获取信息后就是如何应用在自己的工作场景中,解决了自己实际问题同时也让读者在真是需求场景下,能够印象更加的深刻。
以下为写作过程中点滴
如何将过程转化为收益
看一本书容易,但写一本书还是挺难的,需要有毅力和时间去写,写的过程中需要不断的对软件应用、实践与打磨,具备了这些,我们就肯定会从写作过程中得到收益。而写书除了money更多是无形的收益,其中对于我个人的职业技术生涯收益,我抽象了以下五点:
1)总结沉淀与转化能力
写一本运维工具相关的书,不但要对工具了解,还要了解工具的历史,以Puppet工具为例它的作者(Luke Kanies)是一位优秀的运维工程师,有着多年的运维工作经历,做运维的都有过类似的经历接手一套产品相关的运营系统没有运营文档或者运营文档不全是很悲剧的事情,当然有的公司会强制要求员工写文档或者Wiki,优势是当系统交接时,被交接的对象会通过文档绕过一些坑,而且这也是比较好的习惯,但也有他的缺点就是这些系统文档或Wiki并不实时与准确,相信Puppet作者也有过这样的经历,所以Puppet的解决思路是以编程语言形式,将当前系统所需要的安装软件包配置描绘出来,通过辅助工具还可以以图形式看到模块之前的依赖状况,而这一切都是实时的,一旦错误线上马上会体现出来,Puppet思路很好的解决的我们曾经面临问题。而对于我后续做运营工具的思考,我的总结是“从运维过程中获取经验,根据经验发明创造改进工具,接着根据工具创造提炼技术,最后根据技术再提炼原理”。有理由相信这也是Puppet开发运和营过程中的体现。
2)模仿能力
如果领导让我开发一套配置管理工具,相信我是有能力做出来的,但我也相信开发出来的配置管理工具只能满足临时的需求,长期来看它根据需求要不断的完善、重写与迭代,而配置管理系统在业界有很多,譬如Puppet、Ansible、Cfengine和chef等,他们均是配置管理工具,其实更好的方式是使用它们,模仿它们和改造它们为我们工作所用,因为它们有自己的开发社区、有多年的积淀、有非常好的思想能让你去借鉴、它们像一种协议一样统一了大家的思想,而这种思想对未来应用到其他领域是十分有帮助的,所以这里如何借鉴与模仿很重要。
3)换位思考能力
对于一个专业的互联网从业人员来讲,希望把书介绍的尽量详细与专业,书中可能会有一些工作中的术语,譬如“灰度”对于有工作经验的朋友肯定知道他的含义,但是对于那些刚入行的朋友却不知所云,所以我们要换位思考,以读者而且是刚入行的读者角度,尽量的白话书中的专业术语。这种换位思考能力不但可以应用写书,还可以在生活与工作中得到借鉴。
4)沟通与分享能力
思想就是武器,能说才是火力,光有武器火力不太猛还不行,如何在写书过程中不断的补充武器来提升火力很重要,因为任何一行业都要有交流沟通,特别是互联网行业尤为突出,所以总结每一章后,要想如何把他讲出来分享给其他人,这种分享过程可能先是文章、然后是技术博客、接着抽象出原理,最后是与同事来分享它,提升自己沟通与分享能力。
5) 运营能力
等书出来了,最后就是自己的运营能力。
引用
网上有一篇文章(Google通过Puppet管理超过6000台的苹果桌面操作系统)地址:http://my.oschina.net/HankCN/blog/180105
,我个人觉得这是一句有炒作的嫌疑,当时Puppet管理服务器能力并不是很强,而Google是很多技术公司的标杆,所以此新闻一出有一定的炒作意义,既然标杆用的都是Puppet工具,相信它也可以用在更多的公司中,而之所以Puppet使用广泛可以弯道超车与他的公司运营能力也有一定的关系。
最后,我想说的是写书分为两种,一种是有时效性的,一种是相对没有时效性的,TCP/IP三卷书就是相对没有时效性的,如果TCP/IP协议不变,写一本这样的书收益可以一直延续下去,而我写的工具书是有时效性的也许是1-2年 ,因为Puppet版本是在不断的迭代变更,但不管他如何改变,他值得学习的创新思路是永远不变的。所以走过这条路,也许绕了很多弯,调整心态,坚持走下去,即便是弯路,也可以收获美景。
鸣谢
很多书会在开篇提起感谢很多人,开始没什么感觉,写过书之后才体会到了这一点,因为有了你们的支持,才会让我坚持又坚持完成这本书,所以这篇文章最后要感谢曾经在写作过程中帮助过我的人,特别是我的老婆,感谢。
参考资料
Puppet labs官方网站:https://puppetlabs.com/
Ansible:http://www.ansible.com/
Chef:https://www.chef.io/chef/
Cfengine:https://cfengine.com
Puppet作者经历:http://blog.puppeter.com/read.php?10
Shell编程13问:http://bbs.chinaunix.net/thread-218853-1-1.html
Shell能力测试:http://bbs.chinaunix.net/thread-476260-1-1.html
门户网站运维abc:http://bbs.chinaunix.net/thread-1281178-1-1.html
Shell基础20篇:http://bbs.chinaunix.net/thread-452942-1-1.html
Luke Kanies(Puppet作者linkedin):http://www.linkedin.com/profile/view?id=ABQAAAA6kLcB06__Nn-a_DEULHGnaTzLR2wPp-c
谁在用Puppet:https://puppetlabs.com/about/customers