Stamp of Software Debugging
 
 
 
 
 
 
 
 
 
 
 
navigation bar seprate line

搁浅的“栈上风云”

《软件调试》出版后,就想着写案例性的书。案例很多很杂,从哪里下手呢?起初的思路是按照问题分册写,比如《应用程序崩溃怎么办?》《堆调试》等。顺着这思路真正开始动工的是针对栈问题的《栈上风云》。

酝酿了一大阵子后,在2011年年初的时候《栈上风云》正式开工了。在2010年年末的一篇博客(http://advdbg.org/blogs/advdbg_system/articles/4399.aspx)记录了当时的想法。开工前的那期调试之剑专栏文章的开头,也曾提起这个计划,摘引如下:

“红红的鞭炮摆上了货架,人们脸上堆满笑容,过年的气氛越来越浓了。长大以后不再有孩提时代那种盼望过年的急切心情,但是至少春节长假还是很令人期待的。除了春节的例行节目,酝酿很久的新书会在这个假期正式开工。新书写什么,书名还没有完全确定,但是肯定是关于调试的,而且是软件的调试,别的不懂。为什么选择春节动工呢,迷信点说:日子好。”

-- 《趣谈CLR4的调试模型重构(下)》

半年之后,《栈上风云》完成了7章。从“子过程谈起”,讲到了KDF9中的硬件栈。写到这里,遇到了一个问题。就是书的总体结构。最初的想法是写关于栈的案例,写好的这部分算是追溯栈的历史和渊源。如果继续按照案例的思路来写,接下来应该回到现实中写实际问题了。但是我的想法却有些改变。在写前7章的过程中看了很多计算机的发展历史和故事,而且喜欢上了这些故事,想把整本书都按照历史故事的方式写晚......

两种想法的斗争让《栈上风云》搁浅了。

犹豫了几个月后,想到了用新的方法出案例的书,就是将近几年遇到的精彩案例收集到一起,每种类型的问题选一两个案例,这便是后来的《格蠹汇编》。时间大约是2011年底。

最初的计划相当激进,以为2012年5月就可以完成,因为很多案例都已经是现成的材料,而且有在《程序员》杂志上的初稿。但实际上远比预想的复杂,直到2012年10月28日才交稿。写书就像开发软件,总是要延迟很多。

多次调整的篇章结构

确定《格蠹汇编》的篇章结构颇费了些周折。因为很多内容是相对独立的,所以第一稿是一章章写和整理的。第一稿完成后,总共有50多章,有些较长的案例分为多章。如何安排这些内容的次序呢?也就是如何将它们组织成有一定逻辑关系的“篇”呢?曾经按用户态、内核态......这样划分。但是很快觉得不够好,因为有些内容是与用户态和内核态都有关系的,比如启动过程,调试器中品味CPU,等等。

有一天随便读书的时候,一篇书话提到某某书(记不清名字了,也找不到了那篇书话)是按周易的“元亨利贞”分为四篇。我觉得这种划分方法活泼有趣。于是就想按类似的方法划分,分为四篇,均匀划分,每一篇最好还有一定的独立性。想来想去,有一天周末终于来了灵感,基本就是后来采用的分为“笃行、明辨、器用、致知”四篇。

夹缝当中写作忙

因为平时要上班工作,所以只能挤业余的时间来写作,主要是周末、假期和晚上的时间,还包括旅行途中。

记得《是谁动了我的句柄》就是在飞机上完成的。2012年5月,上海到旧金山的UA航班,经济舱中的座位很是狭窄,左右都是人,双臂要特别收紧,不然就要碰到旁边的人。前后的距离也非常有限,笔记本的屏幕不能完全展开......在飞机抵达旧金山之前,终于写完了,初稿中曾提到:

“这篇文章的后半部分是在飞机上写的,座位狭小,写起来很是费劲,而且篇幅已经不短,就此打住了。”

UA航班上的写作空间虽然横向很狭窄,但垂直方向没什么限制,累了的话可以把手臂向上举放松一下。无独有偶,在review《格蠹汇编》的第二稿时,又有了一次在纵向的夹缝空间中写作的经历,那就是在火车卧铺的上铺改稿子。2012年国庆假期回老家,没有坐飞机,也没有坐动车,买到的票就是普通的火车卧铺,而且是上铺。从家里出发时就计划了在火车上看稿子,因此将笔记本电脑充满了电。担心火车上无法充电,我还带一部分打印出来的稿子。上了车后发现,虽然不是动车,但车厢里却有两个可以充电的地方,据列车员说,这列车是新式的车厢,厕所和水电系统都已经升级到了21世纪的水平^^。这给我一个惊喜,没有任何理由偷懒了,争分夺秒看稿子吧。因为是国庆假期,每个铺位都有人,过道上也人来人往。因此,除了少部分时间坐在过道边之外,很多时间里我都是蜷缩在上铺,抱着电脑改稿子。车轮滚滚,车厢外时而是苍茫大地,时而是城市或者乡村......我喜欢坐火车的独特体验,这次在火车上写作的经历无疑会深刻到我对火车的记忆中。

navigation bar seprate line
Copyright (C) 2013-2013 Raymond Zhang, All Rights Reserved