`

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

阅读更多


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

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

     我是大错特错了。

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

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

1. 这是浪费时间!

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

2. 我是个艺术家!

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

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

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

4. 我善长制定编码规范!

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

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

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

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

分享到:
评论

相关推荐

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

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

    GoogleC++编程规范(中文版)汽车业C语言编程规范(中文版)

    在软件工程的海洋中,编程规范如同灯塔,引导着开发者避开潜在的风险,确保代码质量和团队合作的顺畅。本文将深入探讨两份重要的编程规范文档:《Google C++编程规范(中文版)》和《汽车业C语言编程规范(中文版)...

    google代码规范英文版pdf

    Google C++ 代码规范不仅是一套严格的规则集合,还是一种文化,它强调了代码的一致性、清晰性和可维护性。遵循这些规范可以帮助开发团队编写出高质量的软件产品。无论是对于个人开发者还是大型项目团队来说,理解和...

    Google Python代码规范

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

    Ant工程checkstyle编写(代码检测)

    Ant工程中的Checkstyle是一个强大的静态代码分析工具,用于检查Java源代码是否符合预定义的编码规范和最佳实践。本篇将详细介绍如何在Ant工程中配置和使用Checkstyle进行代码检测。 首先,我们需要理解Ant的基本...

    Google开源风格指南学习笔记-c++代码规范

    ### Google开源风格指南学习笔记——C++代码规范详解 #### 避免多重包含与使用前置声明 在C++开发中,避免多重包含是至关重要的,因为它可以减少编译时间并降低代码之间的依赖关系。当一个头文件被多次包含时,...

    Google C++编程规范中文版

    Google C++编程规范是一份详尽的文档,旨在指导开发人员编写高质量、可维护的C++代码。这份文档由Google内部多位资深工程师共同制定,是C++开发者的重要参考资料之一。 #### 二、正文 ##### 1. 头文件(Header ...

    google c++编码规范

    《Google C++ 编码规范》是由Google公司发布的,旨在帮助C++程序员编写符合Google工程实践的高质量代码。该规范详细介绍了C++编码的各种规则,包括头文件的使用、作用域、C++类设计、智能指针、命名约定、代码注释和...

    Google C++ 编程规范pdf

    Google C++ 编程规范是一套详细的规则和指导原则,旨在帮助开发者编写高质量、可维护且一致性的 C++ 代码。此规范由多位经验丰富的工程师制定,包括 Benjy Weinberger、Craig Silverstein、Gregory Eitzmann、Mark ...

    谷歌C++编程规范英文pdf版

    谷歌C++编程规范是软件工程界的标杆之作,它旨在规范使用C++语言的开发人员的编码习惯,减少代码错误,提升代码的可读性和可维护性。该规范涵盖了广泛的C++编程细节,包括文件结构、命名规则、注释风格、格式化指南...

    资料-开发部工程师工作指导及规范.zip

    在“资料-开发部工程师工作指导及规范.zip”这个压缩包中,主要包含了一份名为“资料-开发部工程师工作指导及规范.pdf”的文件。这份文件很可能是为了指导开发部工程师们进行有效、规范的工作而准备的。以下是根据这...

    项目文档管理规范模板

    项目文档管理规范是确保软件开发、工程实施或任何复杂项目顺利进行的关键环节。它定义了如何创建、存储、版本控制、审批、分发和废弃项目文档的规则和流程。以下是对这一主题的详细阐述: 一、文档管理的重要性 1....

    软件开发编码规范.pdf

    《软件开发编码规范》是软件工程领域中一个至关重要的文档,它为开发者提供了一套统一的编程标准,以确保代码的可读性、可维护性和团队协作效率。这份规范主要针对C#语言,但其核心理念可以应用于大多数编程语言。 ...

    软件工程理论与实践课件:第7章 程序的编写.ppt

    4. 遵循代码风格指南,如Google编码规范或PEP 8(Python语言的编码规范)。 5. 使用版本控制系统,如Git,进行代码管理,便于追踪更改和协同工作。 总的来说,软件工程中的程序编写不仅涉及技术层面,还关乎团队...

    初识软件工程

    它们可以帮助团队进行项目管理、代码编写、版本控制、测试和文档编制。例如,Microsoft Project 可用于项目计划,Git 用于版本控制,Jira 用于任务跟踪,JUnit 或 TestNG 用于自动化测试。选择合适的工具能显著提高...

    Searching for Build Debt: Experiences Managing Technical Debt at Google

    本文将探讨如何测量和偿还谷歌BUILD文件和相关无效代码中的技术债务,并解决依赖性规范、不可构建目标和不必要的命令行标志中的债务。 在谷歌,工程师们面临的技术债务主要是由于庞大的代码库和代码库的整体性导致...

    Matlab/Simulink模型到C/C++代码的自动实现(论文)

    - **生成代码**:执行代码生成命令,RTW将自动生成对应的C/C++源代码和头文件。 **1.4 后处理** - **代码审查**:对生成的代码进行审查,检查是否有语法错误或不符合编程规范的地方。 - **编译链接**:将生成的C/...

    软件工程思想(经典)

    编码阶段是将设计文档转化为可执行代码的过程。良好的编码规范和实践,如使用合适的命名约定、编写注释、遵循SOLID原则,都是软件质量的重要保证。C++和Java都有自己的编码标准,比如C++的MISRA和Java的Google编码...

Global site tag (gtag.js) - Google Analytics