专访曾义:三类 IT 企业做后台开发,每段经历都是成长

  • 木环

2017 年 1 月 2 日

话题:语言 & 开发架构其他运维

曾先生在 QQ 音乐负责后台系统的开发和运维,平时喜欢健身,打网球。在 2016 年 ArchSummit 北京站, 他进行了《QQ 音乐的体验性能与成本优化》干货满满的主题演讲并获得了运维专场的明星讲师称号。在加入腾讯之前,他曾经在 IBM 和 Morgan Stanley 工作;换而言之,他在传统、金融和互联网三类企业 IT 岗位上工作过,在这将近十年的生涯中,他有哪些收获?有哪些过来人的经验想和大家分享呢?InfoQ 对曾义进行了采访,以下来自采访整理内容。

嘉宾简介

曾义,腾讯 QQ 音乐组长。2007 年上海交大计算机系硕士毕业,毕业后进入 IBM 中国芯片中心系统软件组从事高性能服务器开发工作,2008 年底进入 Morgan Stanley IT 上海从事实时证券交易系统后台开发。2012 年加入腾讯,先后负责 QQ 音乐的流媒体优化和平台后台开发工作。曾带领团队一起获得腾讯公司级卓越运营奖金奖。

角色的转变

(一)从学校到职场

曾经的洪荒之力

我刚上研究生选择课题方向的时候,其实是想选 p2p 流媒体方向的。但是同实验室的一个美女同学选了人脸检测,然后邀请我一起搭档,我不忍拒绝,结果坠入机器学习的无底深坑。从此大部分时间在一个人苦苦钻研业界大牛 Paul Viola 的论文,并试图一个人实现 (因为美女是不编程的),鬼知道那段时间我经历了什么。在我穷尽洪荒之力之后,终于在临近毕业前完全实现了 Paul Viola 在论文中描述的系统,并进行了改进,但也因此错过了参加比赛和实习的所有机会。不过我也从没后悔过。那段苦苦支撑的日子至今回忆起来仍然让我激动不已。当一个人把论文翻来覆去读了几十遍,却苦于没人可以讨论交流;手动抠图一万多张训练样本,训练程序跑一趟需要一个星期,却发现结果完全不是自己想要的;不停修正实现终于得到完美效果那一刻的激动喜悦,这些都成为人生中最独特的经历和体验。

正向思维 vs 逆向思维

从学校刚毕业的时候都是正向思维,觉得我学了这么多数据结构算法操作系统体系结构机器学习的知识,做哪些事情才能体现出我的技术水平,学有所用。所以做事情不是结果导向,而是只对体现技术和科研含量的工作有兴趣,甚至创造条件使用一些没有必要的花哨技术,反而给项目带来额外成本和复杂性。因为我们从小就是这么被教育的,上小学读书好就能上重点中学,高考成绩好就能上好的大学,大学成绩好就能去好公司工作,然后当上 CEO 迎娶白富美走上人生的巅峰;如果用了最牛逼的算法最先进的技术,就一定能做一个牛逼的产品从而获得很好的商业收益。而不是逆向思维来看,为了迎娶白富美走上人生巅峰或者做一款受欢迎盈利能力又强的产品我需要走什么路径,投入什么资源,可能根本不需要这么走这么复杂的路。

课堂知识转化职场技能

尽管我刚才吐槽了正向思维方式,但是对于立志开发岗位的同学,一定要打牢基础,包括至少精通一门编程语言,数据结构算法,Linux 操作系统,体系结构等。这些是工作之后很少能有大块时间去钻研,但是又能在工作中随时给你提供无穷力量的知识。当然精通这些知识的最好方式一定是阅读经典书籍与实际操练相结合,翻来覆去,才能持续精进。

(二)从新人到 leader

现在作为团队 leader,对工作也有了新的认识和感悟。以前喜欢任何事情亲历亲为,现在觉得授权更重要放手让团队成员去做,给他们做鼓励师,他们会以超出预期的成果回报你。

这里给职场新人一些建议,尤其是容易被忽视的问题。

首先是结果导向,也就是逆向思维方式。工作的每一个任务要有目标,为了达到目标需要走什么路径,需要投入什么样的资源。这样才能以最小的代价最快的时间最好地完成工作。

同时一定不要好高骛远,因为新人永远在挣信任分。如果能把当前的事情做到足够好,leader 才有信心把更重要的任务交给你,然后学到更多的东西承担更多的事情,形成一个成长的闭环。另外就是一定要积极主动,做事情一定要多想一步,边界模糊的事情主动承担,这样成长速度才会更快。这两者不是矛盾的,而是相辅相成的。

