`
king_tt
  • 浏览: 2110895 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

技术书是怎么写出来的

 
阅读更多

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

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

分享到:
评论

相关推荐

    模拟电子技术基础-童诗白第二版(1988)

    第2版)》是第2版不是第3版, 《模拟电子技术基础(童诗白_第2版)》是大师严谨做学,酌字酌句写出来的,很多地方都有引用条目的注释,“言必有徵,无徵不信”胡适先生的话很有道理,比起现在的书来真是严谨许多。...

    用LATEX 排版编程技术书籍的一些个人经验

    排版是一门大学问,我只是一名技术图书的作者,有一些初步的LATEX 使用经验。我 不是专家,出版印刷的行话也不怎么会说。本文的目的是让有志于用LATEX 来排版自己书 的人少走一些弯路。换句话说,这篇文章是讲“我是...

    图书管理系统需求分析文档

    一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间...

    自己动手写docker 陈显鹭

    阿里的工程师将自己的经验共享出来,写了这本书,详细讲解容器的原理,并且使用go语言写了一个docker,为大家提供一个学习容器原理的方法。 <br/>本书在详细分析Docker所依赖的技术栈的基础上,一步一步地通过...

    Javaswing图书管理系统源码(含数据库脚本).zip

    技术大同小异,所以感兴趣的同学可以在书本借阅的界面增加同样的功能,导入导出的工具类我已经在项目中写出来。 ③管理员可进行图书的增加和删除,修改等等操作。以及图书类型的增删改查。 ④管理员端的借阅统计...

    Visual C++技术内幕(第四版)配套光盘

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    Visual C++技术内幕(第四版).part6.rar

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    Visual C++技术内幕(第四版).part4.rar

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    sql server 2005 技术内幕 T-SQL查询 中文清晰pdf part4

    为了方便大家下载我特意也将《sql server 2005 技术内幕 T-SQL程序设计》的下载地址也列出来: 第一部分的下载地址:http://download.csdn.net/source/2918919 第二部分的下载地址:...

    Visual C++技术内幕(第四版)目录

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    sql server 2005 技术内幕 T-SQL查询 中文清晰pdf part1

    为了方便大家下载我特意也将《sql server 2005 技术内幕 T-SQL程序设计》的下载地址也列出来: 第一部分的下载地址:http://download.csdn.net/source/2918919 第二部分的下载地址:...

    sql server 2005 技术内幕 T-SQL查询 中文清晰pdf part2

    为了方便大家下载我特意也将《sql server 2005 技术内幕 T-SQL程序设计》的下载地址也列出来: 第一部分的下载地址:http://download.csdn.net/source/2918919 第二部分的下载地址:...

    BMS-图书管理系统课程设计.rar

    技术大同小异,所以感兴趣的同学可以在书本借阅的界面增加同样的功能,导入导出的工具类我已经在项目中写出来。 ③管理员可进行图书的增加和删除,修改等等操作。以及图书类型的增删改查。 ④管理员端的借阅统计...

    Visual C++技术内幕(第四版).part1.rar

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    Visual C++技术内幕(第四版).part2.rar

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    Visual C++技术内幕(第四版).part3.rar

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    Visual C++技术内幕(第四版).part5.rar

    我从94年开始就使用Visual C++,而且在开发工作中涉及的技术范围比较广,所以翻译这本书对我来说难度不大,除了书的最后个别地方我不太熟悉,其他所有的章节我都能很轻松地表达出来。整个翻译过程也是我再学习的过程...

    Java技术与就业指导(张孝祥)

    做笔试题时,不要以为把程序写出来了,回来在计算机上一运行,结果正常就觉得做得很好了,应该把做笔试题当作是一个展现你才华,性格、办事风格、工作态度和良好习惯的平台,要把做笔试题当作给人讲课和写书一样的...

    Java核心技术一 上.md

    学习读书笔记。读书笔记是指读书时为了把自己的读书心得记录下来或为了把文中的精彩部分整理出来而做的笔记。在读书时,写读书笔记是训练阅读的好方法。 记忆,对于积累知识是重要的,但是不能依赖记忆。

    sql server 2005 技术内幕 T-SQL程序设计 中文清晰pdf part4

    为了方便大家下载我特意也将《sql server 2005 技术内幕 T-SQL查询》的下载地址也列出来: 第一部分的下载地址:http://download.csdn.net/source/2922760 第二部分的下载地址:...

Global site tag (gtag.js) - Google Analytics