整洁代码之上
Contents
什么是整洁代码(What Is Clean Code)
当你拿这个问题问不同的人,或采用不同的语气,你可能会得到不同的答案。但通常无外乎这些评判标准:
- 自解释的命名
- 一致的代码风格
- 合适的抽象
- 可读性良好
- 清晰的代码流程
- 良好的架构
- 复杂任务使用库实现
- 使用工业级的解决方案
- 没有安全漏洞
- 函数短小
- 函数复杂度小
不一而足,当然你也有自己评判整洁代码的标尺…
如何写出整洁的代码(How To Write Clean Code)
这是经久不衰的热议话题。我认为下面这幅画可以精辟地诠释如何写出整洁的代码:
当然这有一点无厘头,但这是真的。大部分程序员没有写出整洁代码的时间。就此我们无可奈何!
切换视角(Change The Premise)
我打算在这说点可能稍具争议、离经叛道的想法:
这里只有两种代码。一种具有商业价值,另一种没有!
在工业界,我们看中的是“漂亮”的代码,我们看好的是可读性好、行为正确的代码。但因为某些原因,我们从来没有谈论过代码必须要有商用价值。再整洁的代码没有商业价值也是“贱货”。
所以,我们把“具有商业价值”整合进整洁代码的评判标尺,我们得到四种代码:
良好的商业价值 | 贫乏的商业价值 | |
---|---|---|
整洁代码 | 出色的代码 | 坏代码 |
丑陋代码 | 良好的代码 | 垃圾代码 |
很明显使代码具有商业价值比使其“整洁”更划算。专注于“整洁”最多可以得到“坏代码”,而专注于"商业价值",则最差得到“良好的代码”..
所以,怎样才能专注于商业价值呢?
DIRTI方法(The DIRTI Method)
我靠写DIRTI1的代码来使代码专注于商业价值:
- Develop - 为解决某个(商业)问题而快速开发(Develop)出哪怕很烂的代码。不要担心代码格式、抽象及其他任何问题。就是要完成它。
- Isolate - 分离(Isolate)上一步实现的功能,整理出抽象模块。这些将成为重构的点。
- Refactor - 重构(Refactor)这些模块,开始整理代码。
- Test - 当这些模块整理合理后,开始写测试(Test)用例(单元测试)。
- Integrate - 一旦这些模块通过测试就可以把它们集成(Integrate)进你的程序(要有集成测试)。
妙的是,这一系列步骤假定你开始的时候并不知你的代码抽象的样子。但你一旦你开始写代码,它会逐渐帮助你明白你要解决的问题(方案)。
与TDD(测试驱动开发)截然不同的是,TDD期望你在你开始动手写代码前明白你要写的代码。
这确实会把我们带到一个美妙的境地。使用DIRTI方法会有两个主要的阶段:不停的DIR和不停的RTI。
当你最终明白方案之前,你将一遍遍的开发,分离,重构。而一旦顿悟以后,你将花费更多的时间到下一阶段(重构,测试,集成)。
为什么这有效(Why This Works)
为什么我坐在这里给你讲DIRTI方法?因为它行之有效。DIRTI方法确实会帮助你知道你要写的代码。它会帮助你指出要解决的问题。
更重要的是,它为你能做出英明决断提供力量和武器。你一定记得,具有商业价值的代码是好的代码。所以当你离开开发阶段,你的代码已经具有了商业价值,因为它已经可以解决最初要解决的问题。
整个进程是迭代的。你可以不停的分离、重构、分离、重构,直到你对代码满意。但这个过程中,你是在可以工作的代码上进行的。这非常酷!这样允许你责问自己,”是否代码已经足够好了“。一旦你对代码满意了,就进入下一阶段。
这会让你关注于最重要的东西:商业价值,而代码质量上的关注度是可以动态选择的。
不是方案,仅仅是工具(Not A Solution, A Tool)
必须要澄清的是:不是要你替换掉TDD、结对编程或其它你已经采用了的方法。DIRTI只会是你工具箱里的又一件工具。针对不同的问题要采用不同的工具:
如果你明白你要写的东西,那就用TDD。如果你仅仅知道问题,而不知解决方案(最佳),那就用DIRTI吧。
===================================================================================
图片来自:如何写出好代码
-
发音同Dirty ↩︎
License 知识共享署名 3.0 中国大陆许可协议