有一次在code review的时候,一个应届毕业生问我,代码为什么需要可读性。我和他讲代码的美感和优雅、可维护性、可测试性,他却说那有什么用,只要能跑起来,能够实现功能,不就是好代码么?我不能否认这一点,但只能实现功能的代码绝对称不上好代码,就像没杀过人的人就是好人,你觉得对么?也有人和我争论说,我写的是代码,实现的是逻辑,如果我敲键盘之前还要想想起个什么变量名比较好,那会大大降低我的效率。
之前,我并不是很清楚如何反驳他们。很多时候我对代码的感觉还停留在直觉层面,应该这么写,而不应该那么写,很多时候我都说不清楚为什么。但我很高兴能够读到了这本书,作者们在书中从理论上解答了我的困惑。
可读性 == 可测试性 == 代码质量 == 代码优雅 == ……
他们之间其实是等价的。
从这本书来说,或者说从可读性的角度来说,增强可读性的终极目标只有一个:降低他人理解这段代码所需的时间。其实这个等式中的其他几项,也都是对这个终极目标的另一种表达而已。为什么?因为在这么一本不到200页的小书之中,他们都出现了。代码中的变量名和格式可以帮助我们发现bug,用自然语言描述代码也能帮助我们发现bug,提高可读性可以封装代码提高可测试性,提高可读性可以重构代码使之变得更加清晰。可读性和可靠代码的其他优良品质有着千丝万缕的联系。
不给五星是因为我看的是译本,翻译的还算流畅,但是也有让我想说WTF的地方:
1、中文段落开头不空两格?WTF?
2、章节的开头一定要浪费一页纸么?WTF?
3、几处明显的翻译问题:
a) 114页最上面一行:“处理Javascript浏览器中的cookie”,原文是"Dealing with browser cookies in Javascript",应该译为“使用Javascript处理浏览器中的cookie”
b) 124页两个代码段中间:“有时有些值谁不知道是什么”。WTF?这tm是啥意思?原文是"sometimes those values were missing altogether",应该译为“有时候这些值根本就不存在”
c) 128页的第一段整体翻译的就很不通顺,尤其是“因为这样其他只是没有你这么渊博的人才可以理解它”,根本就不知所云了,WTF?原文是"so that someone less knowledgeable can understand",应该译为“这可以帮助水平不如你的人理解它。”
诚如书中所说,衡量代码质量的一个简单标准就是你在读代码的过程中说了多少次WTF,书也一样。好在这些翻译问题都不在很关键的地方,没有破坏这本书的价值。
有空我还希望看看《Clean Code》。不知道那本书的作者对代码质量有着怎样的理解,不过无论如何,代码质量都是程序员永恒的追求。