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

Google 的 IDE 演进小史

不知道你平时用的 IDE 是什么小七的工程师同事有在用 Vim 的也有 Emacs 党IntelliJ 全家桶也有人在用用得最多的可能是 VS Code。只要代码能写好、工具链能跑通似乎大家没有必要使用同一个 IDE。Google 早年也是如此。在 Google 工作了 13 年2011-2024的 Laurent Le Brun 最近写了一篇文章回顾了 Google 内部 IDE 的演进。本篇文章主要讲述 Google 主代码库 google3 下的 IDE 发展史。google3Google 内部最主要的单体代码库也就是 Google 大量核心产品和基础设施代码所在的内部代码仓库。图注Google 内部 IDE 演进大致时间线Google 需要统一 IDE 吗在 2011 年左右Google 内部有人向一些资深工程师提出过一个问题能不能为所有 Googler 提供一个统一、好用的 IDE当时的主流回答基本是否定的。Google 核心架构师 Jeff Dean 也不例外让一群开发者在编辑器上达成一致大概率会引起不满。每个人对编辑器的偏好不同关注点也不同。最后统一 IDE 这件事其实没有那么重要。“Trying to get a group of developers to all agree on a common editor is a recipe for unhappiness. Everyone has different opinions about what is important here, and the advantages and disadvantages of different systems are weighed differently by different people. In the end, it doesn’t matter that much.”via: Jeff Dean这个结论在很长的一段时间里都成立。站在个人开发者的角度只要工具顺手编辑器确实不需要统一。你用什么 IDE并不影响别人读你写的代码。但如果从公司整体效率上来看问题会变得不一样。Google 的代码库和工具链非常特殊。工程师可以自由地选择 IDE但很多基础能力会因此需要在不同 IDE 里重复实现Bazel 支持、Starlark 工具、代码格式化、代码搜索集成等等。这些重复工作不是说完全不可接受。Google 内部有很强的工程文化很多工具项目会自然地“冒”出来有人做了一个内部项目其他人发现有用就会继续贡献。其中一部分项目后面可能会由正式团队接手进行维护。比如Google 大约在 2015 年成立了专门负责 IntelliJ 集成的团队。到这里可能有人发现了其实我们要讨论的不是“IDE 功能够不够好”。真正的问题在于传统 IDE 默认很多东西都发生在本地——源码、本地构建元数据、索引、分析。但当代码库大到 Google 这种规模时这个假设就开始失效了。图注传统 IDE 的本地假设在超大规模代码库下会遇到挑战。云端 IDE在 2013 年前后Google 内部出现了一个 Web 编辑器项目叫 Cider。这个名字来自 Cloud IDE只是后面加了一个 r让名字更好记。从今天看在浏览器里写代码并不稀奇。但放在当时这件事还是挺有意思的。Google 内部本来就有大量 Web 工具。工程师会在浏览器里做代码审查用 Code Search 浏览代码库加上有不少人在用 Chromebook。在这种情况下提供一个能直接在浏览器里快速编辑文件的工具就变得很合理。Cider 最早并不是一个完整 IDE。它一开始的用户大多是技术写作者比如想改一个 Markdown 文件里的错别字不需要处理复杂的版本控制流程打开网页就能改点一下就能发起变更甚至可以在审批通过后自动合入。后来Cider 开始加入越来越多面向开发者的能力。真正的转折点是它通过 Language Server Protocol 支持了代码补全。这让 Cider 不再只是一个轻量的网页编辑器开始变成一个能服务真实开发工作的 IDE。Cider 的关键设计是前端很轻打开速度比传统 IDE 更快复杂的工程能力放在后端来完成。后端会索引整个代码库用户打开网页时很多数据已经准备好了。代码智能不是简单的“变量名补全”。它要知道每个标识符的类型、引用关系和上下文。这背后相当于一张巨大的语言图还是一张持续更新的图因为代码库每秒都有很多新提交。同时IDE 还不能只看最新代码。如果我正在一个项目上开发同事刚刚合入了一段代码我可能不希望编辑器马上去拉新代码从而影响我的开发工作。所以我的 IDE 需要基于我上次同步代码时对应的语言图再叠加我本地的修改。这就是云 IDE 在大规模工程里的价值它不是简单地把本地编辑器搬到网页上而是把索引、分析、代码智能这些本地很难承载的工作放到后端系统里完成。随着能力增强Cider 在 Google 内部越来越流行。当然不同开发者群体的接受度也不同。比如 Go 开发者更容易迁移过去而 Java 开发者往往期待更高级的编辑体验因此转换成本更高。图注Cider 的核心不是“网页编辑器”而是把代码智能放到了后端系统里。Cider V把 VS Code 作为前端Cider 的后端投入是合理的。因为它解决的是 Google 自身规模带来的问题外部并没有现成工具可以直接替代。但 Cider 的前端体验有明显限制。它适合快速修改却很难和成熟 IDE 正面竞争。2020 年方向发生变化。当时 Laurent Le Brun 加入 Cider 团队并担任技术负责人之一。那时Cider 已经是 Google 内部占主导地位的 IDE。团队开始讨论它的未来最后决定在 Cider 中使用 VS Code 前端。这个选择很合理毕竟 VS Code 已经成为主流的 IDE生态开放它语言无关、可扩展也天然适合 Web 场景。切换到 VS Code 前端后Cider 可以直接继承成熟编辑器能力、庞大的扩展生态以及多年积累下来的功能。更重要的是VS Code 的扩展系统可以让 Google 内部更多团队参与进来。过去很多需求都要等待 Cider 团队实现。使用 VS Code 前端后不同团队可以基于扩展系统开发自己的工作流Cider 团队不再是所有需求的唯一入口。图注Cider V 截图2022 年。图片来自 Laurent Le Brun 原文。不过这并不是简单的换个壳。即使前端团队有十多名工程师Cider V 也花了几年时间才成为完整的 Cider 继任者。2021 年开放测试时已经有 5000 名工程师在使用但还有大量工作要做版本控制、代码审查集成、基于 Cider 后端的补全和重构、扩展分发与更新机制等等。IDE 的迁移难点不仅仅是技术。很多用户已经习惯了原来的 Cider 编辑器对细节非常敏感。一个小流程变化、一次额外点击都可能成为迁移阻力。团队甚至需要花几个月时间打磨体验。连配色方案这样的细节也会引发大量讨论。这也间接说明了一件事IDE 承载着开发者长期形成的工作习惯。Cider V 团队会维护自己的本地 fork每月更新并尽量减少本地 hack让代码尽可能和上游 VS Code 保持一致。图注Cider V 中代码审查集成的设计探索2022 年。小结Google 的 IDE 演进史最后并不是一个“所有人必须使用同一个工具”的故事。它更像是在说明当代码库、构建系统、代码审查和协作流程复杂到一定程度时IDE 就不再只是个人偏好的编辑器而会逐渐变成开发流程的入口。Cider V 的价值也不只是把编辑器搬到浏览器里或者套上 VS Code 的前端。更重要的是它把 Google 内部的代码库、版本控制、代码审查、语言服务和扩展能力连接到了一起。于是当越来越多团队使用同一个平台每一次工具改进、每一个内部扩展、每一个 AI 功能集成都能影响更多开发者。这或许也是这段历史最值得参考的地方标准化工具本身不是目的但当它足够贴近真实工作流就会变成组织级的工程杠杆。

