坚持20年分析源码,28年打羽毛球,36年写日记,把女儿送进清华|华为大神如何平衡工作家庭自身?

图片
作者 | 王 冉
来源 | 蓝血研究(lanxueyanjiu)、心声社区
图片
程菊生,1998年浙大博士毕业,2004年-2008年在美国工作,2008年加入华为;软件7级专家,十几年坚持分析源码,分析源码总量约700万行,输出分析文档三十多本;荣获国家科技进步奖和省部级科技进步奖3次。担任科技部十三五重大研发项目“新型大数据存储技术与平台”总负责人。申请专利60+,国外专利5+。公司金牌面试官,在实战中使用了十多年的手写代码方法,在2019年成为华为公司的面试标准。
热爱体育运动,擅长羽毛球、乒乓球,多次获研究所团队赛冠军;2019年开始跑步,每年跑量2200公里,完成了7个全马和几十个半马。
在孩子教育方面也颇有心得,女儿就读清华大学,儿子小学成绩优异,在北研和成研分享的《工作家庭身体如何平衡》受到一致好评。
问:您是什么时候加入华为的?为什么选择来华为?
程菊生:我是2008年来华为的。来华为前我在美国工作,主要做存储研发。当时外界关于华为的传言比较多,如华为加班多,工作强度大,内部竞争厉害等,我心里多少有些顾虑。但从发展前景和技术实力来说,华为仍是国内比较理想的选择,所以还是决定亲自来看一看。在华为北研所面试时,看到办公区墙上的一个条幅“你能走多远,取决于你与谁同行”,我当即决定来了。这一决定就是十多年,甚至可以说“永远”,永远坚守在华为。可能有人不理解,但这句话对我触动很大,也是我内心的感悟。要走多远,要把一件事干成,取决于个人的努力,更取决于你和谁同行。与强者同行,你最终也能成为强者。与半途而废的人同行,你最终也将半途而废。
问:您一直做架构设计和关键方案设计,做的项目非常多,能否具体说说您是怎么做架构设计的?
程菊生:来华为14年,我做的项目非常多,主要集中在分布式文件系统、分布式存储、分布式数据库,现在则在做HarmonyOS相关的工作。在这些项目中,有一个典型的项目是2016年“虚拟化存储”优化项目。这个项目是2013年商用的,但是在现网近万个局点中问题较多,用户投诉严重。为了解决这个问题,2016年初Cloud Bu和中央软件院联合发文,招募专家,成立“飞虎队”并设立“悬红奖”解决。难度之大、问题之多,让很多人望而却步。架设部长找到我说:“这个项目很难,挑战也很大。如果把你派过去也解决不了,那就证明我们真的已经没有办法了,这个方向就只好放弃了!”我别无选择,只能迎难而上。
要解决问题,首先必须知道问题的原因所在。就像医生看病,必须知道病因,才能对症下药。我马上行动,开始搜集信息,分析原因。结果从领导、市场、研发人员得到的信息都不一样,有的说人的能力不行,有的说关键技术不行,需要换底座,还有的说产品质量不行。没有解决办法,没有答案,也没有人知道答案。我只好把之前的五六千个问题单全部看完,把用户投诉记录看完,把设计文档、测试文档看完,把所有代码都看完,差不多用了10天时间。看完后问题基本清楚了,50%是技术问题,50%是质量问题。技术问题主要包括一些关键技术没有实现、在分布式场景下并发操作的时序乱了等;质量问题主要包括代码质量有问题,对并发处理考虑不全,很多异常处理简单粗暴,以及测试场景不足,很多复杂的用户场景无法模拟出来。
其次,找出痛点之后就要制定具体措施,来解决上述问题。在技术方面,我有两种选择:其一是把原来的方案完全推翻,采用新的技术底座。其二是在原来的方案基础上,进行局部优化。经过仔细的代码分析,再加上自己的技术功底和经验积累,我判断原方案中的技术底座是比较理想的,可以支撑该项目的技术实现,于是决定采用第二种方案,即在原来方案的基础上进行局部优化,可以实现质量和效率的双赢。我们做了一个适配层,同时兼容原来的机制和新的机制。在新的机制里,把友商已经实现的关键技术也实现出来;在原来的机制里,重点进行代码的优化、并发时序的处理、锁机制的优化、异常流程处理等。在质量方面,我们对代码进行集中评审和整改,并加大测试力度,申请了很多资源进行日夜自动化测试,还人为增加了很多故障和中断,尽可能地模拟用户使用。经过近一年的努力,技术方案终于按照我的设想实现出来了,系统逐步稳定下来,质量大幅提升。
第三,新方案实现了,系统稳定了,如何对现网进行平稳升级,并且保证升级后不会再出现问题,是我需要解决的。我们的升级方案有两个:第一种方案,系统原来数据保持不变,升级时一边生成新的数据,一边将新数据转换成老数据,直到原来格式的数据全部迁移完毕为止。第二种方案,系统升级时,原来的数据不增加,在极短的时间内将原来的数据转换成新的数据,实现升级。之后所有的功能采用新的数据。
而一线客户经理与客户沟通后反馈的结果是:客户坚决要求不能中断服务。为此,我安排了一个小组做升级方案。随着时间的推进,我发现升级方案越做越复杂,问题越来越多,感觉就是一个漩涡,越陷越深,最后我把精英部队全部投入进去,问题依旧不能解决。问题在哪里?怎么办?我静下心来,把升级方案的代码仔仔细细地看了一遍,发现整个升级方案的设计思路都是错的,这种方案是不可能完成的任务。我当机立断,推翻了这个方案,把这个方案的所有代码全部删掉,重新设计。我自己主导该方案的设计和实现,经过一个多月努力,终于把升级问题彻底解决。这也是老产品优化与新产品上市的最大不同,它既要保证功能和性能的提升,又要保证对现网客户业务的“零”影响。之前,我把重点放在关键技术方案上,而忽视了升级,差一点在升级上翻船,真险啊。
系统交付后,结果非常好,在近万个局点实现了平稳升级,而且升级之后实现了零事故,从2016年到现在再也没有出现网上事故和用户投诉,客户和产品线领导都非常满意,对这个项目给予了高度表扬。
问:您2020年从云BU来到终端,从以前做分布式存储系统到现在的鸿蒙系统,您是怎样适应这种变化的?
程菊生:这个跨度很大,技术领域完全不同,挑战也很大。但是,我并不觉得这是多大的事情,我确信自己可以做好。我的判断依据是:首先,云和存储产品线的技术和手机的安卓系统、HarmonyOS的分布式系统差别确实非常大,但是当把技术打开后,就会发现困难其实没有那么大。HarmonyOS里的关键技术如分布式调度和通信、分布式文件系统、分布式数据库、分布式管理、Linux内核机制等,都是我之前的强项,我所欠缺的是安卓和HarmonyOS独有的知识,如Framework和HAL层。如果我能迅速在这方面补齐,问题就迎刃而解。其次,我一直在一线做架构设计和方案设计,一直在分析代码,已经坚持了近20年,完成了超过650万行代码的分析,对安卓和HarmonyOS应该也能很快上手。
问:您到终端已经两年,HarmonyOS也在业界不断突破,您在这个过程中最大的体会是什么?
程菊生:来终端两年,经历了华为手机和麒麟芯片被无情地打压,也看到了HarmonyOS横空出世。我感受到了工作的巨大压力和挑战,但同时也激发了自己的斗志,增强了做华为人、做中国人的自豪感。我最大的体会是要敢于面对挑战,敢于入局。曾国藩有一句名言“天下事,在局外呐喊议论,总是无益,必须躬身入局,挺膺负责,方有成事之可冀。”我想躬身入局,想为HarmonyOS做点贡献。
问:您认为一名优秀的架构师应该怎么做架构设计?
程菊生:十多年来,我一直坚持到一线去,到项目中去,与大家一起做架构设计,做方案设计和特性设计,甚至包括一些关键代码的实现。我认为一个优秀的架构师,首先需要一定的技术广度,能够把握全局,能对本领域内的关键技术和方案有全面深入的了解。其次需要有足够的技术深度,要能够对关键技术的实现细节有深入的了解,能够将设计方案具体落地,并通过代码运行的反馈结果反向对系统架构和设计方案进行优化和微调。只有把理论与实践结合起来,将设计和代码实现结合起来,才能做出高质量的产品来。
问:那您认为架构师必须写代码吗?您自己是怎么做的?
程菊生:我个人的观点是:第一,架构师和 SE 可以不写代码,但要具备写好代码的能力,要对整个系统的代码实现都比较清楚。我个人愿意写代码,愿意去参加考试。第二,“懂代码”概念太模糊,懂 100 行叫懂,懂 1 个程序叫懂,还是对整个系统的关键流程代码都懂。真正的架构师“懂代码”是指架构师对整个系统的关键流程、主要方案的代码实现很清楚,知道大概有哪些异常没有处理,有哪些性能问题和可靠性问题,等等。第三,如果要写代码,可以拿自己设计的一个流程实现一把,在实际环境中运行看看。不要写什么“框架代码”或“伪代码”,这没用。
问:心声上有人发帖说“架构设计与开发分离,一些架构师与专家不懂开发……”,您如何看待这个问题?
程菊生:要回答这个问题,需要从几个层面分析。首先,这个问题是不是普遍存在?我个人认为这个问题是普遍存在的,有一部分的架构师与专家是不懂开发的,不写代码,不review (检视)代码,不定位问题,不进行性能优化,等等。甚至有一小部分架构师和专家在设计方面都存在问题,给出的设计是 high level 的,过于抽象和简略,以至于开发人员拿到设计后需要按照自己的理解和想法重新做设计。
其次,产生架构设计与开发分离的主要原因有哪些?我个人认为主要原因有:其一,架构师和研发人员的职责分工和边界问题。职责定位不同且边界过于清晰,导致“各扫门前雪”,而不管上下游。一些架构师只关注所谓的自己一亩三分地的“大架构”,至于下游的实现(包括接口、关键流程、主要方案等)不关心。其二,架构师给出的架构太high,太抽象,没有什么实际作用,也指导不了开发。一些架构师往往是画几个大的方框,连几条线,再分几层,就成了一个“大架构”,用一张PPT 就把一个大系统的架构描述了。什么 UML 图,什么“4+1”视图,什么模块组成,什么关键流程,通通不管。这样的架构设计不被研发人员怼才怪呢。其三,架构师工作太忙,没有时间和精力关注技术细节。架构师往往职位比较高,相应的事情和会议比较多,在完成架构设计和需求分解的前提下,没有更多的时间去关注开发。
最后,架构设计与开发分离这个问题怎么解决?要解决这个问题,需要从上面的原因入手。一是,架构师和开发的边界问题,架构师需要“手伸长一点”,扶上马送一程。架构设计完了,要帮助开发想想怎么实现,关键流程是怎么走的,主要接口有哪些,哪些方面可能有性能问题/可靠性问题等。二是,架构师要不断提高自己的设计能力,要多积累技术方案和架构原型,设计时做到“胸有成竹”,而不是临时造轮子。优秀的架构师是在做选择题,而不是在做填空题,是从众多的方案中选择一个最适合当前业务的场景。
问:据我所知,您是一个多面手,把工作、锻炼身体、孩子教育都兼顾得非常好。在公司您是七级技术专家,您也一直在打羽毛球和跑步,还担任北研所羽毛球协会会长,跑步每年多达2200公里。在孩子教育方面也非常成功,您女儿在清华经管学院就读,儿子读小学也非常优秀。您是怎么做到的?
程菊生:我认为成功源于坚持。工作、锻炼身体、家庭和孩子教育都是如此。很多人对我说“华为工作那么忙,我没有时间锻炼身体,没有时间教育孩子”,我工作也很忙,可以说非常非常忙,经常出差,2009年出差成都6个月,2010年出差成都8个月,2016年出差杭州1年,2017年出差深圳1年……但是人再忙,也要抬头看路,要思考未来。工作、锻炼身体、家庭和孩子教育并不矛盾,不是对立的,完全可以实现兼顾。2020年8月、10月,我先后在武研所和北研所给大家讲课,题目是《工作、家庭、身体如何平衡》,每次线上听众1000多人,大家听完后很有感触,问了我很多很多问题。我想再强调这句话:我们再忙,也要抬头看路,要思考未来。当我们八十岁回首一生时,一定会发现一生最重要的事情肯定是锻炼身体、工作、家庭/孩子教育。这是我们一生的KPI,是需要花时间和精力去完成的。
具体到锻炼身体,我同样忙得一塌糊涂,没有时间,还经常出差。为了完成每月200公里的跑量,我是利用了中午吃饭和晚上吃饭的时间。每天中午12:00~13:00跑步,大约跑10公里。14:00之后,一边上班开会,一边啃馒头吃玉米。如果中午有会,就改到晚餐时间跑。
具体到孩子教育,我每天早上给孩子留作业,布置任务。深夜下班到家后,会检查作业的完成情况,到周末给孩子进行辅导。女儿、儿子我都是这样安排的。
问:大家都知道“成功源于坚持”这个大道理,但是很难做到。知易行难,您是怎么坚持下来的?
程菊生:知易行难,确实是这样的。这个没有什么大道理,做就行了。我在坚持方面做得还可以,坚持阅读源码近20年,坚持打羽毛球28年,坚持写日记36年。五岳归来不看山,当你做了一件很难很难的事情,就会发现一切都很容易。我从2019年10月份开始跑步,枯燥无味的跑步和马拉松,我很快就适应了,一直在跑。为什么?就是我坚持了20年分析源码,坚持28年打羽毛球,坚持36年写日记。3年的跑步和马拉松,和这些比根本算不了什么。
4月20日,周三晚20:00-22:00,华为管理研究专家、蓝血研究院创始人咔嚓老师,将作为嘉宾来到「今日圆桌」第七期,为大家分享什么是“以奋斗者为本的价值管理”。
随后的「Allen会客厅」环节,咔嚓老师将与今日人才联合创始人、干部发展专家刘权老师展开深度对话。两位老师还会对困扰大家的价值管理、人才管理问题进行答疑解惑,针对企业实际问题,解锁更多干货内容!
扫描海报二维码,预约直播
“点赞”是喜欢,“在看”是真爱