有人告诉我硬件比软件更可靠
这句话是错误的,下面我就证明一下。
如果硬件是可靠的,
而我们的程序逻辑也是正确的,
在一个可靠的硬件之上运行的逻辑正确的程序,
没有任何理由可以说明它较底层的硬件更缺乏可靠性,
那么,就没有什么理由可以说明硬件比软件更加可靠。
但是,换个角度,为什么很多人会有这样的认识,而他们大都具有在硬件基础上开发软件的经验,这句话虽然是错的,但明显不是空穴来风,而是基于实际经验给出的看法,那它产生的必然性又在哪里?
下面给出几点我的看法:
1.软件要实现的逻辑比硬件更加复杂
2.当需求变动时,软件受到的冲击比硬件更大
它们都是造成“硬件比软件可靠”这个说法的根源,下面我会详细讨论这几点看法形成的依据。
1.软件要实现的逻辑比硬件更加复杂
很显然,不能片面地去理解这句话,一个CPU要实现的逻辑无庸置疑要比我们自己手头上的这些我们整日为之忙碌的软件项目更加复杂,甚至要比我们平时能够见到的大多数著名的软件产品拥有更复杂的逻辑,但是,最关键的一点,当我们在电子市场上购买到这些硬件器件的时候,它们复杂的硬件逻辑已经是封装在定义良好的接口之后的,根本无需我们操心,而它们的可靠性则是由生产它们的那些大公司充分的测试来保证的,我们最常见的应用无非就是将各个实现不同功能的芯片连接到一起,通常这都是很easy的事情(较之芯片中封装的复杂逻辑)。换句话说,硬件工业中“代码复用”的程度远远高于软件工业,甚至在嵌入开发社群中,面向对象的思想还没有得到最基本的普及,很多公司、项目选择的开发语言是C而非C++(这与嵌入开发领域C++编译器发展缓慢有很大关系),这就进一步限制了代码大规模复用的可能,需要我们自己写的代码越多,出错的可能就越大
。
2.当需求变动时,软件受到的冲击比硬件更大
当用户需要改变某个功能的使用方式,或是增加一项全新功能的时候,需要改动的往往是软件,或者说较之修改硬件我们更加倾向于修改软件(成本的原因?),而修改往往不可避免(至少是极大可能)地会引入新的逻辑缺陷,在底层的硬件设施一步步地逐渐完善成熟的同时,我们的程序却有可能因为多次因时间仓促以至考虑不周的改动而慢慢烂掉。这也是很多人“硬件比软件可靠”这个看法形成依据。