2018.05.16 丨 msup

程序员如何跑得比别人更快?微博研发总监李庆丰访谈

2018.05.16 丨 msup

导读:6 月 1 ~ 2 日,GIAC 全球互联网架构大会将于深圳举行。GIAC全球互联网架构大会是长期关注互联网技术与架构的高可用架构社区和知名软件培训公司msup联合推出的,面向架构师、技术负责人及高端技术从业人员的技术架构大会。今年的 GIAC 已经有腾讯、阿里巴巴、百度、今日头条、科大讯飞、新浪微博、小米、美图、Oracle、链家、唯品会、京东、饿了么、美图点评、罗辑思维、ofo 等公司专家出席。


在大会前夕,高可用架构采访了本届 GIAC个人成长分会场出品人 李庆丰,就大家关注的工程师个人成长和技术管理等问题进行了访谈。


李庆丰,新浪微博研发中心研发总监,负责微博视频及通讯相关服务研发工作。2010年加入微博,作为核心技术人员经历了微博爆发式增长、艰难突破、再度腾飞的全过程。技术上专注于高可用高并发架构方向,主导及推进微博平台微服务化、服务治理、SLA保障体系等多个高可用架构优化升级项目。同时也是微博研发中心技术新兵训练营负责人。


高可用架构:很高兴能采访到您。能否简单给高可用架构读者介绍一下自己?


李庆丰:很高兴接受访谈, 我是2010年加入新浪微博,到现在很快要满8年了,算是和微博一起经历了整个成长发展过程。 


在这8年里由一名工程师逐渐历练成长为一名技术管理者,还是很感谢微博这个平台。

高可用架构:每一个取得成绩的人,都有一段苦逼的坚持。回过头去看,在您的成长过程中,什么时候最让您刻骨铭心?在您还是默默无闻的时候,在哪些方面下过苦功夫?


李庆丰:回想我自己的成长过程有两个关键节点。 


第一个是毕业工作一年后从学校辞职来北京进入程序员行业。那时候并没有什么工作经验,甚至编程技术基础掌握的都不是很好。社招情况下没有工作经验来北京找工作的难度可想而知。当时的心态就是只要有公司要我不给钱都行,尽管如此仍旧多次面试碰壁。但每次面试我都有收获,面试提出的我不懂的问题,我会当天去西单图书大厦或网上找资料搞清楚,并会按着网上的使用实例试着去做些小实践以能够更好的理解和掌握。其实技术面试的知识点无非就那么多,慢慢的面试反馈就越来越好,终于有公司愿意要我了。


上班后仍然是个痛苦的过程,平时开发自己的demo和真正开发线上业务系统差别还是很大的,会遇到很多技术难点问题,除了同事的帮助,更多的还是要自己利用下班时间去研究明白和解决。那时甚至都会住在公司,因为公司网络快,也省得挤公交车的时间。再有时间就是去研究一些新技术新框架,慢慢的你会发现经常会有同事来想你讨教了,你从菜鸟变成了团队的核心开发,这种喜悦是难于言表的。

 
第二个是在微博转向技术管理那段时间,当时正直微博快速崛起那个阶段,团队规模比较小,但业务需求非常多,一边进行代码开发,一边还要沟通需求,还要协调同事协作及跨团队协作,总感觉时间不够用。最忙的时候是白天沟通需求和跨团队协调,晚上写代码。


当时记得最刻骨铭心的是写故障报告的过程,当时微博的影响力已经比较大了,服务出一些问题领导都非常重视,需要写故障报告并通报到各个团队。那时候平台的故障报告经常我来负责写,经常被Tim(小编注:即Tim Yang,李庆丰的上级)驳回来重写。有时候甚至Tim也会来和我一起梳理和修改。当时还有些不理解,感觉是在为难我一样。后来才明白领导当时给了我很大的帮助和指导,对问题的本质和解决思路、在架构理解与跨团队协作等方面都有更高角度的理解,这对我后来的技术管理成长有很大的帮助。 


具体来讲,首先要打好扎实的基础技术功底,包括语言基础、算法基础、编码规范,其实是要去理解前人的经验积累,比如设计模式、经典技术架构的原理和源码。能做到这一步其实就是一个靠谱的程序员了。这是你就需要寻找更大的技术挑战机会,去进一步实践历练。 


接着,需要通过借鉴优秀架构组件的架构思路,结合自己的业务去实践,并能形成自己的架构理念。这个过程是想技术专家和架构师进阶的重要过程,和业界前沿技术社区及大牛的沟通交流也非常重要,业余时间做些总结分享会很有帮助。 


再之后,需要跳出技术的局限,更多的结合公司的战略和用户真实需求去深入理解业务,这样就能够提前对技术趋势做出预判,提前做好对应的技术储备和准备。 


