Bruce Douglass是嵌入式与UML应用资深专家,拥有30余年从业经历,他也是《C嵌入式编程设计模式》等十多本技术书籍的作者。目前,他是IBM Rational首席布道师。采访中,他分享了自己在嵌入式领域的经验与感悟。
不同寻常的个人经历
CSDN:你曾学习生理学和医学,这些经历对你在计算机领域的发展有怎样的影响?
Bruce:我的经历颇有些特别,14岁从中学直接进入大学,开始的专业是数学,后来转到运动生理学专业,直到硕士毕业,我的博士学位是South Dakota大学的Neurocybernetics(神经控制论)。这些经历给予我基本的科学素养,而计算机工程正是一种科学应用。对不同领域的涉猎,让我有着更强的推理分析能力及更宽阔的视野。
举例来说,我为几家公司做顾问时,经常发现其内部的明显错误,而处在内部的他们却未曾察觉。好比交往中的男女,你所有的朋友都说与你交往的人太差劲了,但你却因为爱他/她而全然不觉,直到某天分手后再回头看,可能才会后悔。机构往往如此,恰似经营一段错误的婚姻般当局者迷。只有脱离组织本身,完全独立地看待问题,才能做出最客观的分析——开发、工程管理等皆是如此。
还有一个例子,一家德国汽车制造厂有一个为期18个月的汽车检修流程,前6个月称为“特征构建”,后12个月称为“特征稳固”。也就是说,这个流程要先花6个月制造缺陷,再花12个月修复缺陷。这是一个很明显的问题,为什么不能在第一阶段通过检测设备、高效仿真等手段避免缺陷的产生?分析问题的关键就在于如何定义问题,以及如何从宏观角度寻找不同的解决办法。
CSDN:是什么吸引你开始编程的,并进入现在的领域?
Bruce:表面上看,编程就是想要实现什么就写什么代码;但事实是,敲代码只是软件开发过程中很小的一部分,程序员的工作还包括安全分析、责任分析、产品验证、产品分析等。
我第一次写程序是在做硕士究生论文时,论文的主题是“甲状腺素和去甲肾上腺素在冷压力下的相互反应”,那是在1978年,为了实现大规模统计分析,我买了一台拥有4KB内存的电脑,编写了我的第一个程序——1000多行的VB统计分析软件。之后读博期间,为了完成一套生物神经系统学信息处理的数据分析(即生物神经计算),我写了很多软件,其中包括一些系统驱动程序。
CSDN:在从业过程中,你如何提高自己的技能?
Bruce: 最重要的是实践,就像要练好标枪就必须勤加练习,编程也是一样。在我的书中,我一直都尝试加入更多的实例设计;在《Real Time UML Workshop for Embedded Systems》中,我写了一个无人机的设计案例;另外一本书中,设计了一个星际旅行传输机的有趣案例。我正在写这本关于“敏捷系统工程”的书中,我设计了一种可穿戴的机器人盔甲,类似于电影《异形》里机器人穿的那种,不过比电影中的大8倍,重达1500kg,可每小时跑80km。
从我参与过许多系统的开发——计算机断层扫描、医疗(如心脏起搏器、呼吸机)、无人机、自动化、航空航天、运载火箭系统等——我发现不同行业有着不同的应用环境,但同时也有共通性,我们需要在不断的实践中总结知识。经历会带给人财富,有一次我儿子问我,怎样才能成为作家(他想写小说),我告诉他,首先你要开始写作。
CSDN:在这些不同领域系统的开发过程中?你有哪些经验总结?
Bruce:有很多。
一是要发散思维克服目光短浅。我做顾问时,经常看到一些根本不可能实现的案例,当事人却置身其中毫无察觉。面对问题时,我们需要走出定势思维,从不同的角度寻找解决办法,并通过思考寻找问题的底层机理所在。比如,大学时我基本没上过化学课,但能通过推测解答试题的办法通过了考试(我可不推荐大家使用这种方法应付考试)。我们要学会看到事情之外,退一步想想事情发生的根本原因,总结所做过的尝试、预测以及最终成功的方法,然后在确保成功的前提下尝试更多的解决办法.。我们需要制定相应的度量标准,用来记录并展示过程中的成与败及最总目标。
二是要建立数学思维,提高准确性。一些人常常固执己见,忽略事实,即使现实已经证明他们的理论和想法不实际,他们却依然坚持——这是没有意义的行为。理论需要实践来验证对与错。在做开发工作时,我们需要一套度量标准用于评测,要以取得进步为目的,而不只是实现某个计划(计划只是某种意义上的理论,不一定是正确的),相较于“如何实现计划”,“如何实现目的”则是更好的度量标准。
三是要学会合理地做计划。通常软件行业制作的计划都有两种目的,一种是用于申请计划所需时间及经费;另一种则是用于激励员工努力工作,这种计划本身就存在着矛盾。合理的计划一定要基于现实,并有相应的度量标准来记录工作进度及工时。我在做项目管理时就有很多这样的度量规则,我一般只会预估完成一半任务所需的时间,这样前后两部分任务可在时间上做灵活调整;对于具体某个人的进度,我不会做预估,因为基本都会延时。统计学中有一个“中心极限定理”——通常我们只有50%的几率能够达成预估时间表。
在写作中融入趣味
CSDN:你开始写书的原因是什么,想要解决怎样的问题?
Bruce:我写的第一本书是在毕业后,当时我经营着一家软件公司,因为发表了不少计算机杂志专栏和文章,于是有出版社找到我,我因此写作了自己的第一本,关于数据分析的书。我在写作的过程中,总会追寻两个目标——为个人和读者的都带来收获。对于一个问题的理解,我觉得有三个层面:第一层是自己听说某项技术,但并不真正理解;第二层是开始应用,这属于比较深层的理解;第三层是能将知识传授给其他人,表明不仅自己可以应用,还能教授给不同技术背景和学习方式的人们。对读者来说,在很多行业,如飞行器、高速公路系统,金融领域等,都不乏聪慧的人,但在这些领域中却存在着糟糕的实践,特别是那些对安全性要求较高的行业中(包括医疗、航空电子设备、机动车设备、重工业、造船业、军事,以及金融业),我觉得可以做出更多改进。
CSDN:写书通常需要花很长时间,你是如何坚持的?对你写作影响最大的人是谁?
Bruce:我写一本书大概要用2000小时,这样对工作量听起来令人畏惧。写书是持久战,且万事开头难,开始时需要先组织语言列出提纲等。这好比参加铁人三项,乍一看似乎不可能完成,但是当你一项一项去做,终点就会在前方。
不少人对我的写作都有影响,我很喜欢Grady Booch(UML创建者之一,IBM院士)的写作风格,他是位条理十分清晰的作者。我不喜欢那种典型的枯燥无味的技术书,所以我会尽可能在书里添加一些诙谐因素,让它读起来更有趣(不过也不是所有人都懂我书里的幽默,我妻子就不懂)。Grady也经常在书里添加娱乐元素,用有趣又有意义的故事替无聊的文字,更容易被读者接受。
编程以及嵌入式软件开发经验总结
CSDN:开发者在嵌入式软件系统领域有哪些常见误区?
Bruce:首先,人们常在没有实践的情况下做出判断。比如有些人经常想当然的认为不过是软件/硬件,没有什么难的。没有实践,任何事情看起来都很简单。只有当你深入某个领域时,才能慢慢意识该领域的复杂性。如今的系统已经比几年前复杂数百倍,相应的安全性及可靠性也随之提高,相关的工作变得更复杂。
其次,人们通常认为紧凑的工期能够激励员工更努力的工作。事实上,这种激励方式最多只能生效一次。第一次,员工可能会乖乖一天拼命工作20个小时以完成任务,第二次他们就开始有些迟疑,到了第三第四次,他们也就不以为然了。我曾经有个老板说“现实是友好的”,我却始终认为现实就是现实,不友好但也不坏,现实不容忽视,我们要时刻保持理性。我发现很多组织内部都存在着各种架构或者工期制定的问题,他们从不根据事实制定计划,不认真思考总结,只通过凭空想象,然后期望能够如期完成。
CSDN:在医疗、航空、自动化及军事这些时刻关系到生命的领域,可靠性和安全性至关重要。对开发者来说,在这些领域,有哪些特殊的规则和标准需要遵循?
Bruce:最重要对在于,需要根据这些系统推理出所需的可靠性和安全性。
我曾创建一个关于安全推理的UML Profile,可以通过结合预设条件与故障组合展示故障风险。比如设置一个想要避免的场景,然后通过对这个场景的分析,判断出其所需的安全控制措施。任何一个做安全软件或系统的人都会说他们需要保障安全性,但通常只停留在对安全性的需求层面,并没有去深入理解为什么需要安全性。我的Profile核心部分称为Assert,它有多种存在形式,有时类似信用卡密码,我们要确保它不被盗取;有时类似于心脏起搏器,我们要确保它不被干扰;还有时是一种具体物品,我们需要确保它不被随意移动。当我们想要找出这些Asset的时候,需要预设一些条件来制造相应的缺陷,然后才能找到相应的可提高安全性的对策。通过不同的手段找到安全缺陷、分析安全漏洞,进而得知通过增强安全性所要保护的内容。现在大部分人根本不清楚做安全的目的是什么,所以深入的了解增强安全性的目的至关重要。
CSDN:与早些年相比,嵌入式软件开发领域最大的变化是什么?
Bruce:我觉得变化主要有三点。第一是范围,我开发的第一个软件,心脏起搏器,是一个基于6502处理器的、很小的、实时多任务操作系统的汇编程序,系统只有8KB。如今系统的空间和功能实现跟以前比起来,早已不在一个量级,过去的系统很小而且功能简单,现今的系统要比以前复杂千倍。
第二是规则变化,包括一些安全可靠性服务。如今的安全监管功能增加了很多对开发的质量要求规则。以前如果机器坏了我们可以直接关掉,如今却不行,例如输氧设备或者正在驾驶的飞机,我们并不能直接关掉它,也就是说如今的质量需求要比以前多得多。
第三是集成。当今世界是一个亿万台设备相互连接的互联空间,这同时意味着我们正面临着史无前例的安全隐患。有一篇发表在“Planet Black Hack”上的研究报告称,他们已经找到了可以黑入普通移动设备、主板、娱乐系统、自动系统、传感器系统的不同途径。在这些设备中,他们不仅可以开关机、开启或锁定防火墙,还可以盗取信息、重写引擎软件。在过去如果有人想偷车,就必须先把车门撬开;而如今,只需要黑入汽车系统改写软件就能把车偷走。这是安全级别的一个巨大改变,50年前还没有电力系统,20年前有了电力系统,但是还没有软件,如今一个病毒就可以攻击几万台设备并导致一座城市的瘫痪。
CSDN:对中国的开发者,你还有哪些建议想与他们分享?
Bruce:在我看来,开发者即革新者,而革新一定不能畏惧失败,不能因为他人的不认可而轻易放弃。另外,作为一名开发者,不能只关注系统的功能实现,还要关注质量保障,系统功能的实现要围绕着安全、可靠和高效进行实施。要拥有独立并机智地使用不同技能的能力,勇于面对错误并及时修正。根据我的经验,在新事物的应用过程中,通常会有25%的错误概率,如果没有,那你一定没有努力地应用新技术。大部分人都喜欢恪守陈规,而我宁愿是个例外,这同时意味着会做出一些令人难以置信的错误决定,不过没有什么大不了,下次改正就好了。
|