大学毕业并结束军校课程后,我加入了一家跨国公司,该公司开发、制造和销售CNC (computerized-numerical-control)数控机床。这是一家在三个国家拥有约200名员工的小公司,我所在的分公司责将CNC,以及所有电子和电气设备整合到机床中;我们还为客户设立了维修和技术支持部门。
在对CNC和不同的机器进行了两个月的培训之后,我先进入了维修部门,这是发现此类控制所有内部的有趣时刻。CNC仅使用良好的老式晶体管-晶体管逻辑(Transistor-transistor logic,TTL) 74xx系列,其核心为74181 算术逻辑单元(An arithmetic logic unit,ALU),没有微处理器!程序计数器(program counter)、ALU、中断控制器、指令解码器、电传打字机(TTY)接口、存储器控制、数字控制振荡器和轴控制器都是在一个19英寸的离散单板。我可以透过时钟脉冲,跟着一个接着一个的指令时钟脉冲进入到解码器、AUL…等等,如今,电子工程师很少能有这样的机会来详细了解处理器的内部结构。
这个控制的编程对我来说也是一个奇迹。尽管大多数人在装配器(assembler,又称组译器)方面觉得很棘手,但我很想为这台机器配备一个装配器、语言是机器程序码!我能理解程序码的第N位开启了一个AND闸,这使ALU向左移动而不是向右移动,我有时仍会注意现代微控制器的机器程序码以了解这种模式。
有天,我们收到了一个新的主轴驱动器,可以装入一系列机器中,在几天之内,一切工作都相当正常,除了速度和扭矩的电压表在15V下工作,而驱动器输出在10V满量程下工作,一切都很好。我们无法在短时间内更换指示器(indicator),从电子学的角度来说,这很简单!我们不需要高精准度或稳定性,并且电气柜中有±15V电源,因此解决方案显而易见。我拿了几片PCB——上面有一个简单的741运算放大器、四个电阻和两个电容——我立刻有了一个1.5倍的放大器。我很快地在实验室检查的放大器的状况,它依照我预期的那样工作着。
当上司来的时候,我正在机台上工作,并接上我新设计的零件。有趣的是,老板问我在做什么,并请我解释细节,当我解释完毕后,他打开了电压表的背面,并断开内部的1.5kΩ电阻,将其替换为1kΩ电阻,然后关闭了指示器。「好了!做好了!」(Voilà)他说,我的上司只用一个电阻!就简单地替换了一个电阻,这比我天真的尝试使用一个复杂的电路(尽管理论上是正确的)还要聪明!
那天,我了解了开发人员生涯中最重要的一课:时时刻刻都得问自己是否可以找到更简单的方法。我不晓得是谁最先说出了「使其保持简单,傻瓜」(keep it simple, stupid,编按:这里少了and,有揶揄的意味),但是忽略这个建议就是死亡之「吻」( KISS,编按:这里使用了双关语,KISS是Keep It Simple and Stupid的缩写,意思是说保持简单与愚笨,越清楚明白,越能够发现错误也就越能够把风险降低,也就是所谓的KISS原则。)!
(原文发表于ASPENCORE旗下EDN美国版,参考链接:Keep it simple, stupid, and kiss problems goodbye,by JB Guiot,EDN Taiwan Anthea Chuang编译)
责编:Demi