Python,是微软公司未来云业务体系的重要组成部分,属于服务与团队支持工作中需要使用的基础语言之一,同时更是公司快速增长的数据科学与分析领域内最受欢迎的语言选项。然而,Python早期在微软公司显然没有获得与其重要地位相符的盛名。
2010年,微软内部开始有几位Python支持者,但他们一直低调,以防有人注意到他们已经有权限为自己的项目分配开发人员。虽然这支队伍还不大,也不新,主要来自以往的工作,但其仍受到微软公司企业文化中“并非原创”问题的影响:Python是一种属于他人的语言,因此微软对其并不感兴趣。
转眼过去八年以来,情况出现了戏剧性的转变。如今,微软的众多产品都开始支持 Python,一些最新产品甚至只支持 Python,部分关键工具也是用 Python 编写的,微软正积极投资于 Python 语言及相关社区。
我从2011年开始在微软公司工作,有幸参与了多个重要的Python项目,并与多支团队合作其它项目。最近一段时间,我转而为微软公司贡献力量,旨在帮助微软建立自己的Python储备,同时通过与技术社区合作,使每个人都能更好地使用Python语言。
## Visual Studio中的Python
在正式加入微软公司之前,我在澳大利亚读研究生。当时我已经是个Visual Studio粉丝加 Python 开发者,我也很高兴看到2010年发布的Python Tools for Visual Studio(简称PTVS)。当时,运行在.NET环境之上的 Python 版本 IronPython 已经被交付至社区,另有一支由 Dino Viehland 和 Shahrokh Mortazavi 带队的小组负责将Python支持引入微软公司的各款产品当中。经常与法务团队进行为期数个月的协商,PTVS最终发布在CodePlex(微软的前开源托管服务)上,并开始接受外部贡献。
作为一名 Python 开发人员,我很高兴率先体验了 PTVS 的初始版本,并上报了一些无法正常起效的内容,包括解决其中存在的部分问题。经过一个月左右的跟进,该团队经理问我是否有兴趣以暑期实习生的身份到微软工作。一年之后,我正式成为微软公司的全职员工。
由于我们的团队拥有最为丰厚的 Python 知识储备,因此我们自然成为了微软 Azure 的Python支持主力。初始版本的 Azure SDK for Python 就是由我们这支队伍开发完成,目前团队已经有五名成员。随着 Python 越来越重要,我们得以转型为一支专门的 Python 负责团队。通过对该 SDK 的持续贡献,我们很快发现并吸纳了 Laurent Mazuel 加入。这里需要强调的是,这套 SDK 已经成为 Azure 管理 SDK 获得成功的关键所在——其协调着100多项 Azure 服务,并克服了将其构建为整体连贯库中出现的种种挑战!
接下来的几年里,我们亲眼见证自己的项目在用户总量与实用性方面不断提升。每一次新版本的发布,都会引起人们在各类社交媒体平台(如Twitter、Reddit以及Hacker News等等)自发地热烈讨论,包括不少同事在内,很多人仍然不相信微软公司实际上已经开始向Python张开怀抱。我在一位开发人员隔壁的办公室工作了半年之后,这位开发人员才意识到,微软居然拥有我们这样一支 Python 专项团队。
我们工程师团队每年都会参加各种大大小小的Python会议,展示并讨论我们的工具。我们在微软内部还属于那种“小不点”,因此得不到营销团队的协助——为了解决问题,一切规划、人员配备、装修乃至展位运营工作都得由工程师来完成。有时候,我们会为了一场活动到处奔波(例如在最后一分钟,冲到打印店,快速打印出更好的标志;或者在附近的杂货店买巧克力,以作为活动伴手礼)。正是这样的经历,让我们感到自己就像是大型企业内部的小小初创公司!
![微软的Python情结:悄然推进的技术变革](https://upload-images.jianshu.io/upload_images/18599748-caa2998a2427de6a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
微软的Python情结:悄然推进的技术变革
*图: PyCon 2014美国大会上的微软展台*
长久以来,微软公司内外都认为 PTVS 只是一个社区项目,而没有意识到我们都是实实在在的微软员工。但这种误解慢慢开始发生转变,特别是在我们找到负责 visualstudio.com 网站的营销人员,要求其在主页的语言清单中插入“Python”一项时。不出所料,这引起了不少人的关注,但同时也是最好的自我宣传方式。从那时起,我们被越来越多地视为“官方”力量。
下一个转折点出现在我们被添加至 Visual Studio 2015 安装程序时。此版本包含一个经过改进的“自定义”页面,页面内简化了核心选项并添加了众多“外部”组件。就是在这里,用户第一次获得了官方Python支持,而无需下载任何其它安装程序。
![微软的Python情结:悄然推进的技术变革](https://upload-images.jianshu.io/upload_images/18599748-154246d7ca90711b?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
微软的Python情结:悄然推进的技术变革
*图:Visual Studio 2015的安装程序当中,首次包含Python Tools forVisual Studio*
随着我们用户数量的持续飙升,我们团队也获得越来越多的关注。我们作为微软公司的 Python 力量,终于正式进入公众视野!PTVS项目迁移到了目前的 GitHub 主页上,Python SDK for Azure的受欢迎程度远超预期,而已经落实的一切工作,不知不觉掀起了一轮真正的文化变革。
## 我的Python贡献之旅
与此同时,在PyCon 2015美国大会上,我志愿参与到Python on Windows的支持工作中来——这个项目得到了大家的积极认可,而在与法务团队进行了多次交流之后,我很快成为微软支持下的CPython项目的核心成员。
在Python 3.5版本,我对Python进行了移植,从其使用微软 Visual C++ 2010 编译器与运行到更新至最新版本——其中包括对我们专门对 CPython 打造的 C Runtime 进行针对性调整(例如_set_thread_local_invalid_parameter_handler() 函数)。此外,我还重写了安装程序,修复了用户安装机制并将其变更为正确的安全安装目录。最后,我负责构建 python.org 网站上提供的所有 Windows 版本 Python。
![微软的Python情结:悄然推进的技术变革](https://upload-images.jianshu.io/upload_images/18599748-8b07cca06b3a2a31?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
微软的Python情结:悄然推进的技术变革
*图:旧有Python安装程序与Python 3.5版本中的新安装程序*
时至今日,微软公司已经拥有五名核心 CPython 提交者,而我们所有成员都有充裕的时间为该项目做贡献。我们致力于改善项目的兼容性、注册机制、设计漂亮的新图标、JIT执行hook以及更多正在推进中的其它新成果。身为微软公司的全职员工,我们能够获得远超纯粹志愿者的优势——包括拥有自己的项目,同时更透彻地了解问题与场景,再加上拥有良好薪酬的开发投入,我们得以对Python社区投入热情并产生积极影响。
## 关注文化层面的转变
当人们问起关于Python的发展进度时,我们能够以公司的企业文化变革作为回应,而非直接做出干瘪乏味的描述。我们认为,这一重大胜利的里程碑之一正是跨平台Azure CLI项目。该项目最初是使用Node.js编写的,但其团队随后发现,要维护规模如此庞大的命令行工具正变得越来越困难。在研究替代性方案时,他们就Python支持一事向我们征求了意见。
**整个对话过程大致如下:**
* CLI 团队: “我们并不真正了解Python,但看起来Python对于可扩展命令行工具来说似乎是个不错的选择。”
* Python团队: “是啊,应该没问题。?”
* CLI: “你们能不能帮我们建立起基础结构?几条命令就够了,然后告诉我们该如何保留登录状态与配置文件?或者说怎样实现本地化?”
* Python: “当然,我们非常乐意。”
* CLI: “那要构建起我们能够试用的成果,大概需要几周时间?”
* Python: “放心,礼拜三就能准备好。”
虽然明显带有惊讶甚至是怀疑的情绪,但CLI团队仍然接受了我们的提议,而我负责为他们整理出一套展示样本。Azure CLI团队决定采用这一方案,并将其转变为世界上规模最大的Python命令行应用程序。如今,Knack已经成为适用于高性能大规模命令行应用程序的Python框架,能够处理数千条命令与选项,同时亦可支持参数补全、提示、可扩展性以及配置文件等等。
![微软的Python情结:悄然推进的技术变革](https://upload-images.jianshu.io/upload_images/18599748-a5099654b79142ef?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
微软的Python情结:悄然推进的技术变革
*图:微软公司海报上展示的 Python 日活动*
虽然我们一直很清楚,Python在微软公司内部的受欢迎程度远超大家的想象,但后来发生的一件事还是彻底震撼到了我们。2014年年末,我们组织了一场公司内部的“Python日”活动,邀请了一些知名员工,预定了一个能够容纳100人的会议室,并在办公室周围张贴了海报。同事们的反响极为热烈,这迫使我们不得不在活动当天将组织地点转移到微软主园区最大的会议厅内,甚至还面向全球各地的其它办事处进行现场直播!总而言之,超过1000人参加或观看了此次活动,约占微软公司总员工数量的1%(包括工程、财务、人力资源与法务人员——各个部门都有参与其中)。
![微软的Python情结:悄然推进的技术变革](https://upload-images.jianshu.io/upload_images/18599748-baf5cd509988df6f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
微软的Python情结:悄然推进的技术变革
*图:Visual Studio 2017安装程序中提供的Python工作负载*
大概在同一时间,Visual Studio 2017的安装程序也在经历全新设计升级。这项工作初期,我们这支小团队就受邀加入其中——不仅负责扩展性工作,同时也参与了实实在在的内置功能创建。然而,我们仍然将自己的工作成果公布在 GitHub 之上,并帮助计算出多种其它 Visual Studio 组件需要的模型。PTVS是最早的开源 Visual Studio 功能之一,而如今其后继者已经包含Roslyn(C#与Visual Basic编译器)、MSBuild以及Visual F#等等。
![微软的Python情结:悄然推进的技术变革](https://upload-images.jianshu.io/upload_images/18599748-ffc34fe24fe49717?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
微软的Python情结:悄然推进的技术变革
我们还采用了由社区构建的 Visual Studio Code 扩展,雇用该扩展的开发者 Don Jayamanne,并邀请他以全职形式与其他开发人员共同工作。由于这个项目始于开源形式,因此其必须始终保持这种状态,而我们的官方GitHub库也明确显示我们立足原始版本进行了分叉。
在PyCon 2019美国大会上,我们将第三次以核心赞助商的身份出席,与五年前不同的是,这一次我们将带来设计合理的展台以及大量演示内容,我们将讨论我们对Python的高度依赖、如何为Python做出贡献,并将致力于支持每一位使用Python的用户。
## 不再悄然推进
回顾2011年,彼时微软的 Python 发展计划确实只能算是悄然推进。但在2018年,我们对 Python 成果感到无比自豪,我们在自己的开发者工具(例如Visual Studio与Visual Studio Code)当中提供支持,在 Azure Notebooks 中进行托管,并利用 Python 构建起 Azure CLI 等最终用户体验。我们聘请了五位核心CPython开发者以及众多其他贡献者,通过 NumFOCUS 以及 PyData 等项目积极支持数据科学的开源导向,亦在定期赞助、主办并参与世界各地召开的 Python 活动。
虽然我不敢说自己亲历了过去八年内微软公司在Python领域的一切进展,但可以肯定的是,我很荣幸能够成为这波历史潮流的参与者,并努力帮助微软在开源社区当中成为一名不断进步的好成员。