首页 > 什么时候该写2B代码,什么时候写牛B代码,求指导?

什么时候该写2B代码,什么时候写牛B代码,求指导?

刚看了篇文章:2B程序员与牛B程序员 http://cloudbbs.org/forum.php?mod=vie...。
文章最后一句“所以看问题要根据实际情况来分析,别以为能写个循环就牛B了”,很想知道这个“实际情况”具体来说该怎么分析?


这种理念很明显是一个2B理论。在部分情况下,确实正确的代码思维,却花费更多性能的情况。

但是,要明白的是:计算机是替换人类做重复的事件,如果不是 10 次的 print ,而是一万次,那么呢?

我想2B程序员与牛B程序员的这个小例子,本意说的更多是编程思维上的区别。

我觉得这个例子与以下例子是一样的。

找到全部的 li

<ul>
<li class="item1">1</li>
<li class="item2">2</li>
<li class="item3">3</li>
<li class="item4">4</li>
<li class="item5">5</li>
</ul>

2B程序员可能用

list.push($('.item1'));
list.push($('.item2'));
list.push($('.item3'));
//...........

而正常的程序员则用

$('ul li');

这似乎是一个关于关于效率与到底什么才是好代码的问题,我有几个看法:

1) 考虑码效率时,“省小钱不如省大钱”

O(n)规则告诉我们,当n变的很大时,O(cn) = O(n)

for(item in items) {
 do_something(item)
}

这里,do_something的固定时间快点慢点无所谓,大多情况下不会有实际差别。但假如do_something的效率是跟items.size一起增长的,n只要变的很大,再快的电脑也要完蛋。

2) 在同样时间复杂度的情况下,程序员效率比CPU效率重要的多

阅读流畅,容易维护的代码才是好代码。不要为了一些渺小的“效率提升”而把代码写成案例里面那样。别忘了,计算程序员效率的时候除了第一次写代码的时间,还要算上未来每次维护的时间。不合常理的代码每次更新,重构,找bug时都会麻烦一点,累计下来是很不划算的。

3) 现代compiler(编译器)比你聪明

有些同学喜欢用一些语言风格上的小技巧去提高效率。在学习的时候玩弄一下不是坏事。但花费时间去做编译器该做的事情是很愚蠢的。现代编译器是超级强大的,可以在很多个不同的层次上做各种各样的优化。人手动能做的其实很少,而且经常会弄巧成拙。用2B代码来“帮助”你的编译器,就好像买辆法拉利然后站在车外帮它往前推一样


像这种为了效率而故意写出的2B代码基本上就是2B。
1.如果循环次数少的话,效率有关系吗?如果循环次数多的话,你倒是手动写写?copy-paste的话估计也够受的了!!!code-duplication本身就是一个smelly的东东。
2.作者都没有指出用的编译器是什么,用的什么优化级别,在怎样的指令集的系统上,仅就所用的情况来说明问题,实在没有什么说服力。现代的编译器肯定可以优化(如果需要的话),即使有些编译器的后端不怎么为人所知或实用性不强。
3.作者仅仅拿指令来说事,可曾想过真正运行过这段代码并profile一下来算算system time,real time,user time?

【热门文章】
【热门文章】