



将图1中所示的所有硬件元素结合在一起的黏合剂是计算机程序。例如,当你使用文字处理器时,你正在执行一个计算机程序,它会感应到你输入的内容,显示在某个屏幕上,并在你退出文字处理器时将其存储在文件存储器中。那么,什么是计算机程序呢?
计算机程序很像食谱。如果你看一本食谱,你会看到配料表和一系列的说明,要求你添加一种配料,混合一组配料,并把一组配料放进烤箱。计算机程序非常类似于此:它指示计算机移动数据,执行算术操作,如将一组数字相加,并将数据从一台计算机传输到另一台计算机(通常使用互联网)。然而,食谱和计算机程序之间有两个非常重要的区别。
第一个区别是大小。一个典型的食谱可能包含大约20行文本,而计算机程序包含数百行、数千行甚至数百万行指令。另一个区别是,即使是一个小错误也可能导致程序的灾难性失败。在食谱中,添加四个鸡蛋而不是三个,可能会导致一顿饭的味道或质地有点奇怪;然而,在一个百万级的程序中,输入数字1而不是2很可能会导致重大错误—甚至会阻止程序运行。
我们有各种各样的编程语言。它们被分为高级语言和低级语言。一种高级语言,如Java或C#,具有被翻译为成百上千条计算机指令的指令。低级语言通常与基本的计算机指令有一一对应的关系,通常用于实现需要对诸如化学反应器温度达到临界等事件做出响应的高效程序。
每隔几天,媒体就会报道一个软件项目超出预算或计算机系统严重失败的故事,却很少会将这些故障归因于硬件故障。失败的发生会有两个原因。现有计算机系统出现故障的第一个原因是技术错误,例如测试中没有检测到的编程错误。第二个原因要归于管理上的失败:超出或显著超过预算的项目往往是由于人为因素而发生的,例如,对即将产生的项目资源估计不合理,或者客户改变了他们对系统应该实现的功能的想法。
我个人的观点是,考虑到现代计算机系统的复杂性,项目延迟和开发人员犯错误是不足为奇的。