到底啥是“好代码”?

184 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

本文同时参与「掘力星计划」,赢取创作大礼包,挑战创作激励金

通过问题看本质!!!

到底啥是好代码

  • 优秀的厨师能做出色香味俱全的美味佳肴
  • 优秀的歌手能演奏出打动人心的美妙歌曲
  • 优秀的演员能塑造出有血有肉的银屏角色
  • 优秀的程序员能写出高效率高质量的代码

如何评判

  • 厨师的美味佳肴,眼睛、鼻子、舌头能直观感受到
  • 歌手的美妙歌曲,耳朵能直观感受到
  • 演员的银屏角色,眼睛、耳朵能直观感受到
  • 程序员的代码好坏,如何评判?

评判标准

  • 灵活性(flexibility)
  • 可扩展性(extensibility)
  • 可维护性(maintainability)
  • 可读性(readability)
  • 可理解性(understandability)
  • 易修改性(changeability)
  • 可复用(reusability)
  • 可测试性(testability)
  • 文档详尽(well-documented)
  • 分层清晰(well-layered)
  • 正确性(correctness)
  • 健壮性(robustness)
  • 鲁棒性(robustness)
  • 模块化(modularity)
  • 高内聚低耦合(high cohesion loose coupling)
  • 高性能(high performance)
  • 安全性(security)
  • 兼容性(compatibility)
  • 易用性(usability)
  • 可用性(reliability)
  • 可伸缩性(scalability)
  • 稳定性(stability)
  • 优雅(elegant)
  • 整洁(clean)
  • 清晰(clarity)
  • 简单(simple)

好代码

好代码 = 高效率 + 高质量

效率(计算机角度):时间与空间,能客观量化

质量(人的角度):很难客观给出代码质量的量化标准,更多是主观性评价

Good judgement comes from experience, and experience comes from bad judgement. 好的判断来自经验,而经验来自坏的判断。

— 弗雷德里克·布鲁克斯(Frederick P. Brooks, Jr.) 1999年图灵奖得主,《人月神话》作者

可读性

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

任何傻瓜都会编写计算机能理解的代码。好的程序员能够编写人能够理解的代码。

— Martin Fowler ,软件设计大师,《重构》作者

Google的Readability认证,拿到认证的工程师才有资格code review时,批准别人提交代码

  • 是否符合编码规范
  • 层级与模块划分是否清晰
  • 是否符合高内聚低耦合
  • 文档与注释是否详尽
  • code review的重要性

可复用性

  • 类的继承、多态
  • 模块化
  • DRY(Don’t Repeat Yourself)设计原则

可扩展性

  • 可扩展性,指应对未来需求变化的能力。不修改或少量修改代码,通过扩展添加新的功能代码达到实现需求目的
  • 插件
  • “对修改关闭,对扩展开放”设计原则

灵活性

  • 原有代码有预留扩展点
  • 原有代码有可复用的模块、类、库
  • 接口适应多种场景

简洁性

  • KISS 原则:“Keep It Simple,Stupid”
  • 用简单的方法解决复杂的问题
  • 简洁不是简陋,不是简单的少

可测试性

  • 能容易写出单元测试

可维护性

  • 项目中,大部分时间在维护代码
  • 可维护性,指在不破坏原有代码设计,不引入新的bug情况下,能够快速修改或添加代码
  • bug容易修复,添加功能轻松

与代码量、业务复杂度,文档建设,团队成员水平有直接关系