查看原文
其他

四年,上海,车房妹

鱼皮 程序员鱼皮 2022-08-14
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 前端框架,开发读书笔记



觉得不错,长按关注叭

送您「史上最全 Java 学习教程」后台回复 “999” 领取!技术无限,抽奖也不停哦后台回复 “我要抽奖” 拿奖品啦

点小花花,让他们知道你 “在看” 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存