51CTO编者注:本文作者Paul Kimmel是codeguru网站上VB Today栏目的专栏作家,有着二十多年的项目经验,涉及到硬件和软件的方方面面。Paul这么多年的项目经验令他了解到,硬件产业中有着很多生产中的小秘密,而这些秘密如果跟软件工程师们分享的话,是会带来很多好处的。以下是译文:
20多年来,我参与过很多的项目。现在,我是一名作者、专栏作家和顾问,从而能够了解到更多我以前不可能参与的项目。最普遍、显而易见的一个现象是,有大量从头开始开发的软件甚至没来得及面世,就胎死腹中了。就算是那些现在已经被用户使用的软件,也很少能够在规定时间内、严格按照预算或是预期的功能,满足用户的要求。
传统观念一直认为软件工程是很难开展的,每一个应用软件都是宇宙中全新的一个创造。所以,它就一直都是这种状况,并将一直持续下去。
可悲的是,这种传统观念其实是一个谬论。
有一个叫做IEEE的硬件工程师秘密组织,他们有一个没有跟软件工程师分享过的小秘密。这个秘密就是用户的权力、自由和选择这几个因素,必须被去掉。为什么他们没有把这个秘密共享出来?因为大多数的软件工程师,都没有通过一个标准化的测试,没有学到他们的秘密握手(secret handshake),也没有通过大幅的减薪来表明他们的决心。
不同于其它一些更加开放的组织,IEEE独自把持着一些能够让软件产品廉价、可靠、快速的要诀,而这一切是大多数软件项目经理做梦都想不到的。
二十年行业经验
在过去的20年之中,我一直在为企业、为程序员们做咨询和写作工作。在那一段时间里,我参与到了一些不需要与电脑直接打交道的项目中。这使我不得不具体地去了解这些不同设备的硬件规格,也正因为如此使,我能够了解到硬件生产中的许多小秘密:设备制造商很少从零开始制造产品。他们生产的硬件基本都是使用现成的部件进行组装,然后放到个花哨的盒子里。没有几个用户会去研究它的原理,也没几个用户会去看这些东西的设计蓝图。最终用户所知道的是仅仅是这东西很炫,它能做很多工作,可以洗衣服,可以播放音乐,可以录制电视等等诸如之类。其实说白了,硬件产品就是一些用了一遍又一遍的零件,只是换了几个不同的漂亮盒子而已。
当一个电子工程师(或者其它不是程序员的工程师)从大学毕业获得了工程师学位之后,他们就加入IEEE(你可以上维基百科查一下IEEE这个缩写,不过这并不重要。)(其实每个人都可以当程序员,心理学专业的都可以给编写代码。)当他们加入到IEEE以后,他们就相当于拿到了一个保证书,确保他们可以拿到不错的薪水;用不着自己去另外创造,因为有现成的部件;也用不着白手起家去自己创业。
一旦这些毕业生加入IEEE以后,他们就可以领取到一本27页的小册子。这本小册子包含了所有被IEEE定义为“可用”的芯片、零件、电阻、电容和电路。将来要用到的部件则必须从这本小册子里选取,偶尔也会有新的东西需要被补充进这本小册子,但这必须通过高级委员私下投票决定,随后每个从业者都会有领到一份新的小册子。必须指出的是,只有高级的IEEE委员才能往这个“可用”的部件名单里添加内容,而且这种机会也少之又少。
然而在软件领域,情况就完全不是这样了。只要有键盘,你就可以发明新的东西,并通过互联网、电子邮件、版本控制系统等,很快让你的发明出现在用户的桌面上。但软件开发人员所具备的创造力却导致了混乱。如果要写一本软件开发的小册子的话,那可能27,000,000页都写不完。软件工程的困难之处也正是没有谁能一锤定音,在开发过程中人人都有发言权,而且每个人都可以各持已见。
硬件产品是如何制造的
51CTO编辑推荐:IT硬件名人堂:40年经典产品和背后的故事(组图)
在设计制造硬件时,硬件工程师首先得像做晚餐时从鸡肉、猪肉、牛肉或鱼以及一堆蔬菜里选食材一样,对相关的材料进行选择,然后才能组建好硬件。这样,只要有需要,硬件工程师就能随时组装好成品。
不好意思,或许这个比喻可能会让人犯迷糊,接下来我们再细说吧。
硬件工程师有几点是必须牢记的。首先,他们必须把器件组装到体积有限的一个壳子里;其次,他们只有很有限的器件可用;第三,这些器件都要被安装到花哨的塑料包装盒里,在电视上或是餐厅里为产品打广告,人们往往会被漂亮的外包装吸引而去购买它。这些漂亮的产品以极快的速度生产和制造出来,以至于IEEE协会和制造硬件的工程师们都不再关心这些硬件系统本身的功能是否完全切中消费者的需求。
大规模生产漂亮硬件产品的关键,其实就是不要去创造新的部件,即使你用的这个部件只有百分之一的功能是真正需要的,只要你能按不同的方案重组这些部件,再换个酷点的包装(如果可以的话,再把硬件的大小比之前做得小一点)就可以做成全新的产品了。(1978年我有一个可以播放78 RPM的唱片的Zenith 收录机,可以用来播放音乐。2009年,我又有了一个很薄的iPod(对不起了,使用Zune的朋友们),它也只不过是播放音乐。人们只是想出了如何少使用几种零件,但是其实这些零件大部分1978年的时候就已经有了。
软件是如何开发出来的
继续我那个做饭的比喻。相比硬件开发,在软件开发时,可能每个工程师都会有种饥饿感,那种感觉就像是埃塞俄比亚大饥荒,找不到现成可用的部件。没有鱼、猪肉、牛肉、鸡肉和蔬菜这些食材,也没有厨房、没有器具,甚至可能连吃饭的时间都没有定下来。而在吃饭的时间内,工程师们还在讨论分子是如何构成蛋白质。(说了这么多,我不饿都不行了。)
其实,目前的这种状况,真的不是程序员的过错。程序员是聪明而富有创造性的,只不过他们缺乏一个可以控制他们的人,或者所谓“大祭司”。程序员有点像是在一个没有法律、谁吼得大声谁就赢的国度里干活,每个人有太多的自主权,结果聪明反被聪明误。比如51CTO之前发表过的从菜鸟到大师,细看程序员的五种层次一文中也说道,90%的代码是由10%的程序员写出来的。这一方面说明大师级程序员的重要性,但对于软件产业而言,却未必是一件好事。
真理就是……
软件开发最终也还是会变成现成组件的拼装。不同派别的程序员不用再问自己:我应该使用ADO.NET、SQL、LINQ、XPO,还是其他方法来对数据库进行插入和读出操作。到那时,会有一个统一的数据库操作层供所有这些人调用。这样,我们的选择范围就可以缩小一些,也能够接受比原来较少的薪酬。向我们软件工程里的大祭司们起誓保守秘密吧,从此软件项目就变成了组装活,不会再出现失败的情况。难道不能这样吗?
与此同时,尽量用现成的代码去编写程序,尽量用已知的、够用的技术来实现所需的功能,不用管它是否会带进很多不需要的功能从而把整个程序弄得一团糟。还可以再换上几个漂亮点的界面,这样就能很容易做出了一堆很酷的新软件。
原文:Hardware’s Dirty Little Secret, or Why Software Can be Mass Produced
作者:Paul Kimmel
【编辑推荐】