专访张银奎:要抓住技术发展趋势,只有不断学习和更新自己?

2019-01-02  本文已影响47人  b241fd26e57f

如果说软件的执行过程就像是CPU在无数条道路(指令流)间飞奔,那么开发软件的过程就是设计和构建这个交通网络的过程。其基本目标是要让CPU在这个网络中奔跑时可以完成需求(requirement)中所定义的功能。对这个网络的其他要求通常还有可靠(reliable)、灵活(flexible)、健壮(robust)和易于维护(maintainable),开发者通过简单的改造就能让其他类型的车辆(CPU)在上面行驶(portable)……

开发一个满足以上要求的软件系统不是一件简单的事,通常需要经历分析(analysis)、设计(design)、编码(code)和测试(test)等多个环节。通过测试并发布(release)后,还需要维护(maintain)和支持(support)工作。在以上环节中,每一步都可能遇到这样那样的技术难题。

在软件世界中,螺丝刀、万用表等传统的探测工具和修理工具都不再适用了,取而代之的是以调试器为核心的各种软件调试工具。

软件调试的基本手段有断点、单步执行、栈回溯等,其初衷就是跟踪和记录CPU执行软件的过程,把动态的瞬间“凝固”下来,以供检查和分析。

软件调试的基本目标是定位软件中存在的设计错误(bug)。但除此之外,软件调试技术和工具还有很多其他用途,比如分析软件的工作原理、分析系统崩溃、辅助解决系统和硬件问题等。

综上所述,软件是通过指令的组合来指挥硬件,既简单又复杂,是个充满神秘与挑战的世界。而软件调试是帮助人们探索和征服这个神秘世界的有力工具。

今天,作者对软件调试的理解和认识,相比自己写本书第一版时,在广度和深度方面都有了较大的提升。我们有幸采访了《软件调试(第2版)卷1:硬件基础》作者张银奎,来看看他的所思所想。

张银奎老师

异步社区:请老师简单介绍一下自己?您目前正在做哪些事情?

张银奎:我出生在70年代,90年代大学毕业。20多年的工作生涯中,有13年是工作在英特尔公司的上海分公司。2016年底我从英特尔离职,开始人生新一轮的征程。目前我主要做两件事情,一件是创业,把自己积累了20多年的编码手艺应用到实践中,希望可以解决一些工程问题,创作出一款“广为流传”的软件。

第二件事是知识传播,包括写书、讲课、举办庐山研习班等。两件事都是我非常热衷的,发自内心的喜欢,想起来就很开心,有后脑勺要乐开花(童年的俗语)的感觉。

异步社区:从英特尔离职后?您平常每天都做些什么?或者说您典型的一天是如何度过的?

张银奎:是的,2016年底,我告别了英特尔,告别了那个舒适的工作环境。从普通的视角看,我的生活是比较单调的。如果我不出去讲课,那么就在我的办公室里。在为《软件调试》第二版冲刺那段时间里,我每天6点钟即起床,先送女儿上学,不到7点就到办公室,到了办公室后,就开始写作。清早的时候,思维活跃,很适合写作,而且安静没有打扰。闷头写两个小时后,大约9点,到了上班的高峰,这时我会休息一下,看看楼下拥挤的车流和人流。9点之后,我可能继续写作,一直到中午,也可能编写代码。吃过午饭后,大多时间是做开发,编写代码,调试,或者做各种实验。

晚上下班后,我有两件热衷的事,一件事是关于书的,包括读书和买书。买书方面,最好是逛实体书店,但是不能总去,所以有时也逛网上的书店。另一件事是关于孩子。我有两个女儿,大的已经读初中,我努力向她推销软件领域流行的“敏捷(Agile)”方法,目的是加快看似没有尽头的各种作业。小的还没有上幼儿园,她每天都有进步,每天都给我惊喜,真正的“日日新”,看着她成长,给我很多启发,和无限快乐。

异步社区: 我们在书中看到这样一句话——著名的计算机科学家布莱恩·柯林汉(Brian Kernighan)说过,“软件调试要比编写代码困难一倍,如果你发挥了最大才智编写代码,那么你的智商便不足以调试它。”那么,老师觉得软件调试的难点在是什么?具体表现是什么?

张银奎:难点很多。打个比方来说,很多人都会开车,但是不会修车。开车只要操作几个可见的装置就可以了,修车要掀开盖板,探查内部的隐秘世界。因为此,MSDN杂志上曾有一个著名的技术专栏,名字就叫Under the Hood(盖板下面)。对于软件系统来说,今天的软件栈越来越深,越来越复杂。“深”意味着难以见底。而学习底层往往是比较苦难的。底层的资料比较少,相对枯燥,难以理解。

除了需要比较多的底层知识之外,做好调试还需要较强的耐力和分析推理能力,一个复杂的bug可能需要几周的时间来攻克,这对耐力、意志和信心都是考验。

异步社区:老师在创作《软件调试(第2版)卷1:硬件基础》过程中遇到的最大困难是什么?

