查看原文
其他

技术大佬们都是怎么学习的?

点击关注 👉 Java面试那些事儿 2021-09-05

点击关注下方公众号,Java面试资料 都在这里

来源:oschina.net/question/3774191_2320056


今天逛帖子的时候,看到这么个问题:



这个问题我曾经也很好奇过,那些成为技术大佬的人当初是怎么学习,以及怎么成长过来的,因为我相信他们也是从 0 开始的,也会经历困难期之类的。或许,站在大佬们的“肩膀上”,可以走的更远。


然后这个问题下面,有位“无名大佬”回答了这个问题,我看完后觉得相当不错,重新排版和整理了下,分享给大家一起共勉。


无论你是在校学生,还是职场老鸟,我相信这些想法和建议都会对你有所启发。


# 熟悉更多业务


不管是不是你负责的;熟悉更多代码,不管是不是你写的。


这样做有很多好处,举几个简单的例子:


  • 需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点。

  • 问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速的判断问题可能的原因并进行排查处理。

  • 方案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的方案。


# 熟悉端到端


比如说你负责 Web 后台开发,但实际上用户发起一个 HTTP 请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、Nginx 等)。


服务器一般又会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝大部分人是不可能去参与写代码的。


但掌握了这些知识对你的综合水平有很大作用,例如方案设计、线上故障处理这些更加有含金量的技术工作都需要综合技术水平。


“系统性”、“全局性”、“综合性”这些字眼看起来比较虚,但其实都是技术大牛的必备的素质,要达到这样的境界,必须去熟悉更多系统、业务、代码。


# 自学


一般在比较成熟的团队,由于框架或者组件已经进行了大量的封装,写业务代码所用到的技术确实也比较少。


但我们要明白“唯一不变的只有变化”,框架有可能要改进,组件可能要替换,或者你换了一家公司,新公司既没有组件也没有框架,要你从头开始来做。


这些都是机会,也是挑战,而机会和挑战只会分配给有准备的人,所以这种情况下我们更加需要自学更多东西,因为真正等到要用的时候再来学已经没有时间了。


以 Java 为例,大部分业务代码就是 if-else 加个数据库操作,但我们完全可以自己学些更多 Java 的知识,例如垃圾回收,调优,网络编程等。


这些可能暂时没用,但真要用的时候,不是 Google 一下就可以了,这个时候谁已经掌握了相关知识和技能,机会就是谁的。


以垃圾回收为例,我自己平时就抽时间学习了这些知识,学了 1 年都没用上,但后来用上了几次,每次都解决了卡死的大问题。


而有的同学,写了几年的 Java 代码,对于 stop-the-world 是什么概念都不知道,更不用说去优化了。


你负责的系统和业务,总有不合理和可以改进的地方,这些“不合理”和“可改进”的地方,都是更高级别的怪物,打完后能够增加更多的经验值。


识别出这些地方,并且给出解决方案,然后向主管提出,一次不行两次,多提几次,只要有一次落地了,这就是你的机会。


例如:



只要你去想,其实总能发现可以改进的地方的;如果你觉得系统哪里都没有改进的地方,那就说明你的水平还不够,可以多学习相关技术,多看看业界其它优秀公司怎么做。


我 2013 年调配到九游,刚开始接手了一个简单的后台系统,每天就是配合前台做数据增删改查,看起来完全没意思,是吧?


如果只做这些确实没意思,但我们接手后做了很多事情:


  • 解耦,将一个后台拆分为 2 个后台,提升可扩展性和稳定性。

  • 双机,将单机改为双机系统,提高可靠性。

  • 优化,将原来一个耗时 5 小时的接口优化为耗时 5 分钟。


还有其他很多优化,后来我们这个组承担了更多的系统,后来这个小组 5 个人,负责了 6 个系统。


# Do exercise


在做职业等级沟通的时候,发现有很多同学确实也在尝试 Do more、Do better,但在执行的过程中,几乎每个人都遇到同一个问题:光看不用效果很差,怎么办?


例如:



诸如此类问题还有很多,我这里分享一下个人的经验,其实就是 3 个词:learning、trying、teaching!


# Learning


这个是第一阶段,看书、Google、看视频、看别人的博客都可以,但要注意一点是“系统化”,特别是一些基础性的东西,例如 JVM 原理、Java 编程、网络编程,HTTP 协议等等。


这些基础技术不能只通过 Google 或者博客学习,我的做法一般是先完整的看完一本书全面的了解,然后再通过 Google、视频、博客去有针对性的查找一些有疑问的地方,或者一些技巧。


# trying


这个步骤就是解答前面提到的很多同学的疑惑的关键点,形象来说就是“自己动手丰衣足食”,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。


例如:



还有很多方法,这里就不一一列举,简单来说,就是要将学到的东西真正试试,才能理解更加深刻。


印第安人有一句谚语:I hear and I forget. I see and I remember. I do and I understand ,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。


当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。


# Teaching


一般来说,经过 Learning 和 Trying,能掌握 70% 左右,但要真正掌握,我觉得一定要做到能够跟别人讲清楚。


因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习。


同时,讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。


这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌握很全面了,但一写就发现很多点没考虑到。


组内培训的时候也经常看到,有的同学写了 PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚,或者有的点其实是理解错了。


写 PPT、讲 PPT、讨论 PPT,这个流程全部走一遍,基本上对一个知识点掌握就比较全面了。



热门推荐:
: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

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

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