如何成为技术大牛——阿里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
如何成为技术大牛——阿里CodeLife的更多相关文章
- 干了这碗鸡汤:从理发店小弟到阿里P10技术大牛
1.引言 MIT TR 35(MIT Technology Review 35 Innovators Under 35)——“全球 35 位 35 岁以下科技创新青年”榜单,是全球最权威的青年科技创新 ...
- 技术大牛是如何拿到国内IT巨头offer的?
关键字:技术大牛是如何拿到国内IT巨头offer的? 不是技术牛人,如何拿到国内IT巨头的Offer 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人, ...
- web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址
web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址 Huang Jie Blog .Com-前端开发 http://www.huangjieblog.com/?feed=rs ...
- [转]20位活跃在Github上的国内技术大牛
FROM : http://blog.csdn.net/yaoxtao/article/details/38518933 20位活跃在Github上的国内技术大牛 本文列举了20位在Github上非常 ...
- 使用 Feedly RSS阅读器订阅技术大牛的博客
这几天一直都在自己看书,可是书上面的东西都比较落后一点,而且没有大牛博文上的东西讲的深入,可是来回跳转各位大牛的博客又非常的麻烦,有一些公众账号虽然也会推荐一些知识内容,可是你应该有过看到多个公众号发 ...
- 20位活跃在Github上的国内技术大牛
登录|注册 leon-这个程序员不闷骚的博客 喜欢leon,有追求有原则有爱心的杀手,做一个有追求的程序员,代码是程序员的朋友,虽然没有热情,但是非常忠实.希望拥有一身绝世武功,再配一把绝世好 ...
- 资深技术Leader曹乐:如何成为技术大牛
From: https://mp.weixin.qq.com/s/QaBTm_9AJC01Isr3LLR3aw 原创: 曹乐 公众号: 再成长一次 看了下面这篇文章的话,应该会有收获. 虽然排版不好, ...
- 【腾讯优测干货】看腾讯的技术大牛如何将Crash率从2.2%降至0.2%?
小优有话说: App Crash就像地雷. 你怕它,想当它不存在.无异于让你的用户去探雷,一旦引爆,用户就没了. 你鼓起勇气去扫雷,它却神龙见首不见尾. 你告诫自己一定开发过程中减少crash,少埋点 ...
- 技术大牛面试 http://www.itmian4.com/forum.php?mod=viewthread&tid=3824
不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技 ...
随机推荐
- bzoj 3611: [Heoi2014]大工程 && bzoj 2286: [Sdoi2011消耗战
放波建虚树的模板. 大概是用一个栈维护根节点到当前关键点的一条链,把其他深度大于lca的都弹出去. 每次做完记得复原. 还有sort的时候一定要加cmp!!! bzoj 3611 #include&l ...
- [BZOJ1878][SDOI2009] HH的项链 (树状数组)
link 一道简单题. 不用可持久化. 对于统计颜色个数,可以看与其颜色一样的前一个位置. 设$las(i)$表示其与$i$颜色相等的上一个位置. 则对于二元组$(l,r)$,其答案为$\sum_{i ...
- E. Mahmoud and Ehab and the function Codeforces Round #435 (Div. 2)
http://codeforces.com/contest/862/problem/E 二分答案 一个数与数组中的哪个数最接近: 先对数组中的数排序,然后lower_bound #include &l ...
- web项目中的执行流程参数传递详解
还是从这个图开始讲解: struts2中有一个存放数据的中心:值栈.(值栈里面有map和对象栈) 首先:值栈的作用范围是一个请求:request作用域(一个请求是代表的一个过程,即页面点击到数据返回到 ...
- Docker入门与应用系列(四)数据卷管理
一.介绍 Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存 ...
- 利用ImageOps调整图片的Aspect Ratio(给图片添加borders)
# -*- coding: utf-8 -*- #******************** # 改变图片的纵横比(aspect retio) # 使用ImageOps.expand() # Image ...
- Linux下查看系统版本和make版本
一.查看Linux内核版本命令(两种方法): 1.cat /proc/versionz [root@localhost ~]# cat /proc/versionLinux version 2.6.1 ...
- 51 nod 1105 第K大的数
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...
- 接口测试Case之面向页面对象编写及规范
一.什么是页面对象化 主要提倡的思想是:万物皆对象,即把一个Page看成一个对象,来进行接口自动化Case的编写,不要闲扯,直接讲怎么个操作法呢? 二.有什么优势? 2.1 Case层次清晰,便于管理 ...
- Linux命令-xargs
比如一个例子 echo "README.md" |cat echo "README.md" |xargs cat 第一个例子只是输出了README.md的文件名 ...