2 回答

TA贡献1789条经验 获得超8个赞
首先我要解释一点,就是,保持程序的正确性,维持程序的简洁性,是作为程序员的第一要务
Don’t Cut Yourself: Code Optimization as a Double-Edged Sword。中文翻译:过早优化是万恶之源。
代码优化的好处多多,但是这并不意味着所有的代码都需要进行优化,有时过度的优化反而适得其反——费时、费力、不讨好。
“现代计算机科学的鼻祖”Donald Knuth曾说过“过早的优化是万恶之源”,因为:让正确的程序更快,要比让快速的程序正确容易得多。文中讲了7个原则,简单罗列如下:
1. 究竟要优化什么?
2. 选择一个正确的优化指标
3. 优化在刀刃上
4. 优化层次越高越好
5. 不要过早优化
6. 依赖性能分析,而不是直觉
7. 优化不是万金油
因此脱离了上下文,不要去讨论代码的效率。
以你的程序为例,我们首先要搞清楚的是,这个寻找最大数的代码,在整个程序中是否是在热区上。所谓热区,就是说,这个函数是频繁被调用么?或者是程序中耗时最多的代码么?大多数情况下,你写了一个程序(我说的是有一定规模的商业软件),90%的代码,其实都是几乎不被调用的,而只有10%的代码是反复调用,耗时巨大的。在不是热区的代码上“优化”,哪怕程序性能提高了1亿倍,但是程序的运行时间也只能压缩10%。
然而这么做付出的代价是,程序变得面目全非,到处都是各种奇怪的技巧,难以修改。项目开发进度大大增加。甚至为了性能,引入bug,连正确性都没有办法保证。
我没有你说的那本书,也没有看到你代码的上下文。
但是如果这个代码不位于热区,并不需要苛求性能的话,我觉得这么写很清晰,体现了作者明白的意图,就是寻找最大数,并且通过克隆避免对原始数据的顺序的修改嘛。当然,我们有更快的做法,问题是一个会武功的人,需要在吃饭的时候也把筷子当作武器耍弄一番么?
添加回答
举报