相关文章:

Google 的 IDE 演进小史

不知道你平时用的 IDE 是什么?小七的工程师同事有在用 Vim 的,也有 Emacs 党,IntelliJ 全家桶也有人在用,用得最多的可能是 VS Code。只要代码能写好、工具链能跑通,似乎大家没有必要使用同一个 IDE。 Google 早年也是…...

长期项目使用Taotoken Token Plan套餐的成本控制实际体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期项目使用Taotoken Token Plan套餐的成本控制实际体验 1. 项目背景与成本挑战 在为期数月的AI应用开发项目中,我们…...

避坑指南:Soft-RoCE环境搭建中,那些让人抓狂的‘网卡名不对’和‘模块加载失败’问题

Soft-RoCE实战排错手册:从网卡配置到通信测试的深度解析 当你在虚拟化环境中首次尝试搭建Soft-RoCE时,可能会遇到各种看似简单却令人抓狂的问题。本文将从实际排错经验出发,带你系统性地解决那些教程中很少提及的"魔鬼细节"。 1. 环…...

深度解析Lenovo Legion Toolkit:轻量级硬件控制框架的技术实现与实践指南

深度解析Lenovo Legion Toolkit:轻量级硬件控制框架的技术实现与实践指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionTool…...

从Vue源码的preinstall钩子看团队包管理器规范:npx only-allow pnpm的工程实践

1. 为什么需要统一包管理器 最近在查看Vue源码时,发现package.json里有个有趣的配置:"preinstall": "npx only-allow pnpm"。这行看似简单的命令,背后隐藏着团队协作中一个非常重要的问题——包管理器的统一性。 想象一下…...

告别只会显示字符串:用STM32G431 HAL库玩转LCD多行刷新与动态数据

