码农修行:编写优雅代码的32条法则
上QQ阅读APP看书,第一时间看更新

第1章:可读性

如何提高代码的可读性是一个永恒的话题。

通常认为程序员需要具备较强的“数学”功底,毕竟要掌握各类算法和模式都需要很强的逻辑思维能力。然而在经历了一段工作时间后,我发现程序员的“语文”能力也同样重要。《重构》[1]一书就提出:唯有优秀的程序员才能够写出人类能理解的代码。软件的规模越来越大,一个系统通常需要几代程序员来开发维护。然而这些程序员们往往都素未谋面,只能“神交”于代码的字里行间。

提到可读性,其实涉及两个方面:一是作者的表达能力,二是读者的理解能力。比如我个人总认为自己在阅读文字时存在阅读障碍,然而阅读代码却较有心得。因为我很乐于去揣摩代码作者的意图,特别是在遇到一些很晦涩的代码时。

在实际工作中也经常听到一些程序员抱怨:这样的代码简直无法维护,还不如推倒重写。如果你也碰到这种情况,我想请你先思考,是自己的理解能力问题,还是原作者的表达能力问题?然后再决定下一步动作。同时我也总结了一条心得和读者分享:真正的高手不但要能写得出好代码,还要能驾驭得了“烂”代码。

我曾自我剖析造成阅读障碍的原因,主要是阅读量不够。我的确不爱读书,但我却读(调试)过很多开源软件代码。我接触的第一个开源软件叫SoX,它是一款Linux下的音频处理软件,支持多种音频格式。我花了很长时间去调试,不仅搞懂了它的框架和算法,还把其中一部分代码用到了自己开发的软件里。后来读了《设计模式》一书[2]才意识到,SoX实际上是用C语言实现了一个策略(strategy)模式来支持各种音频格式。

从语文的角度看,代码的文体应该属于说明文或记叙文,要着眼于把事情说清楚,而并非诗歌、散文或小说,文中存在着很多暗喻和伏笔,需要读者揣摩。本章主要讨论表达能力方面的问题,即:代码如何能清晰地表达作者的意图,让人易于理解。

图1-1 白居易画像

唐代大诗人白居易,史书评价其诗:“每成篇,必令其家老妪读之,问解则录。”意思是他每次写完诗,就会让家里的老婆婆读,老婆婆能读懂的话,才会编辑入册。