Niklaus Wirth在1995年提出的谚语:
«软件变得越来越慢,硬件变得更快»
答案 0 :(得分:9)
并不是说软件变慢了,而是它的复杂性增加了。
我们现在建立在许多抽象层次上 SO上最后一次使用汇编语言进行编码的时间是什么时候? 大多数人从来没有,也永远不会。
答案 1 :(得分:8)
是的,我认为这是真的。
如何衡量软件的速度?解决任务的好时机是一个相关的指标。对于我作为软件的用户,我不关心我的机器中是否有2个或16个核心。我希望我的操作系统能够快速启动,我的程序可以快速启动,而且我绝对不想等待打开文件等简单的事情。软件必须快速感觉。 所以..在启动Windows Vista时,没有我正在观看的快速软件。
软件/框架通常可以提高性能。这很好,但这些都是微小的变化。例外证明了规则:)
在我看来,这完全是关于感觉。感觉就像电脑几年前更快。当然,我无法在旧机器上运行当前的游戏和软件。但他们只是更快:)
答案 2 :(得分:5)
一般来说,法律都适用。正如您所说,有“例证证明规则”的例外情况。我的兄弟最近在他的2GHz + PC上安装了Win3.1,它眨眼之间启动了。
我想法律有很多原因:
我发现FF缺乏即时启动对话框,因为启动应用程序后主窗口需要一段时间才能显示,我不确定点击是否“有效”。 OO也受此影响。
网上有一些关于在不改变实际速度的情况下改变对软件速度的看法的文章。
编辑:
除了以上几点之外,效率低的重要性的一个例子是该站点,或者更确切地说,大多数其他Q& A站点。这个网站一直被开发为快速和响应,它显示。将此与其他网站相比较 - 我发现基于phpBB的网站灵活但速度慢。谷歌是另一个将速度提高到重要性的例子(它甚至可以告诉你搜索需要多长时间) - 与谷歌开始时的其他搜索引擎相比(现在,谷歌的速度非常快)。
制作快速代码需要付出很多努力,技巧和经验,这是我发现许多程序员所缺乏的。
答案 3 :(得分:4)
这是错的。正确是
随着硬件变得更快,软件以相同的速度变慢。
原因在于,这主要取决于人类的耐心,这种耐心保持不变。 它也忽略了提到今天的软件在30多年前就已经存在了,即使我们忽略了眼睛糖果。
答案 4 :(得分:3)
软件速度慢的问题之一是大多数开发人员使用具有多核CPU和大量RAM作为主工作站的高端机器。因此,他们不会轻易注意到性能问题。
他们日常活动的一部分应该是在预期客户将要使用的速度较慢的主流硬件上运行他们的代码。这将显示真实世界的表现,并让他们专注于改善瓶颈。或者甚至在资源有限的VM中运行也可以帮助进行此次审核。
更快的硬件不应该成为创建缓慢草率代码的借口,不过它是。
答案 5 :(得分:3)
根据我自己的经验,我不同意Wirth的法律。
当我第一次接近电脑时(在80'),显示小静止图像的时间是可察觉的。今天,我的电脑可以实时解码和显示1080p AVCHD电影。
另一个指标是视频游戏的每秒帧数。不久前它曾经是15fps左右。今天30fps到60fps并不罕见。
答案 6 :(得分:3)
从用户体验研究中引用:
21年的技术进步使现代个人电脑处于完全不同的不同容量的联盟中。但“用户体验”在二十年内没有太大变化。由于臃肿的代码必须包含普通用户甚至不知道存在的数百种功能,更不用说利用,软件公司已经压低了我们的PC,以有效地抵消其巨大的速度优势。
老式Mac和现代双核上的UX的详细比较:http://hubpages.com/hub/_86_Mac_Plus_Vs_07_AMD_DualCore_You_Wont_Believe_Who_Wins
答案 7 :(得分:2)
我的机器每天变得越来越慢。我将减速的大部分归因于运行防病毒软件。当我想加速时,我发现禁用防病毒工作会产生奇迹,尽管我很担心像是在一个肮脏的妓院里。
答案 8 :(得分:2)
我认为Wirth的定律很大程度上是由摩尔定律引起的 - 如果你的代码运行缓慢,你很快就会忽视它,无论如何它会运行得足够快。表现并不重要。
现在摩尔定律改变了方向(更多内核而不是更快的CPU),计算机实际上并没有快得多,所以我希望性能成为软件开发中更重要的因素(直到一个非常好的并发编程无论如何,范式都成了主流。你知道,软件在有用的同时仍然有用是有限的。
答案 9 :(得分:2)
是的,现在的软件可能会更慢或更快,但你不是喜欢比较。该软件现在具有更多功能,并且预计会有更多功能。
让我们举个例子:Powerpoint。如果我从90年代初创建了一个带Powerpoint的幻灯片,我可以轻松地制作漂亮色彩的幻灯片,漂亮的文字等。现在,它是一个幻灯片,带有移动的图形,花哨的过渡,漂亮的图像。
关键是,是的,软件速度较慢,但它会做得更多。
使用该软件的人也是如此。早在70年代,为了创建演示文稿,您必须创建自己的透明胶片,甚至可能使用笔:-)。现在,如果你做同样的事情,你会被嘲笑出房间。它需要相同的时间,但质量更高。
这(在我看来)是为什么计算机不能提高你的工作效率,因为你花费相同的时间做“工作”。但是如果你使用今天的软件,你的结果看起来更专业,你就可以获得高质量的工作。
答案 10 :(得分:2)
Skizz和Dazmogan说得对。
一方面,当程序员试图让他们的软件尽可能少地循环时,他们就会成功,而且速度非常快。
另一方面,当他们不这样做时(大部分时间),他们对“Galloping Generality”的兴趣会耗尽所有可用的周期,然后是一些。
我做了很多性能调整。 (我的选择方法是随机停止。)几乎在每种情况下,缓慢的原因都是类和数据结构的过度设计。
奇怪的是,通常给出过度事件驱动和冗余数据结构的原因是“效率”。
正如Bompuis所说,我们建立在许多层次的抽象之上。这正是问题所在。
答案 11 :(得分:1)
是的,这是正确的。您已经提供了一些突出的例子来反驳论文,但请记住,这些示例是由一个知识渊博的人群开发的,他们或多或少地意识到编程中的良好实践。
使用内核的人都知道不同的CPU体系结构,多核问题,缓存行等。有关在主线内核中包含硬件性能计数器支持的有趣的持续讨论。从“政治”的角度来看,这很有趣,因为内核人员和在绩效监控方面有很多经验的人之间存在冲突。
开发Firefox的人们明白,浏览器应该“轻量级”且快速才能流行。在某种程度上,他们设法做得很好。
新版本的软件应该在更快的硬件上运行,以便获得相同的用户体验。但价格是否正好?我们如何评估功能是否以有效的方式添加?
但是回到主题,很多人在完成学业后都没有意识到与性能,并发性有关的问题(甚至更糟糕的是,他们并不关心)。很长一段时间,摩尔定律提供了稳定的性能提升。因此,人们编写了平庸的代码,甚至没有人注意到效率低下的算法,数据结构或更低级别的东西出了问题。
然后出现了一些限制(例如热效率),并且不再可能以几美元的速度获得'简单'的速度。只依靠硬件性能改进的人可能会得到冷水淋浴。另一方面,对算法,数据结构和并发问题有深入了解的人(很难招募这些......)将继续编写好的应用程序,并且他们在就业市场上的价值将会增加。
Wirth法律不仅应该按字面意思解释,还应该解释代码膨胀,违反保持简单愚蠢的规则以及浪费机会使用“更快”硬件的人。
此外,如果你碰巧在HPC领域工作,那么这些问题就变得非常明显了。
答案 12 :(得分:1)
在某些情况下,情况并非如此:今天的游戏帧速率和多媒体内容的显示/播放远远超过几年前。
在一些极其常见的案件中,法律非常非常正确。在Vista中打开“我的电脑”窗口,看你的驱动器和设备需要10-15秒,感觉就像我们要倒退了。我真的不希望在这里引起任何争议,但是这就是打开Photoshop所需的时间差异,这使得我离开了Windows平台并进入了Mac。关键在于,常见任务的减速非常严重,足以让我跳出原先的舒适区,以摆脱它。
答案 13 :(得分:0)
找不到感觉。为什么这句话是法律?
你永远无法比较软件和硬件,它们太不同了。
硬件是真正的材料,软件是书面代码。
连接只是软件必须控制硬件的性能。在硬件中执行一步之后,软件需要一个完成标志,因此可以完成下一个软件订单。
为什么我要放慢软件速度?我们总是试图让它更快!
要以真实的物理方式做很多事情,才能使硬件更快(更换打印模块甚至计算机的物理部分)。
如果Wirth意味着:在一台计算机上执行此操作(=一个软件和硬件系统),这可能是有意义的。
要获得更高的硬件速度,必须了解硬件的功能,一次并行输入或输出的数量以及一秒钟内可能的开关频率。最后,重要的是不同的硬件打印具有相同或具有数字因子的多重频率。
因此,如果您更改硬件中的某些内容,软件可能会自动减慢速度。 - Wirth在硬件方面的想法更多,他是计算机存在于德语区的伟大发明家之一。
另一种方式并不容易。您必须非常准确地了解计算机的系统软件,才能通过更改计算机的软件(=系统软件,机器程序)来加快硬件运行。如果您使用更多层,则几乎不会对硬件的速度产生直接影响。
也许这可能是对Wirth法律思考的解释......我明白了!