我在腾讯和阿里的见闻

4,216 阅读7分钟

前言

  前一段时间,在程序员朋友圈有一篇比较火的文章《当下(2018 年)腾讯的技术建设是否处于落后同体量公司的状态?》,很多朋友把链接发给我并询问我是不是事实,我跟他们说大部分都是事实,朋友们都很觉得不可思议。其实这个问题下的其他高赞回答我很早就看过了,就我所在的腾讯部门来看,大部分回答并非虚构、捏造和抹黑。从腾讯跳槽到阿里也快八个月了,八个月时间不算长,但已经足够体会腾讯与阿里之间的差异。虽然网上不乏介绍腾讯与阿里不同之处(包括文化、薪资待遇、公司氛围和技术建设等方面)的文章,但是我还是想写下自己的感受。所以以下都是我个人的观点,不免具有一定的片面性,不喜勿喷。

关于腾讯

  腾讯整体上是一家公司,但很多时候各个部门之间各自为政。部门之间的合作更像一个公司与另一个公司之间的合作,在沟通的时候如果不是负责人不能向对方透露任何跟工作有关的细节、进度等。在腾讯某部门的时候由于此还吃过几次亏,以至于来到阿里之后跨部门间合作总是战战兢兢,生怕说错、做错了什么。后来才发现,在阿里大部分情况下都不需要考虑这些。部门之间的合作就是公司内部的合作,就这样我才慢慢晃过神来。

  微信想必大家都知道,其实当初腾讯做微信这个产品的时候并不是只有广州微信团队在做。成都也有团队在做,当时是谁先做好、谁先推广就能活下去。最后当然是广州的微信做成了,另一个类似“微信”的产品就只能死掉了。

  还有之前吃鸡游戏比较火的时候。腾讯一下推出了两款吃鸡手游:光子工作室的刺激战场和天美工作室的全军出击来进行瓜分市场。这样的例子还有很多,就我所在的腾讯某部门的一个核心安全产品在公司内都存在竞争对手。可能这就是腾讯的文化,一个个好的产品就这样被竞争、打磨出来了。都说百度的技术、阿里的运营和腾讯的产品,也不是没有道理的。

关于阿里

  而阿里就完全不一样了,来阿里某 BU 的第一个月。师兄带着我做一款新的产品,产品的功能需要自己去摸索。主管只指定了大的方向,对我们的唯一要求就是不要做别人/别组/别BU已经做过的东西、一定要善于使用公司已有的平台给自己的产品赋能。可见阿里内部更注重合作和创新,同样的事绝不做两遍。

  在腾讯,正是因为隔离和竞争,所以各个部门之间的交流、合作和共享就很少,特别是在技术方面,每个部门闭门造车,没有或很少有积累,这也是导致腾讯在技术建设方面落后的主因。就我这几个月的亲身体会而言,阿里的技术建设要比腾讯好很多。所以来到阿里后,我常常对那些喊苦的同事说,在阿里上班够幸福了,只需要专心的写业务代码,不用关心一些杂七杂八的破事。

两者对比

  腾讯更像是在一家创业公司,一个应用从开始到结束所涉及到的所有流程都需要开发参与,包括申请服务器、搭建环境、安装 DB、部署和运维等。也就是说开发要做的事往往包括开发、测试和运维。常常让人叫苦不迭,给我最大的感受就是很忙,但是不知道在忙什么。 当然在阿里也是有这些流程的,但很多时候只需要在页面上点一点就了。这极大的节省了开发的时间、运维的成本和出错的概率。这主要得益于阿里的技术建设的完善,我举两个简单的例子来说明下腾讯和阿里在技术建设方面的差异就更能直观感受两者之间的差异了:

1、统一 DB 管理平台

  在腾讯某部门的时候,应用要使用 DB 大部分情况下只能在 linux 服务器上自己搭建 mysql 环境,使用本地 DB。然后很多操作都是在 linux shell中进行 CRUD 操作,非常的原始。最痛苦的是对 DB 的运维,出了问题还得自己背锅。在阿里某 BU 的时候,新建应用直接上公司内部平台申请下就好了,而且会自动分配给你两套(测试和正式)。所有的操作都是在页面上,DB 也不需要自己去运维了。读写都做了很好的权限控制,根本不怕误操作。

2、统一配置中心

  很多应用中的变量都需要在配置文件中进行配置,在腾讯某部门的时候都是以文件的形式和应用一起部署。配置文件的读写都是应用自己实现的,当然这个已经有封装好的库了。但是如果要修改配置文件呢?得手动修改后重启应用,其运维成本可想而知。而在阿里有整个公司公用的统一配置中心中间件:Diamond,其简单易用。使用的时候在页面上修改下,点发布就会自动热更新到应用下,不用重启、不容易出错。

  可以说阿里在开发、测试、运维和部署等流程都已经有着很成熟的方案和平台了,而腾讯还在使用比较原始的方式。以上两例只是腾讯与阿里在技术建设差距上的一瞥,其他很多方面不想赘述。至于具体原因,知乎上的回答已经有了很好的阐述。所以说平台化、流程化和标准化是多么重要。腾讯每个部门都有自己的一套,各个部门之间很少共享,所以导致很多东西仅限于有而不精。阿里整个公司共用一套,所以慢慢的沉淀出公司级的产品。腾讯可能也已经认识到自己在这方面的不足,不久前刚做了一次组织架构的调整。

总结

  技术建设完善最大的收益者当然是程序员了,在腾讯和阿里每天上班工作时间差不多。但是在阿里明显轻松多了,只需要一心专注业务代码就好;在腾讯很多时候都在要为环境、运维和部署发愁。写代码的时间很少,还经常被压榨。

  不过凡事有利有弊,在腾讯由于什么都需要自己亲力亲为,所以员工很多东西都懂一些。特别是底层的一些基础知识、算法和优化方面,但精不精就不知道了。由于历史原因腾讯的主要编程语言是 C++,而阿里则是 Java。所以注定了腾讯偏底层应用开发,而阿里偏上层业务开发。个人觉得腾讯员工在底层技术方面可能要强于阿里的,而阿里员工在面向对象、设计模式和业务沟通方面是要强于腾讯员工的。

  当然,对于一个公司来说或许这些都不重要,能不能赚钱才重要。但最近腾讯股价一路下跌,作为股东的我为此也寝食难安呐。怎么说呢?还是希望老东家越来越好吧,当然也希望自己在新的公司也越来越好!记得关注公众号哦,记录着一个 C++ 程序员转 Java 的学习之路。