改进的硬件是如何改变编程的


这是前一篇文章的后续文章,CPUs speed and technology innovations

正如我们在previous post,一般程序员可用的内存大小和计算能力从他艺术的最初几年已经增加了数千倍,至少在单台机器的边界(网络是一个常见的瓶颈。(

这种性能的提高对我们在编写软件及其开发过程中使用的风格进行了彻底的改变。
第一个显著的变化是 高级编程语言的逐步引入。c接近机器的原始金属,但是在它上面已经写了可移植的语言,比如Java和Python。它们仍然是第三代编程语言,但是通过分别提供虚拟机和解释器,它们牺牲了性能以换取可移植性。

这是高级语言的一个普遍特征: 交易机器时间来节省开发人员的时间,随着硬件的改进,这是现在最昂贵的资源。在他于1995年向公众发布时,Java应用程序被认为是具有大量内存占用的慢速程序(有原因的)。然而今天,这对于大量的应用程序来说不再重要,对于其他高级语言来说也是如此,比如Python和Php。现在过早优化the evil,而不是Java虚拟机。

有人说software bloats faster摩尔定律可以帮助它: 我们在1969年和4 kilobyte of Ram,现在我们需要100-200兆字节来运行操作系统。但是我们机器的功能和力量现在更强大了(被运行软件膨胀部分的数量所抵消),我们可以做60年代梦寐以求的事情。

软件项目的持续集成和通过测试的即时反馈是从大量可用的计算能力中获得的两件事。唐纳德·克努特是一个算法魔术师,但早在60年代,他不得不在白天手工编写程序 让机器在晚上编译它。现在,我们有了构建和测试一个中等规模程序的整个过程,从每次代码签入到运行只需几分钟。算法在纸上得到了验证:现在它们在大数据集上得到测试。

面向对象编程从根本上来说不如“经典”结构化编程的性能好,因为它在每个变量中存储指向虚拟方法的指针,甚至是一个包装的整数。但是它让你应用程序中的真实域模型,其中不同的实体,都表示为整数,不能混淆。如果没有这个范例,我们很少有人会启动一个严肃的企业应用程序:硬件的改进再次使简化程序员的生活成为可能,即使有时会引入膨胀。

名单还在继续: 每个最佳实践你今天可以找到的帖子(也是我的) 部分是由已经发生的持续硬件改进产生的,这是一件好事,因为这意味着我们正在利用机器的力量。实体的有意义的命名?试着用8个字符的限制。迭代开发,重构?组件之间的绝缘层使之成为可能,这是一种“膨胀”的形式。分布式版本控制?谢谢,硬盘空间很便宜。
摩尔定律救不了任何引入软件膨胀的人。但是它使新的编程实践变得可行,直接从你的梦想中借用它们。