程序员杨晓峰开始体会到一种前所未有的“快感”。
他所在的团队向 OpenJDK 国际开源社区主分支贡献的代码名列国内第一,受到了该开源社区的点名致谢,腾讯也成为迄今为止该社区唯一一家因显著贡献被连续点名致谢的中国公司,两位团队成员获得了社区 reviewer 权限。
迄今为止,在国内公司中有这种权限的程序员,不超过三人。
作为 Java 开发工具 JDK 的专家,杨晓峰的日常工作是普通人不太看得懂的基础软件研发。
2019 年秋,杨晓峰冲着“协同”二字入职腾讯,牵头 JDK 开源协同小组。简单说,开源协同就是腾讯内部源代码全部开放,不同团队协同开发,共建腾讯基础技术平台。
如今,他牵头的团队自主研发的 JDK 产品,不仅被公司内所有事业群使用,帮助多项大规模业务实现最高 50% 的性能提升,还被开源社区高度认可。
更让他开心的是,JDK 基础软件的研发已直接打通到面对客户的产品端。客户增长量、特别是主动寻求合作的客户增长超出了产品端的预期,甚至一向以要求严格的金融大客户,近期也开始在相关产品底层全面使用团队自主开发的 JDK 产品。
而这一切从 0 到 1 的变化,发生在短短三年时间内。
“被看见”
2018 年之前,很少有人意识到,腾讯内部的技术问题已经积累到了刻不容缓的程度。
熟悉腾讯的人知道,腾讯在产品上曾推崇“赛马文化”,服务各产品的技术团队也在自己“造轮子”、“建工厂”,最终导致内部烟囱林立,虽然单个产品技术团队闭环效率高,但整体难以形成技术合力。
2018 年,腾讯运营管理部在一次梳理中发现,公司内部重复的技术团队竟有 150 多个,在听到这个汇报时,就连腾讯的最高决策层总裁办都震惊了。以至于腾讯高级执行副总裁、技术工程事业群总裁卢山也发出感慨:“有一天,我们离开腾讯,回头看我们留下的东西,都是扎了一堆烟囱的残垣断壁,我们内心会不会痛啊?”
腾讯决心要蹚出一条自己的路。
2018 年 9 月 30 日,腾讯宣布新一轮战略升级和组织变革,同时发起开源协同,通过整合全公司技术能力,打破技术壁垒,消除重复建设。
和当时业界流行的技术中台不同,腾讯的开源协同是全公司内部源代码全部开放,上层设立技术委员会进行指导,底层推动各技术团队成立虚拟组织 Oteam(开源协同小组),协同开发公司级的技术产品——这让在腾讯工作的程序员们一下子有了被全公司“看见”的机会。
田甜是腾讯互动娱乐事业群(简称 IEG)做服务网格技术的一名程序员,当业务量增大时,需要更庞大的服务网格来避免资源重复浪费。为了做好服务网格,田甜试着发起了服务网格 Oteam,来找到公司里的“同行”一起协同。
“突然发现,同一个领域有好多人和自己在做相同的事,这种感觉很神奇。”田甜说。
在田甜看来,程序员大多个性低调,闷头做事,以前服务好本部门业务就行,现在有了 Oteam,程序员也要把目光投向外界。2019 年 10 月在服务网格 Oteam 每半年一次的线下沙龙上,田甜发现,另外一个事业群的同行最关注的是服务网格的安全性和稳定性,而不是 IEG 业务场景下最关心的技术架构。“这样的交流,拓宽了我们做服务网格技术的眼界和维度。”
随着公司内技术同行间不断的“网友见面”,技术交流的氛围逐渐热烈起来。Oteam 的企业微信群里,时不时会有人抛出技术问题,很快就有其它团队的程序员来解答。不过,当技术交流比以前多了,程序员们也不一定会彼此服气,毕竟腾讯程序员基数庞大,有不同看法甚至流派之争再正常不过。
纵观 tRPC 微服务框架 Oteam 的协同过程,也是一个“吵”的过程。但吵归吵,可以“关门、送饭”,“吵”个痛快,但事后必须有结果,出共识,“按手印”。争吵的获胜不是目的,对技术负责,增强全面认知、形成共识才是目的。腾讯程序员们“不再孤独”,也看到了山外有山,人外有人。
(tRPC Oteam 生态日)
田甜就对此深有感慨:“我们以前的思维还是局限的,用技术解决业务需求后就觉得自己很牛,但有 Oteam 后,和其它团队交流时就会发现,他们可能有更好的解决方案,通过交流和协作,不管是技术格局还是实操思路,都会上升一个 level。”
统一代码规范,就是程序员们的共识发展到一定程度后,自然而然达到的。
207 行共享表格
2019 年 11 月,腾讯代码规范 Oteam 正式成立,统一输出各大编程语言的代码规范,号召全公司的程序员都按照规范来写代码。
要知道,让程序员改变自己的代码风格是非常难的事情。
对于写代码这项相对内敛的工作来说,代码的写作习惯仿佛是程序员们给自己默默留下的印记,甚至是与生俱来的个性标签,坊间不乏关于代码“大神”写作习惯的各种传说。
但如果不同团队都把代码拿出来协同开发,问题就来了:代码习惯不统一会带来程序编码混乱,极大增加多人协作的成本。而腾讯曾延续多年的产品“赛马”机制,催生出许多业务相似的技术团队,这些团队恰恰各有各的代码习惯。
换句话说,即使腾讯内部源代码全部开放了,不同团队之间协同开发的效率还是会受到影响。
为了激发程序员们的动力,开源治理打榜赛应运而生。由代码规范 Oteam 和腾讯负责开源协同落地的技术工程事业群(简称 TEG)运营管理部共同主办,鼓励各大事业群的技术团队来打榜,较量代码规范度,比拼开源治理分数。
技术团队们的参赛热情完全超出了主办方的预期。姚穗斌是代码规范 Oteam 的创始成员之一,一度为程序员不愿意配合代码规范而烦恼,但这次他惊讶地看到,比赛公告刚贴出来没多久,就有 60 多个部门主动来打榜。
甚至有些参赛技术团队在企业微信中编写了“机器人”程序,每天提醒打榜赛的开源治理分数。
“一开始很多团队的代码得分不及格,打榜赛进行几个月后很多就蹿到了 90 多分,最后竟然有 10 多个部门都拿到 100 分,我们只好数到小数点后两位才评出冠军。”姚穗斌说。
(2020 年开源治理打榜赛颁奖现场)
打榜赛结束时,腾讯各事业群的开源治理平均分为 90.29 分。
而此前,在代码规范 Oteam 对全公司代码规范度的摸底调查统计中,各事业群的平均分仅 41.05 分,不及格。
姚穗斌认为,开源治理打榜赛彻底激发了程序员们参与代码规范的热情,一些原本不太关心代码规范的技术团队,在打榜赛中居然拿到了超高分数,“大家的胜负欲被点燃了”。
在主办方腾讯运营管理部总监徐海丽看来,开源治理打榜赛是开源协同“新代码文化”诸多工作的一个典型,它的价值在于帮助 Oteam 在公司内外打造技术影响力,帮助程序员们找到更多存在感和荣誉感。
“2019 年底开始,代码规范、开源治理逐渐成为我们推进开源协同落地的关键词,这说明我们的重点已经不再是追求 Oteam 数量,而是开源协同的质量。”徐海丽说,“开源协同走进深水区了。”
在腾讯代码规范 Oteam 最近一次成员招募中,许多参与者写出了近千字的申请说明,活跃度大大超出了代码规范 Oteam 评审委员的意料。
“原以为大家参与只是随便填一填,没想到热情这么高。”评审委员姚穗斌说。
参加招募的成员数量越来越多,腾讯文档的共享表格很快更新到 207“楼”。有志于推动公司代码规范的程序员们可以自主报名,只要按照共享表格内的要求逐一填入内容,通过评审后就能成为代码规范 Oteam 的一员。
一位参加申请的程序员在长文建议中的第一句话就写道:“必须让大家理解,好的程序员都是严格遵循代码规范的,不能以扼杀创造性为借口不执行!”
还一个腾讯研发的英雄本色
“山外有山”是压力也是动力。
2020 年 12 月 29 日,腾讯召开开源协同峰会,会上公布了各个 Oteam 整体进展的最新数据,成绩喜人。晚上酒会后,殷柱伟在 400 多人的 Oteam 企业微信群里发了一个大红包。
伴随着群里的沸腾,殷柱伟慷慨激昂地写道:“2021 年我们要还一个腾讯研发的英雄本色!”
(2020 年开源协同研讨会)
时任终端云测 Oteam 负责人的殷柱伟,自 Oteam 成立时就坚信,终端云测一定可以发展为公司级的技术项目。
“你的工具做得好,就会吸引越来越多的人来用,这背后其实不是说明技术有多牛,而是你在操盘公司级项目时就必须要负起责任,要对得起越来越多的用户,这是技术影响力和责任心的一种体现。”殷柱伟说。
弹指三年,Oteam 给了殷柱伟们一份漂亮的答卷。
2018 年开源协同宣布启动时,这项腾讯的“自我革命”因其与众不同的路径遭受内外双重质疑:互联网大厂基本上靠组织驱动建设技术中台,集中人、财、物、资源做一件事,而腾讯这种从基层开放协同的路子,行得通吗?
如今,腾讯已组建和孵化了 117 个开源协同小组,涵盖了计算、存储、数据等所有互联网技术基石,涉及了微信、QQ、腾讯云等所有腾讯核心业务板块。全公司内部代码开源率达到 85%,不仅给腾讯带来巨大的效能提升和成本节约,同时通过云不断助力越来越多的生态伙伴。
致力于大数据领域的天穹 Oteam,将各 BG 的大数据最佳实践复制到了各个场景,实现平台互通,功能复用,大幅提升了通用性能与资源利用率。
分布式数据库的内核 TXSQL Oteam 在 TXSQL 8.0 内核上开源协同,联合研发数十个重大特性,性能提升 30% 以上,并实现了腾讯内部数据库内核版本的统一。
聚焦深度学习框架和加速的云帆 Oteam,曾 2 次刷新 ImageNet 训练速度世界纪录,致力于打造腾讯人的 AI OS,助力游戏、视觉、推荐等 AI 业务降本增效。
(2021 云帆 Oteam 生态日)
在技术影响力的基础上,一些开源协同项目开始上云,通过腾讯云对外输出技术能力,与行业共享技术成果。Tencent JDK Oteam 则全面融入到公司的公有云和专有云产品中。
“Oteam 给了我们更大的空间。”腾讯代码规范 Oteam C++ 接口人、IEG 增长平台部增长中心系统开发组陈峰表示。
有了 Oteam 后,他主导的代码规范 Oteam C++ 团队就有了调动全公司资源的能力,进一步提升了产品能力,这样的成就感最终反过来反哺了参与人,形成正向循环。
在成立代码规范 Oteam 后,腾讯在一年内推动了 7 门编码语言的规范化。一位在代码规范领域工作多年的资深专家刚入职腾讯不久就对此发出了感叹:“腾讯在搞什么?一年对这么多门语言做规范化,简直不可能!”
但“不可能”的事情还是发生了,最新数据显示,截至目前代码规范 Oteam 已输出 C++、Java、Python 等 13 门语言代码规范,其中一期 7 门语言代码规范及安全规范已通过开源治理体系在全公司范围内落地。
当初听到代码规范专家的感叹时,姚穗斌虽然内心咯噔一下,但还是觉得腾讯是可以做到,最终事实证明他的判断是对的。
“腾讯确实有把不可能变成可能的能力。”十年程序员“老鹅”姚穗斌说。
激发了程序员这一最小技术单元的力量,就可以撬动研发效率的显著提升和研发效果的最大化。经过这不寻常的三年,腾讯这场实验可以说实现了“四两拨千斤”的作用。
而技术人的理想,正在其中闪闪发光。
腾讯 ThumbPlayer Oteam 之所以被冠名 Thumb,表面上看是“腾讯高性能通用媒体平台”的英文首字母缩写,背后却暗含着 Oteam 成员们对理想主义的向往——thumb 的中文意思是大拇指,Oteam 要做的不仅仅是一个播放器产品,而是要对标业界 No.1 的开源社区。
“希望每个成员都把加入这个 Oteam 和在这个 Oteam 做过贡献,视为自己职业履历中 No.1 的亮点。”ThumbPlayer Oteam 负责人、程序员李大龙说道。
评论