为什么谷歌要执行严格的代码编写规范

我们在谷歌所做事情中另外一个让我感到异常有效、有用的制度是严格的编码规范

  在到Google工作之前,我一直认为编码规范没有什么用处。我坚信这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率的东西。

  我是大错特错了。

  在谷歌,我可以查看任何的代码,进入所有谷歌的代码库,我有权查看它们。事实上,这种权限是很少人能拥有的。但是,让我感到惊讶的却是,如此多的编码规范—缩进,命名,文件结构,注释风格—这一切让我出乎意料的轻松的阅读任意一段代码,并轻易的看懂它们。这让我震惊—因为我以为这些规范是微不足道的东西。它们不可能有这么大的作用—但它们却起到了这么大的作用。当你发现只通过看程序的基本语法结构就能读懂一段代码,这种时间上的节省不能不让人震撼!

  反对编码规范的人很多,下面是一些常见的理由,对于这些理由,我以前是深信不疑。

  这是浪费时间!

  我是一个优秀的程序员,我不愿意浪费时间干这些愚蠢的事。我的技术很好,我可以写出清晰的、易于理解的代码。为什么我要浪费时间遵守这些愚蠢的规范?答案是:统一是有价值的。就像我前面说的—你看到的任何的一行代码—不论是由你写的,还是由你身边的同事,还是由一个跟你相差11个时区的距离人写的—它们都有统一的结构,相同的命名规范—这带来的效果是巨大的。你只需要花这么少的功夫就能看懂一个你不熟悉(或完全未见过)的程序,因为你一见它们就会觉得面熟。

  我是个艺术家!

  这种话很滑稽,但它反映了一种常见的抱怨。我们程序员对于自己的编码风格通常怀有很高的自负。我写出的的代码的确能反映出我的一些特质,它是我思考的一种体现。它是我的技能和 创造力的印证。如果你强迫我遵守什么愚蠢的规范,这是在打压我的创造力。可问题是,你的风格里的重要的部分,它对你的思想和创造力的体现,并不是藏身于这些微不足道的句法形式里。(如果是的话,那么,你是一个相当糟糕的程序员。)规范事实上可以让人们可以更容易的看出你的创造力—因为他们看明白了你的作品,人们对你的认识不会因不熟悉的编码形式而受到干扰。

  所有人都能穿的鞋不会合任何人的脚!

  如果你使用的编码规范并不是为你的项目专门设计的,它对你的项目也许并不是最佳方案。这 没事。同样,这只是语法:非最优并不表示是 不好。对你的项目来说它不是最理想的,但并不能表明它不值得遵守。不错,对于你的项目,你并没有从中获得该有的好处,但对于一个大型公司来说,它带来的好处是巨大的。除此之外,专门针对某个项目制定编码规范一般效果会更好。一个项目拥有自己的编码风格无可厚非。但是,根据我的经验,在一个大型公司里,你最好有一个统一的编码规范,特定项目可以扩展自己特定的项目方言和结构。

  我善长制定编码规范!

  这应该是最常见的抱怨类型了。它是其它几种反对声音的混合体,但它却有自身态度的直接表现。有一部分反对者深信,他们是比制定编码规范的人更好的程序员,俯身屈从这些小学生制定的规范,将会降低代码的质量。对于此,客气点说,就是胡扯。纯属傲慢自大,荒唐可笑。事实上他们的意思就是, 没有人配得上给他们制定规范,对他们的代码的任何改动都是一种破坏。如果参照任何一种合理的编码规范,你都不能写出合格的代码,那只能说你是个烂程序员。

  当你按照某种编码规范进行编程时,必然会有某些地方让你摇头不爽。肯定会在某些地方你的编码风格会优于这些规范。但是,这不重要。在某些地方,编码规范也有优于你的编程风格的时候。但是,这也不重要。只要这规范不是完全的不可理喻,在程序的可理解性上得到的好处会大大的补偿你的损失。

  但是,如果编码规范真的是完全不可理喻呢?

  如果是这样,那就麻烦了:你被糟蹋了。但这并不是因为这荒谬的编码规范。这是因为你在跟一群蠢货一起工作。想通过把编码规范制定的足够荒谬来阻止一个优秀的程序员写出优秀的代码,这需要努力。这需要一个执著的、冷静的、进了水的大脑。如果这群蠢货能强行颁布不可用的编码规范,那他们就能干出其它很多傻事情。如果你为这群蠢货干活,你的确被糟蹋了—不论你干什么、有没有规范。(我并不是说罕有公司被一群蠢货管理;事实很不幸,我们这个世界从来就不缺蠢货,而且很多蠢货都拥有自己的公司。)

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-04 07:42:17

