什么时候该写2B代码,什么时候写牛B代码,求指导?
刚看了篇文章:2B程序员与牛B程序员 http://cloudbbs.org/forum.php?mod=vie...。
文章最后一句“所以看问题要根据实际情况来分析,别以为能写个循环就牛B了”,很想知道这个“实际情况”具体来说该怎么分析?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这似乎是一个关于关于效率与到底什么才是好代码的问题,我有几个看法:
1) 考虑码效率时,“省小钱不如省大钱”
O(n)规则告诉我们,当n变的很大时,O(cn) = O(n)
这里,do_something的固定时间快点慢点无所谓,大多情况下不会有实际差别。但假如do_something的效率是跟items.size一起增长的,n只要变的很大,再快的电脑也要完蛋。
2) 在同样时间复杂度的情况下,程序员效率比CPU效率重要的多
阅读流畅,容易维护的代码才是好代码。不要为了一些渺小的“效率提升”而把代码写成案例里面那样。别忘了,计算程序员效率的时候除了第一次写代码的时间,还要算上未来每次维护的时间。不合常理的代码每次更新,重构,找bug时都会麻烦一点,累计下来是很不划算的。
3) 现代compiler(编译器)比你聪明
有些同学喜欢用一些语言风格上的小技巧去提高效率。在学习的时候玩弄一下不是坏事。但花费时间去做编译器该做的事情是很愚蠢的。现代编译器是超级强大的,可以在很多个不同的层次上做各种各样的优化。人手动能做的其实很少,而且经常会弄巧成拙。用2B代码来“帮助”你的编译器,就好像买辆法拉利然后站在车外帮它往前推一样
这种理念很明显是一个2B理论。在部分情况下,确实正确的代码思维,却花费更多性能的情况。
但是,要明白的是:计算机是替换人类做重复的事件,如果不是 10 次的 print ,而是一万次,那么呢?
我想2B程序员与牛B程序员的这个小例子,本意说的更多是编程思维上的区别。
我觉得这个例子与以下例子是一样的。
找到全部的 li
2B程序员可能用
而正常的程序员则用
像这种为了效率而故意写出的2B代码基本上就是2B。
1.如果循环次数少的话,效率有关系吗?如果循环次数多的话,你倒是手动写写?copy-paste的话估计也够受的了!!!code-duplication本身就是一个smelly的东东。
2.作者都没有指出用的编译器是什么,用的什么优化级别,在怎样的指令集的系统上,仅就所用的情况来说明问题,实在没有什么说服力。现代的编译器肯定可以优化(如果需要的话),即使有些编译器的后端不怎么为人所知或实用性不强。
3.作者仅仅拿指令来说事,可曾想过真正运行过这段代码并profile一下来算算system time,real time,user time?