我们通常认为现代计算分为代码和数据。从功能上讲,当我们查看任何给定的应用程序时,这是有道理的。但是当我们看一个标准的微服务架构时,代码本身的广度和深度不仅仅是几个文本文件——它变成了自己的数据集。我们管理代码库的能力受到我们对它们的理解的限制,我们是时候使用为大数据构建的工具并将它们应用到大代码时代了。
最著名的大数据工具是搜索。搜索的力量可以节省宝贵的时间。 Sourcegraph 联合创始人兼首席技术官 Beyang Liu 在着手将其介绍给开发人员世界时就明白了这一点。他知道进入新公司和学习新代码库的痛苦。
理解不同人的意见和代码风格可能会让人不知所措,并且代码库会随着时间的推移以不可预测和令人困惑的方式增长。因此,Liu 构建了Sourcegraph ,这是一种帮助开发人员提高工作效率的工具。它本质上是一个代码搜索引擎。
有了大代码就是大数据的洞察力,我们可以利用知识图的力量来帮助我们搜索和理解世界上的任何代码库。
我最近与 Liu 谈到了他与 Sourcegraph 的旅程以及他的长期目标(要收听完整的对话,请收听开源数据播客)。
Sourcegraph是一种免费的开源技术,可让您在整个代码库中进行搜索。它的主要目标是帮助解决软件工程师工作中最重要的部分:理解现有代码。
它通过以下方式实现:
“对于大多数软件工程师来说,你工作中最重要的部分不是编写新代码。它是有意义的,并且理解所有已经存在的代码,”刘说。
Sourcegraph 有两个基本组件:搜索组件和全局参考图。
与大多数搜索引擎一样,Sourcegraph 的搜索组件接受查询并呈现最佳结果。假设开发人员正在特定存储库中查找待办事项。开发人员可以输入类似repo:facebook/react content:TODO
搜索查询,它将在指定目录中搜索任何待办事项。您可以 在此处查看搜索 Facebook React-native 存储库的真实示例。使这成为可能的关键技术之一是为搜索代码优化的索引格式。
2010 年,当他在 Google Apps 的后端团队担任工程实习生时,Liu 的灵感来自于他对Google 代码搜索的使用——这也是促使他采用索引格式的原因。引起他注意的另一件事是 Russ Cox 对 Google 内部代码搜索的初步实现以及 Han-Wen Nienhuys 以名为Zoekt的开源库的形式重新实现它的工作。
“这种体验的核心是这个代码搜索引擎,它为谷歌的所有代码编制索引,并使每个开发人员都可以访问它,无论你是实习生还是非常资深的 Jeff Dean 级工程师,”Liu 说。
全局参考图可帮助您了解代码库并执行“转到定义”和查找引用等功能,这需要映射整个代码库才能将您带到正确的位置。
Sourcegraph 使用一系列编译器库和开放协议来实现这一点,并且有自己的协议,例如 Source Lib 和SCIP ,它们更适合 Sourcegraph 的要求。
“这一切都是为了向这些使用编译器知识构建全局参考图的特定语言索引器提供这种与语言无关的接口,”刘说。
Sourcegraph 是在 Liu 毕业后在Palantir Technologies找到他的第一份工作时创立的。作为一名软件工程师开始一份新工作时,他遇到了每个人都遇到过的问题之一:
Liu 回忆说:“我直接进入了这个庞大而复杂的代码库,该代码库已经通过多个所有者。” “当时有点乱,我记得,在第一个月左右的月底,我回头问自己,‘我在这里取得了什么成就?我一直都在花时间试图理解这段代码中发生的事情,并弄清楚为什么它是这样写的。似乎我更多的工作只是探索现有代码并弄清楚我要添加的相对较小的部分如何适应更广泛的情况。”
Liu 在谷歌工作期间接触了一套内部开发人员工具,其中之一是谷歌代码搜索,它使谷歌的所有代码都可以访问。这段经历,加上在 Palantir 的入职痛苦,促使 Liu 创造了一些东西来帮助其他软件工程师避免同样的问题。
与 Liu 在 Palantir 的同事Quinn Slack的对话,关于创建通用代码搜索工具的对话变成了行动,SourceGraph 就是由此产生的。
2011 年,马克·安德森 (Marc Andreessen) 撰写了一篇关于软件如何吞噬世界的文章。这些标志无处不在:从您订购的食物到预订乘车服务,再到控制房屋的供暖。
但刘认为我们看到的只是冰山一角。他说,看懂代码会成为日常的事情。
他将其与识字能力进行了比较,他说:“我们曾经生活在一个只有极少数精英社会能够读写的世界,这限制了人类文明进步的程度。”
Liu 说,当代码为我们生活中的几乎所有事物提供支持时,理解它将成为一种普遍的需求。这种想法激发了 Liu 对构建 Sourcegraph 的热情。创建代码搜索引擎将使人们能够访问庞大的开源生态系统——所有这些都只需一个简单的搜索查询。
作者:Sam Ramji,DataStax
Sam Ramji 是 DataStax 的首席战略官。 Sam 在硅谷和西雅图技术领域拥有 25 年的经验,帮助建立了两个数十亿美元的市场(Apigee 的 API 管理和 BEA Systems 的企业服务总线),并重新定义了微软的开源和 Linux 战略,从“熄灭”到“拥抱” ”他热衷于开源、平台经济学、中间件和云计算,重点是开发人员体验和企业软件。
也在这里发布