专访Bruce Douglass,谈嵌入式经验

Bruce:表面上看,编程就是想要实现什么就写什么代码;但事实是,敲代码只是软件开发过程中很小的一部分,程序员的工作还包括安全分析、责任分析、产品验证、产品分析等。

===========================================================================

摘要: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%的错误概率,如果没有,那你一定没有努力地应用新技术。大部分人都喜欢恪守陈规,而我宁愿是个例外,这同时意味着会做出一些令人难以置信的错误决定,不过没有什么大不了,下次改正就好了。

文章来源:

  专访Bruce Douglass,谈嵌入式经验 http://www.csdn.net/article/2014-08-04/2821024-Bruce-Douglass-interview

完。

专访Bruce Douglass,谈嵌入式经验

时间: 2024-10-12 19:35:42

专访Bruce Douglass,谈嵌入式经验的相关文章

浅谈嵌入式工程师入门及嵌入式工程师进阶,学嵌入式这些你需要知道

想要从事嵌入式开发,但又不知道怎么入门的,可以看下,下面我结合自身实际来谈一谈. 前提基础:简单的电路.模电.数电知识,C语言 一.从51单片机入手 如果有一些前提的基础知识,要上手51单片机不算难.首先,你得有一块开发板,郭天祥或者普中科技的51单片机开发板都很不错,资源比较齐全,有配套视频,可以跟着视频来一步步地走进单片机的世界.因为是用C语言编程的,功能实现的过程不算复杂,有C语言基础的基本不会有问题.如果不想看视频,或者想要一本书来总结一下,我觉得郭天祥写的那个51单片机C语言教程写得比

浅谈嵌入式指纹识别方案

信息化时代,生物识别技术作为信息安全和个人身份识别技术越来越受到人们的重视.指纹作为人体中最明显的外表特征,具有唯一性.终身不变性.易获取.难以复制等优点.随着科学技术的发展,指纹识别已经成为目前最为实用.应用最为广泛的生物识别技术,尤其在民用生物识别技术中. 传统的指纹识别系统都是基于PC机的,这种系统具有识别速度快.样本存储量大.软件设计技术成熟等优点.但是,基于PC机的指纹识别系统由于价格昂贵.移动性能差.功耗高等缺点限制了其应用的进一步扩大.随着32位嵌入式微处理器的推广和应用,为人们设

9年设计师谈行业经验:20条经验免费赠你

以前写了很多方法.思考.知识的梳理等等内容,有时候我们却很少思考问题的本源.最近也在整理自己的思路,所以不停地问自己一些问题.今年工作第九年,马上进入第十个年头,慢慢对这个行业有了一点点认识.以下纯属个人观点,我觉得一碗鸡汤让你热血行动三分钟,不如一盆冷水让你停下来审视自己未来该走的路更重要. 1.这个时代小白都知道“少即是多”这句当今设计界最流行的至理名言,但少不是简陋,也不是盲目的装饰,要学会克制和取舍. 2.能把设计做出高度最后拼的不是技巧和表现而是睿智. 3.别因为现在做设计比你做普通文

嵌入式C编程经验 之 全局变量猛于虎

/********************************************************************************* * Filename: 一线研发之声:嵌入式C编程经验 之 全局变量猛于虎 * Author:SedateFire          E-mail:[email protected] * Version:1.001                 Time: 2012-01-05 * key: 嵌入式  os-less  全局变量 

收藏一下大牛的数据挖掘学习经验

只是过来人,说点看法: 基础篇: 1. 读书<Introduction to Data Mining>,这本书很浅显易懂,没有复杂高深的公式,很合适入门的人.另外可以用这本书做参考<Data Mining : Concepts and Techniques>.第二本比较厚,也多了一些数据仓库方面的知识.如果对算法比较喜欢,可以再阅读<Introduction to Machine Learning>. 2. 实现经典算法.有几个部分:a. 关联规则挖掘 (Apriori

谈程序员的出路

http://blog.chinaunix.net/uid-25838286-id-3068153.html 从我做小程序员开始,就从未间断的在论坛看到有人在问程序员的出路在哪里,其实我很能理解这些人的想法,在行业做了几年,有些感想跟大家随便聊聊.俗话说,365行,行行出状元,此话也适用于IT行业,尤其是程序员.当你迷茫找不到出路,又想快速成长和提高的时候,有两种方案可以供你参考:1.努力成为你工作环境中最优秀的人(技术最好的人):2.跳槽,去另外一家公司做比你能力要高的工作.针对工作环境的不同

如何从零开始开发一款嵌入式产品(转)

源:如何从零开始开发一款嵌入式产品 原文地址:[转]如何从零开始开发一款嵌入式产品作者:rainpad (20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结) 首先,如果你有幸看到这篇文章,千万不要试图在2个小时内阅读完,就算你2个小时阅读完,我相信你也不会理解里面讲解的精华之处,我相信,你应该将此文章,慢慢品尝,这绝对是一篇需要品尝2~3天,再结合自己过往的经验,加上自己的思考,我相信会对你不仅仅是技术能力,甚至包括整体的思维方式都会有一个非常大的提高. 结合这篇文章,再结合

致电子系---入门篇 爱做梦的90后

本人现在是一名大三的学生,才疏学浅,现在学的还不够,还需要拼命学习,介于不少的师弟师妹们苦于没方向,不知道要学什么,不知道从何学起,下面仅是提供个人的一些看法和学习经验供人们参考,写的不好的地方还请见谅哈,嘿嘿... 进入大二的同学们,我们就要开始考虑自己的专业方向了,其实越早考虑越好,大一的同学也要利用好自己的大一时间去发现自己的兴趣是什么,自己喜欢做什么事情,因为兴趣是我们最好的导师嘛!我们要去想自己将来喜欢做什么,擅长什么,搞技术不是一天两天能做成的,要长久去做,并坚持去学,更重要的是学会

学计算机的值得一看的文章,跟帖也很有水平啊

转自http://blog.csdn.net/Xviewee/article/details/1606247 回复CSDN和KAOYAN诸位网友的几点看法,(为避免吵架,郑重声明,本人不是高手,只是有感而发的一点个人陋见,欢迎指正,事先感谢): 就我自己的理解,谈谈我对读研和软件学院的看法,不妥之处一笑了之即可. 如果你有实际开发工作经验,感觉自己的水平和实力进入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯一选择.因为计算机学院才能让你在理论上更上一层楼.软件学院从教学计划上就没有