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. 6581 Number Triangle

    6581 Number Triangle 时间限制:500MS  内存限制:1000K提交次数:57 通过次数:47 题型: 编程题   语言: G++;GCC Description 7 3 8 8 ...

  2. 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 ...

  3. 怎样使用Eclipse PDT调试PHP程序

    本文主要介绍的是怎样用eclipse pdt调试PHP 代码. 1. 下载eclipse.从官网上找就能够了,并确认当前系统中有java环境,即jdk和jre. 2. 安装pdt了,採用的是在线安装. ...

  4. 关于联想超极本出现蓝屏Default Boot Device Missing or Boot Failed的解决办法

    联想笔记本出现以下症状无法开机时: 解决方案:恢复BIOS默认设置,把硬盘设置为第一启动项. 若成功检测到硬盘并有EFI引导程序,那么恭喜你这就完事了,重启后就可以正常开机了. 但是,若在UEFI模式 ...

  5. Mule ESB-3.Build a webservice proxy

    自从引入ESB后,系统之间不再直接依赖.我负责的这块,主要是解决Webservice的问题.使系统A不再直接依赖系统B的Webservice. 我们选择的产品是Mule ESB.所以自然要使用Mule ...

  6. Linux下安装JRE和Eclipse IDE for C/C++ Developers

    Linux32位,下载eclipse-cpp-luna-R-linux-gtk.tar.gz和jre-8u11-linux-i586.rpm  放到家文件夹中. http://www.eclipse. ...

  7. oc12--对象作为参数

    // main.m // 对象作为方法的参数传递 #import <Foundation/Foundation.h> /* 士兵 事物名称: 士兵(Soldier) 属性:姓名(name) ...

  8. php Aes 128位算法

    <?php class Mcrypt { private static $key = "fsdjfojojodjiovjojgfosdjfiojio"; private st ...

  9. mybatis 高级映射和spring整合之与Spring整合(6)

    mybatis 高级映射和spring整合之mybatis与Spring整合 3.0 mybatis和spring整合(掌握) 3.1 整合思路 需求spring通过单例方式管理SqlSessionF ...

  10. 爱,死亡和机器人 第十四集 齐马蓝 中文字幕(Python处理utf8文件获取想要的内容)

    处理代码 file = "a.srt" fi = open(file, mode='r') a = fi.readline() i = 1 while len(str(a)) != ...