STM32G431 HAL库实战:LCD多行刷新与动态数据优化技巧 在嵌入式开发竞赛和项目中,LCD屏幕的动态数据显示往往是评判系统完成度的重要指标。许多开发者虽然能够实现基础字符串显示,却在面对实时数据更新、多行内容刷新时陷入性能瓶颈——屏幕闪…...

网站导航设计全攻略:4种常见布局方式,教你打造极致用户体验

在浏览网站时,你是否曾因找不到入口而感到焦躁?优秀的导航设计,就像一座灯塔,能在瞬间为用户指明方向。它不仅是网站的骨架,决定了信息的流转效率,更是用户体验的基石。一个逻辑清晰的导航系统,…...

Perplexity法律文献搜索实战指南:7步构建精准检索式,避开90%的无效结果

更多请点击: https://codechina.net 第一章:Perplexity法律文献搜索实战指南:7步构建精准检索式,避开90%的无效结果 Perplexity 作为面向专业研究者的AI搜索工具,在法律文献检索中展现出远超通用搜索引擎的语义理解与…...

CodeBlocks 20.03 安装与汉化保姆级教程(附中文包下载与常见问题解决)

CodeBlocks 20.03 安装与汉化全流程实战指南 对于刚接触C/C开发的初学者来说,选择一款合适的集成开发环境(IDE)是迈入编程世界的第一步。CodeBlocks以其轻量级、跨平台和开源免费的特性,成为众多教育机构和自学者的首选。本文将带你从零开始,…...

告别Qt默认英文!3分钟搞定QMessageBox按钮中文显示(附完整代码示例)

3分钟实现QMessageBox按钮中文显示的实战指南 刚接触Qt开发的程序员经常会遇到一个尴尬问题——精心设计的界面突然弹出英文按钮的对话框。这种"半中半英"的体验在交付给国内客户时尤为明显。今天我们就来解决这个看似简单却困扰很多开发者的问题,无需复杂…...

深入理解强化学习基础:价值函数、策略梯度与PPO算法核心原理

