当前位置: 首页 > news >正文

团队软件库_谷歌的软件工程文化:激发创造力、鼓励自主性

54633eff05d2ec1ca5fd78e26f0fc2f5.gif

作者丨Shaaron A Alvares

译者丨夏夜

谷歌进行了几项研究,以更好地理解经理和文化对团队绩效的影响。2008 年,他们发表了“氧气项目”的相关发现,并于 2018 年发表了一项后续研究。在 2008 年发现的 8 个最佳经理人行为中,他们发现了两种新的行为,它们是横跨整个谷歌的协作性和强有力的决策。

在 2019 年, Seth Richtsmeier 分享了一些对谷歌今日的成功产生了帮助的文化实践。这些文化实践包括,公司创造了这样一个环境,它鼓励人们的创造力和自主性,并建议透明性和跨职能协作,以加快信息共享和创新。

谷歌的软件工程师 Fergus Henderson 在 2017 年发表了一篇文章,描述了谷歌的软件工程实践,他认为这些实践对公司的成功和软件开发人员对该公司的喜欢程度做出了巨大贡献。Henderson 总结了关键的工程技术和实践,这些技术和实践广泛地在团队间共享,这些团队在谷歌内都经受住了时间的严格考验。

第一个关键实践是使用代码存储库:大多数开发人员的代码都存储在一个统一的源代码库中,所有软件工程师都可以访问这些源代码。写访问权限是受控制的,但是工程师可以访问任何代码并进行修改,只要这些修改可以获得代码所有者的批准就能够提交入库。当涉及到代码所有权时,存储库的每个子树都有一个列出了用户 ID 的文件。每个子树的所有者控制对该子树的写访问权,整个团队都列在所有者的文件中。

该构建基于一个名为 Blaze 的分布式系统,用于编译和链接软件以及运行测试。Blaze 为构建和测试整个代码库的软件提供了标准命令。这些标准实践允许工程师在代码库中快速、安全地构建和测试软件,并允许工程师轻松进行跨项目的更改。每次构建工作都分布在数百甚至数千台机器上,这可以快速构建非常大的程序或并行运行数千个测试。

软件工程师使用内部开发的基于 web 的工具执行代码审查。对主要源代码库的所有更改都需经由至少其他一位工程师进行评审。

软件重写每隔几年就会发生一次,这会消耗大量的资源,但它保证了公司快速适应市场需求和变化的能力。工程师重写代码以减少逐渐积累的遗留性代码和代码复杂性,并允许他们将自己的知识和代码所有权转移给新的团队成员。这些重写确保谷歌的代码基础是使用现代技术和工程实践编写的。

从文化上讲,工程师有权修复任何损坏的代码,不管产品边界如何,他们通过这个方式来确保他们的产品符合公司的最高质量标准。

同样在 2017 年发表的一篇文章中,曾于 2006 年至 2008 年在谷歌工作的 Edmond Lau 证实,谷歌传授着有价值的工程技术,这可以帮助工程师在职业生涯中取得成功,但他指出,大多数工程师都受限于开发和协调大型的、全球性的产品。工程师在迭代、确定优先级、做出产品决策、甚至采取行动或根据结果确定时间优先级方面的灵活性更低。

原文链接:

https://www.infoq.com/news/2019/09/google-software-engineering/

e44d17910eb0d0d0d1d69d2b90fc5e05.gif

点个在看少个 bug 👇

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ActiveBPEL引擎流程部署描述符(pdd)文件概述
  • 200 switching to ascii mode_上海某超市保安遭辞退怒砸200瓶红酒;香槟产区采收时间打破历史记录 | 酒界新闻...
  • ODM和OLAP实现时序预测(一)
  • 16进制 转为图片 php_ImageMagick(图片处理软件) 分享
  • 数据分析 超市条码_超市小程序做得比较好的功能点是什么?
  • ODM和OLAP实现时序预测(二)
  • 软件产品研发方向调研内容_研发部职能分解:调研,产品、技术、工艺、软件研发,测试、验收...
  • 网页像素测量工具_寓教于乐!11 个提升网页设计和前端开发技能的趣味游戏
  • ODM和OLAP实现时序预测(三)
  • asp 执行 exe_asp.net core 系列 18 web服务器实现
  • 搜索引擎登录,网站分类目录登录地址
  • python删除列表元素_Python去除列表中对应数量的元素(一一对应)
  • 基于Java Socket的文件UpLoad代码
  • python网络爬虫_Python网络爬虫实战(二)数据解析
  • 应用Executors来建立Thread pool
  • CAP理论的例子讲解
  • C语言笔记(第一章:C语言编程)
  • ES6 学习笔记(一)let,const和解构赋值
  • Flex布局到底解决了什么问题
  • Js基础——数据类型之Null和Undefined
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vue:响应原理
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 对象引论
  • 给初学者:JavaScript 中数组操作注意点
  • 构建二叉树进行数值数组的去重及优化
  • 警报:线上事故之CountDownLatch的威力
  • 理解在java “”i=i++;”所发生的事情
  • 前端工程化(Gulp、Webpack)-webpack
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 新版博客前端前瞻
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​一些不规范的GTID使用场景
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (三)模仿学习-Action数据的模仿
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)kafka实战——kafka源码编译启动
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)创业家杂志:UCWEB天使第一步
  • (转)大型网站的系统架构
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET8使用VS2022打包Docker镜像
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @EnableAsync和@Async开始异步任务支持
  • @Responsebody与@RequestBody
  • @Transactional类内部访问失效原因详解