`

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

阅读更多

本篇是谷歌是如何做代码审查的的续篇。

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

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

我是大错特错了。

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

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

这是浪费时间!

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

我是个艺术家!

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

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

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

我善长制定编码规范!

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

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

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

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

英文原文:Stuff Everyone Should Do (part 2): Coding Standards

译文链接:http://www.vaikan.com/google-coding-standards/

分享到:
评论

相关推荐

    为什么谷歌要执行严格的代码编写规范 - 文章 - 伯乐在线1

    【谷歌执行严格代码编写规范的原因】 谷歌作为全球领先的科技公司,其在软件开发过程中执行严格的代码编写规范,这一做法有着深远的意义。代码规范是确保代码质量、可读性、可维护性和团队协作效率的重要手段。以下...

    google cpp 开发规范指南

    ### Google C++ 开发规范指南知识点解析 #### 一、头文件规范 - **自包含头文件**:每个头文件应包含...以上内容涵盖了Google C++开发规范指南中的主要知识点,遵循这些指导原则有助于编写高质量、可维护的C++代码。

    google 谷歌 java样式规范

    标题中提到的“Google 谷歌 java样式规范”直接说明了文档的性质和用途,即为Java编程语言中的源代码编写提供Google官方的编码标准。这一点对于任何参与Google项目或者希望自己的代码风格与Google一致的开发者来说都...

    Google Java 编程规范(中文版).pdf

    通过遵循Google Java编程规范,开发人员可以编写出更加规范、一致且易于维护的代码。这些规范不仅涵盖了编码格式和样式方面的要求,还涉及到了一些最佳实践和约定,这对于构建高质量的软件系统至关重要。

    谷歌C++代码规范

    ### 谷歌C++代码规范详解 #### 一、概述 C++作为一种广泛应用的编程语言,在软件开发中扮演着重要角色。...以上是谷歌C++代码规范的主要知识点,遵循这些规范有助于编写高质量、可读性强、易于维护的C++代码。

    易语言调用GoogleV8引擎执行JS

    Google V8 引擎使用 C++ 代码编写,实现了 ECMAScript 规范的第五版,可以运行在所有的主流操作系统中,甚至可以运行在移动终端 ( 基于 ARM 的处理器,如 HTC G7 等 )。V8 最早被开发用以嵌入到 Google 的开源浏览器...

    Google C++ Style Guide(谷歌C++编码规范 )

    **cpplint**:谷歌提供了一个名为`cpplint`的工具,用于检查代码是否符合编码规范。 #### 四、其他C++ Features(其他C++特性) ##### 1. **Reference Arguments**:引用参数可以避免不必要的拷贝操作,提高性能...

    Google Python代码规范

    ### Google Python代码规范详解 #### 一、背景介绍 Google Python代码规范是Google内部用于指导Python编程的标准之一,旨在提高代码质量与可读性。该规范由多名资深工程师共同维护,包括Amit Patel、Antoine ...

    谷歌c++代码规范

    谷歌作为全球领先的科技公司之一,在其内部采用了一套详细的C++代码规范,这套规范旨在提升代码质量,确保所有开发者能够编写出一致且高质量的代码。 ### 二、关键知识点详解 #### 1. `#define` 的保护 - **定义*...

    Google JavaScript 编码规范指南

    ### Google JavaScript 编码规范指南解析 #### 一、概览与重要性 Google的JavaScript编码规范指南,...通过遵循这些规范,开发者可以编写出更健壮、高效且易于维护的代码,从而促进项目的长期发展和个人技能的成长。

    Google C++编程规范(pdf 英文)

    这套规范旨在提高代码的质量、可读性和可维护性,同时也为开发者提供了一套通用的指导原则。本篇文章将详细解读这份文档中的各个部分,并对其中的关键知识点进行深入分析。 #### 二、核心知识点详解 ##### 2.1 ...

    谷歌Java开发规范.rar

    《谷歌Java开发规范》是Google公司为Java开发者提供的一套详尽且权威的编码指导原则,旨在提升代码质量,提高团队协作效率,并降低维护成本。这份规范不仅关注语法层面的约定,更注重代码的可读性、可维护性和可扩展...

    Javascript代码检视规范

    关于代码风格,可以参考Airbnb或Google等知名公司提供的JavaScript编码规范。这些规范通常包含对缩进、空格、括号放置等方面的指导,比如使用2个空格作为缩进,函数参数之间和操作符周围添加空格等。 为了自动化...

    Google代码规范(C++)<中文>

    ### Google C++代码规范详解 #### 一、头文件 **1. #define的保护** 在C++中,为了防止同一个头文件被多次包含导致重复定义的问题,通常会在头文件的开头和结尾处使用`#ifndef`/`#define`/`#endif`这样的预处理器...

    谷歌C++编码规范

    谷歌C++编码规范建议内联函数体不应超过10行代码,并且要特别注意析构函数,因为它们往往比预期的要长。同样,包含循环或switch语句的函数通常不适合内联。即便函数被声明为内联,编译器也不一定会执行内联操作,...

Global site tag (gtag.js) - Google Analytics