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的书这几天也可以完稿了。写两句话在这里作为总结吧。

我想说:爱过,写过,失落过,高兴过,低徊过,迷惘过,兴奋过,不管怎样,我从未对那些流过的汗水、付出的精力后悔过,如果还有机会,我还愿意再这样走上一遭。

技术书是怎么写出来的相关推荐

  1. 【转载】中庸与技术书

    2019独角兽企业重金招聘Python工程师标准>>> 转自:图灵社区 原文作者:刘祺 原文地址:http://www.ituring.com.cn/article/213657 本 ...

  2. 码农西游 | 写一本技术书可以赚多少钱

    程序员的成长之路互联网/程序员/成长/职场  关注 阅读本文大概需要 3 分钟. 上班的钓鱼时光,八戒看到一篇写作赚钱的文章,联想到自己也是个技术人才,是不是可以学习一下他们,写一本技术书赚钱,特此去 ...

  3. 如何开始写一本属于自己的技术书

    <亿级流量网站架构核心技术>一书作者写作经验分享,谈谈如何开始写作属于自己的第一本技术书(或者电子书).本场Chat内容包括: 写书的目的是什么: 不知道从何下手,如何规划: 怎么定位目标 ...

  4. 写给产品经理的技术书:客户端、服务端和交互相关技术

    产品经理有三大领域的技术是需要去攻克的,分别是:客户端相关技术.服务端相关技术.交互相关技术 一.客户端相关技术 1.iOS和安卓产品差异 1.1 应用的设备不同: IOS和安卓最大的区别在于本身所应 ...

  5. 你为什么“啃不动”你手中的技术书?

    图源:Pexels 很多读者都怕读TAOCP,笑称买完只能用来垫显示器,或装饰门面.但其实,可能你选读这本书的真正动机是给Bill Gates 发邮件找工作. 著名编辑人艾德勒曾说过:"任何 ...

  6. 程序猿充电的五本优质编程技术书

    导语: 知识更新那么快,跟随不上怎么办? 碎片信息那么多,选择恐惧怎么办? 别担心,我用心挑选了几本编程技术书. 长期推送干货.职场心得,让你收获满满. 话休絮烦,点击关注,长期推送干货! 第一行代码 ...

  7. 微创社001期:从0开始创作第一本技术书

    互联网已经成为了人们生活中如饮水空气一般的基础设施,它不仅影响着当下我们的生活,也必将在更加普遍的领域影响着我们的未来.而在大浪潮中,坚守一个以自我为中心的知识体系,不仅有助于我们作为个体更好的从互联 ...

  8. 如何阅读Cookbook技术书——如果我要把一本几百上千页的书从头读到尾,应该怎样有效阅读。...

    对于这个话题的解释: 为了尽快熟悉一门编程技术,通常会选择视频.网络教程.书籍.培训班等形式.学习的内容越高端,就会越倾向于阅读技术书籍.但技术书,特别是英文原版Cookbook(中文译名可为攻略), ...

  9. 编程达人教你如何快速掌握一门编程语言附技术书阅读方法论

    附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①[Java]学习之路吐血整理技术书 ...

  10. 隔壁班的 女同学 觉得这本技术书还挺棒的

    拆书,读书,帮你选技术书.橡皮擦 "读" + "选" 技术书. 没错,这次橡皮擦还问了问一个女程序员,她说行. 拆书<Python 自动化开发实战> ...

最新文章

  1. KVM 虚拟化架构和实现原理
  2. vue,一路走来(14)--短信验证码框的实现(类似支付密码框)
  3. prototype.js常用函数及其用法
  4. 为工厂分配用于公司间Invoice的销售范围
  5. android 获取u盘名字_android 获取U盘路径
  6. One more sprint? 再加一个迭代?-英文
  7. python通过ftp上传文本文件storlines怎么用_用python将本地文件上传到FTP报错
  8. 【VB.NET】VB.NET程序设计学习指南
  9. Python+django网页设计入门(12):使用Bootstrap和jQuery
  10. 获取当前实例的字段值
  11. OpenOffice源代码编译及安装
  12. 浪潮之颠一_读书笔记
  13. 奥维地图(OMAP)中坐标为什么有偏移?如何基于WGS84或GCJ02的经纬度坐标生成kml?怎么导出图上一个标签点的WGS84经纬度坐标?
  14. matlab显示图片
  15. fh 幅频特性曲线怎么画fl_测量rc带通滤波器的幅频特性和相频特性-电子科技大学.ppt...
  16. ThinkBook 14P Win11网卡驱动掉了-解决方案
  17. 用window.dialogArguments时出现window.dialogArguments is undefined
  18. html作业word,Word实验作业——个人简历.doc
  19. coturn NAT穿透服务器搭建
  20. goland工具的使用

热门文章

  1. 微信突破版本限制永久设置透明/半透明头像
  2. java osm pbf_OSM数据的下载和转换使用
  3. Excise_day05_Array
  4. Matlab中将横纵坐标改为自定义标签(set(gca,xtick)set(gca,xticklabel))
  5. r5 5500u和r5 4600u区别有多大 r55500u和r54600u哪个好
  6. 十进制小数化为二进制小数的方法是什么_二进制的转换
  7. 【初学音频】Android的Audio系统之AudioFlinger
  8. 他只靠写代码,登上了胡润富豪榜!
  9. TNS-12555: TNS:permission denied
  10. mysql can t drop_异常之 mysql Can't drop database 'drop_database'; database doesn't exist