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,谈嵌入式经验的更多相关文章

  1. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

  2. 【转载】如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结

    [好文章值得分享,摘自作者:jesse] 来源:www.armjishu.com作者:jesse转载请注明出处 我的另一篇文章:<STM32嵌入式入门必看之文章-----介绍非常详细!(学STM ...

  3. 摄像头 ISP 调试的入门之谈(经验总结)

    在讲述本文之前,我尽量以一个什么也不清楚的初学到入门的用词来阐述什么是 ISP 调试,以及为什么需要调试. 如果你从来都没有接触过什么是摄像头 ISP 调试,我想这个文章可以给你一些启发和关键词. 因 ...

  4. 痞子衡嵌入式:恩智浦机器视觉模块OpenMV-RT那些事(1)- 初体验

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是机器视觉模块OpenMV-RT初体验. 近些年机器视觉应用一直是个很火的方向,想象一下机器如果能长上"眼睛",是不 ...

  5. 为IT程序员量身定制的12个目标——很经典

    对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前.新年伊始,我整理了12个月的目标,每个目标都是对技术或个人能力的挑战,而且可以年复一年循环使用. 01. 变得有耐心 02. 保持健康 ...

  6. 【科创人上海行】Tinyfool郝培强 :始于不惑的微服务式创业,背负身心病痛贴地飞行

    Intro 科创人,分享技术创业者的成长与创业经验. 何谓创业?勇于面对未知.肩负重任的人生抉择. 何谓经验?沟沟坎坎.有笑有泪,各有其宝贵. 科创人的价值支点是"人",我们不以市 ...

  7. 史上最详细“截图”搭建Hexo博客并部署到Github

    http://jingyan.baidu.com/article/d8072ac47aca0fec95cefd2d.html 大家也搭建过博客,很多时候,按着教程来做就可以了,但是我当时为了搭建Hex ...

  8. 小圣求职记B:总集篇

    1. 搜狐sohu 搜狐在正式招聘前邀请了部分应聘者到武汉研发中心开座谈会(因此简历尽量早投,机会多些),有研发的也有产品的,40人左右,座谈会期间介绍了搜狐汽车.北京研发中心.武汉研发中心和搜狐媒体 ...

  9. linu下C语言之BMP图片操作编程(上)

    BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ...

随机推荐

  1. Errors occurred during the build. Errors running builder &#39;Integrated External Tool Builder&#39; on proje

    Errors occurred during the build. Errors running builder 'Integrated External Tool Builder' on proje ...

  2. 消息推送之百度云推送Android集成与用法

    这两天因为项目须要.研究了一下百度云推送,本来这事没什么多大工作量的,但注冊百度开发人员账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路. 好在我耗费了N多个毫毫秒秒 ...

  3. JavaScript或者Jqurey把控件id作为參数来调用

    1.JavaScript把控件id作为參数调用 <script type="text/javascript"> function xx(pmba) { document ...

  4. ios swift学习日记4-字符串和字符

    近期ios的swift语言好像火了起来,本人没有objectc的基础,但之前是有c跟java的基础的. 从这几天開始学习ios的swift语言,后期以博客形式公布.这里提供一本翻译的英文版的swif书 ...

  5. C#编译器优化

    C#编译器优化 https://www.cnblogs.com/podolski/p/8987595.html 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置 ...

  6. php 日期格式化

    date('Y-m-d H:i:s',time()); 2014-09-01 05:06:01 date(' y-n-j G:i:s',time()); 14-9-1 5:06:01 mktime(h ...

  7. [源码管理] Windows下搭建SVN服务器

    前文所述SVN客户端使用的时候,用的SVN服务器通常为外部,例如Google Code的服务器,不过,做为一个程序开发人员,就算自己一个人写程序,也应该有一个SVN版本控制系统,以便对开发代码进行有效 ...

  8. CharSequence源码分析

    CharSequence是一个接口,表示一个char值的可读序列,此接口为多种char序列提供统一的.只读的通道.既然是接口,就不能通过new来进行赋值,只能通过以下方式赋值: CharSequenc ...

  9. vue开发的项目中遇到的警告,报错,配置项目文件等合集(长期更新)

    1. Vue组件里面data()里面没有return时触发错误:Vue components Cannot read property '__ob__' of undefined 这个警告不解决会触发 ...

  10. 查看 myeclipse激活状态

    查看激活状态  myeclipse-->subscription information