为什么谷歌要执行严格的代码编写规范的相关文章

J2EE项目代码编写规范分享_java

码编写规范目的:能够在编码过程中实现规范化,为以后的程序开发中养成良好的行为习惯. 代码编写规范使用范围:J2EE项目开发. 包命名规范: 目的:包的命名规范应当体现出项目资源良好的划分 servlet类所在包命名规范:公司名称.开发组名称.项目名称.web.servlet 例如:net.linkcn.web.servlet 自定义标签类所在包命名规范:公司名称.开发组名称.项目名称.web.tags 例如:net.linkcn.web.tags 过滤器类所在包命名规范:公司名称.开发组名称.项

J2EE项目代码编写规范

问题描述 来源:http://bbs.diybl.com/54/20090603/272.html代码编写规范目的:能够在编码过程中实现规范化,为以后的程序开发中养成良好的行为习惯.代码编写规范使用范围:J2EE项目开发.包命名规范:目的:包的命名规范应当体现出项目资源良好的划分servlet类所在包命名规范:公司名称.开发组名称.项目名称.web.servlet例如:net.linkcn.web.servlet自定义标签类所在包命名规范:公司名称.开发组名称.项目名称.web.tags例如:n

PHP网站代码编写规范

PHP网站代码编写规范 一. 变量命名 a) 所有字母都使用小写 b) 首字母根据变量值类型指定 i. 整数i ii. 浮点数f iii. 字符串s iv. 布尔值b v. 数组a vi. 对象o vii. 资源r viii. 混合类型m c) 使用'_'作为每一个词的分界 例如: $i_age_max = 10; $f_price = 22.5; $s_name ='harry'; $b_flag = true; $a_price = array(); $o_object = new clas

ASP.NET的9条代码编写规范

写了这么久程序代码了,发现很多人的代码很不规范.尤其在几个人协作开发一个项目的时候,有些 人写的类名.变量名.方法等令人根本看不懂,可能会弄的整个项目都没法组合完成.自认为我的写的代 码已经很不错了,至少能够见名知意.不过,看完这9条后我觉得我还得进一步学习学习了... 1.局部变量的名称要有意义,尽量用对应的英文命名,比如"用户姓名"变量,不要用aa bb cc等来 命名,而要使用userName. 2.不要使用单个字母的变量,如i.n.x等.而要使用index.temp等.用于循环

ASP.NET代码编写规范

1.局部变量的名称要有意义,尽量用对应的英文命名,比如"用户姓名"变量,不要用aa bb cc等来命名,而要使用userName. 2.不要使用单个字母的变量,如i.n.x等.而要使用index.temp等.用于循环迭代的变量例外. 3.应该使用Pascal命名法命名方法名.属性名.类名和命名空间,且方法的命名一般将其命名为动宾短语,如 ◆ShowDialog(); ◆CreateFile(); ◆GetPath(); 4.用Camel命名法命名局部变量和方法的参数. 以上几条综合举例

PHP开发网站代码编写规范

一. 变量命名 a) 所有字母都使用小写 b) 首字母根据变量值类型指定 i. 整数i ii. 浮点数f iii. 字符串s iv. 布尔值b v. 数组a vi. 对象o vii. 资源r viii. 混合类型m c) 使用'_'作为每一个词的分界 例如: $i_age_max = 10; $f_price = 22.5; $s_name ='harry'; $b_flag = true; $a_price = array(); $o_object = new class(); $r_file

JavaScript的代码编写格式规范指南_基础知识

对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 JavaScript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注. 本文浅谈 JavaScript 编程中关

JavaScript脚本编写规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 JavaScript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注.  本文浅谈 JavaScript 编程中

研发周报:神奇!1KB JavaScript代码编写的3D蜜蜂

研发周报:神奇!1KB JavaScript代码编写的3D蜜蜂 发表于2013-03-29 13:43| 次阅读| 来源CSDN| 0 条评论| 作者张红月 研发周报JavaScriptPatrick Wyatt游戏开发第三方应用开放平台开源Polycode 摘要:忙碌的一周总算过去,闲暇时不妨来细细品味我们精心为你呈现的这份技术大餐.本期热点:神奇!1KB JavaScript代码编写的3D蜜蜂:魔兽之父专访:今年游戏产业会出现 一场革命:回顾:那些被平台方封杀的第三方应用. 我们挑选了本周研