长沙第三方网站建设公司,商城网站建设咨询,海报设计免费模板,网络推广属于什么专业这篇文章#xff0c;对于每一个想成为技术大牛的人来说都值得仔细阅读好几遍。
作者#xff1a;曹乐来源#xff1a;再成长一次 图片来自 Pexels
双生说#xff1a;曹乐是典型学霸#xff0c;清华本硕#xff0c;多年互联网大厂研发经验#xff0c;所以“资深”。我刚…这篇文章对于每一个想成为技术大牛的人来说都值得仔细阅读好几遍。
作者曹乐来源再成长一次 图片来自 Pexels
双生说曹乐是典型学霸清华本硕多年互联网大厂研发经验所以“资深”。我刚到新部门的时候约各位合作部门的 Leader 请教也算帮我做新岗位入职的“平稳降落”。
印象最深的就是作为技术 Leader 的曹乐一点都不像技术——他和我谈对业务的理解各个维度的见解与想法让人印象深刻。
然后他很热情的帮我安排了他团队几个同学的 1-1帮助我了解了更多从技术视角对业务与技术团队协同、共创的思考。
后来开始深入合作发现合作的技术同学不仅仅技术上追求精进而且是真正的也能够跳出来去看业务全局。能跳出来能跳进去。
这封信是曹乐写给团队的。如何成为技术大牛(来自另一学霸同事的评论感谢)寻找范式、刻意练习、及时反馈;垂直打透、横向迁移、深度复盘;聪明人要下笨功夫。
Enjoy~
接纳焦虑
很多同学都有关于工程师该如何成长的问题大家普遍对如何成长为牛人如何获得晋升如何在繁忙的工作中持续学习充满了困惑这其实是每一位同学成长过程中必经之路。
最近几次 1-1 也和同学聊过这方面的问题。在这里也想跟大家分享一下我的一些心得。
同学们普遍对成长充满了焦虑感。工作太忙没时间学习需求太多太琐碎感觉自己没什么进步做技术是不是做到 35 岁以后就没人要了等等都是对成长焦虑的体现。
在这里我想说的是这种焦虑是正常的所有的渴望在内心的投射其实都是焦虑。
任何一个渴望成长的人不管处于什么阶段一线工程师架构师还是总监副总裁其实内心中都是充满了焦虑的无一例外。
对于这种焦虑我们所要做的是接纳而不需要过度担忧。这种焦虑并不是说想明白如何成长了就会没有了到了某个阶段就会没有了的。
成长的脚步和期待一刻不止内心的焦虑也一刻不会停歇。正是这种焦虑感驱使你写代码追查问题到星夜驱使你牺牲休息娱乐的时间和一本本厚厚枯燥的书作伴驱使你不断努力向前不舍昼夜。
相反的如果内心中没有这种焦虑反而是值得担忧的。这可能说明已经习惯呆在自己的舒适区了。
在现在这样一个高速发展的社会以及我们这样一个高速发展和变化的行业失去对成长的渴望和焦虑反而是一个非常危险的信号。 35 岁危机
所谓的程序员 35 岁危机其实背后的根本原因是有太多太多人在工作几年以后就觉得自己什么都会了之后的十几年工作只不过是头 2-3 年的简单重复而已。
在我们这样一个行业里在招聘的时候如果摆在管理面前的两个
一个是初出茅庐或刚工作 2-3 年充满了对成长的渴望。另一个工作十多年了但水平和工作 2-3 年的人差不多只是更熟练一些不过在舒适区已经躺了十年了。
如果负责招聘的是你你会做出什么样的选择?而另一方面其实是高端人才在行业内的极度极度稀缺。
大家可以想一想我们部门上一次招聘到 D10 及以上的同学是什么时候?从业务平台部 2016 年中成立到现在一个都没有过。
D9 同学也是凤毛麟角一年能招到 1-2 个就足够可以偷着乐了。面试碰到牛人的时候就如同相亲碰到女神一样激动。这在行业内是非常普遍的现象真正的大牛太稀缺了。
在这样一个行业里如果一个人能够持续成长能力和工作年限成正比的持续提升这样的人任何时候在行业里都是被疯抢怎么可能会遇到任何年龄的危机呢?
每一个业务平台技术部的同学都应该立志成为这样的大牛持续学习和成长。 刻意练习三步法
如何学习其实是有方法论的那就是刻意练习。所谓的 10000 小时成为大牛的理论是片面的如果只是简单重复 10000 小时是不可能成为大牛的。
刻意练习包含了三个步骤
找到你要学习的这个领域体系的范式(Pattern)针对每个范式刻意的反复学习和练习及时反馈
大家在过往的工作和学习生活中或多或少都在实践着刻意练习。拿面临高考的中学生举例子。
好的学生通常是把一门功课拆成了很多知识点(寻找 Pattern)然后针对知识点以及他们的排列组合有针对性的反复做各种难度的题(刻意练习)。
每次做完题都对一下答案看看正确与否如果错了就思考记录复盘(持续及时反馈)。这样的学习方法就是事半功倍的。
而事倍功半的学习方法就是不分青红皂白拿起一本习题或卷子就拼命做我上学的时候身边不少同学非常勤奋但成绩并不好多半都是这个原因。
再举一个我最近在学打羽毛球的例子正确的学习方法是把打羽毛球拆解成步法和手上动作小碎步米字步正反手挑球放网正手和头顶高远球吊球杀球等(寻找 Pattern)。
然后针对每一个动作反复练习(刻意练习)然后请教练或者录下来看视频纠正自己的动作(及时反馈)。
而错误的学习方法是上来就盲目找人打比赛以赛代练这样的进步是很慢的而且错误的动作形成习惯以后未来反而很难纠正。
当学习方法不正确的时候刻苦的学习常常只是看起来很勤奋并没有应有的效果。
当接触一个陌生领域的时候错误的学习方法是不带目的性上来就找一堆相关的大部头开始啃。
而正确的学习方法应该是快速梳理该领域的知识点形成框架体系(寻找 Pattern)这里有些小窍门可以快速构建起一个领域的知识点体系。
例如看一些该领域的综述性或开创性的文章(看论文别瞎看网上的文章)或者找本该领域综述性的教科书看它的目录(注意好的教科书的目录往往就是这个领域的知识框架内容倒不一定非要看下去)。
然后针对每个知识点找书里的相关章节该领域相关 Paper 里的相关 Section 深入学习建立起自己对这个知识点的理解(刻意练习)。
最后再把知识点和现实工作中的情况(自己工作或其他公司相关的工作)进行对照(及时反馈)从而建立对一个知识点的深度理解最后融会贯通建立对一个领域的理解。
这样说可能有点抽象拿我当年学习分布式存储的过程为例子先结合自己的工作内容梳理出需要深入了解的知识点。
例如元信息组织、Meta Server 设计和 HA、副本组织和管理、Recovery、Rebalance、单机存储引擎、数据/元信息流、纠删码、一致性、多租户、存储介质、网络环境和 IDC 等等。
同时看很多综述性的材料梳理分布式存储的知识点(有网上各种整理的比较好的文章也有从各种系统实现的 Paper 里抽出)不断迭代构建分布式存储领域的知识点(寻找 Pattern这是最难的一个过程)。
然后针对每一个知识点找相关材料进行深度学习例如对于分布式一致性需要阅读 CAP 理论Paxos 的论文Raft 的论文等等以及周边的很多材料(刻意练习)。
然后找各种系统实现的论文或文章比如 GFSDynamoAuroraOceanBaseCephSpanner 等等看看和对比它们在一致性上是如何考虑和取舍的。
当然最重要的是结合自己工作中的反复实践和所学知识点进行比对(及时反馈)。
这三个阶段并不是割裂的而是周而复始的经常会在刻意练习和及时反馈的学习过程中发现自己遗漏的知识点或者发现自己梳理的两个知识点其实是重合的。
通过这种交叉比对以及在实践中不断检验的方式建立的知识点是非常可落地的而不会看了几篇论文以后就人云亦云。
拿分布式存储的一致性举例子如果不是反复对比、思考和反复实践你不会发现 GFS 论文里最难的一段多个 Writer 对一个文件进行 Append 的逻辑在实践中根本没用。
你也不会发现看起来优雅而学术的 CAP 三选二的理论实践中压根不是这么完美很多时候只能三选一。
你也不会发现 Dynamo 论文里的 Vector Clock网上有无数文章摇头晃脑的解读但在 Amazon 的应用场景里是个典型的 over designCassandra 在这点就务实很多。
这时候大家可能会有个疑问工作本身就如此繁忙了哪里能抽出足够多的时间去学习? 工作和学习并不割裂
其实工作和学习本身是不应该被割裂的。工作本来就应该是学习的一部分是学习中的实践和及时反馈的部分。学习如果脱离工作的实践是非常低效的。
因此每个同学应该对自己工作所在的这个技术和业务领域进行系统性的学习并在工作中反复实践和验证。
不同的领域之间其实是融汇贯通的当你对一个领域精通并总结出方法论以后很容易就能上手别的领域。
因此花几年实践彻底研究透一个领域对于刚工作几年的同学来说是非常重要甚至是必须的也只有在一个领域打透之后才谈得上跨领域迁移去拓展自己的知识面。
更直接的说对于一个领域还未完全掌握的同学深度是最重要的不用想广度的事情等掌握了一个领域之后再去拓展广度就变得很容易了。
这里一个常见的误区是学习的内容和工作的领域没有太多直接的关系。
例如我以前曾经花了非常大的功夫去读 Linux 内核的源代码以及很多相关的大部头几乎花掉了我将近两年的所有空闲时间。
然而在我这些年的工作里几乎是没有用处的最多就是有一些“启发”ROI 实在是太低了现在也忘得差不多了。
更重要的软件工程是一门实践科学从书本上得到的知识如果没有在实践中应用和检验基本上是没有用处的。
举一个例子很多优秀的架构师尽管日常工作中可能反复在用但未必说得出开闭原则里氏替换原则迪米特法则等等。
反过来对面向对象设计这 7 大原则出口成章的人很多其实离真正的架构师还远得很有些甚至只是博客架构师而已。
实践远远比看书看文章重要得多上文所述的我构建自己分布式存储知识体系的过程看起来好像都是看材料看论文而实际上 80% 的收获都来源于带着理论的实践和从实践中总结沉淀的理论。
因此彻底搞明白自己工作所在的技术和业务领域是最务实高效的做法工作和学习割裂会导致工作和学习都没做好。
这时候大家可能会有另一个疑问感觉日常工作非常琐碎学不到什么东西怎么办?
如果把学习分成从书本中学和从工作中学这两种的话那毫无疑问工作中的“知识密度”比起书本的“知识密度”肯定是要低很多的因为书本里的知识那都是人家从他们的工作中抽象总结出来的。
这也是为什么大家普遍觉得日常工作“琐碎”。然而工作中每个点滴的琐事与平凡都是可以抽象总结成为方法论的更别说工作所在的领域自身的博大精深了。从日常工作中学习的秘诀就是“行动中思考”。 优秀架构师的两大能力
对于每一个软件工程师最重要的两个能力
写代码Trouble Shooting
并且要成为优秀的架构师出色的开发能力和追查问题的能力是一切的基础。
提高写代码的能力的核心首先在于坚持不断的写但更重要的在于每天每周持续不断的 Review 自己之前的代码同时多 Review 牛人写的代码。
比如团队里你觉得代码写的比你好的同事比如社区里以代码漂亮著称的开源代码(作为一个 C 程序员当年我的榜样之一是 Boost 库)。一旦觉得自己之前的代码不够好就立刻复盘立刻重构。
更重要的是多思考自己代码和好的代码之间不同之处背后的为什么通常这就是为什么这些代码更好的背后的秘密。
特别要说明的是代码规范除了知道是什么外要格外重视思考每一个代码规范背后的为什么。代码规范的每一句话背后无一例外都是一片江湖上的血泪史。
要提高 Trouble Shooting 的能力关键在于要深度复盘自己遇到的每一个问题包括线上的包括测试发现的。
寻找每一个问题每一次事故背后的 Root Cause并且思考后续如何避免同类问题如何更快的发现同类问题。
要对团队内外遇到的所有问题都要保持好奇心关注一下周边的事故、问题背后的 Root Cause。
Trouble Shooting 能力的提高是几乎无法从书本上得到的完全来源于对每一个问题的深度思考以及广泛积累每一个问题。
对于架构师而言可能未必在一线写代码了但看团队中一个架构师是否真正牛逼的一个很重要标准就是看他是否能够追查出团队其他同学查不出来的问题。
我见过的一个真正牛逼的架构师对于系统中疑难杂症通常问几个问题就能大致猜出是哪里出的问题以及可能的原因是什么准确程度如同算命屡试不爽令人叹为观止。
对于一个架构师除了更加优秀的代码能力和 Trouble Shooting 能力外需要构建相对完整的当前技术领域的知识体系需要有体系化的思维能力需要对技术所服务的业务有非常深入的了解。
体系化的思维能力来源于两个方面。一方面是在日常工作中对每一个接口设计每一个逻辑每一个模块子系统的拆分和组织方式每一个需求的技术方案每一个系统的顶层设计都要反复思考和推敲不断的复盘。
另一方面需要大量广泛的学习行业内相似系统的架构设计这其实就是开天眼只是技术相对来说行业内的交流更加频繁。
淘宝、美团、百度、Google、Facebook、Amazon 等各个公司介绍系统架构的论文和 PPT 铺天盖地需要带着问题持续学习。
除了技术领域本身外架构师需要非常了解业务上是如何使用我们的系统的否则非常容易 Over Design陷入技术的自嗨中。
这也是为什么我说 Amazon Dynamo 论文里讲的 Vector Clock 是个 Over Design 的原因。
另一方面很多时候技术上绕不过去的坎可能非常复杂的实现往往只需要上层业务稍微变通一下就完全可以绕过去。
这也是为什么我说 GFS 论文里多个 Writer 同时 Append 同一个文件是个根本没用的设计(实际上 Google 内部也把这个功能去掉了)。
这也是为什么我在咱们部门内反复强调大家需要深入了解业务因为达到同样的业务目标可能稍微改一下产品方案就可以让需求的技术实现变得无比简单。
只有真正知道上层业务是如何使用系统的才可能真正做好架构。
深入了解业务并不难对于每个同学只要对于每一个接到的需求对于每一个需求评审中的需求对于周边同学或团队要做的需求都深入思考为什么业务要提出这个需求这个需求解决了业务的什么问题有没有更好的方案。
遇到不明白的多和周边同学、产品、运营同学请教。最怕的是自己把自己限定为纯粹的研发接到需求就无脑做这等于放弃了主动思考。
衡量一个人是不是好的架构师也有一个方法。对于一个需求如果他给出了好几个可行的方案说这些方案也可以那些方案也可以往往说明他在架构师的路上还没有完全入门。
架构师的难点不在于给出方案而在于找到唯一的那一个最简单优雅的方案。
总结起来看行动中思考就是始终保持好奇不断从工作中发现问题不断带着问题回到工作中去;不断思考不断在工作中验证思考;不断从工作中总结抽象不断对工作进行复盘持续不断把工作内容和全领域的知识交叉验证反复实践的过程。
在工作所在的技术和业务领域中刻意练习加上行动中思考就是成为技术大牛的秘诀。
看起来方法也不复杂为什么大牛还是非常稀少?
尽管我们通篇都在讲方法但其实在成为技术大牛的路上方法反而是没那么重要的。
真正困难的在于数年数十年如一日的坚持。太多人遇到挫折遇到瓶颈就觉得手头的事情太乏味枯燥就想要换一个方向换一个领域去学新的技术新的东西。
而真正能够成为大牛的必须是能够青灯古佛熬得住突破瓶颈前长时间的寂寞的必须是肯下笨功夫的聪明人。
因此和坚持相比方法其实并没有那么重要。和大家共勉。