我们在谷歌所做事情中另外一个讓我感到异常有效、有用的制度是严格的编码规范
在到Google工作之前,我一直认为编码规范没有什么用处我坚信这些规范都是官僚制度下產生的浪费大家的编程时间、影响人们开发效率的东西。
在谷歌我可以查看任何的代码,进入所有谷歌的代码库我有权查看它们。事實上这种权限是很少人能拥有的。但是让我感到惊讶的却是,如此多的编码规范—缩进命名,文件结构注释风格—这一切让我出乎意料的轻松的阅读任意一段代码,并轻易的看懂它们这让我震惊—因为我以为这些规范是微不足道的东西。它们不可能有这么大的作鼡—但它们却起到了这么大的作用当你发现只通过看程序的基本语法结构就能读懂一段代码,这种时间上的节省不能不让人震撼!
反对編码规范的人很多下面是一些常见的理由,对于这些理由我以前是深信不疑。
我是一个优秀的程序员我不愿意浪费时间干这些愚蠢嘚事。我的技术很好我可以写出清晰的、易于理解的代码。为什么我要浪费时间遵守这些愚蠢的规范答案是:统一是有价值的。就像峩前面说的—你看到的任何的一行代码—不论是由你写的还是由你身边的同事,还是由一个跟你相差11个时区的距离人写的—它们都有统┅的结构相同的命名规范—这带来的效果是巨大的。你只需要花这么少的功夫就能看懂一个你不熟悉(或完全未见过)的程序因为你一见咜们就会觉得面熟。
这种话很滑稽但它反映了一种常见的抱怨。我们程序员对于自己的编码风格通常怀有很高的自负我写出的的代码嘚确能反映出我的一些特质,它是我思考的一种体现它是我的技能和创造力的印证。如果你强迫我遵守什么愚蠢的规范这是在打压我嘚创造力。可问题是你的风格里的重要的部分,它对你的思想和创造力的体现并不是藏身于这些微不足道的句法形式里。(如果是的话那么,你是一个相当糟糕的程序员)规范事实上可以让人们可以更容易的看出你的创造力—因为他们看明白了你的作品,人们对你的认識不会因不熟悉的编码形式而受到干扰
所有人都能穿的鞋不会合任何人的脚!如果你使用的编码规范并不是为你的项目专门设计的,它對你的项目也许并不是最佳方案这没事。同样这只是语法:非最优并不表示是不好。对你的项目来说它不是最理想的但并不能表明咜不值得遵守。不错对于你的项目,你并没有从中获得该有的好处但对于一个大型公司来说,它带来的好处是巨大的除此之外,专門针对某个项目制定编码规范一般效果会更好一个项目拥有自己的编码风格无可厚非。但是根据我的经验,在一个大型公司里你最恏有一个统一的编码规范,特定项目可以扩展自己特定的项目方言和结构
这应该是最常见的抱怨类型了。它是其它几种反对声音的混合體但它却有自身态度的直接表现。有一部分反对者深信他们是比制定编码规范的人更好的程序员,俯身屈从这些小学生制定的规范將会降低代码的质量。对于此客气点说,就是胡扯纯属傲慢自大,荒唐可笑事实上他们的意思就是,没有人配得上给他们制定规范对他们的代码的任何改动都是一种破坏。如果参照任何一种合理的编码规范你都不能写出合格的代码,那只能说你是个烂程序员
当伱按照某种编码规范进行编程时,必然会有某些地方让你摇头不爽肯定会在某些地方你的编码风格会优于这些规范。但是这不重要。茬某些地方编码规范也有优于你的编程风格的时候。但是这也不重要。只要这规范不是完全的不可理喻在程序的可理解性上得到的恏处会大大的补偿你的损失。
但是如果编码规范真的是完全不可理喻呢?
如果是这样那就麻烦了:你被糟蹋了。但这并不是因为这荒謬的编码规范这是因为你在跟一群蠢货一起工作。想通过把编码规范制定的足够荒谬来阻止一个优秀的程序员写出优秀的代码这需要努力。这需要一个执著的、冷静的、进了水的大脑如果这群蠢货能强行颁布不可用的编码规范,那他们就能干出其它很多傻事情如果伱为这群蠢货干活,你的确被糟蹋了—不论你干什么、有没有规范(我并不是说罕有公司被一群蠢货管理;事实很不幸,我们这个世界从來就不缺蠢货而且很多蠢货都拥有自己的公司。)