编程习惯之五:悠悠球代码
程序员喜欢称它为“溜溜球代码”。首先将值存储为字符串。然后它们被解析为整数。然后它们被转换回字符串。这是非常低效的。您几乎可以感觉到CPU在所有被浪费的负载下的挣扎。编写快速代码的聪明程序员设计他们的体系结构来最小化转换。由于他们的计划,他们的代码运行得更快。
但信不信由你,有时它是有意义的。有时,您有一个非常棒的库,它在其专有的黑盒中做了大量智能的事情。有时老板会开出一张七位数的支票授权黑盒里所有的天才。如果标准库希望数据为字符串,则将其以字符串形式提供给标准库,即使您最近将其转换为整数。
当然,您可以重写所有代码以最小化转换,但这将花费时间。有时,代码运行额外的一分钟、一小时、一天甚至一周是可以的,因为重写代码将花费更多的时间。有时候,积累这样的技术债务比一开始就建立它要便宜得多。
有时库不是专有代码,而是您很久以前自己编写的代码。有时,多转换一次数据比重写库中的所有内容更快。所以你继续写你的溜溜球代码。没关系——我们都有过这种经历。
编程习惯6:编写自己的数据结构
其中一个标准规则是,在大二的时候完成了数据结构课程之后,程序员永远不应该编写用于存储数据的代码。其他人已经编写了我们需要的所有数据结构,他们的代码也经过了多年的反复测试。它与语言捆绑在一起,而且可能是免费的。你的代码可能只有错误。
但有时数据结构库会有点慢。有时,它们迫使我们使用一种可能是标准的但对我们的代码来说是错误的结构。有时,库会促使我们在使用结构之前重新配置数据。有时,这些库包括带有线程锁定等项目的腰带和悬挂保护,而我们的代码并不需要它们。
当这种情况发生时,就该编写我们自己的数据结构了。有时会快得多。有时它使我们的代码更清晰,因为我们没有完全包含所有用于重新格式化数据的额外代码。
编程习惯7:在中间打破循环
在这个过程中,一个规则制定组声明每个循环都应该有一个“不变量”,也就是说在整个循环中都是正确的逻辑语句。当不变式不再为真时,循环结束。这是思考复杂循环的好方法,但它会导致一些疯狂的禁止——比如禁止我们使用a返回或者一个打破在循环的中间。这是“禁止”规则的子集转到语句。
这个理论很好,但是它通常会导致更复杂的代码。考虑下面这个简单的例子:扫描一个数组,寻找一个通过测试的条目:
虽然(我< a.length) {
...
If (test(a[i]) then return a[i];
...
}
循环不变的爱好者宁愿我们添加另一个布尔变量,称之为它notFound,并这样使用它:
while ((notFound) && (i
...
if (test(a[i])) then notFound=false;
...
}
如果这个布尔值命名得当,那么它就是一段很棒的自我文档化代码。这样大家就更容易理解了。但这也增加了复杂性。这意味着分配另一个局部变量并阻塞一个寄存器,编译器可能不够聪明来修复这个问题。
有时,一个转到或者跳跃更干净。
编程习惯8:使用简短的变量名(但是我和x和和有意义)
埃德加·爱伦·坡曾经说过,故事中的每一个字都应该形成一个单一的结论。他这样说的意思是说,每一个字都要对读者说点什么。编码规则坚持相同。每个变量名都应该解释它在做什么以及为什么在那里。Java程序员接受了使用驼色大小写变量名来详细说明变量功能的想法,他们对此做了疯狂的解释。一些程序员编写的变量名包含五个、六个甚至更多的单词。
但有时使用一个难以理解的单字母变量更容易。有时只使用更简单我或j用于循环中的迭代器。有时使用for数组和l对于列表,即使它和数字1没有区别。
是的,本文前面的部分鼓励自文档化代码,而不是长注释。在本例中,一个字母的变量名是自文档化的。这封信我是通用迭代器。聪明的程序员马上就会知道。
编程习惯9:重新定义操作符和函数
一些最有趣的语言可以让您做一些真正迂回的事情,比如重新定义看起来应该是常量的元素的值。例如,Python允许您输入真=假至少在2.7及之前的版本中是这样。这不会造成某种逻辑崩溃和宇宙的终结;它只是互换了意思真正的和假.您也可以使用C预处理器和其他一些语言来玩这样的危险游戏。还有一些语言允许您重新定义运算符,比如加号。
这是一种延伸,但当重新定义一个或多个所谓的常量时,在一大块代码中会有一些点。有时老板想让代码做完全不同的事情。当然,您可以处理代码并更改每一个事件,或者您可以重新定义现实。它会让你看起来像个天才。而不是重写一个巨大的库,您只需翻转一点,它做了相反的事情。
也许在这里划清界限是好的。你不应该在家里尝试这种方法,无论它有多聪明和有趣。这太危险了——真的……诚实的。
相关文章
- 7个编程老手的永恒经验
- 为什么框架是新的编程语言的7个原因
- 编程认证的真正污点
- 下载:专业程序员的业务生存指南
- 下载:独立开发者获得成功的29条建议
- 点评:比较了四大Java ide
- 下载:实践17个JavaScript编辑器和ide
- 科技招聘人员说过的最糟糕的33句话
- 攻击单字母编程语言
- 现在值得学习的9种前沿语言
- 10场争夺开发者芳心的战斗
- 15种技术改变了开发人员的工作方式
- 对编程未来的12个预测
- 15个热门的编程趋势和15个冷门趋势
- 开发演进:向19代计算机程序员致敬
这个故事,“我们暗恋的9个编程坏习惯”最初是由信息世界 .