慢慢的,你的老板会发现,你的团队好像什么都能搞定而且做的非常好,公司也就更愿意把更有挑战的项目交给你和你的团队,也会更愿意给你更多的资源。最终个人成长和晋升都会相对更顺利些。


高可用架构:工作中有没有遇到从海量简历中筛选合适简历的时候?如果抛开技术栈来讲,怎么样的简历更能吸引您呢?能顺利通过面试的那些人有哪些共同的特质呢?


李庆丰:招聘方面自然必不可少。伴随着微博的成长,微博的技术氛围和成长环境对小伙伴们还是很有吸引力的,所以,简历确实蛮多的,筛选简历确实也是一个非常耗时的工作。

 
早期我不怎么筛简历,只要投过来我都会请过来面谈一下,因为我担心会因为简历漏掉优秀的候选人。当然,这样耗费了我大量的时间,但收获并不大。 


后来,经过不断的思考总结和实践,就会对简历做比较严格的筛选,这样通过比例大大提高了,也节省了自己和候选人的宝贵时间。 

在社招简历筛选上,我重点看2点:经历和具体的项目描述, 如果经历参与过比较有技术挑战场景的项目的话(比如说高并发场景,或复杂业务场景),我会首先筛出来进一步重点了解; 然后就是看具体项目的描述,通过项目描述来发现候选人在这个项目中的角色,通过其使用的技术栈来了解候选人的技术深度和经验情况。也能通过这个描述,了解到候选人的思路是否清晰。 


上面2点符合的话,就基本都能来面试了,并且我会假定简历上说的都是真实的。然后在具体面试时带着这些背景去进一步了解和验证。

对于候选人我重点关注4个方面情况,按重要程度分别为:思路和态度、技术基础、聪明、经验。 


通过和候选人聊他在项目中的定位和所做的事,很容易了解其对工作的态度和解决问题的思路,如果这方面有问题,其工作肯定做不好,我会快速淘汰; 我们会有现场编码题目和算法题目,来了解候选人的基础以及编程习惯,这方面决定他的工作效率。 


只要思路和态度靠谱,技术基础扎实,基本就是可以招进来的做常规工作的。 
而是否聪明将决定他未来的技术成长潜力,技术经验能体现其技术深度,经历大项目的核心研发人员总能对技术有更深的理解,并且帮助团队快速提升某一方面的技术实力。 当然后面2方面是可遇不可求的,一旦遇到这样的人才我们都会重点培养。

高可用架构:微博平台的新员工培训办得有声有色,您作为大家的校长,一定有更深的体会,能简单跟我们聊聊吗?


李庆丰:微博的技术新兵训练营我记得最初是Tim提出的这个想法,定位是让新人能快速融入到团队以提高研发效率,也能促进团队的技术积累和传承,也得到了公司很多领导及人力资源部门的支持与响应。后面主要是具体由我来负责实现这个目标。

 
根据我们的调研和分析,技术新人(无论校招还是社招)初到一个新的团队都会出现一定程度的不适应,影响个人的工作和成长,进而影响整体的研发效率。技术氛围好的团队可能通过导师的言传身教的方式来引导新人养成好的开发习惯,传承高效的协作方式和技术经验。但这个过程会很长,也会占用导师的很多精力和时间,并且其效果取决于导师的经验和水平。 


另一方面,由于新人对既有架构和技术体系的不了解,在日常工作中经常出现因为上下文不清楚造成方案理解困难,甚至相关术语的理解不一致导致方案理解错误,进行影响整体的研发效率。

 
我们希望能有这样一个平台,能够集合最优秀导师的经验,让新人能够学习团队既有的好的开发习惯和经验,帮助新人快速适应团队环境、汲取团队经验积累,从而能够让新人快速成长,提高团队的整体研发效率和实力。 


所以,我们设计的课程内容主要包括2个方面: 


一是技术基础部分,通过这个阶段让新人填平技术基础短板,培养和团队匹配的研发习惯,提高其研发效率。 


  • 通过研发环境和工具体系的介绍让新人养成好的研发习惯,以及使用团队已有的高效的研发工具体系,提高开发效率。

  •  通过分布式缓存和海量数据存储知识介绍,让新人重新认识互联网架构的挑战、分布式缓存和海量数据存储方面的常见问题和有效的解决方案。避免新人出现常规错误和问题。 

  • 通过技术框架和常用组件的介绍,让新人快速了解团队常用技术组件的使用,为工作开发做好准备。

  • 还会有优雅代码及问题排查工具与方法的介绍,用实际案例来统一大家对优雅代码的认知,避免代码中的低级错误,提高代码质量。向大家介绍疑难问题的高效排查方法和工具,提高开发效率,也避免大家陷入痛苦的bug查找和解决中。 


