计算机领域技术更迭非常之快,内容博大精深。涉及到分布式架构,更是分支众多,知识庞杂。很多新人在最初往往找不到头绪,不知道从何处下手来一步步提升自己的技术水准。
本文将介绍要成为1个技术大牛的18般兵器谱,以及这条打怪升级之路,希望可以让新人少走弯路,在这条路上一步步提升自己。
阶段1: 计算机功底
(1)常用数据结构,算法的时间/空间复杂度的计算(随便找本大学教科书都有的内容)
(2)Linux操作系统(从各种命令操作,到原理的理解:比如各种IO,磁盘文件组织、进程与内存管理、epoll)
(3)多线程(无论是用Java的Concurrent Util,还是C++直接用Liunx的pthread,原理都一样。各种线程同步机制的深刻理解)
(4)网络(知道一个完整的socket c/s程序是如何写的,TCP/IP协议的原理)
(5)数据库(比如B+树为什么可以实现关系数据库的各种查询方式、排序,比如事务的隔离级别)
(6)精通1门语言:不是只会用语法,而是能深刻理解语言下面的实现机制。如果你搞Java,怎要很好理解JVM的各种机制,class loader,内存模型,注解,动态代理。。;
如果你搞C++,需要理解编译、链接、运行的整个过程,对象在内存里面如何布局的,多态咋实现的(这方面书籍狂多,随便找1本国外大牛的书,好好啃完,对语言的理解就会深刻很多);
如果你搞其他语言,比如PHP,Go, Rust,同样的,除了很熟练的会用,可以去理解背后的实现原理。
阶段2: 能用框架搭建各种系统
你可以用各种开源框架,搭建常用的Web应用,以Java为例:
Nginx,SpringMVC, Dubbo或者Spring Cloud,Mysql,Redis/Memcached,TFS,Kafka或者RocketMQ,CDN等
当然,非Web应用,比如IM这种,也有类似的各种框架(XMPP协议的实现),或者第3方支持的。
在这个阶段,也就知道了各种框架怎么用的,面对各种五花八门的业务,你都可以搭建出符合需求的系统出来:
Nginx的负载均衡;
SpringMVC的Web应用;
Dubbo/Spring Cloud的微服务框架;
Redis的分布式缓存;
Kafka的分布式队列;
CDN的静态内容分发;
TFS的分布式文件存储;
阶段3: 基础架构与中间件的原理
到了这个阶段,就需要的不光是用,而是对原理的深刻理解,有必要的看看源码。
用Redis Cluster,知道有哪些关键特性,这些特性的原理有好的理解;
用Kafka,知道Kafka为什么快,为什么高可用,其实现原理是什么。。
用Dubbo,知道网络IO怎么玩的,服务注册怎么搞的,动态代理用来干嘛。。
。。
对于做偏业务架构的人来说,这个阶段,只要原理很清楚就可以;
但如果就是做基础架构,那就不是光原理清楚了,而是要精通,对源代码很熟。
阶段4: 高并发 & 高可用 & 稳定性 & 一致性
到了这个阶段,可以说“术”这个层面已经很成熟,接下来就是要修“道”了。
我所说的“道”,就是指解决问题的方法论,成体系的方法,可以让上面这些武器、招式,在你的手上流畅发挥,让你面对任何问题的时候,都能从容应对。
第1种道:C端的大型系统,能够出完善的技术设计方案,在高并发、高可用、稳定性、一致性方面,都有很好的考虑。
阶段5:业务建模、业务架构
第2种道:B端的大型业务系统。
C端的东西,用户访问量很大,但业务逻辑相对简单。
而B端的系统,往往流程很长,功能模块狂多,开发团队人数多,流程与流程之间还各种耦合。在这种情况下,如果不能站在技术上面,更抽象的看整个系统,会面临失控的局面。到最后,就是没有人能说清楚这个系统到底干了多少事情。
所以,在这个阶段,需要能对整个业务做一个逻辑上的架构,这个逻辑架构最终会达到下面几个目的:
(1)整个系统具有很有的复用性、扩展性,不拖业务后腿
(2)团队人员,可以依据这个架构进行分工,高效协作
(3)更高级的,有前瞻性的,不仅不拖业务后腿,反而给了业务发挥空间。
阶段6:团队与领导力
这个阶段,就不光是技术的问题了。团队管理能力、综合素质、行业机遇、公司机遇、耐心。。种种因素的综合,让你可以带领1个很大的团队,做一个完整的业务,然后带更大的团队,做更大的业务。。。
写在最后:几个关键点
(1)上面的6个阶段,不是1个线性的过程,而是1个螺旋上升的过程,这也是事务发展的普适规律。越是大牛,往往越重视功底,到后面了,发现前面功底还不够,又回去更深的研究功底。
(2)空杯心态:其实除了上面列举的还有很多东西需要了解,比如机器学习、大数据、区块链。。这也是我在另外一篇文章提到的。活到老,学到老。
(3)到了后面,就超出了技术可主导的范畴了。现实中种种因素的合力,让你站在人生的某个位置。(此处不谈人生)
(4)兴趣。任何一个技,一个艺,都是十年磨一剑,没有兴趣,光凭毅力是持久不了的。
(5)耐心。再复杂的东西,都是从1+1=2开始的,单独看某1步,并不难;一点点的累积,累积到最后,你就觉得很复杂了。而这个过程,就需要你有耐心,从1+1=2开始。