如何成为技术大牛——阿里CodeLife

天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?

几个误区

  跟着大牛,就可以成为大牛。首先,大牛时间很宝贵,不可能花很多时间去指导你;其次,简单的模仿大牛,只能学到表面知识,不可能成为大牛;最后,不是每个人身边都有大牛,可能有很多水平比你高的,如果仅仅以他们为目标,那么你最终也只能达到他们的水平。

  光写业务代码也可以成为技术大牛。首先业务代码确实有技术含量,刚开始可以从业务代码中学到很多经验,快速成长。但是随着业务代码的增加,从中学到的经验可能会越来越少,从而到达技术瓶颈。这时候就需要跳出来,去挑战更大目标。前提是能写好业务代码,如果业务代码都写不好,可能无法成为技术大牛,但是,仅仅写好业务代码也无法成为技术大牛。

  上班太忙,没时间学习。很多人认为自己加班才能勉强完成任务,哪有额外时间去学习。引申的含义是:上班都是做重复的事情,要学习需要额外时间;同时学习需要大段连续时间。正确的做法,刚好相反:需要在工作中学习和提升,把学到的东西运用到工作中,效果是最好的;其次工作后的学习不需要大段时间,而是学会利用碎片时间学习。

正确的做法

做的更多,做的比你主管安排给你的任务更多

  要想有机会,首先你需要从人群中冒出来,要想冒出来,必须狱中不同,要做到与众不同,你就要做的更多。

  怎么做呢?

  1、熟悉更多的业务,不管是不是你负责的,熟悉更多的代码,不管是不是你写的。

  这样做会使需求分析更加准确,因为你熟悉了相关的业务;问题能够快速处理,因为你熟悉业务,有熟悉代码,能够快速定位问题;有了全局业务的理解,方案设计更加周全。

  2、熟悉端到端

  比如一个HTTP请求,要经过很多中间的步骤(如:浏览器缓存、dns、nginx等),服务器一般也会经过多个步骤才会到业务代码(路由,权限等)。这整个流程或者系统,大部分人都不可能都参与写代码,虽然掌握这些知识对你直接写代码作用不是很大,但是能提高你的综合水平,对于方案设计,线上故障处理等这几技术含量高的工作都需要这些综合知识。

  系统性、全局性、综合性等都是技术大牛必备的素质,要想达到这样的境界,必须去熟悉更多系统,业务,代码。

  3、自学

  当一个团队比较成熟时,框架和组建都进行了大量封装,写业务代码用到的技术很少。这时候就要主动去学习,比如学习这些框架,学习垃圾回收,调优,网络编程等。这些技术可能暂时没用,但真正需要的时候再学往往已经没有时间了。这些技术用上了,往往能解决一些关键问题。

 

做的更好

  这个时间没有完美的东西,你负责的系统和业务,总有不合理和可以改进的地方。这里不合理和可改进的地方,往往都需要更深的技术。解决了能够快速成长。识别出问题,并给出解决方案,然后想负责人提出。这就是机会。

  如:

  重复代码太多,是否可以引入设计模式?

  系统性能太差,可否进行优化

  单机系统,能否做成双机或者更好

  系统太复杂,能否重构和解耦成多个小系统

  只要去思考,总有可以改进的地方,如果你觉得系统哪里都没有改进的地方,说明自己水平还不够,需要i今年一部学习,看看优秀的项目,大牛是怎么做的。

实践

  光学习不使用,效果很差,学习了很多,但是一直没用上,时间久了就忘了,难以积累。

  如jvm垃圾回收,实际上很少会出现FGC导致卡顿问题,没法练手,怎么实践呢?

  学习了高性能MYSQL,但是实际工作中都是直接用的,有专业的运维去维护,自己没法去验证这些技术。

  类似的问题很多,其实主要有三点,learning、trying、teaching。

  1、learning

  可以看书,看博客,看视频等,但是一定要系统化。特别是基础性的东西。如JVM原理,java变成,网络编程,http协议等。建议系统性,完整性的看完一本书,进行全面的了解,然后再google,博客等方式去针对性的找一些疑问的地方,或者进一步学习技巧。

  2、trying

  实践是检验整理的唯一标准。学习那么多,总会遇到一些模糊的地方,或者难以理解的地方,这时候就可以自己去单间一些环境,自己写一些测试程序。

  如:

  Jvm 垃圾回收:可以自己写一个简单的测试程序,分配内存不释放,然后调整各种jvm启动参数,再运行的过程中使用jstack、jstat等命令查看jvm的堆
内存分布和垃圾回收情况。这样的程序写起来很简单,简单一点的就几行,复杂一点的也就几十行。

  用浏览器查看HTTP缓存实现,看看不同网站,不同类型的资源是如何控制缓存的,然后用python或者java写一个简单的web服务器,模拟各种情况,去验证自己的想法。

  如果在实际中直接用到学习的知识,那么效果最好,如果没有这个机会,那么就需要自己主动去创造。

  3、teaching

  一般的人经过学习和实践,能够掌握70-80%,要想真正掌握,一定要做到能够跟别人讲清楚。因为讲的时候需要将学到的知识进行系统化,还需要考虑各种细节,这回促使我们进一步思考和学习。同时讲出来后,听众也有自己的理解,或者补充,这样可以进一步完善自己的知识体系。

  有些知识觉得自己掌握了,但是写博客或者组织培训的时候,发现还有不少地方,自己不知道,或者理解错了。这样一个流程,基本上知识就比较全面了。

  成为技术大牛梦想虽然很美好,但是要付出很多,不管是Do more还是Do better 还是 Do exercise,都需要花费时间和精力,这个过程中可能很苦逼,也可能很枯燥,这里我想特别强调一下:前面我讲的都是一些方法论的东西,但真正起决定作用的,其实还是我们对技术的热情和兴趣!

 

以上内容节选自《如何快速成长为技术大牛? 阿里资深技术专家的总结亮了》

可以关注阿里技术微信公众号,获取codelife的完整pdf

posted @ 2018-08-12 22:48  lwli  阅读(1633)  评论(0编辑  收藏  举报