这个问题来自于对过去50年左右计算领域各种进展的评论。

其他一些与会者请我把这个问题作为一个问题向整个论坛提出。

这里的基本思想不是抨击事物的现状,而是试图理解提出基本新思想和原则的过程。

我认为我们在大多数计算领域都需要真正的新想法,我想知道最近已经完成的任何重要而有力的想法。如果我们真的找不到他们,那么我们应该问“为什么?”和“我们应该做什么?”


当前回答

Eclipse内存分析器:

使用Lengauer-Tarjan支配树算法进行内存使用分析。

其他回答

为了开始思考这个问题,我需要一个关于“创新”意味着什么的模型。

我所见过的最好的模式是技术采用生命周期。你可以在这篇维基百科文章中得到一个概述。

利用这个模型,我开始问自己……软件本身处于生命周期的哪个阶段?我们可以把“软件”看作一种不同于机械的技术,这种技术可以一直追溯到巴贝奇(Babbage),或者更准确地说,追溯到Ada Lovelace夫人。

但至少在1951年之前,它仍然处于非常早期的开拓阶段。这是编程计算机“商业化”的一年,即销售计算机产品的模型,并制造大量该模型的单元。我在想Univac卖给人口普查局的那台机器。

从1951年到1985年,软件创新层出不穷。它们主要与将计算的范围扩展到一个更广阔的领域有关。与此同时,大规模营销和大规模生产不断降低入门成本,直到苹果和IBM-PC使可编程设备成为一种常见的设备。

在1980年到1985年之间,我认为软件从创新者的领域过渡到“早期大多数”领域。抱歉,伙计们,这让你们所有参与MS-DOS, Mac, Windows, c++和Java早期的大多数人而不是创新者。这并不妨碍你在自己的领域和自己的项目中进行重大创新。这只是意味着这个领域本身已经从最早的阶段发展起来了。

虽然互联网的前身早在20世纪70年代就出现了,但直到阿尔·戈尔发明了互联网(抱歉),人们才开始上网。在那个阶段,软件从早期的主流变成了晚期的主流。正如钟形曲线的顶部所显示的那样,这种变化是微妙的。并非所有商店都同时从早期多数转变为晚期多数。

我认为软件还没有完全进入“落后”阶段,但我认为真正的创新者正在解决今天在不同战线上产生进步的问题。

我能想到的两个方面是生物工程和信息设备。这两个领域都需要软件,但主要的推力不是软件创新。它正在把软件应用到未知领域。可能还有很多我不知道的战线。

20年前:面向对象编程——更好地处理软件复杂性。

现在:云计算——为了更好地处理硬件复杂性。

未来:说明性的东西,但它还需要20年。

1980年1月2日我开始编程。我试着思考在我的职业生涯中有哪些重大的新发明。我很难想出一个。大多数我认为重要的东西实际上是在1980年之前发明的,但直到1980年之后才被广泛采用或改进。

Graphical User Interface. Fast processing. Large memory (I paid $200.00 for 16k in 1980). Small sizes - cell phones, pocket pc's, iPhones, Netbooks. Large storage capacities. (I've gone from carrying a large 90k floppy to an 8 gig usb thumb drive. Multiple processors. (Almost all my computers have more than one now, software struggles to keep them busy). Standard interfaces (like USB) to easily attach hardware peripherals. Multiple Touch displays. Network connectivity - leading to the mid 90's internet explosion. IDE's with Intellisense and incremental compiling.

虽然硬件有了巨大的进步,但软件行业一直在努力跟上。我们比1980年领先了几光年,但大多数改进都是改进,而不是发明。自1980年以来,我们一直忙于应用技术进步,而不是发明创造。就其本身而言,这些渐进式的发明大多不重要或不强大,但当你回顾过去29年,它们相当强大。

我们可能需要接受渐进式的改进并引导它们。我相信真正原创的想法可能会来自很少接触计算机的人,而且他们越来越难找到。

有一件事让我吃惊,那就是简陋的电子表格。非程序员的人用一个简单的公式网格就可以为现实世界的问题构建狂野而奇妙的解决方案。在桌面应用程序中复制他们的努力通常需要比编写电子表格多10到100倍的时间,最终的应用程序通常更难使用,充满bug !

我相信电子表格成功的关键是自动依赖分析。如果电子表格的用户被迫使用观察者模式,他们就没有机会得到正确的结果。

因此,最大的进步是自动依赖分析。现在,为什么没有任何现代平台(Java, .Net, Web Services)将其构建到系统的核心中呢?特别是在一个通过并行化扩展的时代——依赖关系图导致并行重新计算变得微不足道。

编辑:我刚查过。VisiCalc发布于1979年——让我们假设它是1980年后的发明。

Edit2:似乎艾伦已经注意到了电子表格——如果让他来这个论坛的问题是正确的!

受保护的内存。在保护内存之前,如果你的程序犯了错误,你可以在任何地方开始执行代码——实际上总是挂起整个机器。没错,重启时间到了!

硬件成本低。我的第一台电脑在1978年花了500美元——这在当时是一笔巨款。降低成本让每个人的办公桌上都有了电脑。