华为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),王启军也希望有更多的开发人员来亲自参加和体验。
他强调说:
华为云这两年发展非常快,华为云今年更多的是一种挑战者的身份,做的很多东西跟开发者更贴近,想的会比较多,比较灵活,思维会比较活跃,会解释为什么会做成这样,会有更多背后的思考。我相信,大家来参加这样一个大会收获会比较多,会遇到跟你的想法比较接近的人,然后大家一起碰撞,由此催生出更有创意的火花。
华为IoT首席架构师王启军:全栈工程师“养成记”的更多相关文章
- 阿里巴巴年薪800k大数据全栈工程师成长记
大数据全栈工程师一词,最早出现于Facebook工程师Calos Bueno的一篇文章 - Full Stack (需fanqiang).他把全栈工程师定义为对性能影响有着深入理解的技术通才.自那以后 ...
- 华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题
摘要:数字化转型是一号位工程,数字化的工具本身就是企业的核心竞争力. 本文分享自华为云社区<华为云Stack首席架构师:打造"称手"的数字化工具,答好政企IT数字化转型这道必 ...
- 葡萄城首席架构师:前端开发与Web表格控件技术解读
讲师:Issam Elbaytam,葡萄城集团全球首席架构师(Chief Software Architect of GrapeCity Global).曾任 Data Dynamics.Inc 创始 ...
- 子弹短信光鲜的背后:网易云信首席架构师分享亿级IM平台的技术实践
本文原文内容来自InfoQ的技术分享,本次有修订.勘误和加工,感谢原作者的分享. 1.前言 自从2018年8月20日子弹短信在锤子发布会露面之后(详见<老罗最新发布了“子弹短信”这款IM,主打熟 ...
- [转]CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- CTO、技术总监、首席架构师的区别
2016年11月30日13:22:26[转] CTO.技术总监.首席架构师的区别 提升自已的能力,比如专业技术,行业发展趋势,技术发展趋势,协调能力,组织能力,管理能力等[技术总监] 需要从技术总监和 ...
- 【转】】CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- 深度为君剖析CTO、技术总监、首席架构师的区别
CTO.技术总监.首席架构师的区别 经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个 ...
- 高级程序员与CTO技术总监首席架构师
一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项目经理,你就是公司的产品经理,你如果对你现在的开发员能力不满,那么你只需要的是一个高级程序员. 你定义功能.你做计划推进和管理,他可 ...
- Rancher首席架构师解读Fleet:它何以管理百万集群?
作者简介 Darren Shepherd,Rancher Labs联合创始人及首席架构师.在加入Rancher之前,Darren是Citrix的高级首席工程师,他在那里从事CloudStack.Ope ...
随机推荐
- 从零用VitePress搭建博客教程(7) -– 如何用Github Actions自动化部署到Github Pages?
接上一节:从零用VitePress搭建博客教程(6) -– 第三方组件库的使用和VitePress搭建组件库文档 我们搭建完成vitePress后,那么接下来就是如何部署到线上服务器,这里使用Gith ...
- python加解密小工具
1.地址 https://github.com/Doneone/RSA_GUI 2.用法 python3 rsa_gui.py 创建密钥对 3.思考 为什么要写rsa小工具呐,因为单纯想实现一个简单的 ...
- LangChain实战
1.概述 最近,在研究LangChain时,发现一些比较有意思的点,今天笔者将给大家分享关于LangChain的一些内容. 2.内容 2.1 什么是LangChain? LangChain是一项旨在赋 ...
- HTTP工具类文件request.js的完善和优化
request.js 在现代前端项目中通常被称为一个HTTP请求工具或HTTP工具类文件.它的主要作用是对项目中用到的HTTP请求进行统一的配置和处理. 应用示例: // 查询用户列表 export ...
- JUC并发编程学习笔记(十)线程池(重点)
线程池(重点) 线程池:三大方法.七大参数.四种拒绝策略 池化技术 程序的运行,本质:占用系统的资源!优化资源的使用!-> 池化技术(线程池.连接池.对象池......):创建和销毁十分消耗资源 ...
- DHorse(K8S的CICD平台)的实现原理
综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里. 在微服务.DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情.虽然市面上目前已经存在了比较成熟的自动化 ...
- 【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固
摘要 在开发iOS应用时,保护应用程序的安全是非常重要的.本文将介绍一种使用ipaguard混淆加固的方法来保护iOS应用的安全.通过字符串混淆.类名和方法名混淆.程序结构混淆加密以及反调试.反注 ...
- AcWing 368. 银河
原本是一个差分约束的问题,但是由于数据过大可能导致\(spfa\)被卡,而由于这道题的边权只有\(0,1\)两种,比较特殊,所以使用\(tarjan\)求连通分量,缩点,递推的方式也能完成,时间复杂度 ...
- base64编码的学习
base64编码是什么 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. Base64编码本质上是一种将二进制数据转成 ...
- 月薪3w的报表工程师要会哪些技能?报表工程师的招聘要求解读
对于月薪3w的报表工程师,通常需要具备以下技能: 1. 数据分析与处理 - 数据仓库:了解数据仓库的设计原则和架构,能够构建和优化数据仓库结构. - SQL语言:熟练掌握SQL查询语言,能够编写复杂的 ...