2014年4月份,我开始写作《深入浅出Qt on Android》一书,8月份的时候交稿,该书现在正在出版旅途中。8月份我开始了有关QML的入门书籍的写作,经过无数个日夜的奋战,到今天基本完稿了,正在校对中。
我想我能根据自己的经历来说说一本技术书籍是如何写就的。
我以为写书看起来是比较有气场的事情,在上大学时我就有写书的梦想,希望哪天哪个出版社能出版我的小说。那时候混迹于各个BBS、文学论坛与网站,可惜灵性有限,笔力不逮,只在一些期刊杂志上零星发表过几篇,后来就只能看着与我同时期的那些写手们的书如雨后春笋般上市。工作了两三年之后,基本告别了小说写作,文学的梦,终于渐行渐远渐无声,只在某个低徊的夜晚,会偶尔在已麻木的心湖中泛起一丝小小的涟漪。
因为有出书梦,所以有机会可以写,我毫不犹豫的就和编辑谈定了这件事情,只要圆梦之旅可以起航,其它的,版税什么的,随它去。
我一直以为写作是一件充满乐趣的痛苦旅程,当时写小说也有这种感觉。可是我没有想到,技术书籍的写作比文学作品要复杂得多,对我而言,要花的心思、精力比写一篇小说要多了去了,简直不能放在一个天平上来衡量。就让我一步一步来说一下吧。
关于选题
其实当你有打算要写一本技术书籍时,想必一定在某个技术领域有较多的经验较厚的积累较深的感悟,否则,巧妇难为无米之炊,几十万字该怎么来呢,难道像孙行者一样蕴天地之灵气突然顽石暴裂凭空蹦出?所以当我和编辑商量选题时,就锁定了我熟悉的Qt。
2008年开始使用Qt做嵌入式开发,做个各种各样的界面,阅读过源码,裁剪过Qt库,修改过源码,还在Android平台上移植过一个版本,也用Qt做过服务器……总之各种各种的主题都碰过、摸过、爱过,还有什么可畏惧的呢?
而且对于从C、C++走过来的我,深觉Qt是如此优雅可人,她深深地吸引着我,一颦一笑各具风流,当我知道她可以在Android平台上翩翩起舞时,毫不犹豫的就开始研究她,在业余时间花了大量精力来与她交流。当我看到第一个Hello World在手机上出现时,喜悦与兴奋可能不及BogDan Vatra,可也是难以言说的。而在此之前,我已经因为要开发Android产品学习了Java和Android应用开发,对Qt这个我最钟爱的框架不能在Android上迎风起舞一直耿耿于怀。现在好啦,虽然迟到一些,终究是来了。
所以我把写作主题就定在了这个方向:Qt on Android。
关于内容选择
大方向定下来之后,就是选择写作内容了。
其实对于一个应用框架,Qt在Android上的控制能力和其它应用没大的差别,它不能像嵌入式开发那样掌控全局,输入、输出、显示、声音、视频、网络等等都可以由它来发挥。它只能安静地、顺从地在Android这个大框架内来表演,这是一定之理。甚至有时还要借助Android平台的现有功能,这也是必然之事。
那么有什么可写的呢?我的书究竟要涵盖哪些内容呢?
这是个不大不小的问题,真让人颇费思量。
后来我想,作为一本独立成篇的书籍,它应该一骑独行,应该是自成一体的,应该让读者无需参考其它书籍就可以跟着走下来。于是就这么定了,我要重走长征路,先把Qt的核心概念和主题讲述一遍,比如元对象系统、信号与槽、多线程、网络等等,然后是Qt如何与Android喜结连理你侬我侬。当然在此之前,应该解决开发环境搭建的问题以及如何让读者快速体验Android这个问题。等这些都就绪,那就要重点去说说移动开发相关的主题在Qt中如何体现。
有了这些想法,书的目录框架基本就出来了。我拟定了目录,根据博客上的内容完成了样章。这个过程大概花了半个多月。
这个第一个煎熬人的坎儿,一定要有亮点,与市面上同类书籍不同,因此要有所取舍有所侧重。
我与Qt厮混了这么久啊,人生能有多少个6年呢……我自认对讲到的主题都有清醒的认识,因此自信本书与其它书籍不同,就算是都讲过的信号与槽、元对象系统、网络、多线程等等,我也可以讲出另一个样子来,因为他们就像那些每天与我一起冲锋陷阵的战友,我深知他们的秉性。
写作过程
我没有想到的是,技术书籍的写作其实是相当苦闷的。
因为我决定一个人来完成我的第一本书,没有寻求合作。像写一本书这样的事情,其实是相当浩大的工程。咱们一个一个来说。
抱持什么样的态度
首先我要讲,写一本书该抱持什么样的态度。也就是说,你的初衷是什么?这是非常关键的问题。
记得我在上大学时,就有同学合作出书,比如Office、Flash之类的实作教程,很快啊,几个人把任务一分,一个月甚至不到一个月就可以完成。因为这种数据赶的就是时间,快人一步赚钱无数,而慢一步满盘皆输。类似这种书籍时效性很强,而长尾效应则很短。那时学生也就是要赚个外快,至于书的严谨性、正确性,其实就那个样子,也没人真去仔细琢磨。
这种态度,是我所不取的。
对我来讲,首先我不是要靠这本书去赚钱。你懂的,现在技术书籍也不太好卖,版税也不高,6%到8%,还要交将近20%的个人所得税,你可以计算一下,卖上一万册作者可以拿到多少钱。而写一本书有多大的工作量,起码要三个月以上!而且还是你对写作内容非常熟悉。那像这种已经成熟的技术,它相关的书籍,能不能卖到一万册都是个问题。是吧,如果希望靠一本书来改变、改善我这个苦逼程序猿的生活,那简直是痴人说梦了。
所以呢,不怕您笑话,我是因为喜欢Qt这个框架,又有出书的梦,所以来做这个事情。所以呢,这是我的一个心愿,我希望能把它做好。
这就是我的态度。也正因为这个态度,我的付出不是一般地多啊。因为你想要她好,有谈过恋爱的都知道,爱一个人,是不计较付出与回报的,仅仅是想她好而已,为伊一笑,可以烽火戏诸侯的。
艰辛与幸福
我写小说时,构思好了,一个下午坐在电脑前可以写出一两万字来。天马行空任君发挥啊,顶多你说我行文不严谨,起承转合不自然,故事不精彩,可是我不会因为这个误人子弟哈。
而技术书籍就不一样了,严谨与正确是第一要务。你要保证你写出来的,都是正确的。你提供的示例,都是验证过的、可行的。你选择的示例,也是要经过考量的,可以体现相关主题的。总之你要负责任,对得起拿这本书来看的朋友们。所以呢,写技术书籍自然是没有写小说自由了。
虽然我对写作的主题已经熟悉,可还是要仔细斟酌,每一个概念、每一块内容都要查阅相关资料,它到底是什么含义,哪些内容依赖它,它又依赖别的什么主题,该放到书中哪个章节,示例怎么设计,要在那几个平台上验证,这都是要琢磨的事情。
比如我想写Android手机上的各种传感器,就查阅了很多资料,和度娘聊了无数次,连21ic这么专业的网站和论坛都被我泡了。还有Android在线SDK也被我翻了个底儿朝天(那时天朝还没有把Google弄死翘,访问速度还可以,比apkbus快多了),就是想看看到底Android系统自己支持哪些传感器,都是什么含义,为的是和Qt印证。
又比如JNI,记得当时年纪小,郎骑竹马弄青梅也不知君意。又跑远了。记得当时初接触JNI,只知道Java可以这么调用C,哪曾想Qt也能够回调Android还能得到通知。BogDan大神在KDAB上说他要写一篇文章专门来介绍这个,到现在也没兑现承诺,人家实在是太忙了呢。既然如此,我只好自己瞎琢磨了,写作时Qt 5.2在这方面只有个Notification示例,真真是太捉襟见肘了,书到用时方恨少啊。幸好,幸好,我用Java开发过一阵子Android APK,反正最后被我给弄明白了。但这中间花的力气,费的心思,真不是一句两句话可以说得清的。
还有如何去讲一个熟悉的主题?这也是个问题。因为当你已经熟悉时,就忘掉了初学时的情景,恐怕多数时候会这样想:这么简单的事儿,你咋就不明白呢?而对于初学者,恰恰就是这样的。这是技术的两极。其实也是生活的两极,比如我经常觉得女儿有些事情怎么就不明白,其实忘了当初,我也是这么不明白、不明白着过来的。这里面有同理心在、有各种心理学范畴的东西在。当然我不懂心理学,所以就只能尝试着把自己再扔到初学的位置上来体验。有没有做到位,现在还很难说。
因为要工作,我基本上是在晚上和周末写作,晚上经常要到2点左右,早上6点多起床。我媳妇说我成铁人了,而我的体重,也终于可以下降到130斤以下了,那段时间,一直保持在123斤左右。你懂的,亲,对于176厘米身高的男性来说,这样算是相当苗条了。而早先我的体重在140以上啊。
满纸荒唐言,一把辛酸泪。都云作者痴,谁解其中味?
就是酱紫的。写作的过程一点都不潇洒,白衣飘飘那是看不到的,胸容枯槁面目无光倒是比较常见。
因为你总是对书心无旁骛,那对其他的事情就浑浑噩噩了,甚至会因为家人向你诉说生活琐事而不耐烦、发脾气,恶语相向,这对她们是不公平的啊。你在家庭生活中隐身了,而她们需要你,你也有你的责任在。
幸好,老婆孩子都理解都支持。哈哈,不支持也没办法啦。
有时候需要哄孩子睡觉,她还没睡着我就睡了,等她睡着了,我又惊醒了,啊呀,快12点了,赶紧开始工作,于是强自睁眼下床开电脑,眼睛是刺痛的呢。可是我不得不如此。记得我设计了局域网语音聊天的实例,需要录音、需要实现聊天界面、需要应用既做客户端又做服务器,还要解决相互发现的难题,整整调试了将近两个星期,一天不调通,一天不能松开这口气啊。这些事情没有人为你买单,你需要自己对自己负责。其实在一个只有你一个人能为自己负责的情景之下,我想如果你不愿意放弃,那唯一的出路就是:Fighting 啊。
我早年混文学论坛时的签名档是:我在极端的苦闷中因幸福而哭泣,生活对于我既轻松而又艰辛。那时候虽有小小苦痛,但更多是为赋新词强作愁,写书时的体会则又是另一番天地了。
如果一件事情只有痛苦没有幸福,那恐怕很少有人会坚持做下去,除了彪悍的西西弗斯。
写作的过程其实也是有很多快乐的。每当完成一章,就会长出一口气,有一些些成就感。每当完成一个示例,能在Windows和Android上都运行正常,也会哇一声。每当写就得意的一个段落,一个章节,也会傻傻地笑上一会儿。
就这么着,一个一个知识点,一个一个小示例,一章一章,一个主题一个主题,书渐渐成型了。可是心却开始惆怅、空虚,那种写作过程中简单的小快乐都已不能再让我感到欣慰,我被一种巨大的失落和空虚击中,感觉就像灵魂被抽离了身体,自己只剩一个驱壳,失重了……哎呦喂,接下来干什么呢?我多希望这个孩子还在自己的肚子里,这样我还可以天天有个盼头……
这就是没有追求没有信仰的我哈,必须找个事情来寄托我无处安放的心神。
叔本华说,看一个人精神是否强大,就看他一个人等待时做些什么,是故意发出些声响,还是来回踱个不停,还是禁不住不断地张望,还是可以安静地冥想……
哈哈,谁知道这是怎么回事儿!
昨天看《一个》里的问题,有个人这么说:我们来世是偶然,唯一的意义就是要过好这一生,哪里幸福往哪里去,这是我所能想到的唯一的人生意义。其实说得也相当不错。人类一思考,上帝就发笑。还是少费点脑细胞吧。
那么我的问题还在:我该如何面对完稿之时的这种失落与空虚?
我决定写第二本书!
哈哈,修复感情之伤的良药就是开启另一段新的感情。万物之理都是相似的,只有更大的欲望才能填满不断被拓宽的欲壑。弱刺激多了就需要强刺激,螺旋上升。
没事儿找事儿,就这么简单。可你说我一边儿说着辛苦,一边又开新篇,可真是犯贱。没错,人么,就是这样,做很多事情在别人看来都是在犯贱。那只是因为:你未曾这么做过。
我还是要说:总有那么一些时候,总有那么一些事情,会让你不计付出与回报,全身心地投入,只因为你喜欢这样,只因为你愿意。
关于出版
其实这个事儿我不太清楚,总之有编辑流程,需要若干时间,然后返回给作者修改,设计封面,然后排版,印刷,样书,备货,发货到零售商,总之是一长串的过程,会耗时较长。我关注的焦点是如何把书写好,之外的事情,自有专业人士负责。
因为我不了解这个过程,以为出版合同上签的日期就是上市日期,结果无意之中拿这个时间忽悠了几个群里的技术同仁,实在是不好意思。感谢各位对我的百般支持,世界因你们而美丽。
OK,就这样打住吧,QML的书这几天也可以完稿了。写两句话在这里作为总结吧。
我想说:爱过,写过,失落过,高兴过,低徊过,迷惘过,兴奋过,不管怎样,我从未对那些流过的汗水、付出的精力后悔过,如果还有机会,我还愿意再这样走上一遭。