B哥是我的导师,记得我刚进入腾讯实习的那天,是他出来接我。当时我有点怀疑,不会吧,不会吧,我的导师这么年轻?和我想象中的经验丰富的程序员的样子简直天壤之别。想象中的程序猿后来确认了,他就是我的导师,怎么会这么年轻呢?惊讶之余,我也在期待他有没有什么过人之处,可以带我学习带我飞。直到现在认识B哥已经一年多了。老实说,刚开始我还并没有觉得他特别厉害,但是随着和他在工作中的合作交流,渐渐地加深了对他的了解,我才越来越发现,这个人是真的强啊!有多强呢?B哥本科毕业后直接工作,经历了四年的打拼,如今的他已经是腾讯的高级软件开发工程师和技术owner,在上海有好车、买得起市区房,前段时间还和漂亮妹子领了结婚证,真是典型的人生赢家啊!关键还很帅,发量足,你说酸人不?酸了那么B哥是怎么做到年轻有为、有事业、有车房妹的呢?曾经B哥也和我讲过他的成长经历,但是今天我要分享的不是他的奋斗史,而是想和大家聊一聊,我作为他的徒弟,和他发生了那么多故事,从他的身上看到了哪些优秀的技术人应该具有的特质,也是我认为B哥牛逼的原因。技术控很多优秀的程序员应该都有对技术的追求,或是见多识广,或是深入研究,而且非常乐于将他们懂的技术分享给更多人。B哥就是这样一位技术控,他刚毕业的时候,就通读了很多知名框架的源码,并且能够将他们清晰地讲出来。记得我刚进腾讯的时候,听的第一场技术分享就是B哥的《深入Netty》,从分享中,能明显地感受到B哥对这个技术的深入理解和融会贯通,让我们这些小白也能深入浅出。而让我震惊的是,B哥早在多年前,就已经了解并学习了这门技术。如果不是对技术有独特的追求,怎么能坚持这么多年去深入学习一门技术呢?真的很佩服。全局观我觉得跟B哥开会老有意思了。每次和B哥一起开会讨论技术方案,在我们其他人觉得这个方案没问题时,B哥都会说一句:“我建议大家再好好想想,有没有什么遗漏的点,我觉得这里面可能有坑!”其实我当时心想:能有啥问题啊,多好的方案啊!陷入沉思然后B哥和大家就陷入了沉思,一会儿之后,果然B哥发现了这个方案的漏洞。原来,我们很多同学都只考虑这个方案对自己团队的项目是否适用,保证自己的负责的数据是否正确,而忽略了大家的项目是要紧密协作、相互配合的,视野太过局限。而如果将这个方案应用到完整的大项目中,各个团队的数据可能出现不一致,就是一个很大的问题!后来和B哥接触多了,发现B哥非常有全局观,总能站在一个更高、更全局的视角去考虑问题。在设计方案时,不仅考虑自己的负责的系统,还要想想这个方案会对其他团队的系统、以及整个大项目会有什么影响。因此,规避了很多的风险,也在各团队中树立了自己“稳”的形象。想成为优秀的技术人,一定要培养全局观,否则在负责大的项目时可能会力不从心。慎行B哥做事非常小心谨慎,体现在多个方面。在设计方案时,B哥会尽力验证方案的可行性,而不是凭直觉和过去的经验主观臆断。在编写代码时,B哥坚守『软件世界中的不信任原则』,采用防御性编程,在每个可能的风险点加上异常处理机制,并利用监控告警即时发现线上问题。在测试时,B哥会考虑到很多的极端情况,保证测试有效且完整。在提交代码时,B哥会再次整体通读代码,并让我们其他同事参与代码审核,保证代码的质量。正是因为B哥的慎行,跟他一起做项目非常放心,几乎没有出过线上问题。唉,好久没有体验过改bug的紧张刺激感了。平淡沟通在企业中,高效沟通太重要了。记得有一次我遇到了一个问题,就拉了一位相关的业务负责人来讨论,然后这个负责人又拉了一个产品经理,然后这个产品经理又拉了一个开发,最后这个开发又找到了B哥,然后B哥又来找我。禁止套娃最后局面非常尴尬,其实是我自己沟通不当,没把问题描述清楚就去找别人帮忙了,浪费了大家的时间。在B哥的指导下,我整理了自己的思路,清晰地描述问题,然后直接找到相关负责人,打个电话问题就解决了。优秀的技术大佬,他们的沟通能力通常是很强的,他们能够用方便他人理解的方式来描述问题,比如提供文档、图片、甚至是视频等,拒绝无效沟通。而沟通能力也是需要实际锻炼才能提升的,每个人沟通和表达的方式也不同,还是要多和他人沟通,并且向沟通达人学习和积累经验。架构能力B哥很会架构。就拿我们负责的这个项目来说,短短几个月,业务功能已经变得复杂不堪,而且请求量也已经增长了上千倍。但是B哥在设计程序架构时,用了很多的设计模式,使得程序变得易于扩展。即使业务增长很快,我们仍然可以轻松应对业务的扩展,每次新增一个功能也几乎不需要改动现有的代码,而是新增代码即可,不仅开发效率更高,风险也大大降低。B哥在很早前就考虑到了业务增长的可能性,因此给项目采用微服务架构,针对部分性能瓶颈,采用可扩容设计,使得提升项目的性能和吞吐量变得易如反掌。请求量增长,咱加机器就行了!轻轻松松我问B哥:“你的架构能力是怎么提升的?”B哥却告诉我,没有捷径。想要提升架构能力可不简单,不仅仅需要阅读大量的书籍,更重要的是在企业中不断参与项目实践,积累经验。刨根问底刚来实习的时候,对公司的很多技术框架、业务知识都不太懂,就经常去请教大佬们一些问题。但是每次只要成功地解决了问题,我就心满意足了,而不去关心问题背后的原因。比如有一次程序挂了,后来又恢复了,我就没去排查。然后B哥问我:“程序为什么挂了?”我根本没去查,所以也没办法回答B哥,就说了一句:“现在好了不就行了么?”B哥语重心长地说:“程序出现问题不可怕,但是出现了问题不去追溯原因,下次再出现相同的问题,怎么办?尤其是偶发问题,是最致命的!”我觉得有理,就去分析日志,查出来是有一段时间数据库宕机了,就赶紧开心地告诉B哥。结果B哥很严肃:“数据库宕机不是小事!你知道数据库为什么宕机么?”我心想:我怎么知道啊!去问运维啊?后来我就去问运维,发现是由于数据库压力过大导致的宕机,就又屁颠屁颠地告诉B哥。B哥依然严肃:“数据库压力为什么大?”我就又去分析日志,联合运维一起进行排查,最后发现是其他共库业务的慢查询导致的数据库请求阻塞。这才终于真相大白!于是我们将数据库独立迁移,很好地规避了日后的风险。这件事之后,我开始像B哥一样,遇到问题刨根问底,深挖问题的本质,我认为这个过程远远比解决问题更重要,让我得到了更大的成长。打破砂锅问到底洁癖有一次,我写了一坨自认为不错的代码,提交前把代码先交给B哥来检查一下。然后B哥看了一会儿,神情凝重,缓缓转过身问我。“你有洁癖么?”我当时一愣,随即明白B哥是在说我写的代码不够整洁。作为一个读过《代码整洁之道》的程序员,我很自信地回答:“当然有洁癖!”B哥就给我指出了代码中的问题,原来有一段逻辑我使用了多个if-else,其实应该用设计模式来代替。我当时还振振有词:“我觉得这里直接用if-else就行了,省事儿啊!”B哥:“不通过,改!”后来我乖乖地改了。果然之后这段代码增加了一些复杂的逻辑,如果用原先if-else的方式,代码的改动工作量非常大,还容易出错。而用了设计模式,程序变得更加可扩展、可维护。感谢B哥和代码洁癖!现在想想,当时的自己不过为偷懒找个理由罢了。用户为本B哥非常宠用户,体现在两个方面。首先,他在和产品讨论需求和设计方案时一切从用户出发。只要对用户真的有帮助、能提高他们的使用体验,哪怕工作量多一点,只要性价比是合理的,B哥也会去做。因此,我们的产品才能变得更加易用,得到用户的好评。此外,每次出现线上用户的问题和反馈,B哥都会在第一时间积极地配合产品进行处理和引导。在帮助用户解决问题后,B哥会记录这些问题发生的原因,并思考如何改进程序来防止类似问题的发生,以及如何进一步提升用户的体验。不仅仅是产品经理才要坚持“用户为本”的原则,优秀的技术人也会关心用户、倾听用户,而不是一门心思陷到代码中,只想着如何把代码写的又好看又简洁。倾听用户执行力B哥做事一向快、狠、准,有着极强的执行力,只要答应过别人的事情都会按时完成。曾经我也一直觉得自己的执行力很强,但到了公司后,发现很多事情也喜欢拖延。比如答应给别人提供接口文档,结果后来就忘了,直到别人再三催促才草草写了几笔应付了事。我就很好奇B哥是如何做到“雷厉风行”的?好奇暗中观察B哥一段时间后,发现B哥始终保持对工作的热情和积极性,别人有事找他时,他能够站在对方的角度去考虑这个事情的紧急程度,然后将其进行记录,并和自己正要处理的其他事情按优先级进行排序。有时,B哥还会设置一个定时提醒防止自己忘记。安排好要做的事后,B哥就保持专注地一件一件去处理事务,并在完成后及时回复对方。即使有时实在太忙,也会提前告诉对方自己暂时无法处理,并给对方一些临时的处理方案。比起乱序地同时去处理多个事,B哥的这种工作方式显得更加沉稳,这也是B哥能持续保持强执行力的原因吧。这么一想,很多技术大佬好像都是这样。懒刚刚夸完B哥执行力强,怎么又提到“懒”了呢?的确,无论是在处理业务还是具体到敲代码,B哥都很懒。比如,由于网络等原因,我们的定时任务程序可能执行异常,就需要重新去执行一次。最开始都是我们人工去平台上点重新执行的,但次数多了就比较烦了。B哥懒啊,就提出写个程序自动重跑执行失败的任务。后来我们再也不用人工去操作了,巴适得很!用B哥的话来说,所有人工的操作本质上都可以交给机器自动来完成,只是实现的难度不同罢了。如果编写一个小程序就能省去重复的工作,何乐而不为呢?其实,大部分优秀的技术人都很“懒”。懒得写重复代码,我们就抽象、封装、组件化、复用;懒得去核对数据,就写任务定时自动去检测数据;懒得写代码,就使用一些脚手架、框架、低代码构建平台等。懒人推动世界。画图能力这里的画图不是指电脑上的“画图程序”,而是指计算机相关的图片,比如系统架构图、部署图、UML类图、时序图等。在认识B哥前啊,我觉得自己画图老厉害了,简直“灵*画手”,巧夺天工啊。直到后来看了B哥画的一些架构图、时序图、状态机图等等,我才发现自己真的是井底之蛙。B哥画的图不仅大气干净,而且利用一些小技巧帮助大家更快地理解这些图要表达的意思,比如用不同的颜色来区分关键信息等。最佩服的是,B哥画图不仅好看,还特别快。有时画图的速度甚至超过了我们去阅读理解图的速度,恐怖如斯!后来,在公司待久了,阅读了更多的技术方案,才发现优秀的画图能力是技术大牛的必备技能。很多复杂的系统和方案,我们无法单纯地用语言去表达,而使用图片的形式能够帮助大家理解。当然,想画好图本身并不容易,也是需要设计思维和经验的。因此,我们需要多多锻炼自己的画图能力。建议多看他人的图,模仿的多了,说不定就超越了呢?复杂的架构图引路人我放弃保研,选择直接实习转正留在腾讯,很大一部分是因为B哥。B哥可能不是技术最强的师傅,但一定是一位好师傅。别的不说,B哥给新人非常多的发挥空间,让我自己去思考和设计方案来实现需求。在我遇到一些问题后,并不是直接帮助我解答,而是引导我自己去解决这个问题。B哥非常信任新人,一些项目的技术选型、方案调研、架构设计,B哥都能够交给我来做。因此,我非常有动力,也变得更加自主,在短时间内得到了很大的成长。B哥还非常关心新人的成长,经常和我交流,给了我很多实用的意见,真的很感谢B哥。此外,B哥还经常耐心地帮助其他同学解答问题,不是简简单单三言两语就完事儿,而是直到提问的同学彻底理解,方才罢休。优秀的技术人不仅要自身技术过硬,还应该懂得如何分享传授技术、带领他人进步,不断提升自己的影响力,甚至是成为某项技术的布道者。爱生活最后啊,分享B哥保持年轻的秘诀吧!B哥不像大家想象中的程序员,双眼无神、眼圈发黑、脊背弯曲、格子衬衫、不爱运动。相反,B哥非常热爱生活,每周会坚持健身、自己下厨做饭、养了一只布偶猫,还经常带妹子去各种地方玩!羡慕了,什么时候我能像B哥一样,平衡工作和生活,活的潇潇洒洒啊!其实,还要很多优秀的技术人需要具备的其他特质,比如追求极致、洞察力、决策力、创造力等等。学无止境,我们仍然需要不断努力和成长。最后,正好B哥的生日也在这个月,就提前祝B哥生日快乐叭!希望能够继续跟着B哥混啊,有朝一日青出于蓝而胜于蓝,我也能成长为一名优秀的技术人,成为别人的导师,帮助更多人进步!
往期推荐
揭秘软件开发的达摩克利斯之剑
大厂机密!30个提升团队研发效能的锦囊
实战
尝鲜Svelte前端框架,开发读书笔记
觉得不错,长按