Premature optimization 在速度较慢的机器上开发优化是否过早?

Premature optimization 在速度较慢的机器上开发优化是否过早?,premature-optimization,developer-machine,Premature Optimization,Developer Machine,我们应该发展慢拳击,因为它迫使我们提前优化 兰德尔·海德(Randall Hyde)在一篇文章中指出,关于霍尔的名言有很多误解: 我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源 特别是,尽管与霍尔时代的机器相比,如今的机器发出尖叫声,但这并不意味着“应该避免优化”。因此,我尊敬的同事建议我们应该以适度的节奏进行开发,这有什么道理吗?其想法是,性能瓶颈在速度较慢的情况下更令人恼火,因此它们很可能会受到关注 这应该是社区维基,因为它非常主观,没有“正确”的答案 也就是说,您应该在可用的最

我们应该发展慢拳击,因为它迫使我们提前优化

兰德尔·海德(Randall Hyde)在一篇文章中指出,关于霍尔的名言有很多误解:

我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源


特别是,尽管与霍尔时代的机器相比,如今的机器发出尖叫声,但这并不意味着“应该避免优化”。因此,我尊敬的同事建议我们应该以适度的节奏进行开发,这有什么道理吗?其想法是,性能瓶颈在速度较慢的情况下更令人恼火,因此它们很可能会受到关注

这应该是社区维基,因为它非常主观,没有“正确”的答案

也就是说,您应该在可用的最快机器上开发。是的,任何慢下来的东西都会带来刺激,并鼓励你纠正慢下来的问题,但代价很高:

作为一名程序员,你的工作效率与你头脑中能记住的东西的数量直接相关,任何减慢你的进程或阻碍你的事情都会延长你在短期记忆中记住这些想法的时间,使你更有可能忘记它们,并不得不重新学习它们

当你分心时,等待程序编译会让一堆bug、潜在问题和修复从你的脑海中消失。等待一个对话框加载,或一个查询完成,同样会打断您


即使你忽略了这一影响,你仍然得到了后面陈述的真相——早期的优化会让你在原地打转,破坏已经运行的代码,猜测(通常准确度很低)事情可能陷入困境的地方。首先要正确地设计代码,你可以忘记优化,直到它有机会满足一点,这时任何必要的优化都是显而易见的。

取决于你的交付时间。如果您处于12个月的交付周期,那么您应该以相当快的速度开发一个箱子,因为您的客户从现在起的12个月内将拥有比当前“平均”更好的“平均”箱子


当您的开发周期接近“今天”时,您的开发机器应该接近当前客户机的“平均”速度。

我想这将取决于您正在制作什么以及目标受众是什么

如果您正在为固定硬件(比如控制台游戏)编写软件,那么请使用与您将部署的设备类似或相同的设备(至少是测试设备)

如果您正在开发桌面应用程序或该领域的其他应用程序,那么可以在您想要的任何机器上开发,然后对其进行调优,使其在所需的min spec硬件上运行。类似地,如果您正在开发内部软件,公司想要购买的机器可能有一个最小规格。在这种情况下,在快速的机器上开发(以减少开发时间和成本),并根据min-spec进行测试


一句话,用你能用的最快的机器开发,用你能支持的最小或精确的硬件进行测试。

我通常用我能用的最快的机器开发


大多数时候,我运行的是调试构建,这已经足够慢了

速度慢的计算机不会帮助您发现性能问题

如果您的测试数据在一个表中只有几百行,那么您的数据库将缓存所有数据,并且您永远不会发现写得不好的查询或不好的表/索引设计。如果您的服务器应用程序不是多线程服务器,那么在对500个用户进行压力测试之前,您不会发现这一点。或者如果应用程序在带宽上出现瓶颈

优化是“一件好事”,但正如我对那些对如何更好地实现它有各种想法的新开发人员所说的,“我不在乎你多快给我错误的答案”。先把它做好,然后在发现瓶颈时加快速度。一个有经验的程序员将从一开始就合理地设计和构建它

如果性能真的很关键(实时?毫秒事务?),那么您需要设计和实施一组基准测试和工具,以科学地向自己证明您的更改正在加快速度。影响性能的变量太多了

此外,他们还会拿出一个经典的程序员借口——“但它运行缓慢,因为我们特意选择了速度较慢的计算机,当我们部署它时,它将运行得更快。”


如果你的同事认为这很重要,给他一台速度慢的电脑,让他负责“性能”:-)

出于对Codd的热爱,请使用分析工具,而不是速度慢的开发机器

应该避免优化,这不是给了我们Vista吗p

但说真的,这总是一个权衡的问题。要问自己的重要问题

您的最终用户将使用什么平台? 我可以放下自行车吗?如果我这样做会发生什么


我同意大多数人的观点,最初的开发应该在最快或最有效的机器上完成(不一定是同一台机器)。但是要运行测试,请在目标平台上运行它,并经常和尽早地进行测试。

如果您在接近最终测试和生产环境的硬件上编程,您往往会发现,在发布代码时,出现的意外情况会少一些

我已经看到足够多的程序员因为他们的机器比大多数用户快得多而受到严重但意想不到的问题的影响。但是,我也看到同样的问题发生在数据上。代码在一个小数据集上测试,然后在一个大数据集上“崩溃”

开发和部署环境中的任何差异都可能是意外问题的根源

尽管如此,由于编程既昂贵又耗时,如果