为什么代码会腐败?原本好好的代码是怎么烂透的?

1 天前
 muchan92

以前只是人云亦云地附和“技术债”,没细想,最近发现“需求变更”才是根源。

例如,领导说我们养个动物吧,比如仓鼠,然后你搭了一个小窝,结果领导牵来一头大象,你要么把窝改得不伦不类,要么拆了重盖。

这种需求与架构的不匹配,就会把原本良好的架构拉扯得稀碎。

浅聊一点技术债是怎么产生的?它可能是需求变更中一点点积累的,也可能是突然离谱需求导致实在没法适配的。

开发者面临的困境是,只能设计出符合项目最初需求的合理架构,没办法预知未知需求,但“需求变更”既合情合理也是常态。比如领导可能有一天会把大象换成鲸鱼。

所以,代码是注定会腐败的吗?

按常规思维来说是的,因为需求会一直变。但这也刚好暗示了应对方法:既然需求肯定会变,那么找到一种能适配需求多变,并且不会破坏已有代码的方法就好了,一种始终具有稳定性的方法。

3698 次点击
所在节点    程序员
42 条回复
GuangXiN
1 天前
你找不到这种方法
qs
1 天前
一切根源在于领导的"这个功能明天一定要上"
Configuration
1 天前
要想不烂,就必须定期花时间重构,但是重构这件事在管理者看来是没有收益的,所以大部分人选择不做,“暂时能用就好,烂的时候说不定我都走了”
iugo
1 天前
不单是需求变, 技术也在变. 依赖在变, 语言也在变.

代码也应该跟着变化.
julyclyde
1 天前
设计缺乏
重构缺乏
每天只是疲于奔命
snitfk
1 天前
交付速度和技术债这两者是不可能两角。只能选其一。
qiumaoyuan
1 天前
CaffreySun
1 天前
最近在深入学习技术债的知识,有一本书特别好《管好技术债 低摩擦软件开发之道》,中文翻译的不是很好,有能力建议阅读英文书。
本质上软件系统是与其所在环境强绑定的,当环境发生变化时(如需求变化)就需要对系统进行调整,如果不及时调整就会与环境不适配,也就是你所说的“腐败”。
qiumaoyuan
1 天前
至于楼主说的“变化”,我认为其实也早有答案:不为未来设计的代码最简单,最简单意味着容易应对变化。而为未来设计的代码,往往会预测错未来。而真正的未来到到来的时候,不符合当下真实需求的、以前的一切预先设计都会化作阻力。

不过真能做到这一点的前提还是得有能力写出干净的代码,掌握上面链接里提到的能力,让代码全面贴合当下的需求,没有半点预先设计,也没有半点结构上的混乱。
qiumaoyuan
1 天前
sagnitude
1 天前
有啊,从老板的角度看的话,每次变更都不计一切代价的让团队重构项目,雇一个团队干这事,也是一种解决方法

但作为维护系统的人,no silver bullet
xjzshttps
1 天前
就是需求变更
一个项目其中一部分代码全程是我自己实现的,持续多年后一样一塌糊涂。
原因就是需求变更。
每次增加新需求都要修改代码,然后老功能还不进行移除,有时候一个逻辑根据多个配置能走多个互相交错的代码路径。
我这还算好,时间足够会同步实现测试。但是后期时间紧张时测试就开始跟不上了。

有的项目乱倒一定程度后,我强硬进行重构,把功能改成插件式的就好多了。
但是一些项目并没有那么好做,特别是为了性能不能封装,或者即时封装也要向上层暴露一定细节就很烦了。
woniu7
1 天前
什么,代码被需求渗透了,屎山革命,和平重构了
thedog
1 天前
没有银弹,堆人月就好
suom
1 天前
优秀的程序员,就算憋不住没厕所要拉屎(需求急),也会挖个坑(单独一块区域),拉了坨也会稍微盖一下(尽量做隔离),再立一块牌子(写重要注释),免得别人或者自己掉屎坑里。

而有些程序员,每天上班下班不论在哪(管他什么需求),随地大小便(只管自己方便),马桶里马桶外地上墙上天花板所到之处都能拉(需求做到哪里垃圾代码写到哪里),别人问起来就是不关我事(模块不是我负责)、我没有拉(我只是该一点点不算动到)、别人也这样拉的(别说我垃圾代码内谁你怎么不说他)。

peace ~
66450146
1 天前
需求变更来自于世界在变,发布的东西越多就会发现越多对这个世界错误的假设。代码的腐败是熵增的过程,软件系统也需要一直进化,尽量和这个组织对世界(主要是对付费用户)的了解才能保持速度
pingdog
1 天前
写代码的人本意是好的,是代码执行时出了差错🌚
momo2789
1 天前
熵增是不可逆的,所以定期重构是必须的,降低复杂度。
buruoyanyang
1 天前
任何项目,只能想办法减缓变成屎山的速度,并不能杜绝他成为屎山。而且重构这个事情,对中上层,特别是整个公司不是由技术人说话的时候,是毫无意义的。
paradoxs
1 天前
@qs 一切根源在于领导的"这个功能明天一定要上"
----------------------
单纯的讨论这句话,是不负责任的。

因为你们没出钱,没感受到压力。 等哪天程序员自己出钱组建公司,一定比领导更狠。说不定就变成了:我今天就要上,干不完不许走。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1167404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX