华为IoT首席架构师王启军:全栈工程师“养成记”
在王启军的公众号里,有一篇《My Team》的文章,里面记录了早年他所带团队成长的心得。
这个被他称为完美组合的团队,并不是来自大厂名企,彼时王启军给不起高待遇,团队核心成员中还有很多人是专科学历。
但就是这样一支团队,建立了IaaS平台,搭建了私有云,云缓存,分布式文件中心……甚至还有自己的开发框架,工作流平台,配置中心,而彼时,是在2013年前后。
王启军在文章里写到:
给不起高薪,就挑选潜力股,用成长来吸引人。
最后,王启军确实也兑现了承诺,团队成员工作一年以上的,出去后薪酬基本都翻倍,并跳槽到国内知名互联网公司的不在少数。
如今,王启军已成为华为云IoT首席架构师,尽管“捉襟见肘”开不起高薪的烦恼不再,但他认为挑战依旧,因为在云计算时代,很多颠覆性的工作正在等待他去做突破与创新。
拥抱开源,要做颠覆性的云
今天,全球正进入了一个开源的大时代。可以看到,目前全球软件行业有两个重要的趋势:
(1)“软件现正在吞噬一切”,每一家公司都正在变成一软件公司;
(2)“开源也在吞噬一切”,越来越多的公司都在使用和拥抱开源软件。
同样,对于开源的关注,也始终是王启军工作重心中的一部分。据他介绍,目前华为云很多产品线的目标都是希望做“颠覆性”的产品,而不是只考虑跟竞争对手持平。因为即便超越了对手,但是还是可能会输给时代。所以华为云的产品考虑必须长远。
在云的领域,根本的问题还是要做到成本足够低廉,就像水电煤一样。当云产品的功能做到一定程度后,成本就会成为最大区别点。
对华为而言,云服务器基于兼容ARM架构的鲲鹏来做,从底层开始自己做,这样成本能控制住。但是,很多软件是长在x86平台上,实现平台的迁移必须要依靠生态。
因此,华为云未来要不断成长,就需要把生态做好,同时还必须支持开源,把更多的产品开源出来,培养、催化、拥抱这个开源社区,这样整个生态体系才能建立。一旦建立起来生态。
王启军说:
我相信华为云对行业的颠覆性非常大
他认为,从商业的角度考虑,开源的产品与公有云联合,对客户对华为都有好处。客户用开源的东西,对客户来说能节省很多工作量。尤其是很多小公司,自己没有能力开发一个开源框架,或者开源的中间件,用开源的东西能加快开发进度,还可以让系统比较稳定。
比如,华为云会开源一个微服务务框架,这个微服务框架在华为内部用得比较成功,现在开源出来给外部去用,客户就可以联合华为公有云和开源框架,基于微服务框架的应用就很容易上到华为云上,华为云上有很多中间件可以整合,让客户觉得非常合适。
王启军认为,不管是做开源框架还是用开源框架的人,都是巨大的生态。在这个生态里面有很多商业思考,可以做很多事情,有很多想象空间。
软件开发,一门妥协的艺术
当然,要真正做好基于开源的云计算产品,其实也面临技术、制度、文化三个方面的挑战。
王启军说,过去华为做产品,开始就要规划好。立项的时候对技术市场竞争会分析得比较清晰明白,然后按照计划去执行,执行过程中不会有太大的变动。产品立项到交付,会有比较长的周期,比如5G、6G的研发,都是要经过很多年的开发才能出产品。
但现在,华为公有云会要求快速迭代,产品快速上线。在这样大背景下,一个产品一年上线十次和一年上线一万次,会有根本的区别。
首先,从流程制度看,过去,上线次数少,可以依靠严格的开发制度,测试制度和上线制度,制度对每个环节会卡得很严,以此来确保产品质量。
以测试流程为例,过去测试环节中,会有很多的测试人员,甚至上线的时候,一个人来负责操作,还会有另一个人来审核监管。但是当一个产品一年有很多次上线后,依靠这种传统的制度确保质量是不可行的。
因为频繁的上线,再让测试人员把全部功能都覆盖测试,在时间上不可行。这就要求有流水线的自动化检查,自动化编译验证测试等等。所以要求提交的代码也有更高的质量。从制度流程角度讲,这跟原来方式完全不一样。
其次,从文化上来讲,在这种频繁迭代快速上线的环境下,也要求公司内部更加透明,更加扁平化,组织结构不能过于复杂。还有就是要求开发人员对产品和技术有更全面的了解,用一种小团队合作的方式来解决问题,而不是传统方式靠组织的精细分工来开发产品。
以代码的review为例,在新的文化背景下,开发人员会把请人review代码当成自己的责任。会变成一种自主的工作模式。而不是因为代码没有review就上线,因为违背制度而受到惩罚。
从王启军的自身体验来看,华为云的开发模式更接近互联网公司的开发模式,而跟华为传统产品开发有较大差别。
王启军说:
做好云产品的开发,关键还是要把握好妥协的艺术。
因为产品是快速迭代,频繁上线。所以不能等到做到满意才来发布。软件就是不断改进的过程。很难一下子做到特别满意的地步,基本上都是不满意的状态。假设所有的地方都满意了,说明系统已经过度设计了,完全都满意了说明系统成本非常高。比如说像可靠性、性能等各个方面都达到了高的要求,成本就非常高了。
他说:
软件架构它也是妥协的过程,会跟需求、跟成本,跟研发,还有质量,各个方面不断的权衡,去选择其中比较重要的方面。
把重要的几个方面做得比较好,其他几个方面只能妥协。第一就是考虑满不满足当前的要求,等以后需求变大了,或者是业务要求的比较多了,再去补齐短板。比如说可靠性,从三个九到四个九,或者从四个九到五个九的时候,每前进一步,成本是指数级的上升。在这种情况下,满意的标准其实需要根据阶段去调整。
最后,从技术角度来讲,王启军认为做好云产品,技术上的挑战并不是那么大。大多数挑战大家都差不多,某个部门解决不了,到公司层级就可以解决了;整个公司解决不了,寻求外部资源也能解决。
但是从团队和文化层面,会遇到更多挑战。在做这些事情的时候,不是说一个人想做就能做成的,需要跟团队的文化和团队的制度碰撞,去磨合。要把想法传递给所有的人,而且所有人都认同这个想法,这非常有挑战。
从这个角度来说,王启军认为这不仅仅是华为的挑战,很多公司都有很多改进的空间。大多数东西推行起来,遇到一些没那么满意的地方,多多少少都是因为团队,因为各种各样的原因做了妥协。
因此,在这种情况下做开发,开发人员和所谓架构师的区别会越来越模糊,对开发人员的要求越来越高。
比如很多业务,是需要去看别人的代码,大家有更多的交流。也要求自己的代码要给别人去看,在这种交流的过程中,发现自己的代码不够好,会有一种羞耻感,形成这种文化氛围后,自我激励,主动学习就会成为必然。
全新时代,全栈工程师的养成
回顾过去多年的从业经历,王启军认为,现在行业变化非常快,技术变化也很快。
过去一种框架用十几年没什么变化,现在基本上不可能。经常是今天用这个框架,明天又得用另外一个框架。但现在不但框架多,而且变化还特别快。比如,微服务框架,每个公司都有很多自己私有的框架,开源的框架也能找到七八种。
再如,以前大家在建私有云,现在公有云会越来越多的使用。
公有云的特点,就是应用跑在公有云上,中间件和基础设施这些,都交给云去解决。跟传统最大的区别,就是使用公有云需要的所有基础设施都是通过代码的方式构建。
这样,传统做运维做测试的人会极限压缩,这两方面的人会越来越少。传统上做一个应用,需要产品负责人启动,产品经理开始计划,接着是架构师做架构,然后开发人员开始开发,开发完成交给测试做测试,最后在由运维上线,这个流程会非常长。
这里面会有很多决策,公司内会有很多角色来完成这些决策。但是现在使用公有云,所有的基础设施都通过云来搞定,剩下的应用开发由开发者来搞定。
这时候开发者就得变成全栈工程师,一个人能干很多事情,既能干前端,又能干后端,运维工作也能干,甚至一些需求分解,架构也要由开发人员来做。这样对开发人员得要求就会越来越高。从目前趋势看,大厂对开发人员得要求越来越高,不会像以前那样做非常细的分工。
面对这种挑战,王启军建议,像应届毕业生刚开始进入开发,在来之前就要做非常充足的准备。不像以前一个应届毕业生到了开发岗再学。本来这个行业要求就很高,发展速度很快,更多优秀的人投入进来。很多开发人员入行就已经具备了很高的能力,各方面的技能已经很高了。
以前公司内会有很多培训,还有外部的培训。现在开发人员更多的靠自身成长,靠业务的压力推动成长。
比如用微服务架构,就得自己研究微服务架构,用到数据库要研究数据库。另外还有很多业务,要求开发去看别人的代码,别人也会看你的代码,大家互相交流,这种交流的过程也是一种学习的过程。
王启军说:
现在网上能获取的知识挺多,如果自身有动力想学习会非常容易。不管是书,还是博客,还是公众号,还有技术大会非常多,都是学习通道。如果有学习的想法,有驱动力,知识来源非常广。不一定非得有一个专门阶段性的培训,更多的还是靠自己驱动去学习。
对于学习和提升,王启军认为,好奇心和学习能力最重要。不论之前懂了多少,会了多少,更重要得有一个持续学习的能力,解决问题的能力。
行业变化太快了,即便学到很多,也知道很多东西,过一年两年很多东西就会落后,很多东西已经变化。现在全栈工程师工作范围很广,涉及的点特别多,所以一定要有好奇心,去解决这些问题,这样才能发展得比较好。
不仅如此,全栈工程师需要考虑问题更全面,关注更宽的领域,而不是限制在眼前工作。原来架构师跟开发工程师是分开的,现在又要做开发,又要做架构,还要做测试,这就要求工程师涉及更多的交叉领域,要学会更全面更系统的思考。而不仅仅是只考虑写写代码。
王启军根据自身的经验最后总结说:
全栈工程师必须保持专注
例如,生产环境遇到问题,故障没有定位出来,就需要不断的想,不断的分析,去找这些问题。在这个过程中时间会过得非常快。这样就不会感受太多的压力,不会受外部干扰。专注于问题解决,不会感觉到特别累特别失望。
但是,如果是一种被动的状态,不管学习还是工作,一会做点这个,一会做点那个,时间没有分配好,这样就会感觉特别累。当一个工程师做的都是重要但是又不是特别紧急的事,这个时候效率会很高,绩效也会很好,也就成了一个优秀的全栈工程师。
后记
王启军的公众号,最新更新时间是2020年1月10日。在采访中,他告诉我,未来还会继续把最近做IoT,还有PaaS相关的想法和经验,总结记录下来,时机成熟时可能也会写写书。
而对即将于2020年2月11日-12日在深圳举办华为开发者大会2020(Cloud),王启军也希望有更多的开发人员来亲自参加和体验。
他强调说:
华为云这两年发展非常快,华为云今年更多的是一种挑战者的身份,做的很多东西跟开发者更贴近,想的会比较多,比较灵活,思维会比较活跃,会解释为什么会做成这样,会有更多背后的思考。我相信,大家来参加这样一个大会收获会比较多,会遇到跟你的想法比较接近的人,然后大家一起碰撞,由此催生出更有创意的火花。