小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
本文同时参与「掘力星计划」,赢取创作大礼包,挑战创作激励金
通过问题看本质!!!
到底啥是好代码
- 优秀的厨师能做出色香味俱全的美味佳肴
- 优秀的歌手能演奏出打动人心的美妙歌曲
- 优秀的演员能塑造出有血有肉的银屏角色
- 优秀的程序员能写出高效率高质量的代码
如何评判
- 厨师的美味佳肴,眼睛、鼻子、舌头能直观感受到
- 歌手的美妙歌曲,耳朵能直观感受到
- 演员的银屏角色,眼睛、耳朵能直观感受到
- 程序员的代码好坏,如何评判?
评判标准
- 灵活性(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容易修复,添加功能轻松
- …
与代码量、业务复杂度,文档建设,团队成员水平有直接关系