我自认为不是一个完美的技术主管,所以也没给法出完美技术主管的标准。但要做到一个称职的技术主管,至少必须要做到分好钱,打好绩效,能扛责任,而不是做一个老好人。当然打铁也要自身硬,能有技术洞察力,既能把握技术方向,又能关键时刻挺身而出就更好了。

公司的更换

第一份工作 @IBM

当时 IBM 给 SONY 的 PS3 游戏机定制了一块高性能 CPU 叫 CELL,浮点运算能力特别强。PS3 主要靠卖游戏挣钱,硬件是亏本卖,所以美国的洛斯阿拉莫斯实验室买了很多 PS3 游戏机搭建集群进行模拟核试验运算。我当时参加在 CELL CPU 上优化各种重度浮点运算的应用性能,比如 CT 扫描图像处理,音视频编解码,矩阵运算库等,用来榨干 CELL CPU 的最后一滴性能。

在 IBM 的工作偏研究性质,团队氛围很和谐,也是一段快乐而无忧无虑的时光。可能我天生劳苦命,很快就换了一份更忙碌的工作。

忙碌在 Morgan Stanley 的后台

第二份工作我在 Morgan Stanely 负责证券交易系统后台,主要是实时证券买卖系统,高频交易系统等,对系统的性能要求比较高,对事务性强一致性的要求也比较高。

金融对技术的错误是零容忍,必须要一次做对。新项目一定要保证没有问题才能上线,所以总是会做一个新的系统来淘汰旧有的系统,而不是在原有的系统上进行大的改造,以降低风险。所以我们经常开玩笑说为了做一个新的系统去淘汰两套旧的系统,然后我们就有了三套需要同时维护的系统。

投行 IT 对外网问题要求非常严格。一般交易员发现交易出现问题时,会直接打电话过来说 F 开头的单词。一旦发现外网问题,开发组成员包括 VP 要全部拨入电话会议,在线解决问题。十分钟之内不能解决,就会继续升级,ED 会拨进来,二十分钟不能解决,MD(最高级别) 会拨进来。三十分钟还不能解决,估计要考虑找下家的事情了。

我刚加入团队不久的时候,上线一个衍生品交易系统。交易员想测试一下系统,打算先下个数量为 1,价格为 700 美元的卖单。结果手一滑,把价格和数量填反了。我们在后台日志看到这个单被迅速拆成各种小单吃掉,并且瞬间拉低了这个产品的价格。由于衍生品有倍率系数,这一单造成了交易团队几百万美元的损失,同时由于衍生品交易量小,价格被严重拉低,公司被香港证券交易所以价格操纵为由严厉惩罚,并面临被吊销交易牌照几个月的风险。投行的方法论是每次只要发生事故,必须要进行严格的事后回溯 (大家称之为 postmortem, 直译过来就是验尸报告)。需要仔细报告事故发生时,精确到每一分钟的处理动作,以及产生的结果,并且剖析事故的根本原因 (root cause),思考改进的方案,防止同样的问题再次发生。

我们对系统进行分析后发现交易系统里其实有对价格偏离一定范围的限制,但是没有区分激进价格偏离 (aggressive price away) 和保守价格偏离 (passive price away) 之间的差别,统一设成了 100%。这样如果是卖出价格低于市场价,永远也不会超过 100% 的价格偏差,除非卖出价低于 0。经过这次事故后,我们对所有交易价格偏离设置了非对称的限制。对于保守价格偏离就设得宽松一点,对于激进价格偏离就设得严格一点。从此以后再也没碰到类似的问题。

投行十分讲究沟通的高效,最容易被问到的问题就是”what’s your point(你到底想表达什么)?”。我当时的上级是一个非常绅士的英国人,但也时常提醒我和别人沟通一定要pin the point(直戳要害)。如果你讲 ppt 三页内还没进入正题,或者没有讲出特别有意义的点,下面就会有人问你 what's the point。经常被这样挑战压力会非常大,但是进步也会非常快。

另外投行比较推崇 aggressive(可以翻译成进取吧) 的作风,大家为了不同看法会 PK 得面红耳赤,但是大家都不会因此而伤害个人感情。往往在工作上激烈 PK,私下又会若然无事。这些沟通上的风格和技巧对我的成长帮助非常大。

腾讯音乐开启新篇章

在腾讯音乐工作之后,又 get 一些新的技能。虽然高频交易对延时的要求非常高,但是腾讯的用户规模和并发量是很少有其他地方的系统能够比拟的。在腾讯接触了很多海量并发系统的设计和运营原则,这些不仅是在学校里学不到,也是在其他地方闻所未闻的。

