当前位置: 首页 > 科技观察

VSCode如此牛逼,再次印证了一句名言

时间:2023-03-15 21:00:16 科技观察

2011年,50岁的EricGamma从IBM跳槽到微软。那一年正好在IBM,正好是IBM百年庆典。当我看到这个消息时,我非常失望。这么大牛,《设计模式》的作者,JUnit的作者,EclipseJDT的架构师,程序员界的标杆人物,可惜IBM没留他。那时候Eclipse风头正劲,IDEA还没有现在这么火,EricGamma突然跳槽,还是挺让人费解的。后来才知道他加入了VisualStudio团队,从事在线开发者工具,就是让程序员在浏览器中写代码。这一次,50岁的EricGamma相当于放弃了之前的所有成就和荣誉,开始了新的事业。1.创业很多人可能不知道,EricGamma一直远离美国的IT中心,远在瑞士苏黎世,带领着一个小而强大的团队。(风景如画的苏黎世)他的小团队即将面临最大的问题:我们的产品是什么?如果没有产出,从哪里获得进一步的投资?资本就是这么现实。EricGamma再好,也离不开产品。他们的第一个产品是MonacoEditor,一个网络版的编辑器。该编辑器利用HTML5技术,支持语法高亮、智能提示。EricGamma还做出了一个重要决定:不使用任何UIFramework,尽可能靠近底层DOM。因为他认为成绩很重要,完全掌握自己的命运更重要。因此,MonacoEditor完全是从头开始逐行开发的。一切从头开始,嗯,好人就是好人。对于项目名称,老外似乎喜欢用地名,比如Monaco、Jakarta、Java。我在IBM的时候也遇到过他们。明明是电商系统,只好叫它意大利地名了。:塔斯科尼。如果有人知道为什么,请在下面发表评论。产品一出来,自然要找客户。Monaco的第一个客户是MicrosoftCloudAzure,此后它被嵌入到各种产品中。可以说,这家创业公司生存没有问题,接下来就是如何发展了。2.滑铁卢首战成功,胜利冲昏了团队的头脑:为什??么不把它做成WebIDE呢?把日常开发的内容全部搬到浏览器上。于是,他们把MonacoEditor改造成了MonacoWorkbench,换个词,一下子就高大上了。他们搭建本地服务器,开始吃自己的狗粮,使用MonacoWorkbench开发MonacoWorkbench。Monaco是用JavaScript编写的,而JavaScript是一种匆忙设计的语言,当代码库增长时,它的一些特性很容易让人抓狂。即使ErichGamma的团队编程水平再高,也会遇到动态语言的终极难题:动态时刻,重构火葬场。幸运的是,微软的另一位大师Anders创造了一种叫做TypeScript的语言,完美地解决了这个问题。(Anders的故事见《一个养活了四代程序员的男人?》。)从这张图可以看出,Monaco并没有重塑自己,而是逐步采用TypeScript。2013年,他们发布了VisualStudioOnlineMonaco(名字太长),具有代码浏览、Git集成、代码搜索等功能。界面和后来的VSCode很像。界面看起来很酷,但残酷的现实是该产品只有3000名月活跃用户。对于微软这样的巨头来说,产品用户数以亿计,着实有些尴尬。OnlineIDE,这样的产品概念在2013年可能太超前了。中间开发了一个有趣的东西,摩纳哥王国写信说他们不喜欢这个产品的名字(里面有他们的国名),然后ErichGamma和他们不得不添加引用VisualStudioOnline“摩纳哥”不是很奇怪,为什么你必须在程序员的产品中加上地名摩纳哥?不是叫做VisualStudioOnline吗?3.转折点ErichGamma的团队面临一个经典的创业挑战:如何实现十倍、百倍的用户增长?你从哪里获得用户?是继续花钱在程序员社区推广,还是转向其他方向?这个时候,大环境已经变了。新任CEO纳德拉上台,微软开始拥抱开源。为了吸引更多的程序员,微软的产品将从运行在Windows上转变为运行在跨平台上。ErichGamma看到了机会,也发现了一个新的用户群体:为Web开发而生的程序员。这个群体在开发的时候会用到很多语言,很多开发工具,很多不同的运行时环境,自然就有跨平台的需求。但是网络程序员更喜欢编辑器还是IDE?ErichGamma决定选择中间部分。网页版没人用,所以开发一个桌面版,但是从头开发成本太高了。幸运的是,有一种名为Electron的技术可以让JavaScript通过使用Node.js(作为后端)和Chromium的渲染引擎(作为前端)在桌面上运行。通过Electron的封装,将VisualStudioOnline“Monaco”的WebWorkbench改造成桌面“IDE”,并且是跨平台的。2015年5月,VSCode发布(终于没有地名了),团队做了一个很酷的demo:在Linux上调试.NET程序,一下子引起了轰动。VSCode从此进入了发展的快车道。4.创新取胜如果你就此打住,VSCode充其量只是一个更好的编辑器。想要俘获程序员的芳心,离不开一些干货。开源人群的呼声很高,微软和ErichGamma团队也顺势开源了VSCode。在放到GitHub上之前,团队仔细审查了代码并使其变得干净。不管是谁,都担心自己的代码会被喷。扩展大家在尝试了VSCode之后,提出的最大的建议就是:支持扩展和插件。这不就是ErichGamma擅长的吗!他从事Eclipse扩展工作已有10多年!但是Erich非常清楚扩展是一件好事,但它们也会伤害您,并且会严重降低您的IDE速度。有了之前的惨痛教训,团队决定扩展应该运行在一个独立的进程中(是不是让你想起了Chrome?)不会受到影响。LSPWeb开发通常使用多种语言,用JavaScript写前端,用Java写后端,可能用Python做一些脚本。有这么多语言,如何在编辑器中支持对它们的智能感知?例如:用户点击一个函数名,点击“GotoDefinition”,它应该跳转到函数定义。当用户将鼠标悬停在类名上时,应显示相关的定义和文档。……ErichGamma再次发挥大师级的抽象能力,将用户在编辑时最常用的操作进行抽象,比如打开文件、编辑文档、GotoDefinition等,定义了一套协议:LSP(语言服务器协议)。VSCode不需要了解语言的特性,也不需要考虑抽象语法树。它非常轻巧。编程语言不管是Java还是Python,都不需要考虑IDE。只要有相应的LanguageServer实现了这个协议,就可以和VSCode一起使用。交互代码。LSP协议在短短几年内取得了空前的成功,现在微软和社区已经有上百种实现,基本涵盖了所有主流编程语言。4、VSCodeRemoteVSCodeRemote允许程序员在远程环境(如虚拟机、容器)中打开一个VSCode工作区,然后使用本地VSCode连接工作。在这些创新特性的加持下,VSCode迅速攻城掠地,开始爆发式发展,成为开发者的必备神器。5、回归初衷,不要忘记ErichGamma最初的目标:在线开发者工具,让程序员在浏览器中编写代码。经过努力,我们终于可以回归初衷:浏览器中的VSCode由于VSCode良好的架构,更容易迁移到Web。主要变化是UI层。原本UI靠Electron,现在转向Web,代码需要再次重构,做一个抽象。比如以前有Electron的对话框,现在需要把Dialog抽象出来,给出HTMLDialog的实现。然而,程序员真的会适应纯Web编辑器和在浏览器中编程吗?可以在留言区讨论。这里有一些统计,大家可以看看,月活跃用户达到1400万,插件28k,LSPServers138。尤其是10万期,尤为耀眼震撼。真正的好产品,是不断打磨出来的。十年过去了,一个完整的社区已经形成,60岁的ErichGamma也成功创业了!6.小结看完这段历史,你可能会觉得ErichGamma牛逼到什么都能做。事实上,情况并非如此。在他离开IBM之前,他从事一个名为Jazz的项目。Jazz试图将团队协作,尤其是敏捷软件开发的过程,转移到IDE这样的开发工具中,并与代码无缝集成。恐怕IBM内部知道Jazz的人不多,这个项目也没有在业界引起太大的波澜。如果要总结的话,还是那句老话:幸运总是留给有能力、有准备的人。TypeScript、Electron、微软的转型,看似是VSCode的重要帮助和幸运,但没有最早的MonacoEditor,没有ErichGamma快速转型的勇气,没有后续的一系列创新,VSCode不可能直到今天。参考资料:本文大部分内容和图片来自ErichGamma的演讲:《VS Code an Overnight Success… 10 years in the making》https://www.youtube.com/watch?v=hilznKQij7A