提升代码内外部质量的22条经验

简介: 本文主要关注代码的内部和外部质量,编程的价值观,代码质量的评估标准,整洁代码的匠艺以及如何维护已有的代码。 外部质量:用户所能感受到的部分,正确性,易用性,效率,可靠性。 内部质量(代码质量):可维护性,灵活性,可移植性,重用,可读性,可测试性,可理解性。

本文主要关注代码的内部和外部质量,编程的价值观,代码质量的评估标准,整洁代码的匠艺以及如何维护已有的代码。

外部质量:用户所能感受到的部分,正确性,易用性,效率,可靠性。

内部质量(代码质量):可维护性,灵活性,可移植性,重用,可读性,可测试性,可理解性。

 

总结的22条经验如下:

  1. 代码分为外部质量和内部质量,好的产品不等于好的代码(Good Software != Quality Code)。

  2. 产品的冰山效应:产品经理以及用户关注的部分只是冰山露在水面以上的部分,隐藏在下面的是看不见的更加庞大的部分,那就是我们庞大的代码。
    image

  3. 拒绝 PPT 架构师,架构师应当写代码,哪怕这些代码并不 Check-in 到最终的代码库中。一个好的设计不是在凭空产生的,而是经过不断打磨、修改进而获得的。不存在一次设计,程序猿无脑堆砌代码能够完成的好的程序。
    imageimage

  4. 编程的价值观:沟通、简单、灵活。

  5. 代码最重要的功能是传递程序员的设计和思路,其次才是实现的功能。好的程序员应当写出人类能够看懂的代码,而不是机器能理解的代码。

  6. 效率不是牺牲清晰性的理由,不能够因为人主观“认为”的一些小伎俩,使用晦涩的代码,企图以此提升性能。应当依赖编译器本身的优化,依赖工具对性能低下的点进行评测,进而进行针对性的优化。

  7. 不要试图死磕代码加快速度,找个更加有效的算法可能更加有效。

  8. 代码要先做对,在弄快。先使其可靠,再让其更快。先把代码弄干净,再让它变快。

  9. Good code is not bad code。坏的代码是可以通过一些指标进行度量的。让坏代码的指标可以被机器固化并时时检查,确保代码不会变得更糟。

  10. 函数本身不是用来复用,这和很多“主流的”观点不同。函数的存在的主要意义在于:划分独立职责,隐藏具体细节操作,使得代码具有可读性,应对扩展的变化,方便进行单元测试。顺带的,偶尔可以用作复用。

  11. 函数应当遵循:单一抽象层次原则、短小原则和单一职责原则。

  12. 当发现一个函数具有以下特征时,需要考虑抽取函数: 

    • 过长

    • 嵌套层数过深。

    • 自然分块,需要使用注释描述该程序块

    • 判断条件过于复杂

    • 函数的某些判断分支不断变化

    • 参数过于复杂

    • 逻辑重复

     

  13. 局部变量应当用途单一

  14. 新写代码逻辑,应当关注用户场景和类职责划分,不应当上来就考虑我要使用一个什么模式。这样势必会导致过度设计。模式用作应对变化,当后续版本发生变化时,模式用作重构现有代码。

  15. 不断重构,保持代码简洁。

  16. 代码是债务,一个程序员欠下的债务,总是要还的,虽然可能不是由本人还。维护老代码的程序员又被称作代码考古工程师,经常在一大堆糟乱的代码中挖掘最初的用户需求,往往这些需求淹没在无数的变更历史中。维护老代码是一个费时费力的过程。需要一些技巧减小修改老代码的风险。

  17. 程序员应当将整洁的代码风格作为一种习惯,时刻意识到整洁代码的重要性并不断地提高重构技巧。

  18. 意图导向编程可以辅助思考,并生成易懂代码。

  19. 设计模式本身是用做应对变化的。如果在开发时就想着“我要用模式”,很可能会导致过度设计。在对代码进行重构时,才应当考虑使用设计模式解决问题。

  20. 函数名称很重要。

  21. 关于注释:

    • 如果能用短小函数描述,则使用子函数替代注释本身。

    • 确保注释和代码表达的意图一致,否则就失去了注释的意义。

    • 在重要的地方写注释,不要注释满天飞,简单的重复代码的功能是毫无意义的。要让每一处注释都有价值。不要过分注释。

     

  22. 关于何时重写代码 

    • 开发团队要预留20% 的时间用作保持对原有系统的重构。剩余的时间用作开发新功能。

    • 只要有可能,对所要重构的部分进行递增修改,让用户切身感受到产品的改进,哪怕将工作时间延长。

     

     

 


