不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。
然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说“天天写业务代码还加班,如何才能成为技术大牛”,测试说“每天都有执行不完的测试用例”,运维说“扛机器接网线敲shell命令,这不是我想要的运维人生”。
我也是一位程序员,所以我希望通过以下基于程序开发的一些例子,帮助大家解决这些困惑。大道理是相通的,测试、运维都可以借鉴。
第一:拜大牛为师
有人认为想成为技术大牛最简单直接、快速有效的方式是“拜团队技术大牛为师”,让他们平时给你开小灶,给你分配一些有难度的任务。
我个人是反对这种方法的,主要的原因有几个:
大牛很忙,不太可能单独给你开小灶,更不可能每天都给你开1个小时的小灶;而且一个团队里面,如果大牛平时经常给你开小灶,难免会引起其他团队成员的疑惑,我个人认为如果团队里的大牛如果真正有心的话,多给团队培训是最好的。然而做过培训的都知道,准备一场培训是很耗费时间的,课件和材料至少2个小时(还不能是碎片时间),讲解1个小时,大牛们一个月做一次培训已经是很高频了。
因为第一个原因,所以一般要找大牛,都是带着问题去请教或者探讨。因为回答或者探讨问题无需太多的时间,更多的是靠经验和积累,这种情况下大牛们都是很乐意的,毕竟影响力是大牛的一个重要指标嘛。然而也要特别注意:如果经常问那些书本或者google能够很容易查到的知识,大牛们也会很不耐烦的,毕竟时间宝贵。经常有网友问我诸如“jvm的-Xmn参数如何配置”这类问题,我都是直接回答“请直接去google”,因为这样的问题实在是太多了,如果自己不去系统学习,每个都要问是非常浪费自己和别人的时间的。
大牛不多,不太可能每个团队都有技术大牛,只能说团队里面会有比你水平高的人,即使他每天给你开小灶,最终你也只能提升到他的水平;而如果是跨团队的技术大牛,由于工作安排和分配的原因,直接请教和辅导的机会是比较少的,单凭参加几次大牛的培训,是不太可能就成为技术大牛的。
综合上述的几个原因,我认为对于大部分人来说,要想成为技术大牛,首先还是要明白“主要靠自己”这个道理,不要期望有个像武功师傅一样的大牛手把手一步一步地教你。适当的时候可以通过请教大牛或者和大牛探讨来提升自己,但大部分时间还是自己系统性、有针对性的提升。
第二:业务代码一样很牛逼
有人认为写业务代码一样可以很牛逼,理由是业务代码一样可以有各种技巧,例如可以使用封装和抽象使得业务代码更具可扩展性,可以通过和产品多交流以便更好的理解和实现业务,日志记录好了问题定位效率可以提升10倍等等。
业务代码一样有技术含量,这点是肯定的,业务代码中的技术是每个程序员的基础,但只是掌握了这些技巧,并不能成为技术大牛,就像游戏中升级打怪一样,开始打小怪,经验值很高,越到后面经验值越少,打小怪已经不能提升经验值了,这个时候就需要打一些更高级的怪,刷一些有挑战的副本了,没看到哪个游戏只要一直打小怪就能升到顶级的。成为技术大牛的路也是类似的,你要不断的提升自己的水平,然后面临更大的挑战,通过应对这些挑战从而使自己水平更上一级,然后如此往复,最终达到技术大牛甚至业界大牛的境界,写业务代码只是这个打怪升级路上的一个挑战而已,而且我认为是比较初级的一个挑战。
所以我认为:业务代码都写不好的程序员肯定无法成为技术大牛,但只把业务代码写好的程序员也还不能成为技术大牛。
第三:上班太忙没时间自己学习
很多人认为自己没有成为技术大牛并不是自己不聪明,也不是自己不努力,而是中国的这个环境下,技术人员加班都太多了,导致自己没有额外的时间进行学习。
这个理由有一定的客观性,毕竟和欧美相比,我们的加班确实要多一些,但这个因素只是一个需要克服的问题,并不是不可逾越的鸿沟,毕竟我们身边还是有那么多的大牛也是在中国这个环境成长起来的。
我认为有几个误区导致了这种看法的形成:
(1)上班做的都是重复工作,要想提升必须自己额外去学习
形成这个误区的主要原因还是在于认为“写业务代码是没有技术含量的”,而我现在上班就是写业务代码,所以我在工作中不能提升。
(2)学习需要大段的连续时间
很多人以为要学习就要像学校上课一样,给你一整天时间来上课才算学习,而我们平时加班又比较多,周末累的只想睡懒觉,或者只想去看看电影打打游戏来放松,所以就没有时间学习了。
实际上的做法正好相反:首先我们应该在工作中学习和提升,因为学以致用或者有实例参考,学习的效果是最好的;其次工作后学习不需要大段时间,而是要挤出时间,利用时间碎片来学习。
在此我向大家推荐一个交流学习群:454377428里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
maven的使用
maven的使用入门
maven私服的搭建及部署
maven坐标分析/父控设置
git版本管理及jenkins自动化构建
git使用入门培训
git常用命令分析和使用
jenkins环境搭建及插件配置
git+jenkins实现自动化构建
NoSql专题-redis高性能缓存
redis使用入门
redis常用命令及客户端的使用
redis高可用集群搭建
NoSql专题-mongodb
mongodb使用入门
mongodb高可用集群搭建
mongodb常用命令及客户端的使用
分布式专题-zookeeper+dubbo服务协调
zookeeper安装部署及命令分析
zookeeper客户端的使用
zookeeper实现原理分析
dubbo的使用入门及配置分析
zookeeper+dubbo实现服务注册和发现
分布式专题-消息中间件
activeMq-jms规范及使用
activeMq消息分发机制分析
kafka实现原理剖析
kafka的数据传输事务性及实践练习
分布式缓存分析对比
memcache的原理分析及使用
memcache和redis的横向对比分析
分布式接口技术
webservice/RMI/restful的使用
高并发专题-数据库层面优化
分库分表的原理及规则讲解
数据库主备及高可用
性能调优专题-jvm调优
JVM原理剖析
jvm内存模型及垃圾回收器的分析
性能调优专题-容器性能优化
nginx性能优化
tomcat性能优化
性能调优专题-数据库优化
mysql常见优化手段分析及实践
高性能容器的使用
nginx使用入门
nginx负载均衡/反向代理实现
双十一专题-九阳真经
太极聚气之分布式压测平台
氤氲紫气之分布式缓存体系
盘龙真诀之分布式消息系统
金刚之躯之分布式跟踪系统
外功辅助之分布式配置系统
微服务架构技术栈分析
springboot的使用
分布式协调服务zookeeper
zookeeper集群及相关概念分析
zookeeper java api的使用及实践
从集中式到分布式架构
分布式架构的演进过程
分布式架构的基石-TCP/UDP
分布式通信协议
分布式通信协议-HTTP及RESTful
分布式通信协议-webservice详解
分布式通信协议-RMI
分布式通信协议-序列化技术
分布式服务治理
dubbo控制台及监控中心的安装部署
dubbo常用配置分析
dubbo实战演练
NIO技术之-Netty
NIO基本概念及BIO、AIO的对比分析
NIO核心设计思想剖析(Buffer/Channel..)
Netty产生的背景及优缺点分析
Netty实现IM聊天系统
分布式缓存技术-Redis
redis的安装及数据类型分析
Redis客户端的使用
Redis高可用方案实战
Redis+Lua脚本实现原子操作
高性能之道-MongoDB
MongoDB高可用部署
MongoDB动态查询及索引剖析
MongoDB集成spring应用
数据库高性能之道-Mysql
分库分表深入分析
Mysql主从模型配置/Mycat的使用
分布式通信技术
JMS基本概念和模型
ActiveMQ结合Spring开发
ActiveMQ静态网络和**络链接
Kafka的高可用方案及原理分析
SOA架构及微服务架构
什么是SOA架构/为什么需要SOA
领域驱动设计方法/典型SOA架构设计
spring boot深入剖析
spring boot+dubbo企业实战
Docker虚拟化技术
Docker虚拟化技术(镜像/仓库/容器)
Docker整合spring boot
Docker 服务编排
导流技术
Nginx反向代理、负载均衡
Nginx进程模型分析
Nginx+keepalived高可用方案
微服务技术
spring boot(mvc)
spring boot(REST)
spring boot(验证)
29、spring cloud
spring cloud config client
spring cloud config server
spring cloud netflix eureka
spring cloud netflix ribbon
spring cloud hystrix
spring cloud feign
spring cloud stream
spring cloud bus
spring cloud sleuth
分布式消息技术-kafka
kafka高可用集群及介绍
kafka底层实现原理分析
分布式缓存-redis
redis的数据类型分析
redis高可用集群方案
lua脚本在redis中的应用
高性能之道-MongoDB
MongoDB的基本原理
MongoDB常用命令及客户端使用
手写基于MongoDB的ORM框架
MongoDB高可用解决方案
数据库高性能-Mysql
分库分表深入分析及主从模型
数据库中间件Mycat介绍
性能优化专题
从测试的角度解读如何衡量性能
了解Linux系统
虚拟机-JVM
内存模型、运行时数据
垃圾回收、GC日志
调优实战
容器优化-Tomcat
tomcat架构分析
线程模型分析
tomcat调优实战
mysql数据库调优
Mysql底层存储分析
很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习Java工程化、高性能及分布式、深入浅出。性能调优、Spring,MyBatis,Netty源码分析的朋友可以加Java进阶群:454377428,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
同时2018年我也会为了更高的段位去奋斗,我要去不断的学习不断的加深对技术的认识。特别对性能优化、源码分析等技术是我今年打算加深学习的。下面是我找到的几个图谱,分享出来给大家一起看看吧。
class="uploaded-img" width="auto" height="auto" src="https://upload-images.jianshu.io/upload_images/9741289-bd36a7387c4c7842?imageMogr2/auto-orient/strip%7C/Upload/Images/2018040321/3A680A484E2C3EB2.jpg" style="vertical-align: middle; max-width: 100%; width: auto; height: auto; min-width: 200px;">源码分析
分布式架构
微服务架构