二是业务架构部分,重点介绍微博典型的业务架构设计,比如,信息流架构、视频架构、通讯技术架构、机器学习架构等,让同学们理解架构的问题场景和技术挑战,传承团队的技术积累的同时,也为新人在后续业务研发中更好的理解业务架构,快速设计出更好的技术方案做铺垫和准备。 


我们集合团队中各个技术方向最擅长的核心架构师去整体相关的经验形成课程内容,收获的不仅仅是经典的新兵训练营课程内容,还有对现有技术体系现状的思考和改进,形成了团队的技术积累和沉淀。并且我们的课程内容不是一成不变的,而是每期都由当期的讲师重新进行整理更新和改进优化。 


收获方面,很多人只看到了新人在这方面快速融入和成长的收益,其实讲师的收益也是非常大,他们通过对这些内容的梳理和反思,自身对这方面的理解和改进的收益更大。这样,这个活动的所有参与者都会有收益,活动办起来自然很顺利。 


到目前这个活动已经办了6期了,基本上每年一期,从公司内外的反馈上来看,整体效果还不错。

很惭愧,只是做了一些微小的工作!


高可用架构:在微博业务高速发展的时期,您肯定有很大的压力。能否跟我们分享一下,这个过程中,让您感触最深的一点是什么?或者说您从中学习到您认为最重要的一点什么?


李庆丰:在微博这些年,一直在负责核心服务和战略项目的研发,这些服务一旦有点问题对用户影响都很大,领导老板也都会直接关注,压力确实很大。而这么大的公司,跨团队的服务依赖不可避免,整体上自己很难完全控制。 


一方面,我们需要通过服务治理,更灵活、高可用的架构等技术手段,让服务尽可能的、更全面的保持稳定高效。 另一方面,我们也要能够从公司战略、用户体验的角度抓住服务的关键核心,进行重点保障。 


在资源有限的情况下,让更多的精力和资源投入到更关键核心的服务中,于公司于个人都至关重要。所以,要主动去理解公司战略以及体会用户真实需求,不能都等着老板找你说。

高可用架构:您在微博工作的这些年获得了持续晋升,对于想在大公司发展并希望得到成长和晋升的年轻人,您有那几条建议?


李庆丰:技术人的成长还是要靠技术实力的提升为基础。年轻人有机会在大公司发展,更要看重自身的技术成长,在这个阶段,成长比薪酬更重要。 所以,尽量去技术氛围好的核心技术团队,跟靠谱的领导。 


技术氛围好的团队会让你保持对技术的追求,养成好的研发习惯;核心技术团队承担核心服务架构,能够和优秀架构师进行协作和交流,这种潜移默化的影响非常重要,并且更容易得到更大的历练机会。靠谱的领导总能在关键时刻给你好的建议和帮助,能够让你不断突破瓶颈更快的成长,那晋升就变得自然而然。

高可用架构:那再请教一个工程师关心的问题,现在普遍压力较大,如果想要自己在专业及收入上持续保持提升,最重要的一点是什么?


李庆丰:对于互联网技术人来讲,这是一个最好的时代也是最坏的时代。 


好是因为互联网的广泛应用和发展,让这个行业有了高速的增长,从人力需求到收入水平相比其他行业会高一些。 并且当今的互联网技术非常开放,技术社区及开源社区成熟活跃,要想了解学习互联网技术门槛并不高。 


坏是因为由于互联网的高速发展,大量优秀人才涌入到互联网导致竞争非常激烈,并且由于互联网技术更新迭代非常快,导致互联网老兵的技术经验壁垒并不是很牢固。 


所以,要想持续保持收入的提升,就需要持续提升自身的技术实力即专业能力;能够解决别人解决不了的问题,或者比别人更高效,总能拿到更高的收入。而要想提升专业能力就需要有开阔的技术视野和快速学习能力,能够关注并学习实践那些有前途的新技术,让自己的工作更有效率。具体就是关注行业多和社区进行交流,并且积极结合自身业务去学习和实践。

高可用架构:您是如何划分架构师和技术经理在工作中的边界?两者在能力要求方面有什么样的异同?


李庆丰:技术人成长到一定阶段的两个方向,一个是技术专家,另一个是技术管理。架构师属于前者,他要求在某一技术领域的有更深的理解和经验,能够带领团队在这个技术方向上解决攻坚难题、有所突破。技术经理属于后者,虽然也需要有深厚的技术实力和经验,但其价值是能够有效组织团队的资源形成更好的执行力。


架构师需要不断提高某一领域的专业技术能力和架构经验,以助其能够带领团队更高效的解决专业技术架构问题。增强团队技术实力。这决定了架构师的价值和未来高度。


技术经理需要更强的综合能力,就像我前面所说,他需要的是通过自己的影响力来构建一个良性的团队成长生态,能够及时的了解团队现状,根据公司的战略去协调资源,引导团队走向技术实力、效率、发展的正向循环。