张银奎:非技术方面,最大的困难是分配时间。有人说过,诗歌的冷落是因为人类过了童贞的年龄。尼采说过,书的时代已经过去,电影的时代来了。这些话未必全对,但是有道理的。在这样一个快节奏的互联网时代里,对于一个IT技术者来说,写书真的是一件非常奢侈的事情。1934年8月,35岁的老舍冒着酷暑来到上海。他是从济南来的,刚刚辞去了在齐鲁大学的工作,到上海寻找机会。在后来的文章中,他曾这样回忆这次上海之旅,“我不是去逛,而是想看看,能不能不再教书而专以写作挣饭吃。”结果,老舍在上海住了十几天后,得到了一条结论:“专仗着写作吃不上饭”。于是又回到了山东,继续一边教书一边写作。今天距离老舍的时代又有近百年了,专职写作变得更加艰难。

技术方面,《软件调试(第2版)卷1:硬件基础》新增了大量篇幅来介绍GPU上的编程与调试。与传统的CPU编程相比,GPU编程有很多不同,代表着软件开发的新挑战和方向。今天,关于GPU内部结构和原理的资料还很少,我花了一年多的时间,一边查找资料,一边使用我习惯的“格物”方法进行调试和探索,摸索前进,终于比较全面地介绍了Nvidia、AMD、Intel、Imagination、ARM五大品牌的GPU,从内部结构到外部接口。在国际上,今天也还没有第二本书如此详细和深入地探讨GPU。

异步社区:据了解,《软件调试 (第2版)》将分成3卷出版,卷1覆盖处理器等基础内容,卷2、卷3分别介绍Windows系统和Linux系统的调试。本次南京签售上,有的读者我们卷2和卷3计划在什么时候出版?您可以稍稍“剧透”一下吗?。

张银奎:考虑多种因素,第2版会分三卷出版,第1卷是公共基础,第2卷和第3卷分别覆盖Windows和Linux平台。关于时间,因为上面提到的原因,现在还不能承诺。我会争取在2019年至少再推出一卷。内容方面,会延续卷1的几个特色,包括呈现技术背后的人文背景,追溯技术发展的历史,生动活泼的技术评点。

异步社区:您觉得现阶段软件领域的从业人员所面临的挑战和新要求是什么?

张银奎:信息技术是以越来越大的加速度在发展的,这意味着速度是沿着陡峭的上升曲线攀升的。从事软件技术的好处是不用担心碰到天花板,因为永远没有止境。对于每个人,要想跟的上技术发展的速度,一定要不断学习,不断更新自己。一方面要学会一套好的学习方法,用强大的工具武装自己。另一方面,要养成学习的习惯,通过各种途径不间断地学习。

异步社区:对于软件测试和软件调试,您认为这二者的关系是怎样的?软件测试人员是否都应该具备软件调试的技能呢?

张银奎:二者虽有联系,但有很大区别。简单说,测试的目的是发现和证明有bug,调试的目的是找到根源和去除bug。而且,调试的价值不仅仅在于去除bug,它还是深入理解软硬件系统的一种强大工具,是所有软件工程师都应该掌握的一项基本技能。

异步社区:针对刚毕业、初入职场的小白,您有什么建议?

张银奎:选择软件方向是绝对没有错的。在我看来,21世纪最有魅力的职业就是软件开发。我的建议有三个。

一是要有远大的目标,站在比较高的高度上为自己设计职业发展计划和技术发展计划。

二是脚踏实地,要从基础的工作做起,写好每一行代码,熟练使用开发工具和调试工具的每个常用功能。

三是不断钻研,不要止步于表面,对底层原理有热情。

异步社区:对您工作和生活帮助最大的三本书要推荐给大家的?

张银奎:读过的好书太多了。分三个方面各选择一本吧。

技术方面,英特尔的《英特尔架构软件开发者手册》(简称SDM)对我帮助很大,这本书分很多卷,网上有电子版本,我也有打印版本,书的每一册都比较厚,我经常读的是第三卷,胶状的书脊都被我翻的裂开了。

哲学方面,朱熹的书对我启发特别大,在我家里,与朱熹有关的书摞起来肯定超过1米高,大多数是他本人的著作,也有关于他的传记,还有他学生的书。书的形式有很多种,有单册,也有大部头。又分成不同时期出版的,有近现代的,也有一两百年前出版的线装书,是我从不同渠道淘到或者通过线上拍卖买来的。如果选择其中一本,那么就推荐朱熹的《四书集注》吧,有很多个版本供选择。

历史方面,《史记》对我的影响特别大。关于《史记》的书,我也有近百本。我觉得,对《史记》和它的作者司马迁的评价和赞美,再高也不过分。《史记》中有太多的大智大美!在写作《软件调试》第2版时,在我的办公室里,也放了一些书,每当写作间隙,我经常翻阅的书除了朱熹集注的《论语》线装书外,就是《史记评林》,两类书都是线装的,木板印刷,来自日本。

张银奎老师著作

《软件调试(第2版)卷1:硬件基础》

张银奎著,人民邮电出版社

扫描二维码,一键购买

软件调试领域的百科全书,历时十年,经典再现;

软件工程师的贴身宝典,向一流技术高手进阶的常备攻略;

设有“格物致知”实践环节,提供配套资源,可供读者动手实践; 

丰富的行业背景知识和人文故事,让读者体验技术的有血有肉、有感情有温度。 

上一篇下一篇

猜你喜欢

热点阅读