每个人的想法都是独一无二的,但代码不是。几乎每个行业都完成了机器革命,然而奇怪的是,计算机科学行业并没有。程序员基本上是在做已经做了40年的同样的事情。手工编写代码,接着这些代码被编译或解释,然后执行。看看输出结果,再确定是否需要再改代码。计算机科学的黎明到来之前,这种开发周期就一直这样保持不变。我们的机器在几何级变快,内存和二级存储大小是无限制的,且这样发展下去软件越来越复杂。但我们仍然一个字母一个键地手工编写着代码。我们依然滥用着“print”语句输出运行时发生的内容。我们的开发工具确实越来越强大,但每个热门的新语言出现时,又会出现新的工具。归根结底,在一个令人难以置信的自动化世界(并且大部分的自动化都是软件编程的成果),软件编程却依然是一个几乎完全手工的过程。一次敲一个字符的软件编程做法仍停滞不前。
虽然我们编写的大部分代码之前都已经编写过,可能是目前正在使用的语言,或者之前用过的语言,但每个应用程序都是独一无二的,即使我们和竞争对手都在做同样的事情。不管是否独特,成功的应用程序是必须能够使用的。它不需要漂亮,也不需要绝对得快,或者也不需要最丰富的功能,但它必须得能用才行。
应用程序的核心,只是拥有输入输出的消息传递系统。而在此之上构建的复杂性越来越大。由于JavaScript的出现,我们不仅要吸取其他语言的经验教训,还要从JavaScript自身吸取教训以便编写可测试的代码。在客户端和服务器端,JavaScript的应用程序都越来越大,我们必须非常谨慎地应用前辈们提供的最佳实践和经验教训,加以调整以很好地适应JavaScript代码。
图1-1显示了过去三十年每个晶体管周期的微处理器成本 。这幅怪诞的图表示了每个CPU的周期成本,此图遵循摩尔定律,有不可避免的下降趋势。硬件刷新率确实远远超出任何软件层面。
图1-1 每个晶体管周期的微处理器成本
通过编程机已经将对象变得更快更小以获得巨大的利益。为了达到不可思议的全球规模,大批的机器通过实施标准化组装于工厂中。然而软件工程师却仍然要在他们的个人电脑面前坐着,在键盘上不停地敲打着每个字符。