题
对等的排雷工作上一份报告,显示每周(星期日至星期六)提前的每个雇员在我们的小型咨询公司。有一段代码,他写道,表示列相对应的几天中目标的周。他算法如下:
- 得到这一天的星期一个月第一日。如果今天是星期天,设置一个标志,到零;否则,将其设置为一个。
- 迭代过所有的日子的一个月。如果今天是星期天,增加的标志。然后,如果标志的价值等于每周要显示的,显示柱相对应的前一天;否则,隐藏柱。
当然,该标志指示什么当前的一周。
我建议另一个算法:
- 获得哪天月份第(F)和最后的(L)天的指定的周。例如,第一个星期的2009年开始在星期二的第1次和结束在星期六第3。
- 迭代过列相对应的1天到F-1和隐藏他们。
- 迭代过列相对应的天F L,并显示他们。
- 迭代过列相对应的天我+1DaysOfMonth,并隐藏他们。
"困难"的一部分,在我的算法是第1部分。我的意思是"困难",作为"难以理解",因为算法的复杂性这样做是不变的。和我的算法的优点是具有更严格的循环。我对等的循环并比较每一个月的一天。我没有。
这是一个小例子,你可能会说,在优化这里是有点太偏执狂。但他的编程方式不会改变一下,当我们写实际性能至关重要的代码。
他的代码也是充分的,这些试验:
/* doSomething() doesn't change the state of the relevant variables. */
if (condition)
{
flag++;
if (flag > test)
doSomething();
}
else
if (flag >= test)
doSomething();
当然,这是可以做到这样的:
if (flag >= test);
doSomething();
if (condition)
flag++;
我做什么?!?!?!
编辑:我校正的比较,在代码样本。
解决方案
这是你的任务或他的吗?如果其他的,让他做。我是一个人兴旺的效率,事实上,我会变得非常沮丧的东西时似乎效率低下并超出我的控制。
有超过200人在那么谁可以把我的最'高效率'的想法、算法和代码的耻辱。可能更多,你不能去通过rep单。如果Linus Torvalds自己的签名,他开始在1像其余的我们。
你有什么要考虑是,人们需要能够维持的代码,他们写。这意味着,他们必须了解它,如果他们生下了它。甚至如果有人证明另一种算法有效得多比我的自己,我不会用它,除非我 舒适 与。
如果这是一个联合项目,编写它自己的方式,显示出加速,然后再花一些非常、非常有耐心小时你对帮助他真的抓住它。
回头上的东西你写的在5年前, 每个人都有学习做 和每个人都没有的东西在他们自己的速度,特别是学习。
其他提示
我认为你的朋友已经正确的想法。采取的算法,这显然是正确的算法,这将需要一个小时来解释,但是,没有特定的绩效目标,更快。
如果你有一个特定的性能要求,如'所代码需要能够得到正确的结果对于所有月份在下一个十年内的200微秒内在机X', 和 简单的代码失败的要求,然后你可以考虑使用你的版本。
(代码样本的你确实是很明显更好地在你的办法,因为它不太令人费解。)
那么你不应该干扰,因为很明显你错了...两块代码不是相当的。只是带条件=1,标志=0和测试=1
G'day,
我建议,你应该赞成简单的算法 执行在约束你 过聪明,过于复杂的算法,提供没有真正的增益。以我的经验这些各种各样的太聪明的技巧,更有可能变成一个未来维护的噩梦!
这种想法是更好地表达的以下的话:
"主管的程序是充分认识到严格限制他自己的头骨;因此他的办法编程的任务完全的谦卑,除其他事情,他可以避免聪明的技巧像瘟疫。" -Edsger Dijkstra在他的1972年ACM图灵讲座"谦卑的程序员"
顺便说一句,这份文件是一个伟大的阅读!随着他的许多其他文件,可在网上在 E.W.Dijkstra的档案
禾田
干杯,
我没有看到这里的问题...虽然他有点迂回方式获得的目标,他不会到达那里。
这一发言,我要说的话不应该是采取了上下文:但是总会有人做这样的-这是不错的,恰恰相反...他也许不知道一个很好的方式来做事,但是他不知道如何获得的结果无论如何丑他的方法。
这可以是一个真正救星的时候没有人知道的校正算法进行的东西...有机会他就会 鸭子带它 不知何故。
我同意普遍的情绪这里:如果一个性能的改进会使代码显着更多的困难阅读,那里有最好是一个很好的理由作出这一改变。
另一方面,这并不意味着我们应该总是满足于 第一件想到的.有时有明确优质的替代品,同样可读或几乎如此。
如果你想说服你的同事采取选择自己的算法说真的,你应该选择你的战斗,仔细。不要试图把他的世界颠倒和部队的问题在每一种情况下你会发现。开始做你的建议时,才可以认为替换算法,是明显的优越,也清晰,并随时准备返回,如果他抵抗。
如果你感觉狡猾的,你甚至可能会给他提示,要求引导性的问题,或任何其他技术可以认为,以帮助他图通过自己。
我感觉到你的痛苦。程序员都是真的stubburn性质。每个人都有他自己的原则和规则构建的程序。如果其他观点相撞的一些然后,改变程序员的意见是喜欢移动的根本支柱之一的摩天大楼的建筑。:)