高可用架构:对于不同的管理风格,管理主导技术好?还是反过来更合适?您是如何平衡管理和技术的?


李庆丰:最近正好也在做管理方面的一些总结思考,我认为管理的本质是让团队更有效率的完成工作,管理的目的是让技术的价值能最大化。


对于技术管理来讲,技术是核心基础,管理是组织方式和手段。


所以,我对技术管理理解是,首先要提高团队的技术实力,包括营造浓厚的团队技术氛围,吸纳优秀人才,提供好的历练平台,引导团队成员快速成长,这要求技术管理者自身也要有深厚的技术功底和架构经验,也需要不断的去了解学习业界先进的技术架构和经验来拓展自己的技术视野。


在此基础上才能通过一些组织手段来提高研发效率。技术实力促进研发效率,效率提升为团队调研新技术、研发效率工具、提升术氛围提供了更多的时间和机会,进而会形成技术实力到效率到发展的正向循环。不能说哪一块更重要,这是一个团队成长生态的建立过程。作为技术管理者需要能够了解团队的现状然后去构建这个良性的生态,让团队走向这个良性循环。

高可用架构:你现在还经常参与业务代码开发吗?关于 CTO 或者 Manager 是否需要写代码,业内一直都有争议,您是什么样的看法?


李庆丰:坦白讲,我现在参与直接业务相关代码工作较少,但会做一些核心架构组件的代码 review,以保持对核心架构的准确理解;也会写一些工具类的代码来实践一些新技术以帮助自己更好的理解新技术。

 
CTO 和 Manager 是否需要写代码,我觉得不同的团队场景会不一样。 


如果团队几十上百人规模,技术管理者的只要职责是让整体团队有更好的研发效率和技术提升,更重要的是技术视野和协调组织团队,以营造更好的技术氛围和提升团队整体的研发效率,这种情况写不写代码不重要,反而在代码上花费太多的时间会显得不太正常。 


如果是创业公司或小团队的 leader,一共团队十几人的情况,技术组织协调工作并没那么多。技术管理者还是需要写些核心架构代码的,以保持对核心服务有足够的把控能力。 


另外,是否需要写代码和能不能写代码是两码事,技术管理者至少要能够写代码(虽然并不要求一定比团队中其他人写的代码效率更高),或者保持对代码的足够关注度。抽时间多去 review 下核心架构的代码,能够帮助技术管理者及时了解团队的状态,甚至发现一些潜在的技术管理方面的问题。

高可用架构:对于网上聊得比较多的话题,IT工作者35岁的尴尬,您认为这种大龄尴尬是真实存在吗?有没有什么方法避免呢?


李庆丰:互联网技术的更新迭代的非常快,对于技术人员需要不断学习新的技术需要耗费比较大的精力。所谓35岁的尴尬更多的是指这个年龄之后受限于身体状况和家庭事务等因素,相比年轻人的时间和精力会差很多。 


如果技术人员到35岁还没有能够利用自己以往的技术经验体系,形成自己突出的技术价值优势,不能让自己具备独特高效的快速学习能力,纯和年轻人拼体力,肯定是拼不过的,就会形成这种35岁的尴尬。 


要避免这方面的尴尬,就需要技术人员能够把自己从前的经验积累形成自己的独特价值,同时形成一套快速学习和提高的方法。互联网技术更新迭代虽然快,但具体到某一特定领域,其新旧技术的迭代还是相关性很强的。 


如果对具体某个技术领域有很深的理解,对其技术关键点和方向了然于胸,就能够提前对其发展方向有很好的预期,对业界新技术的接受也会更容易。慢慢的就会成为这个领域的专家。开始虽然需要花费较大的精力和时间去达到这样的成就,但对于后续的发展却会相对轻松很多。 


当然保持对业界前沿技术的兴趣和不断拓展自己的知识边界也很重要。但至少之前的经验会起到很大的作用,不至于和年轻人纯拼体力。 


无论未来是走技术专家路线,还是技术管理路线,这些经验和能力都将让你受益良多。

高可用架构:作为个人成长专场的出品人,您对GIAC有没有什么期望或者展望?


李庆丰:GIAC是一个非常好的技术社区,特别是在互联网高可用架构和工程师文化方面汇聚了很多业界前沿的经验和思路,对技术人员的成长非常有价值。希望GIAC能够继续保持自己的特色和优势,更好的为技术社区和技术人提供更好的内容分享。


本期 GIAC 大会上,个人成长/技术管理 部分精彩的议题如下:


参加 GIAC,盘点2018最新技术。大会正在火热报名中,既可登录官网报名,也可咨询报名热线:15802217295(同微信)。

媒体联系

票务咨询:赵丹丹 15802217295

赞助咨询:郭艳慧 13043218801

媒体支持:景    怡 13920859305

提交需求