网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
已剪辑自: https://mp.weixin.qq.com/s/RyykrGlpxVM1z24bFdJyog
无论是在T、W公司还是在华为,我有幸得以一直从事OS(操作系统)行业,但坦率来讲,这是一个拥有无穷乐趣但也充满了艰辛的行业,很多时候并不像外界所认为的那么光鲜。很多人问我对OS怎么看时,我都会讲这样一句话:**操作系统可能是这个世界上最重要,但也是最没用的东西。**最没用是因为只有和芯片、业务等结合,操作系统才具有使用价值;最有用是因为操作系统是连接芯片、硬件和业务的桥梁,谁掌握了操作系统谁就拥有了主动权。
我的职业生涯一直以来都无可救药地和操作系统绑定着,华为公司发起的openEuler社区,一个国内在操作系统领域真正意义上的开放社区,看起来让我的命运又起了新的变化。纵然是命运的安排,也不妨碍从职业生涯中总结出一些感触。作为一个工程师,我认为大体应该经历四个阶段才有可能成为一个成功的码农。
兴趣是成功的基础。虽然我将自己的职业生涯归结为冥冥中命运的安排,但实际上,如果对这个行业没有兴趣,相信我的人生轨迹已经无数次从这个行业脱离开去。所以我始终认为,兴趣是支撑我们职业道路走得远的唯一。
和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说:“当你做软件的时候,不要去考虑它是否能成功,你只需要考虑你自己是否喜欢做这个事情,然后去做就好了。”
诚然,光有兴趣,没有能力也是做不成什么事情的。如果对某一个领域要有深入的理解,一定要有扎实的基础。所谓扎实的基础是,从这个行业的最底层一步步地爬上来,做过这个行业的所有工序,对整个流程都有切身的经验,这样才能拥有对所有技术细节的理解,而细节永远是考验一个人是否专业的标尺。
在这一点上,我要感谢曾经的经历,我完整地经历了一个Linux的发行版本制作的全过程,做过所有的工序。不管哪里出问题,都需要去修理,这也帮助我对OS这样一个庞大的系统具有了全面的理解。这些经历形成的条件反射到现在都还依然清晰。这是技术深度的基础。
还有一个方面则是技术广度的基础,虽然我在学校期间的研究方向和OS没有什么关系,但是分布式系统、存储系统中的很多基本理论、设计方法依然为我后面的职业道路提供了很多的帮助。而博士期间的思维训练,对细节的重视对我也是影响深远。甚至在某个时间点,我突然意识到,无论是宏观的数据中心,还是微观的处理器设计,整个IT世界都是围绕“一致性”这个基本准则在绕圈圈。如果没有相关细节的基础知识打底,是完全不可能产生这些化学反应的。
**同时长期对细节的关注养成的职业习惯会很大程度上有助于技术判断。**在OS领域,通常很少出现问题,但是一旦出现问题,都是大问题。举一个我亲身经历的例子,若干年前,一个客户的USB系统出现了问题,当时客户和FAE(现场应用工程师)团队已经做了详细的分析,判定问题出现的版本区间是XX到XX之间,但是问题必须在2天内闭环,否则后果很严重。
看起来似乎并不难,只要循着二分查找法,很快就可以定位是什么补丁合入导致的问题,但是我总觉得哪里不太对劲,一个是这些合入的代码虽然和USB有关,但是补丁的内容和问题并不完全匹配,二是长期在这个行业,养成了多疑的习惯,虽然前面几个团队都拍着胸脯保证,但我始终对问题总出现在XX和XX之间的结论抱有怀疑。
最终,除了用二分法继续查找原因外,我又找了一个工程师,把问题梳理了一遍,同时和整个社区进行了细细的比对,并没有局限在某个版本区间。幸运的是,最终工程师找到了一个不起眼的、和那个版本区间完全没有关系的补丁解决了这个问题,我的这种谨慎和小心也帮助公司保住了这个客户。
无论多高职级的工程师,只有对细节的关注才能避免一些可能是“眼见为实”的偏差,而尽可能多的知识覆盖,才能让一个人有足够的分析和判断能力,对自己所从事的领域做到心中有数,同时才能产生不同知识之间的交联反应。
**在兴趣和技术细节基础之上,更重要的阶段则是要对所在的行业有深刻的理解。**我从职业生涯的一开始就有机会持续接触市场,多次参与商用操作系统配套多款芯片的全过程,不但技术分析、需求谈判是全程参与,甚至最初的商务报价也是我拍脑袋给出来的。虽然这似乎和纯技术没有直接的关联,但是一个工程师能具体看到所做的东西怎么转化成为商品是一件意义非凡的事情。
穿上西装,打上领带去见客户、投标竞标并不是传统意义上的技术范畴,但是我始终认为这种经历远远要比我的技术积累来得更为重要。**它培养了某种“直觉”,行业的“直觉”。**虽然我认为,对于很多事情,人的直觉是不靠谱的,但那是指对确定性事物而言。但是世界上大量的事物是不确定性的,对于不确定事物走向的判断,除了“直觉”,别无他法。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
、大纲路线、讲解视频,并且后续会持续更新**