腾讯程序员的三年历程:挑战与成长

发表时间: 2021-10-22 20:10

2018年开源协同宣布启动时,这项腾讯的“自我革命”因其与众不同的路径遭受内外双重质疑:互联网大厂基本上靠组织驱动建设技术中台,集中人、财、物、资源做一件事,而腾讯这种从基层开放协同的路子,行得通吗?

三年过去,腾讯已组建和孵化了117个开源协同小组,涵盖了计算、存储、数据等所有互联网技术基石,涉及了微信、QQ、腾讯云等所有核心业务板块。全公司内部代码开源率达到85%,不仅给腾讯带来巨大的效能提升和成本节约,同时通过云不断助力越来越多的生态伙伴。



文 / 陈其亮


程序员杨晓峰开始体会到一种前所未有的“快感”。


他所在的团队向Open JDK国际开源社区主分支贡献的代码名列国内第一,受到了后者的点名致谢,腾讯也成为迄今为止这个社区唯一一家因显著贡献被连续点名致谢的中国公司。


两位团队成员还获得了社区reviewer权限。迄今为止,在国内公司中有这种权限的程序员,不超过三人。



作为Java(一种计算机编程语言开发工具JDK(Java开发工具包)的专家,杨晓峰的日常工作是普通人不太看得懂的基础软件研发。


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的协同过程,也是一个“吵”的过程。吵归吵,可以“关门、送饭”,“吵”个痛快,但事后必须有结果,出共识,“按手印”。争吵的获胜不是目的,对技术负责,增强全面认知、形成共识的才是目的。腾讯程序员们“不再孤独”,也看到了山外有山,人外有人。


▲tPRC 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 C++接口人、IEG增长平台部增长中心系统开发组陈峰表示。


有了Oteam后,他主导的代码规范Oteam C++团队就具备调动全公司资源的能力,进一步提升了产品能力,这样的成就感最终反过来反哺参与人,形成正向循环。


在腾讯代码规范Oteam最近一次成员招募中,许多参与者写出了近千字的申请说明,活跃度大大超出了Oteam评审委员的意料。


“原以为大家参与只是随便填一填,没想到热情这么高。”评审委员姚穗斌说。


参加招募的成员数量越来越多,腾讯文档的共享表格很快更新到207“楼”。有志于推动公司代码规范的程序员们可以自主报名,只要按照共享表格内的要求逐一填入内容,通过评审后就能成为Oteam的一员。


一位参加申请的程序员在长文建议中的第一句话就写道:“必须让大家理解,好的程序员都是严格遵循代码规范的,不能以扼杀创造性为借口不执行!”


最新数据显示,截至目前,代码规范Oteam已输出C++、Java、Python等13门语言代码规范,其中一期7门语言代码规范及安全规范已通过开源治理体系在全公司范围内落地。



“英雄本色”


程序员们通过Oteam发现了“山外有山”,这是压力也是动力。


2020年12月29日,腾讯举办开源协同峰会,会上公布了各个Oteam整体进展的最新数据。晚上酒会后,时任终端云测Oteam负责人殷柱伟在400多人的Oteam企业微信群里发了一个大红包。


伴随着群里的沸腾,殷柱伟写道:“2021年我们要还一个腾讯研发的英雄本色!”自Oteam成立时就坚信,自己的终端云测一定可以发展为公司级的技术项目。


不过,Oteam给了殷柱伟们一条这样追寻“英雄本色”的路径。


▲2020年开源协同研讨会


2018年开源协同宣布启动时,这项腾讯的“自我革命”因其与众不同的路径遭受内外双重质疑:互联网大厂基本上靠组织驱动建设技术中台,集中人、财、物、资源做一件事,而腾讯这种从基层开放协同的路子,行得通吗?


但三年过去,腾讯已组建和孵化了117个开源协同小组,涵盖了计算、存储、数据等所有互联网技术基石,涉及了微信、QQ、腾讯云等所有核心业务板块。全公司内部代码开源率达到85%,不仅给腾讯带来巨大的效能提升和成本节约,同时通过云不断助力越来越多的生态伙伴。


致力于大数据领域的天穹Oteam,将各事业群的大数据最佳实践复制到了各个场景,实现平台互通,功能复用,大幅提升了通用性能与资源利用率。


分布式数据库的内核TXSQL Oteam在 TXSQL 8.0内核上开源协同,联合研发数十个重大特性,性能提升30%以上,并实现腾讯数据库内核版本的统一。


聚焦深度学习框架和加速的云帆Oteam,曾2次刷新ImageNet(一个大型视觉数据库,用于视觉目标识别软件研究)训练速度世界纪录,致力于打造腾讯人的AI OS,助力游戏、视觉、推荐等AI业务降本增效。


▲2021年云帆Oteam生态日


在技术影响力的基础上,一些开源协同项目开始上云,通过腾讯云对外输出技术能力,与行业共享技术成果。Tencent JDK Oteam 则全面融入到公司的公有云和专有云产品中。


激发程序员这一最小技术单元的力量,就可以撬动研发效率的显著提升和研发效果的最大化。经过这不寻常的三年,腾讯这场实验可以说实现了“四两拨千斤”的作用。


而技术人的理想,正在其中逐渐照进现实。


腾讯ThumbPlayer Oteam之所以被冠名Thumb,表面上看是“腾讯高性能通用媒体平台”的英文首字母缩写,背后却暗含着Oteam成员们对理想主义的向往——thumb的中文意思是大拇指,Oteam要做的不仅仅是一个播放器产品,而是要对标业界No.1的开源社区。


希望每个成员都把加入这个Oteam和在这个Oteam做过贡献,视为自己职业履历中No.1的亮点。”ThumbPlayer Oteam负责人、程序员李大龙说道。



(专题)