本帖最后由 twq19810302 于 2022-12-10 10:54 编辑 # P* g9 u5 N9 k- D1 }# J7 N2 ?) G
" \) p5 i1 ?9 P如何成为一名优秀的工程师,来看看华为员工怎么说——0 S3 W0 X; D- e4 A
# T, }9 ]; \/ R3 X
无论是在T、W公司还是在华为,我有幸得以一直从事OS(操作系统)行业,但坦率来讲,这是一个拥有无穷乐趣但也充满了艰辛的行业,很多时候并不像外界所认为的那么光鲜。 很多人问我对OS怎么看时,我都会讲这样一句话:操作系统可能是这个世界上最重要,但也是最没用的东西。 最没用是因为只有和芯片、业务等结合,操作系统才具有使用价值;最有用是因为操作系统是连接芯片、硬件和业务的桥梁,谁掌握了操作系统谁就拥有了主动权。 我的职业生涯一直以来都无可救****地和操作系统绑定着,华为公司发起的openEuler社区,一个国内在操作系统领域真正意义上的开放社区,看起来让我的命运又起了新的变化。 纵然是命运的安排,也不妨碍从职业生涯中总结出一些感触。作为一个工程师,我认为大体应该经历四个阶段。
3 {' k B; b& S
01 持续的兴趣兴趣是成功的基础。 虽然我将自己的职业生涯归结为冥冥中命运的安排,但实际上,如果对这个行业没有兴趣,相信我的人生轨迹已经无数次从这个行业脱离开去。 所以我始终认为,兴趣是支撑我们职业道路走得远的唯一。 和Linux、操作系统结缘还是20多年前,我上大学的时候。大三那年,一个同学从北京回学校,带来了两样东西,一个是T公司的安装光盘,还有一本W公司嵌入式OS开发手册。 时隔这么多年,我都还能清晰记得光盘上红白相间的闪电和开发手册几乎全黑的封面。我当时拿着这两个“宝贝”,心想:如果有一天我能在这样的公司上班,那该是怎样的人生巅峰。 但是当时的我绝对不可能想到,若干年以后,我会是这两个公司的研发负责人。 我在研究生、博士期间所学和OS一点关系都没有,我的专业是分布式计算和大规模存储。 当我的人生轨迹看起来一切安好地沿着存储一路狂奔的时候,毕业季到了,我却面临找不到工作的窘境。 彼时国内IT能力还处于随便代理点西方的东西就能发财的阶段,没有什么公司去做深层次的研发。 所幸由于做存储不得不修改Linux内核,加上平时也喜欢玩玩Linux,虽然我当时的水平放到现在简直是二把刀的档次,但在那个能装上Linux都是高手的时代,这点手艺让我通过了T公司的面试,进入了这个在大学期间我就心之向往的公司。 当时的工作状态是什么都得做,而且所有的事情都要靠自己。 我很快认识到,和我上学时想象中的高大上完全不一样,做Linux发行版实际上是一个很枯燥、乏味的工作。 没有留着大胡子的hacker(黑客),也没有穿着T恤写程序的开源范儿,有的是无穷无尽的制作软件包,修改有着无数bug的安装程序,不知什么时候来临的程序崩溃、系统黑屏。 凌晨两点被销售的电话惊醒,回答技术问题也是屡见不鲜,以至于我一直有写一篇论文的冲动,论文名字是:《论IT故障总在后半夜的社会学基础和技术背景分析》。 随着市场和行业的变迁,在T公司工作了4年后我加入了W公司WRLinux产品线,由于产品线刚成立,所以也经历了一段混乱时期,我们不得不和全球的同事们一起从产品设计、具体实现到流程管理等一点点地将产品线逐步推到正轨上。 公司工作多年后我发现,不论什么行业做到最后,枯燥乏味才是行业的本质。 无论求学时的我对当时的T和W公司怀有多大的憧憬和期待,对OS技术具有多么高的敬意,但是在工作后没多久,原始的兴趣就消退了,随之而来的是疲倦和乏味。 这其实很正常,任何兴趣变成职业以后剩下的多半只有痛苦。 可能在这个时候,恰恰是兴趣检验你是不是真的喜欢做这行,或者能做这行,甚至很大程度上,兴趣也决定了你最终在这个行业能达到的高度。 我很难想象,一个对OS没有兴趣的人会下班以后在家打开电脑,去尝试学习一种新语言,去安装一个新的OS玩玩,去了解一下内核的底层机制是怎么样的,或者无聊到写一个小玩意保持一下手感。 我还是喜欢用Linus在CNCF2017大会上的一段话来佐证一下兴趣的重要性。他说他依然很讨厌C++,对maintainer(维护者)依然怀有tough love(又爱又恨) 但当有人问他如何做好一个软件项目,如何能让一个开源软件更成功的时候。 Linus说:“当你做软件的时候,不要去考虑它是否能成功,你只需要考虑你自己是否喜欢做这个事情,然后去做就好了。”
! @: T+ u4 @" m- R# z$ ? 02 基于细节的技术基础诚然,光有兴趣,没有能力也是做不成什么事情的。如果对某一个领域要有深入的理解,一定要有扎实的基础。 所谓扎实的基础是,从这个行业的最底层一步步地爬上来,做过这个行业的所有工序,对整个流程都有切身的经验,这样才能拥有对所有技术细节的理解,而细节永远是考验一个人是否专业的标尺。 在这一点上,我要感谢曾经的经历,我完整地经历了一个Linux的发行版本制作的全过程,做过所有的工序。 不管哪里出问题,都需要去修理,这也帮助我对OS这样一个庞大的系统具有了全面的理解。这些经历形成的条件反射到现在都还依然清晰。这是技术深度的基础。 还有一个方面则是技术广度的基础,虽然我在学校期间的研究方向和OS没有什么关系,但是分布式系统、存储系统中的很多基本理论、设计方法依然为我后面的职业道路提供了很多的帮助。 而博士期间的思维训练,对细节的重视对我也是影响深远。甚至在某个时间点,我突然意识到,无论是宏观的数据中心,还是微观的处理器设计,整个IT世界都是围绕“一致性”这个基本准则在绕圈圈。 如果没有相关细节的基础知识打底,是完全不可能产生这些化学反应的。 同时长期对细节的关注养成的职业习惯会很大程度上有助于技术判断。 在OS领域,通常很少出现问题,但是一旦出现问题,都是大问题。 举一个我亲身经历的例子,若干年前,一个客户的USB系统出现了问题,当时客户和FAE(现场应用工程师)团队已经做了详细的分析,判定问题出现的版本区间是XX到XX之间,但是问题必须在2天内闭环,否则后果很严重。 看起来似乎并不难,只要循着二分查找法,很快就可以定位是什么补丁合入导致的问题,但是我总觉得哪里不太对劲; - 一个是这些合入的代码虽然和USB有关,但是补丁的内容和问题并不完全匹配;
- 二是长期在这个行业,养成了多疑的习惯,虽然前面几个团队都拍着胸脯保证,但我始终对问题总出现在XX和XX之间的结论抱有怀疑。
$ \) a2 e, J: \. \9 v! C3 o7 i2 B# q; c) J. d# }# u
最终,除了用二分法继续查找原因外,我又找了一个工程师,把问题梳理了一遍,同时和整个社区进行了细细的比对,并没有局限在某个版本区间。 幸运的是,最终工程师找到了一个不起眼的、和那个版本区间完全没有关系的补丁解决了这个问题,我的这种谨慎和小心也帮助公司保住了这个客户。 无论多高职级的工程师,只有对细节的关注才能避免一些可能是“眼见为实”的偏差,而尽可能多的知识覆盖,才能让一个人有足够的分析和判断能力,对自己所从事的领域做到心中有数,同时才能产生不同知识之间的交联反应。
# t' O2 t$ T+ }' w3 Q) n 03 深入客户的行业理解在兴趣和技术细节基础之上,更重要的阶段则是要对所在的行业有深刻的理解。 我从职业生涯的一开始就有机会持续接触市场,多次参与商用操作系统配套多款芯片的全过程,不但技术分析、需求谈判是全程参与,甚至最初的商务报价也是我拍脑袋给出来的。 虽然这似乎和纯技术没有直接的关联,但是一个工程师能具体看到所做的东西怎么转化成为商品是一件意义非凡的事情。 穿上西装,打上领带去见客户、投标竞标并不是传统意义上的技术范畴,但是我始终认为这种经历远远要比我的技术积累来得更为重要。 它培养了某种“直觉”,行业的“直觉”。 虽然我认为,对于很多事情,人的直觉是不靠谱的,但那是指对确定性事物而言。但是世界上大量的事物是不确定性的,对于不确定事物走向的判断,除了“直觉”,别无他法。 参与到市场化、产品化的过程中,能够极大地提升工程师对技术的进一步认知。 以openEuler为例,我们在一开始的设计过程中就始终强调一点,一定要以生态伙伴的利益为最高的设计目标,要帮助合作伙伴更多的赢利。如果只是单纯从技术角度来看,这好像听起来怪怪的,我们花费了成本,却不主动获得收益。 但是如果从更为广泛的市场角度来看,其实,操作系统本身是连接硬件和软件的桥梁,连接畅通了,交流更顺畅了,市场繁荣起来了,在这个市场里的玩家,不论是硬件,还是软件,都会获得可观的收益。 因此就完全没有必要去收一点点过桥费了! 只有在对行业有深刻的理解的基础上,我们才能谈到技术规划,我们才能谈到版本演进路径,我们才能谈到生命周期,甚至才能谈到社区治理、技术方向的投入等内容。 如果要做一个总结的话,可以囊括成为一句话:不光要懂技术,更要懂行。
- [6 }- z. [, y2 \6 T7 t 04 面向完整业务的创新我一直认为只有在懂行的基础上才谈得上创新,我理解的创新并不是一个技巧的改进,一段代码灵光一闪的优化,而应该是在对所在领域深刻理解的基础上做出的一些或大或小的变革,或者是一个完整的产品,或者一个完整的系统,而且这些变革、产品、系统能在商业上带来一些收益。这应该是一个工程师最高的境界了。 从创新的角度来说,个人之见,一个顶级的工程师,并不是那个在发动机的外壳画上一道线,然后说这道线值1美元,但是知道在哪里画值49999美元的天才,而是创造了发动机的那个无名工程师。 在我看来,那个天才只是修正了这个工程师的一个bug而已,只是一个“微创新”,而那个工程师才是使得这个故事有一个开始的人。 传统上,由企业主导的内部创新都会强调必须要和业务强结合,同时要求短期能够有收益,因此,对于很多长周期的、可能具有颠覆性效用的创新,企业内的研发环境可能并不那么友好。 幸运的是,华为已经正式开始实施鲲鹏产业战略,操作系统成为了重要的一环。公司成立了openEuler开源社区,按照行业的做法来做生态,目标就是作为一个开放、创新的开源平台,为第三方的操作系统提供稳固的底座和基础。 一个全新的鲲鹏架构,一个全新的openEuler的开放社区,我们可以将一些不成熟的,甚至是天马行空的想法放到社区里孵化,让宽容的开源社区为这些项目提供一个良好的生长空间。 希望openEuler社区能孕育出更多创造发动机的工程师,而唯一的区别是,你绝不会再默默无闻。 05 结语公司近几年发生了非常多的变化,对我来讲,文化和思想上的变化是最重要的。 而可信、生态、clean code,这些虽然看起来有点形而上学的词语,现在也逐渐在公司的各个角落以不同的形式产生着些许化学反应。 但我刻意没有去聊一些代码方面的经历和经验,我始终认为,代码技巧虽然重要,但是大体只能支持一个工程师到第二个层次,也就是基础层面。 就像从幼儿园、小学开始我们就接受汉字练习,接受作文技巧方面的训练,但是会汉字,有技巧并不能保证我们写出伟大的作品。 任何伟大的文学作品本质还是对生活的深刻理解。 因此,在我看来,除了一步步爬过这四个层次,似乎没有别的办法能够让我们一步登天,引领世界。所以,当我们各个部门和团队进行创新的时候,可能要先审视一下是否已经经过了这几个阶段,是否有足够的人员已经具有了这几个层次的条件。 在这里对年轻的工程师们提出一些个人的建议吧,最近这两年,产业环境发生了巨变,一方面指令集、芯片、体系架构、存储器件等硬件领域经历着巨大的变革;另一方面,5G、云计算、IoT、边缘计算等新兴领域蓬勃兴起,这些都推动操作系统领域发生深刻的变化,它不但是连接硬件和软件之间的桥梁,更成为软件生态的控盘手。 操作系统以及附着之上的生态系统已经成为各大公司的必争之地,让这个传统领域以另外一种形式重新回到了舞台中央。 我希望越来越多的年轻人能培养起对操作系统强烈的兴趣,打好技术基础,接触市场,逐步积累行业知识,发挥想象,也希望公司能多为工程师,特别是年轻工程师创造这样的环境。 我相信只有越来越多的年轻工程师拥有这四个层面的能力,华为公司才能真正具有成为引领者的基础。原文:《华为文摘》第十五辑
7 k* Y0 F: h6 C$ v |