差的项目代码是啥样

261 阅读6分钟

有幸接触和维护过一些差的项目和更差的项目,结合软件工程原则规范和大量优秀实践经验,对差的标准和带来的后果做了总结,希望对你我有所启发。

符合啥标准算严重的差的项目代码?

给差项目列几个最通用最本质的标准,符合什么样的标准算最差的项目呢?

最差项目标准

  1. 技术框架老旧
  2. 代码臃肿,扩展性低
  3. 逻辑不收敛,复用性低
  4. 随意而无规则的变量命名
  5. 复制粘贴他人的代码,不明白含义

最差的写法带来了什么

这些都会导致开发效率越来越低,开发体验越来越差。老旧的技术框架在一定程度上阻碍了项目开发人员的技术进步,对技术视野也造成了一定的限制。同时,一直使用老旧技术栈也不利于招聘新人,因为一方面新人往往更熟悉新的技术栈,另一方面,对于有技术追求的开发者,会比较排斥不注重技术更新换代的项目团队。

代码臃肿和逻辑不收敛,导致了代码不易维护,修改或添加功能需要冒着极大地引入新bug的风险,且需要花费很长时间。流水账和面条式的代码开发,导致我们排查问题的时候,需要阅读大量的重复代码。同时,缺乏对通用能力的抽象,导致类似的功能需要多次开发。随意而无规则的变量命名,使得我们很难读懂代码逻辑,所以不方便把项目交接给他人,甚至时间长了后,自己开发的逻辑也无法理清。对于大型项目,这种不规范的命名,也导致很难团队多人协作。出现bug后,很难定位到原因,很难fix。复制粘贴他人的代码,不明白含义,那么很可能在项目中埋下了隐藏的安全漏洞。

  1. 难留人,难招人
  2. 难开发,难维护,成本增加
  3. 安全漏洞,资损

做到哪几条就是个普通差项目?

我们经手的一般项目,其实都有很多可能是个普通差项目,或者经过我们的手,咱们的项目距离这些标准越来越近了。

普通差项目

  1. 缺乏或错误的监控和报警
  2. 开发规范不统一
  3. 大量硬编码逻辑
  4. 大量注释掉的无用代码
  5. 注释与实现的实际功能不符
  6. 没有README文档或README太简单,没有项目相关文档
  7. 引用了不必要的三方包

给我们的业务带来了什么?

由于我们系统没有自己的监控和报警,只能等着用户反馈问题了,我们才知道自己的系统出了故障。也许用户在遇到问题的时候不是打客服电话,而是直接把系统的错误发到了网上,那解决问题可能还需要再加上公关和市场团队才能化解危机了。当然,完全没有监控和报警的项目,属于很少见的,但是,更多的情况是,我们自己的业务中,有些监控需要开发人员手动增加特定的逻辑上报,但是开发和测试的时候,在紧迫的工期和善变的产品经理的百般摧残下,只顾着完成基本业务逻辑。错误的监控预警和埋点统计,无法使我们了解真实的用户使用情况。正确的监控和埋点,还可以帮助程序员在异常出现后,快速进行定位追踪,找到问题并解决问题。而如果埋点本身就是错误的,garbage in garbage out,后续的数据分析都是建立在了错误的基础上。

来自不同老东家的团队成员,往往有自己原有的代码和设计规范,开发规范不统一可能导致一些不确定性。而在项目中大量的硬编码逻辑,将一些数据(数值,字符串)嵌在代码逻辑当中,导致我们后面再去查询数据的时候,追溯的不容易。

为什么代码选择了变差

项目一开始很难有清晰明确不变更的设计,对于开发人员来说,我们往往不知道我们写的这个功能未来还会用在其他地方。当下次有其他需求的时候,我们反应过来,之前开发过类似的功能,想要直接使用,但是仔细一看,还是有几个地方是跟之前的需求不同,需要做修改调整的。封装组件的话,我们就需要把原有的逻辑功能做抽象,2次的使用相同之处做拆分和能力下沉,还要处理好调用和参数传递。我们看到了,这肯定比直接把代码copy过来一份,直接在新文件中修改成新需求需要的样子,要复杂的多。而项目开发周期往往是紧迫的,所以程序员很可能选择了以最快的速度去完成需求,提交测试。而且,如果我们封装成组件,从理论上来说,我们之前的业务逻辑代码也是需要修改一部分的,对这次的开发上线来说,相当于增加了开发和测试的工作量成本。

在开发过程中,我们命名可能会出现单词拼写错误,甚至有些程序员会用中文拼音来给变量取名,或者拼音和英文混用,这都会导致系统的难理解。

在正常业务代码逻辑之外,程序员还需要添加记录日志的代码,也叫做埋点。这些都相当于业务逻辑之外的工作,如果周期特别紧的时候,很多开发者选择先把功能提测了,然后再增加埋点。这往往导致了对于埋点正确性的重视程度偏低,对埋点的验证往往弱于对业务逻辑的验证。

结语

代码中微小的坏味道,都会导致更多的坏味道,最终项目变得不可维护,软件随着时间推移慢慢腐烂。熵是一个来自物理学的概念,指的是某个系统中的“无序”的总量。热力学定律保证了宇宙中的熵倾向于最大化。这在软件开发和维护迭代中也存在类似的问题,大部分时候我们都是在已有的工程代码中,添加和修改功能,而每一次的小混乱,都极有可能让后人在不知所措的fuck声中增添更加不能理解的代码逻辑。毕竟,谁也不想轻易承认,自己是差的,但是,这往往造成了差的代码和项目。以上。