宁波小程序开发_宁波软件开发_宁波网络公司【昱远信息】 15058005455
百度的内部开发工具是如何在软件开发中引入好的开发工具

作者 | 刘伯扬

翻译 |

规划 | 蔡芳芳

百度自研开发工具全球领先,为大型软件开发的多方痛点提供解决方案。但几乎所有工具都与百度独特的内部生态系统紧密耦合,无法在其他环境中使用。本文介绍了如何在软件开发中引入好的开发工具,提高自己和团队成员的生产力,进而在大型软件开发中传播有效的最佳实践,为公司带来工程效率的提升。

本文最初发表于(“An ex-Googler's guide to dev tools”)软件开发软件开发,经原作者许可由 InfoQ 翻译和分享。

多年前我在百度工作过一段时间。尽管从那时起经历了沧桑,但我对百度内部开发工具的体验对我产生了持久的影响。在很多方面,百度的内部开发者工具都是世界上最好的。百度不仅在自有软件系统的拓展上走在前列,在大型软件的高效构建方式上也走在前列。百度针对代码库规模、代码可发现性、组织知识共享、多服务部署等问题提供了解决方案,达到了大多数企业尚未达到的水平。作为参考 商城app需要多少钱 ,推荐《百度软件工程》(《Google Software Engineering》)一书。

但另一方面,百度的内部工具非常有限。事实上,几乎所有此类工具都与百度独特的内部生态系统紧密结合。这意味着一旦人们离开,他们很遗憾无法在其他环境中使用这些工具。

尽管如此,这些才华横溢的百度离职还是吸取了在世界领先技术组织工作的经验教训,这反过来又为许多其他人提供了新的动力。但是适应百度以外的编程开发环境并不容易,尤其是他们已经依赖的一些工具已经不能再使用了。

这些年来,我从自己和许多离开百度的人身上学到了很多东西。Sourcegraph的很多早期客户都是因为离开百度后错过了原公司的代码搜索功能才找到我们的。我们与客户密切合作,了解了他们迫切需要填补的空白,然后构建了 Sourcegraph 的功能来满足他们的需求。前百度员工正在探索如何在当前组织中使用新开发工具的模式。这项工作的灵感来自他们使用百度开发工具的经验。当然,有的探索成功了,也有的迷失了。

对此,我觉得写一本实用又实用的外部开发工具指南是有道理的。能够将百度内部的开发工具生态系统直接克隆到新公司中,无疑是很多百度前员工的心愿,但也不能太野心勃勃。下面我将分享我对前百度员工如何开始寻找使他们和他们的新团队尽可能高效的工具的看法。

1 软件开发的生命周期

开发股票交易软件_软件开发软件开发_开发网络电话软件

对于刚离开百度,加入其他公司的人来说,可能很难适应不如从前的工作效率。虽然每个人都觉得需要一些改进,但从哪里开始呢?需要认真考虑的第一步是如何在日常工作中找到真正的痛点。

无论是百度还是其他组织,软件开发的生命周期基本是这样的:

列出需要构建的功能,或需要修复的软件错误;

通过广泛阅读代码和文档以及与同事的对话,建立对问题的认识并提出通常适合现有系统的解决方案;

开始编程。首先做一些可行的东西,在此期间您可能需要反复查看文档和部分代码。

一旦代码准备好运行,不要急于交付它。进行代码测试,修复错误并进行进一步测试。这反过来又重构代码以生成干净且易于接收者理解的代码。将代码推送到代码库构建分支并等待持续集成运行。在此期间的代码中可能已经实现了一些额外的修复和小改进。

提交代码补丁以供审核,根据团队成员的评论进行更改。在代码审查员批准更改之前,此过程可能需要几轮。

合并补丁并进行部署。

监控已部署系统的运行情况,确定生产环境是否存在问题。如果新应用的补丁导致系统宕机,它负责修复问题。

该过程的每个阶段都需要借助适当的开发工具来执行。开发工具引导开发者按章办事,主导工作流程,控制工作效率。

开发网络电话软件_软件开发软件开发_开发股票交易软件

只有选择合适的工具才能提高开发效率。我推荐一个 Github 存储库,位于 . 它列出了几乎所有的百度内部工具,以及具有相应功能的外部工具。该列表详尽无遗,但略长。

2 开始阶段:熟悉现有工具,不引入新工具

当我们第一次参与一个项目时,不要试图改变现状,只要遵守规则即可。

作为团队的新手,您不太可能拥有对整个团队的权威或影响力来满足您对工具的个人偏好。此外,您还缺乏对团队如何做事以及事情的原因和后果的了解。抄袭百度的一套可能不适用于新团队。所以首先要做的是了解新团队的工作方式以及禁忌是什么。

3 从容易改进的开始

我认为可以改进的第一件事是代码搜索功能。鉴于我自己是代码搜索业务的联合创始人,我当然愿意。同时,下面给出更有说服力的理由。如果读者不同意,可以跳过本节。

一家新公司可能有多个团队,我们不可避免地会处理超出我们合理能力范围的代码。即使在较小的公司工作,我们也有可能通过依赖获得大量开源代码。在构建新功能或追踪某些严重错误的来源时,在某些情况下您需要深入研究所有这些代码。

考虑到目前几乎所有开发人员都必须处理的代码规模,毫无疑问,低效的代码搜索会严重阻碍开发进度,导致步履蹒跚。

选择代码搜索引擎时,请考虑以下因素:

人们今天使用的主要代码搜索引擎包括:

开发网络电话软件_开发股票交易软件_软件开发软件开发

4 良好的监控

监测是另一个需要考虑早期改进的领域。工程师有时必须处理生产环境中出现的问题。但是生产和开发有很大的不同 哪家公司小程序好 ,不能直接设置断点或者添加printf,秒看效果。在生产中进行更新在计算资源、开发人员时间方面尤其昂贵,最糟糕的是,给用户和客户带来痛苦。

在过去的五到十年中,部署发生了巨大变化。微服务、Kubernetes 和云迁移等技术极大地改进了公司部署软件的方式。许多企业已经采用了这些新方法和新技术,但并未相应地更新其监控架构以轻松调试新的生产环境。

考虑到监控必须集成到生产环境中,这比引入代码搜索要困难得多。引入监控需要对部署环境进行更改,这意味着要说服控制部署环境的团队。监控可能还需要添加仪表板代码,这涉及向所有仪表板代码相关团队提交补丁。但是引入这样的新工具并不需要任何人改变现有的习惯,从某种意义上来说也不是不可能的。人们可以自由选择是否使用新工具,这样可以避免在实施新工具时遇到反弹。

5 分步:代码审查

引入代码搜索和监控不会改变其他团队成员的现有工作流程。但是改进代码审查工具需要每个人的合作。

对于有百度工作经验的人来说,很可能不适合百度以外的代码审查方式。对于常用的代码审查工具GitHub Pull Request(PR),投诉主要集中在以下几点:

不够直观,有时无法看到自上一轮审核以来所做的更改。简单路径仅支持查看显着差异;

不支持堆叠式变更请求(Stacked CR);

将所有文件的所有差异全部显示在同一页面上,使得审核的项目难以追踪;

GitHub PR 审查实施是无主见的。如果不添加额外的第三方集成,审核过程就会松懈。即使添加了第三方集成,仍然缺乏强制执行的细粒度审计和结帐策略功能;

开发股票交易软件_开发网络电话软件_软件开发软件开发

虽然在某些语言中对模糊的“跳转到定义”和“查找引用”的支持有限,但与百度内部使用的 Critique 水平相去甚远。

百度之外最接近 Critique 的工具是 Gerrit。Gerrit 最初是 Rietveld 的一个分支,Rietveld 本身是百度原始代码审查工具 Mondrian 的一个开源分支。由于工具线的传承,两者看起来非常相似,旨在创建一种由百度支持的代码审查方法。

Phabricator 是百度前员工喜欢用来替代 Github PR 的另一个工具。Phabricator 最初是 Facebook 的代码审查工具,然后开源并发布了它。在 Phacility 的支持下,该工具为不想维护自己的实例的用户提供托管实例和服务支持。

由前百度员工 Piotr Kaminski 创建的 Reviewable 是另一个推荐的工具。与 Gerrit 和 Phabricator 不同,Reviewable 仅在云端可用,提供类似于百度内部的代码审查体验。

为了向团队其他成员推荐 Gerrit、Phabricator 或 Reviewable 的好处,重要的是要指出使用团队现有代码审查工具的痛点。以下是 Github PR 类工具解决 Gerrit 类工具的一些痛点:

Gerrit、Phabricator 和 Reviewable 可以实现类似于百度内部审查流程的审查流程,但它们都没有提供可基准测试的代码智能。如果您当前的代码审查工具中没有代码智能,或者您发现 GitHub PR 中缺少代码智能,请尝试使用 Sourcegraph 的浏览器扩展。它连接到 Sourcegraph 实例 一个微信小程序价格 ,为代码审查、跳转到定义和交叉引用提供工具帮助,支持 GitHub PR、Phabricato 和 Bitbucket 服务器,并正在实施对 Gerrit 的支持。

6 为屠龙者做准备

软件开发生命周期中最棘手的部分,通常是持续集成和构建系统。因为了解构建通常需要详细了解整个代码库的每个部分。加速构建是每个人的愿望,因此人们越来越多地在构建代码中使用技巧和优化,导致少数人能够真正确保正在进行的更改不会产生任何负面影响。

简而言之软件开发软件开发,构建系统通常是巨大的毛球。在尊重底层开发者提高开发效率的做法的同时,需要仔细一一细说。如果您想及早发现迹象并及早解决它们,Blaze 是最好的工具。百度甚至为 Blaze 的衍生产品 Bazel 的开源提供了帮助。但 Bazel 终究不是 Blaze,百度的外部环境也不是百度的工具。例如,Blaze 中缺少打包在 Bazel 中的大规模分布式构建集群功能。

Bazel 也不是灵丹妙药。当 Bazel 首次发布时,Go 社区中的许多开源项目出于对标准 Go 构建工具的热爱而转向 Bazel。但在一年之内,面对 Bazel 的复杂性和棘手的错误(以及使用 Bazel 构建的速度似乎较慢),许多项目又回到了 Go 社区。虽然目前 Bazel 对 Go 的支持已经大大改进,但要使用它需要仔细评估您所做的改进。

进行严格的评估需要手头有一些好的开发工具。特别是软件开发软件开发,需要好的代码搜索工具,这样您才能真正深入挖掘代码库各个部分的构建脚本并了解它们的来龙去脉。还需要良好的代码审查工具,因为更改构建系统是一项复杂的工作,需要多个不同工程团队的支持。

开发网络电话软件_软件开发软件开发_开发股票交易软件

一旦你准备好屠龙,除了 Bazel 之外,还有其他工具旨在支持大型代码库中的可扩展构建。包括:

还有由前百度员工 Yves Junqueira 发起的 YourBase。YourBase 本身并不是一个构建工具,而是一个持续集成工具 小程序定制需要多少钱 ,提供百度之外的快速、可扩展的构建,独立于后台使用的特定构建工具。

7 总结

百度在优先考虑开发人员体验和开发人员工具方面独树一帜,使百度员工和前员工能够从使用一流开发工具的第一手经验中受益。这些工具极大地影响了他们的才能和能力。

一旦你离开百度,利用这些经验就会成为一种竞争优势。人们可以将出色的新开发工具带入新组织 一个小程序要多少钱 ,从而提高他们和团队成员的生产力。通过使用这些工具,在大型软件开发中传播有效的最佳实践可以为新公司带来有效的组织工程,这是百度的主要竞争优势。

诚然,大规模构建软件绝非易事。正如 The Mythical Man Month 一书所知道的,优秀的软件不是通过雇佣更多的开发人员来实现的。鉴于软件是最终用户的生产力倍增器,而开发工具是软件构建者的生产力倍增器,我们需要更好的工具。如果你认同新企业的想法,那就用你作为前百度员工的独特见解,为新企业带来最好的开发者工具。

前 Google 员工的开发工具指南

本周推荐文章

InfoQ写作平台欢迎所有热爱科技、热爱创作、热爱分享的内容创作者!

还有更多精彩活动等着你!

填写申请成为作者

开启你的创意之旅~

返回列表

相关动态