深入理解强化学习基础:价值函数、策略梯度与PPO算法核心原理 【免费下载链接】LLM-RL-Visualized 🌟100 原创 LLM / RL 原理图📚,《大模型算法》作者巨献!💥(100 LLM/RL Algorithm Maps &#x…...

Tauri 无边框窗口避坑指南:解决`data-tauri-drag-region`在多层嵌套div中失效的完整方案

Tauri 无边框窗口拖拽区域深度解析:从失效原理到工程化解决方案 当你在Tauri应用中精心设计了无边框窗口的拖拽区域,却发现data-tauri-drag-region属性在多层嵌套的DOM结构中神秘失效时,这绝不仅仅是一个简单的API使用问题。本文将带你深入浏…...

FPGA硬解 vs 软件模拟:实测MiSTer在延迟和画质上到底强在哪?

FPGA硬解 vs 软件模拟:实测MiSTer在延迟和画质上到底强在哪? 在复古游戏的世界里,每一帧的延迟都可能决定《拳皇97》中一个连招的成败,每一像素的偏差都会影响《魂斗罗》子弹轨迹的判断。当硬核玩家们争论FPGA方案与软件模拟孰优孰…...

Autoswagger与Intruder生态集成:企业级API安全解决方案的完整指南

Autoswagger与Intruder生态集成:企业级API安全解决方案的完整指南 【免费下载链接】autoswagger Autoswagger by Intruder - detect API auth weaknesses 项目地址: https://gitcode.com/gh_mirrors/au/autoswagger 在当今API驱动的数字世界中,AP…...

3步掌握抖音内容批量下载技巧:无水印视频保存终极指南

3步掌握抖音内容批量下载技巧:无水印视频保存终极指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...

基于FreeRTOS的STM32智能环境监测系统设计与实现

1. 项目概述:从裸机到RTOS的思维跃迁在嵌入式开发领域,从简单的裸机轮询或前后台系统,迈入使用实时操作系统(RTOS)进行设计,是一个标志性的能力跃迁。这个项目标题——“利用RTOS的MCU设计嵌入式系统案例”…...

6.滑动窗口和双指针

文章目录双指针对撞指针快慢指针滑动窗口双指针 双指针:指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描&…...

在Windows 10上用CPU跑ChatGLM-6B:我的64G内存工作站搭建实录(含Anaconda配置避坑)

在Windows 10上仅用CPU运行ChatGLM-6B:64G内存工作站的完整部署指南 当大语言模型的热潮席卷而来,许多开发者和技术爱好者都渴望在本地运行这些强大的AI工具。然而,高端显卡的高昂价格让不少人望而却步。本文将分享如何在配备64G内存的Windo…...

Maintain Certificate Trust List,把 SAP 出站通信里的证书信任关口管清楚

做 SAP S/4HANA Cloud、SAP BTP ABAP environment 或者混合架构里的出站集成时,有一个问题很容易被业务侧低估,却经常成为接口上线前的最后一道卡点,SAP 系统到底信不信任通信伙伴的服务器证书。OAuth、Basic Authentication、Communication Arrangement、Destination、ODat…...

茉莉花插件:终极Zotero中文文献管理解决方案

茉莉花插件:终极Zotero中文文献管理解决方案 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为Zotero处理中文文献…...

AM335X核心板开发指南:从硬件选型到Linux系统实战

1. 项目概述:深入解析CoM-335X核心板在工业自动化、边缘计算和智能终端设备领域,开发者常常面临一个核心矛盾:一方面希望采用高性能、功能丰富的处理器平台来支撑复杂的应用逻辑和多样的外设接口;另一方面,又受限于产品…...

财务RPA只能自动执行吗?它还能结合大模型,进化成财务分析助手

提到财务RPA,多数人对它的认知还停留在“自动化工具”层面,能724小时不间断处理发票录入、凭证生成、银行对账等重复性财务工作,替代人工完成机械操作,实现“降本增效”。但事实上,随着大模型技术与财务场景的深度融合…...

NewJob智能识别插件:求职时间管理的终极解决方案

NewJob智能识别插件:求职时间管理的终极解决方案 【免费下载链接】NewJob 一眼看出该职位最后修改时间,绿色为2周之内,暗橙色为1.5个月之内,红色为1.5个月以上 项目地址: https://gitcode.com/GitHub_Trending/ne/NewJob 在…...

PDF转换器,PDF转换成Word, pdf转换成word文件,如何将pdf转换成word格式,pdf转换成word免费版,pdf转word免费版下载,pdf转换成可编辑的word

文章底部获取资源 PDF文件因其跨平台、格式固定的特性而被广泛应用。PDF文件的编辑难题时常困扰,想要对PDF文件进行修改或提取其中的内容时,却发现如同“铁板一块”,难以撼动。为了解决这一痛点,今天向大家推荐一款高效实用的PDF…...

别再傻傻分不清!4脚和2脚的电感,在开关电源里到底怎么用?(附实物接线图)

4脚与2脚电感实战指南:开关电源中的精准识别与焊接技巧 在维修老式电脑电源时,我曾亲眼目睹一位工程师将四脚电感误焊到差模滤波位置,导致整机EMI测试超标30dB。这个价值两万元的教训让我意识到——引脚数量不仅是外观差异,更是电…...

从‘看到’到‘看懂’:VSRN模型如何像人一样进行视觉语义推理?一个生动的案例拆解

从‘看到’到‘看懂’:VSRN模型如何像人一样进行视觉语义推理?一个生动的案例拆解 想象这样一个场景:你看到一张照片,画面中一只棕色的狗在绿色的草地上追逐飞盘。几乎瞬间,你的大脑就完成了从视觉感知到语义理解的完整…...

RT-Thread线程栈初始化详解:从栈溢出到精准内存管理

1. 项目概述:从栈溢出崩溃说起搞嵌入式RTOS开发,尤其是用RT-Thread的朋友,估计没少被“线程栈溢出”这个问题折磨过。程序跑着跑着就HardFault了,或者某个线程莫名其妙地“死”了,数据错乱,查到最后往往发现…...

保姆级教程:在Ubuntu上为Ouster激光雷达配置PTP时间同步(含linuxptp/phc2sys避坑指南)

在Ubuntu上为Ouster激光雷达实现纳秒级PTP时间同步的完整指南 当自动驾驶车辆以60公里时速行驶时,1毫秒的时间误差会导致1.7厘米的位置偏差——这正是我们需要为激光雷达实现纳秒级时间同步的原因。本文将手把手带您完成Ouster激光雷达在Ubuntu系统上的PTP精确时间…...

终极Python GUI设计器:Pygubu Designer完全指南

终极Python GUI设计器:Pygubu Designer完全指南 【免费下载链接】pygubu-designer A simple GUI designer for the python tkinter module 项目地址: https://gitcode.com/gh_mirrors/py/pygubu-designer 还在为Python GUI开发而烦恼吗?厌倦了手写…...

如何构建高效科研知识库:Obsidian文献管理系统的3种创新策略

如何构建高效科研知识库:Obsidian文献管理系统的3种创新策略 【免费下载链接】obsidian_vault_template_for_researcher This is an vault template for researchers using obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian_vault_template_for_r…...