以上经验分享,结合到具体工作,可能有场景需要考虑: 

  • 近几年不少研发团队逐步往快速迭代方向转移,其中应当更多地关注目前代码的内部质量,是否有足够的单元测试保证代码的稳定性,是否不断地在进行重构保证代码的简洁。在快速应对变化的同时,代码不能丝毫打折扣。我们要经常反思,我们估计的时间,是否已经考虑给开发团队预留了足够的重构时间?产品经理是否足够的了解代码目前的质量状态?我们是否在欠债?

  • 对于维护现有代码,我们经常是直接野蛮的在原有代码中继续累加逻辑,很少考虑重构,导致原有逻辑越来越复杂,难以理解。这一点应当受到更多关注。

 

最后引用一句话,与大家共勉: 
知识不在于记住多少,而是在于它出发了你多少的思考。一旦我们开始反思我们的代码,代码将不再一样。

本文出自 “葡萄城控件博客” 博客,请务必保留此出处http://powertoolsteam.blog.51cto.com/2369428/1298688

目录
相关文章
|
1天前
|
敏捷开发 Devops 测试技术
深入探索软件测试:保障质量的终极策略
【4月更文挑战第18天】在软件开发生命周期中,确保最终产品的质量至关重要,而软件测试则是达成这一目标的关键步骤。本文将探讨软件测试的多维度作用,包括其在不同开发阶段的应用、面临的挑战以及未来趋势。通过分析自动化测试工具的选择、测试用例设计的最佳实践和持续集成的重要性,文章为读者提供了一套全面的质量保证策略,旨在帮助团队提升测试效率并优化产品质量。
|
2月前
|
监控 数据可视化 前端开发
高效设计企业营销系统的3种方案实践复盘
高效设计企业营销系统的3种方案实践复盘
33 2
|
3月前
|
测试技术
软件测试是质量需求的交付实践
软件测试是质量需求的交付实践
107 0
|
4月前
|
SQL 缓存 开发工具
CodeReview对于一个企业的重要性
odeReview 是开发过程不可或缺的重要一环,如果将代码发布比作一个工厂的流水线,那么 CodeReview 就是流水线接近于终点的质检员,他要担负着对产品质量的保障工作,将“缺陷”从众多的“产品”中挑出,反向推动“生产方”改进生产质量。
35 1
|
8月前
|
运维 监控 Devops
怎样利用DevOps文化提高软件开发的效率和质量
DevOps文化的兴起为软件开发带来了新的思维和方法,通过自动化、持续交付、协作等实践,提高了软件开发的效率和质量。在不断变化的技术环境下,利用DevOps的理念和实践,软件开发团队能够更加灵活、高效地应对挑战,将创新快速落地。同时,随着新概念的涌现,我们也看到了DevSecOps和AIOps等的前景,为软件开发领域带来更多的可能性。
165 0
怎样利用DevOps文化提高软件开发的效率和质量
|
9月前
|
供应链 数据可视化 Java
提高开发质量的 5 个必要实践
提高开发质量的 5 个必要实践
|
算法 Java 业务中间件
研发人员如何才能在做业务的过程中自我增值?
如何才能在做业务的过程中不再是资源一样被消耗而是像资产一样自我增值?如何成长?如何高效率地成长?如何让自己的成长走在环境要求的前面? 基于以上这些问题,本文将依次阐述以下内容: 先从“人的本质”入手(第二章节),接着探讨“人的成长”的本质(第三章节),最后再探讨业务和技术的一般规律及应对策略(第四、第五章节)。 需要注意的是,以下内容受限于个人能力和经验有限,在描述规律的过程中,可能会存在维度的缺失;或者当前描述的规律所涉及的维度并不是某些读者认知中的重点,因为事物不同的维度在不同角色和级别的人的认知中重要程度不同。
199 1
研发人员如何才能在做业务的过程中自我增值?
|
测试技术 UED
复盘归因,提高交付质量的秘诀
这个阶段包括原型图、PRD文档、交互设计、技术方案、测试用例等几项重要产出物,当然他们有一定的前后依赖关系。
复盘归因,提高交付质量的秘诀
|
监控 搜索推荐 数据管理
测试人如何做好质量建设
答案都在这里了
166 0
|
数据采集 监控 供应链
谈谈生产过程数据的质量评估
在制造过程中,数据质量和产品质量一样重要。我们可以将ISO 8000中的数据质量评估应用到IEC62264中的制造过程中。
谈谈生产过程数据的质量评估