代码复杂度的线索
以下是一些表明你的代码可能过于复杂的线索:
- 你需要添加“hack”来让功能继续工作
- 其他开发者不断询问你某部分代码的工作原理
- 其他开发者不断误用你的代码,导致bug
- 有经验的开发者阅读一行代码需要超过一瞬间的时间
- 你害怕修改这部分代码
- 管理层认真考虑雇佣多个开发者来负责单个类或文件
- 很难想出如何添加新功能
- 开发者经常争论这部分代码应该如何实现
- 人们经常对这部分代码做出完全无意义的修改,你只能在代码审查时或在更改已提交后发现
这些是我能立即想到的。还有其他的吗?
-Max
评论
Andrew Pennebaker 说: 2011年11月17日下午12:14
- 代码与其他代码配合不佳(API弱或没有API)
- 每个函数似乎都需要自定义输入类型
- 编译或解释速度慢
- 项目需要多种编程语言
- 很难将项目与其依赖项解耦或切换到替代库
- 开发者讨论从头重写整个项目
回复
Max Kanat-Alexander 说: 2011年11月17日晚上9:12 是的,这些很好!虽然我不会说缓慢的解释/编译或需要多种语言必然是复杂度的指标。有些语言就是有慢的编译器,有些项目就是很大,有时你必须使用多个工具来完成工作。
-Max
John 说: 2011年11月17日下午12:30 “管理层认真考虑雇佣多个经理来管理负责单个类或文件的开发者”怎么样?
回复
Max Kanat-Alexander 说: 2011年11月17日晚上9:12 哈哈哈!
回复
Jerome 说: 2011年11月17日下午12:56 其他几个:
- 你的方法参数列表随时间失控增长
- 你觉得需要注释控制块的结束(我称之为’if’膨胀)
- 编写一个好的覆盖测试需要的代码比你想要测试的方法还多
回复
Max Kanat-Alexander 说: 2011年11月17日晚上9:13 是的!这些相当好!虽然,就测试编写而言,我实际上发现测试比代码大是很常见的。我认为这可能更多是需求复杂度的问题,而不是代码复杂度的问题。
-Max
回复
Simon 说: 2011年11月17日下午5:32 依赖树看起来像这样? http://thedailywtf.com/Articles/Enterprise-Dependency-The-Next-Generation.aspx
回复
Max Kanat-Alexander 说: 2011年11月17日晚上9:13 哈哈哈!!确实是WTF!!
-Max
回复
Raghu 说: 2011年11月17日晚上9:54 读了上面Simon的评论后,我去了那个网站,发现了这个。 http://thedailywtf.com/Articles/Serious-String-Validation.aspx ~raghu
Palo 说: 2011年11月29日凌晨1:02 嗨Max,我真的很喜欢你的博客文章。去年我在开发一个用于从大数据集计算统计数据的批处理系统。为了添加新的业务规则,我必须检查和/或修改几个不相关的地方,包括spring beans、属性文件和其他东西,所有这些都很琐碎,但很容易出错(例如,有一个DB2/Oracle小数/整数问题,没有人第一次就做对)。所以我认为当一个系统很容易出错时,它就是复杂的(后果是“你害怕修改这部分代码”)
回复
Max Kanat-Alexander 说: 2011年11月29日凌晨1:16 嘿Palo!谢谢你的好话!是的,我同意,“太容易出错”是一个非常好的点。
-Max
回复
Srihari S 说: 2012年4月6日凌晨1:24 如果你的代码有味道,它就是复杂的。参考WIKI:代码味道。
Steve Bush 说: 2012年4月7日晚上11:36 我昨天从头到尾读了《代码简洁》!(电子书有“封面”吗?)。并且很享受!我想说大约50%我同意,剩下的50%我强烈同意!我想我可以挑剔几个点,(并期待在将来的某个时候这样做!),但总的来说,我大部分同意你的初始陈述,即无论它可能是什么,它都是一个开始!而且是一个非常可行的开始!
我不介意看到一个博客/课程/午餐系列,每个课时(或博客条目)提出一个规则或定律进行讨论!那将是一个有趣的对话!
我有两个与编码点无关的评论要添加:
我从书中得到的一个全新东西是物理组织。每条定律、规则、事实、定义在出现时都被标识出来,然后当我到达结尾时,我得到了一个列出每一个的附录!这创造了整本书的绝妙回顾!我非常喜欢这一点,就像在最后5分钟内几乎在心理上重新阅读整本书一样!太棒了!
另一个无关但可能有趣的点是我阅读的方式:通过iPad iBooks应用。我读得非常非常多,但几乎总是通过网页浏览器。我注意到我阅读时几乎不断滚动;在iPad上,我的拇指让文本像自动提词器一样上升,以便我的眼睛始终保持大约相同的高度;在Mac上,我阅读时两个手指放在触控板上做同样的事情。但iBooks保持文本静止,我的眼睛从上到下移动。我不能说这是否更优越,只是觉得不同,并提醒我们自从那些纸做的东西,哦是的,书!以来已经走了很长的路!
一个幽默的愚蠢行为:我去了一次iBook的目录,它只在屏幕上显示到第2章。我花了整整五分钟试图显示剩余的章节。页面不会翻动!我几乎放弃并决定这是一个bug,当我意识到,目录可以滚动!!!!!!无论如何,你做得非常好,非常感谢!我很享受,我相信我的编程将来会从中受益!
Steve
————- “我们现在玩得很开心!”
Vidhyut 说: 2013年3月18日下午5:33 复杂的软件大多有大的依赖性。所以如果你不能将一个类从一个项目重用到另一个项目,这是一个信号,表明你有一个紧密耦合的复杂系统。
Mike W. 说: 2017年9月21日晚上9:35 这个怎么样:
- 你的整个代码库是一个大泥球。 http://www.laputan.org/mud/mud.html
回复
Max Kanat-Alexander 说: 2017年9月24日晚上11:15 信不信由你,我曾经认识一个人,他用这个特定的术语自豪地、有意地描述他的系统设计,好像它是一个应该保留的合法设计选择。
回复