代码简洁性的定义
多年前,我写了一篇博客文章解释计算机存在的问题,本质上指出问题的核心在于复杂性。几年后,我出版了《代码简洁性》一书,系统阐述了简洁性为何是软件最重要的品质及其实现原理。
又过了多年,我在一场全球顶尖软件工程师的会议中意识到一个严峻问题:从未有人明确定义过软件领域的“简洁性”概念。
什么是软件简洁性?
对于软件而言,“简洁”意味着易于阅读、理解并正确修改。
这一定义包含三个关键维度:
- 人性化特质:简洁性本质上是为人服务的,机器不会阅读或理解代码
- 可修改性:重点在于让人能够正确修改代码,包括辅助自动化重构工具的场景
- 不可自动化:不存在能完全自动化实现代码简洁化的工具,人工介入不可或缺
复杂性的根源
缺乏代码所有权
当代码缺乏明确负责人时,其可读性和可维护性会随时间递减。实际观察表明,无人维护的代码几乎总会变得越来越复杂。
时间压缩效应
开发者因时间压力(真实或自我施加)而选择走捷径是最常见的复杂性诱因。典型案例包括:
- 因截止日期被迫采用临时方案
- 因外部库使用困难而编写绕行代码
- 对非职责范围内代码的主动放弃优化
测量简洁性的挑战
由于简洁性是主观体验,无法通过自动化工具量化评估。有效方法包括:
- 收集开发人员对代码的情感反馈(挫败感、恐惧感等)
- 通过代码评审和结对编程达成团队共识
- 建立模式识别机制,对公认复杂模式进行工具化管控
实践建议
- 明确代码所有权:为每个代码模块指定主动维护者
- 抵制时间压力:在合理范围内坚持正确实现方式
- 建立团队共识:通过协作开发统一简洁性标准
- 注重可读性:将“易于理解”作为代码审查的核心指标
最终记住:简洁性的本质是让代码更易于被人类理解和修改。每次技术决策都应围绕这一核心目标展开。
本文基于Max Kanat-Alexander对软件简洁性的深度思考,结合多年工程实践总结而成。