在刚开始负责流媒体和可用性优化工作的时候,每次在吃饭,走路,睡觉的时候都在想各种优化策略。每天晚上都在观察各种运营数据,进行分析比较,并且联系用户定位问题,到快下班时又一条优化策略蹦入脑海了。当然也是依靠团队的群策群力,上级的领导有方,最后拿到了公司的金奖。当时是 5 万块的奖金,拿到奖金后大家去一家高级饭馆吃了一顿,结果都喝得东倒西歪,大家笑称把高档饭馆喝成了大排档。

腾讯的价值观是正直进取合作创新,正直是摆在第一位,并且对不正直是零容忍的,所以大家的沟通也都是比较诚恳的,求真务实。另外是一切以用户的价值为依归,所以大家考虑问题的出发点都是如何给用户创造好的体验。我们的团队我一直追求一种开诚公布,开放协作,群策群力寻求最佳解决方案的氛围。不搞下级服从上级,也不搞少数服从多数,而是搞清楚每一件事的深层原因,每个人都愿意表达自己真实的想法,也愿意改变自己的想法,最终大家能为最佳方案达成一致,而不是简单的掩盖矛盾,相互妥协。目前团队能否完全做到还不好说,但这一定是我们坚持努力的方向。

回望来路

在过去这 9 年中,每一次的职业生涯选择,其实没有什么刻意的规划,都是一些偶然的际遇,但是一路走来也不后悔。

在这三个岗位中的收获

从传统 IT 巨头、到金融行业再到互联网行业,每一次都算是一个不小的转变。

从 IBM 到摩根主要是因为在 IBM 做到事情更偏研究性质,做的很多项目最终并没有给实际的用户使用,更多的是转化为专利和论文;所以到摩根是希望自己做的系统能在真实的世界产生影响力(尽管这种影响力经常会以负面的方式表现出来,比如一个 bug 导致百万美元的损失)。而到腾讯坦白讲主要是家庭因素。当时腾讯还没有现在这么有名,因为家人在深圳,所以选择了腾讯。但是加入腾讯后发现对真实世界的影响力更大了,因为每天都有超过一亿的用户使用我们的产品,这种成就感是之前无法比拟的。

另外在摩根大家比较看重一次把事情做对(这也是为什么招聘过于看中名校和 GPA),但是这种对于犯错误的恐惧会导致做事风格过于谨慎,反而会压制创造性。反观在互联网公司因为有灰度发布,对犯错误的恐惧没有那么强烈,所以可以去尝试各种不同的东西并快速验证,感觉这样的氛围对创新是有帮助的。

如果一切可以重来

如果重新走一遍,我可能会选择一毕业就加入腾讯,然后把所有工资拿来买腾讯的股票,那么现在估计可以提前退休了(笑)。但是人生没有假设,所以也只能说感谢每一段经历带给我不同的人生体验,让我有机会认识到世界的多样性。

在 IBM 认识了很多研究大牛,有些老爷爷级的 DE 和 FELLOW 让你觉得自己在计算机科学领域的知识是多么的渺小。在摩根应该说是我经历过的聪明人密度最高的地方,而且执行力也非常强。经常在邮件组里可能会发现 C++ 之父的邮件,或者 Linux 内核和标准库的重度贡献者在邮件里如数家珍娓娓道来系统内部一些不为人知的秘密。我丝毫不怀疑如果哪天公司接到一个任务需要制造航天设备把人送上月球旅行这帮人也能完美达成目标并严格执行不出纰漏。在腾讯则是一帮不知天高地厚的年轻人,他们经常犯错,发布的系统总是有 bug,但是总是不停的有新的想法出现,不停地能做到一些未曾想到过的事情。这种对未知世界的探索让人很激动。

每一段经历都是成长

如果比较三家公司的风格,假如把团结比作创造和谐的合作氛围,把斗争比作就事论事不带个人感情地 pk 观点,那么 IBM 应该是团结多一点斗争少一点,摩根应该是斗争多一点团结少一点,腾讯则应该算既团结又斗争,平衡得刚刚好。从沟通上讲,外企国内分公司和总部的沟通应该算一个硬伤,特别对于互联网行业这种需要快速迭代的行业,无法面对面沟通带来的沟通成本几乎完全无法接受。所以斗胆揣测这可能也是外企互联网公司纷纷在国内折戟的原因之一。其实不光是外企,包括腾讯内部如果两地的团队一起做一个产品,感觉沟通的成本也是太高,迭代的节奏完全跑不起来。除此之外在外企真的学到了很多先进的工作理念,让人终身受益。感谢过去工作和学习中遇到的每一位朋友同事和同学,感恩每一家培养我的公司,感谢每一段经历让我成长。

语言 & 开发架构其他运维