Bruce Douglass是嵌入式与UML应用资深专家,这个拥有30余年的嵌入式从业经历,看看他的嵌入式领域经验与嵌入式学习感悟分享内容有哪些?
是什么吸引你加入嵌入式学习过程,从此开始编程的职业生涯?
表面上看,编程就是想要实现什么就写什么代码;但事实是,敲代码只是软件开发过程中很小的一部分,程序员的工作还包括安全分析、责任分析、产品验证、产品分析等。
在嵌入式从业开发过程中,应该如何来提高自己的技能?
重要的是实践,就像要练好标枪就必须勤加练习,编程也是一样。在我的书中,我一直都尝试加入更多的实例设计;从我参与过许多系统的开发——计算机断层扫描、医疗(如心脏起搏器、呼吸机)、无人机、自动化、航空航天、运载火箭系统等——我发现不同行业有着不同的应用环境,但同时也有共通性,我们需要在不断的实践中总结知识。经历会带给人财富,有一次我儿子问我,怎样才能成为作家,我告诉他,首先你要开始写作。
在不同领域嵌入式开发的过程当中,得到了哪些经验总结?
一是要发散思维克服目光短浅。我做顾问时,经常看到一些根本不可能实现的案例,当事人却置身其中毫无察觉。面对问题时,我们需要走出定势思维,从不同的角度寻找解决办法,并通过思考寻找问题的底层机理所在。比如,大学时我基本没上过化学课,但能通过推测解答试题的办法通过了考试。我们要学会看到事情之外,退一步想想事情发生的根本原因,总结所做过的尝试、预测以及终成功的方法,然后在确保成功的前提下尝试更多的解决办法.。我们需要制定相应的度量标准,用来记录并展示过程中的成与败及总目标。
二是要建立数学思维,提高准确性。一些人常常固执己见,忽略事实,即使现实已经证明他们的理论和想法不实际,他们却依然坚持——这是没有意义的行为。理论需要实践来验证对与错。在做开发工作时,我们需要一套度量标准用于评测,要以取得进步为目的,而不只是实现某个计划,相较于“如何实现计划”,“如何实现目的”则是更好的度量标准。
三是要学会合理地做计划。通常软件行业制作的计划都有两种目的,一种是用于申请计划所需时间及经费;另一种则是用于激励员工努力工作,这种计划本身就存在着矛盾。合理的计划一定要基于现实,并有相应的度量标准来记录工作进度及工时。我在做项目管理时就有很多这样的度量规则,我一般只会预估完成一半任务所需的时间,这样前后两部分任务可在时间上做灵活调整;对于具体某个人的进度,我不会做预估,因为基本都会延时。统计学中有一个“中心极限定理”——通常我们只有50%的几率能够达成预估时间表。
在嵌入式学习或是嵌入式软件系统领域中,开发者会遇到哪些常见的误区?
首先,人们常在没有实践的情况下做出判断。比如有些人经常想当然的认为不过是软件/硬件,没有什么难的。没有实践,任何事情看起来都很简单。只有当你深入某个领域时,才能慢慢意识该领域的复杂性。如今的系统已经比几年前复杂数百倍,相应的安全性及可靠性也随之提高,相关的工作变得更复杂。
其次,人们通常认为紧凑的工期能够激励员工更努力的工作。事实上,这种激励方式多只能生效一次。第一次,员工可能会乖乖一天拼命工作20个小时以完成任务,第二次他们就开始有些迟疑,到了第三第四次,他们也就不以为然了。我曾经有个老板说“现实是友好的”,我却始终认为现实就是现实,不友好但也不坏,现实不容忽视,我们要时刻保持理性。我发现很多组织内部都存在着各种架构或者工期制定的问题,他们从不根据事实制定计划,不认真思考总结,只通过凭空想象,然后期望能够如期完成。
在嵌入式学习中,与早些年相比,嵌入式软件开发领域大的变化是什么?
我觉得变化主要有三点。第一是范围,我开发的第一个软件,心脏起搏器,是一个基于6502处理器的、很小的、实时多任务操作系统的汇编程序,系统只有8KB。如今系统的空间和功能实现跟以前比起来,早已不在一个量级,过去的系统很小而且功能简单,现今的系统要比以前复杂千倍。
第二是规则变化,包括一些安全可靠性服务。如今的安全监管功能增加了很多对开发的质量要求规则。以前如果机器坏了我们可以直接关掉,如今却不行,例如输氧设备或者正在驾驶的飞机,我们并不能直接关掉它,也就是说如今的质量需求要比以前多得多。
第三是集成。当今世界是一个亿万台设备相互连接的互联空间,这同时意味着我们正面临着史无前例的安全隐患。在这些普通移动设备、主板、娱乐系统、自动系统、传感器系统设备中,他们不仅可以开关机、开启或锁定防火墙,还可以盗取信息、重写引擎软件。在过去如果有人想偷车,就必须先把车门撬开;而如今,只需要黑入汽车系统改写软件就能把车偷走。这是安全级别的一个巨大改变,50年前还没有电力系统,20年前有了电力系统,但是还没有软件,如今一个病毒就可以攻击几万台设备并导致一座城市的瘫痪。
对于的嵌入式开发者来讲,在嵌入式学习过程中,有哪些更好地建议要分享?
在我看来,开发者即革新者,而革新一定不能畏惧失败,不能因为他人的不认可而轻易放弃。另外,作为一名开发者,不能只关注系统的功能实现,还要关注质量保障,系统功能的实现要围绕着安全、可靠和高效进行实施。要拥有独立并机智地使用不同技能的能力,勇于面对错误并及时修正。根据我的经验,在新事物的应用过程中,通常会有25%的错误概率,如果没有,那你一定没有努力地应用新技术。大部分人都喜欢恪守陈规,而我宁愿是个例外,这同时意味着会做出一些令人难以置信的错误决定,不过没有什么大不了,下次改正就好了。