清茶一盅观码行

    科技2022-08-01  97

    20多年前,我在上海闸北的一家单位工作,有一天我在电脑前调试代码时,一位其它部门的同事到我们办公室办事,她看到我坐在电脑前,直言不讳地说:“这工作老辛苦了。”接下来她还给她的论点提供了一个强有力的论据,她说她老公是做软件的,“总要不断学新的东西,特费脑子”,枕头下面经常掉很多头发。

    在那家单位工作几年后,我真的换工作了,不过,不是放弃做软件,而是到专业的软件公司去做软件了。20多年过去了,今天回想起那位同事的话,仍觉得她的论点和论据都不差,特别是关于头发的论据也被我的亲身经历所验证了。我读中学时,头发特别多,仿佛戴了一顶厚厚的假发。做了20多年的软件工作后,虽然剩余的头发还不算太少,但是论绝对数量的话,至少比学生时代减少一半。

    与写文章类似,写程序也是一种创作。写文章贵在别出心裁,语不惊人死不休。写代码何尝不是如此?别人写好的代码,一般复用就可以了,没有必要复制一遍。这意味着,真正的写代码就是要创作出以前从来没有过的代码。不动大脑怎么会创作出好的代码呢?

    至于“总要不断学新的东西”,也非常的正确。软件技术的变化可谓日新月异,当年在那家单位工作时使用的是Foxbase,很多年轻的程序员可能根本不知道它是何物了。

    虽然付出了很多头发,但我一直都觉得自己的选择是非常正确的。而且感觉非常幸运,遇上伟大的软件时代。因此,我多次说“三生有幸做软件”。

    除了自己坚定地走软件之路外,当有亲戚朋友请我为他们的孩子填报志愿和选择专业时,我的第一个推荐也总是软件方向。

    “做软件这么辛苦,你为什么还推荐年轻人做软件呢?”有时我也会向自己问这个问题。有时我的内心可能略微踌躇,但很快,又会坚定起来。

    有两股力量让我坚定信念。一股是人生本该付出一些辛苦,本该不断学习,“学不可以已”,为了伟大的软件而学习和辛苦是值得的。另一股力量是如果掌握了好的方法,那么学习的效率会很高,辛苦的程度会大大降低。

    好的方法是什么呢?

    简单说就是我多年来一直实践,一直探索,一直推动的“调试”方法。不仅用这种方法工作,披荆斩棘;而且用这种方法学习,与时俱进。

    导致软件工作辛苦的一个基本原因是高复杂度,以光速运行的CPU在极其庞大的代码空间中上下穿梭。

    如何对抗软件的高复杂度呢?必须依赖工具。以调试器为核心的调试技术是对抗软件怪兽的最有力武器。可谓卤水点豆腐,一物降一物。

    因为调试技术的英文是Debug,也就是“除虫”,所以有些学院派的软件专家不把调试技术看在眼里。但其实这些人中的大多数都根本没有参透软件的精髓,脑子里装的都是生硬的概念和干瘪的词汇。他们既做不出好的设计,也写不出好的代码。当他们做工程时,产出的是糟糕的软件。当他们做老师时,坑害了一批批的学生。

    不幸的是,轻视调试的不仅仅有学者,也有很多程序员同行。他们几乎从来不使用调试器,更不懂得调试的原理,也不了解调试的妙处。他们遇到问题时,大多靠“打印”、“调整代码重试”、穷举等效率较低的方法。

    今天,Linux系统很流行,这使得很多程序员是工作在Linux平台上的。但不幸的是,Linux系统的调试设施比较简陋。对于应用程序的问题,可用的调试器主要就是GDB。对于内核空间的问题,虽然有KDB和KGDB两种方案,但是都有比较多的问题。

    那么,Linux系统上的调试设施为何如此贫乏呢?原因比较复杂。从根本上分析,与Linux核心设计者的软件价值观有关。举例来说,早在2000年时,很多人就提议把用于内核调试的kdb功能集成到Linux内核中,但是在讨论这个问题时,Linux内核的最初设计者Linus公开表态,坚决反对。在2000年9月6日的一封公开邮件中,他毅然决然的说出了下面这句振聋发聩的话:

    “我不喜欢调试器。从来没有过,将来也绝对不会。”

    “所以,我不会让它成为标准发布的一部分...”

    Date: Wed, 6 Sep 2000 12:52:29 -0700 (PDT) 

    From: Linus Torvalds

    “I don't like debuggers. Never have, probably never will.”

    “So I don‘t make it part of the standard distribution…”

    作为Linux系统的创始者,Linus在Linux社区,以至于整个软件产业中都具有广泛的影响力。他如此坚决的不喜欢调试器,当然会影响到很多人,影响到Linux系统的调试设施建设。

    当我第一次看到Linus写的上面这封邮件时,我非常惊诧,我把邮件反复读了几遍。人的价值观不一样,对软件的价值观也千差万别,但Linux内核的创始人对调试有如此态度,真的让我愕然。

    静下心来思考,这个世界就是存在分歧,存在争议。越是基本的问题,越是可能有大分歧。

    对于这样的分歧,前辈有句经典的话:“君子和而不同”。这句话的弦外之音是没有必要也不可能把所有人的观点都统一起来。每个人选择自己的观点,走自己的路。如果认为自己的方法很好,那么可以宣传自己的观点,吸引持相同观点的“同好”。

    本着这样的想法,这些年我非常勤奋的传播我的“调试方法论”,不仅写各类文章、以各种方式宣讲,而且继续写书,更新和扩展我的《软件调试》,将其升级为第二版,扩展架构,分为三卷:

    卷1:硬件基础

    卷2:Windows平台调试

    卷3:Linux平台调试

    2018年,时隔《软件调试》第一版出版10年后,第二版的第一卷问世。

    2019年9月,第二版的第二卷交稿,但因为2020年突发疫情,编辑工作受到影响,出版日期一再延迟,直到2020年9月才开始印刷。

    2020年9月15日,我收到编辑的通知,书已入库!

    在格友的微信群里,提前预定的网友收到了发货通知。

    9月22日,我收到了出版社发来的样书,9套,18册,整整一箱,我将其抱起来,放到会议桌上,打开箱子,一套套的拿出来,拍照留念。

    第2卷的封面人物仍是钟馗。这一次选的是钟馗手执利剑,脚踏小鬼,正在战斗的画面。选这个画面是为了突出这一卷的实战特色。

    这幅画的原作者是著名的钟馗画画家林少丹先生(1919年7月31日~1993年5月12日)。林先生是福建籍的著名画家,特别喜爱画钟馗,一生为“钟馗”造像无数。

    设计封面时,出版社提供了很多购买过版权的钟馗画像,我特意选了上面这幅有实战气息的。

    前一些天,有一位打算写书的同行询问我写书的收益。我说版税收入很低。他听了后,有点失望。我补充说,“出书有些金钱之外的其它好处”。他追问我“张老师能解释一下,其它好处都有些啥好处吗”

    我回答说:“明明德”。

    我是信儒家的,因此,我把“明明德”的价值看的很重。什么是明明德呢?对于信儒家的朋友,一定很熟悉儒家的这个“第一纲领”。对于不熟悉儒家思想的,我的简单解释就是“把’明亮‘的思想传播出去,让其发扬光大”。

    我读中学时,有个著名的诗人,名叫顾城(1956年9月24日—1993年10月8日)。他被称为中国朦胧诗派的重要代表。很多人可能知道他的这句诗:

    “黑夜给了我黑色的眼睛/我却用它寻找光明”

    其实我更喜欢他的另一句诗:

    “我想在大地上画满窗棂/让所有习惯黑暗的眼睛习惯光明”

    做了20多年的码农,我是不会写诗的。但是在最近几本书的领口位置,我都附了一些不能算作诗的句子。以前是写自己的经历和爱好,在卷2的领口,写的是调试器。我想用浅显而且简短的语言赞美这个伟大的工具。

    写这首小诗的目的当然是希望让更多人了解调试器,用它来提高效率,不至于那么辛苦,不必掉那么多的头发。一台电脑,一个调试器,让调试器监督软件奔跑,“清茶一盅观码行”......

        

    ***********************************************************

    正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生

    欢迎关注格友公众号

    Processed: 0.012, SQL: 8