推荐序
Visual Studio Code已经迎来了5周年的诞辰!在2015年4月29日的微软Build开发者大会上,微软宣布推出Visual Studio Code。自从Visual Studio Code第一个公开预览版本发布以来,这个轻量级的编辑器已经吸引了全球数以百万计的开发者。在很短的时间内,Visual Studio Code在全球范围内成了开发者们最喜爱的开发工具。如今,Visual Studio Code已经有了超过1 200万的月活用户,并且保持着持续增长的趋势。
从公司创立之初,微软就有为开发者服务的基因。微软创始人比尔·盖茨开发的第一款产品,就是运行在Altair计算机上的BASIC语言。历经数十年,微软一直致力于为广大开发者与开发团队打造最优秀和最具生产力的开发工具。微软的使命和愿景是帮助每一个人、每一个组织成就不凡。为了达成这一使命,我们希望助力全球每一位开发者,用先进的工具与平台帮助创新者去实现他们的创意,改变世界。
回想2015 年,我们非常幸运,因为有Erich Gamma来带领Visual Studio Code的开发团队。Erich 是经典书《设计模式:可复用面向对象软件的基础》的作者之一。在加盟微软之前,他领导开发了Eclipse平台上的Java Development Tools(JDT)项目。有Erich和微软Visual Studio领导层之间的强强联手,我们的团队对开发者的需求有了深度的了解。同时,从Visual Studio和Eclipse数十年的开发经验中,我们提炼了许多宝贵的经验与教训。
打造Visual Studio Code的开发团队不仅实力顶尖,还应用了现代化的开发模式。Visual Studio Code基于开源且跨平台的理念,按照每月发布的节奏来快速迭代产品开发,并且提供每日发布的Insider渠道。它拥有上万个插件,生态极为活跃和丰富。
更重要的是,Visual Studio Code是我们践行微软“顾客至上”文化的一个最佳榜样。Erich很好地拥护了“开发团队与用户零距离”的格言。整个Visual Studio Code开发团队持续地与用户沟通,基于他们的反馈来改进产品,并与社区紧密合作,在GitHub上建立了月度工作项目。
通过韩骏的这本书,我希望读者能学到更多Visual Studio Code的使用技巧。我们很乐意看到Visual Studio Code能继续成为你工作与生活的一部分,也希望本书能帮助有意愿学习编程的人成就不凡。
Happy Coding!
——微软开发平台事业部 全球资深副总裁 潘正磊(Julia Liuson)
序
那些年,我们一起追的Visual Studio Code(VS Code)
2015年,我25岁。Visual Studio(VS)是微软最重要的开发工具。开发者们还在期待Visual Studio 2015的到来。
那些年,组里的一个前端项目用的是AngularJS,组里购买了WebStorm的正版软件授权,大家纷纷表示很好用。
那一年,那些年。
我叫韩骏,本科同学都叫我韩总。我高中念的是北虹高级中学,本科念的是上海交通大学。2013年,我正式入职微软上海。故事,由此开始。
故事的另一位主角,是现居西雅图的VS Code团队核心成员吕鹏老师。早在2012年暑期,在微软实习时,我们就相识了。那时,我们的交集并不多。有幸的是,我们双双拿到了微软正式员工的Offer,便不再纠结于读研还是工作。2013年7月8日, 我和吕老师,还有其他几位小伙伴一起入职了。刚接触吕老师时,就觉他特别有灵性,往往有着超越常人的思路与见解。入职后,我们惊奇地发现,两个人的住所相隔如此之近,只有5分钟的步行距离。这,也许是天意。由此,我们开始了长达3年的微软10号班车之旅。我已经记不清10号班车换了多少位班车师傅,但不变的是,每天来回3小时路上我们都在。无数个3小时,我们都不会孤独,一路上,从C#、.NET、AugularJS再到后来的TypeScript、VS Code,我们无不讨论。(嗯,在此,要对10号班车上的所有同事说声抱歉,打扰到你们睡觉啦。)
2015年,我们有一个CMS系统的项目,而 visualstudio.com的内容也被放在这个系统上管理。某一天,我不经意间在测试网站上发现了一个VS Code的页面,描述里赫然写着它是一个跨平台的编辑器。当时已经临近举办微软最重要的开发者大会——Build大会,我的第一反应就是,这是一个重量级产品!我马上喊来吕老师一起看。吕老师仔细地看着那个页面,不等我们交流,从他看网页的那坚定的眼神中我就能知道,我们想的是一样的,这将会是一个Big News(大新闻)。果不其然,不久后的2015年4月29日,在Build大会上,微软宣布推出VS Code的第一个预览版本,众多开发者为之振奋,也有很多类似“VS 支持跨平台了”的标题党出现。我当然第一时间下载下来并体验了一下,第一印象是VS Code的速度是如此之快,而且对Git有着很好的支持。从那时起,我的主力编辑器就逐渐转向了VS Code。
在半年后的2015年11月18日,VS Code获得MIT License(MIT许可证)并在GitHub上开源,同时宣布将支持扩展功能。在10号班车上,吕老师和我谈到了VS Code的发展前途,并有给VS Code写插件的打算。到了2016年春节后,吕老师在班车上和我说,他正在写 Ruby 的插件,详细说了一下VS Code的插件机制。当时,VS Code的插件很少,很多语言的插件都是缺失的,为其开发插件可谓是一片真正的蓝海。大概过了一周,吕老师发布了他的Ruby插件。我不禁感叹吕老师的效率之高,他可以算是最早一批抓住VS Code机会的大佬之一。也正是凭借这个Ruby插件作为敲门砖,吕老师在那年成功入职高手云集的VS Code团队,开启人生赢家之路。其实关于Ruby插件还有一个小故事,当时除了吕老师,还有一位老外也在写Ruby插件。那时,那位老外被一个技术难点卡住了,还没等他解决那个难点,吕老师就以迅雷不及掩耳之势发布了Ruby插件。后来,吕老师也说服了那位老外一起来写这个已经发布的插件,避免重复工作。如果吕老师的Ruby插件再晚发布几天,也许就是另一种结果了。
到了2016年6月,吕老师已经开始准备去美国了。组里的另一位大佬同事也发布了REST Client插件,广受好评。那月,Erich Gamma(VS Code开发团队的总负责人、《设计模式:可复用面向对象软件的基础》作者之一、JUnit创建者之一 )来到微软上海,我也有幸亲眼见到了他。
我知道,我该行动了。这是一片即将变红的蓝海。以Fail Fast(快速失败)为指导思想,我在短短一个月的时间里接连发布了4款插件。没想到,这4款插件都广受用户的喜欢,特别是Code Runner,下载量从1万、10万,一直上升到现在的1 000万,是我开发的20多个插件中用户最喜欢的插件之一。
2016年下半年,吕老师远赴美国,而10号班车上只剩我“一个人”了。但是,我追逐VS Code的步伐并没有停止。正巧,部门那时开始做IoT的Developer Tooling,我马上想到要做一个VS Code的插件。可惜,当时做一个VS Code的IoT插件并没有被列为一个优先项目。但是,感谢微软的开放态度,我利用自己的个人时间开发了Azure IoT Toolkit,由于反响良好,一年后我把插件贡献出来,使Azure IoT Toolkit被升级为微软的官方插件。
到了2017年,IoT插件开发被正式提上议程,组里成立了专门的团队来开发Arduino插件。我虽然没有实际参与插件的开发,但在整个过程中提出了很多建议,在两次组内的Bug Bash中勇夺冠军。插件发布后受到了Arduino社区的很多好评,因此,我们部门也开始了VS Code插件开发的旅程,自行开发或合作开发的插件超过了20个,这些插件涉及的领域包括IoT、Java、Ansible、Terraform等。
2018年,我有幸在微软技术暨生态大会上做了一次演讲,主题是“从零开始开发一款属于你的Visual Studio Code插件”,把插件开发的经验带给更多的开发者朋友。
2019年,我对VS Code插件开发有了更深入的思考。仅凭我一个人写插件又能写多少呢,新的插件还比较好写,最耗费成本的其实是插件维护,现在的20个插件维护起来已经很累了,所以授人以鱼不如授人以渔,我开通了“玩转VS Code”微信公众号及知乎专栏,就是希望把VS Code的一些经验分享给更多的人,也希望有更多志同道合的朋友一起来玩转VS Code。整个2019年,我也在多场大会(PyCon、JSConf、.NET Conf、Google Developer Group、GitHub官方见面会、COSCon等)上进行了公开演讲,对VS Code进行布道。
2019年11月30日,又是一个特别值得纪念的日子!经历了长时间的筹备,VS Code中文社区终于成立了!
从一个普通的码农到VS Code插件的“产品设计师”,到VS Code的布道师,再到VS Code中文社区的创始人,我与VS Code一起成长。
不知道这些年来我对VS Code的追逐到底产生了多大的影响。但是,至少,我看到了一些变化。曾经,人们会把VS Code当成VS,以为VS跨平台了。如今,会有95后的同学反过来把VS当作VS Code:原来除了VS Code,居然还有个VS?曾经,面对新的项目,我们会问:为什么要做一个VS Code的插件?如今,面对新的项目,我们会问:为什么不做一个VS Code的插件?
微软的10号班车还在,很多当年一起入职的小伙伴却分散到了不同的地方:上海、苏州、无锡、西雅图。我依稀记得,在某个早晨的班车上,我和吕老师为了一个项目中的技术问题吵到面红耳赤,而到了中午依旧是80分游戏的最佳拍档;某天下班的路上,我们为了项目中的一个难以重现的Bug,在班车上打开笔记本一起来调试;某个晚上,我为了Code Runner中的一个Bug奋战到凌晨两点。那时,在班车上,我们还经常会拿着Surface RT,看Channel 9,看Design Spec,回邮件。
微软的10号班车还在,承载着我那时对技术的执着与热情,继续行驶在光明的大路上。
不忘初心,莫失初衷。不言放弃,追逐所爱。