前言

要想成为一名架构师,首先要明白架构师与开发工程师的区别,然后制定学习规划,一步一步走下去成为一名架构师。本文围绕着这两大块进行详细阐述。

1、Java Web架构师与Java Web开发工程师的区别

(1)Java Web架构师 = Java + Web + 架构
Java包括:异常,多线程,反射,泛型,多态,jvm等
Web包括:socket编码(Java里面),socket编码(c/c++),select/epoll(c++),tcp/ip协议,http协议等
架构包括:sql,shell,redis,消息中间件,分布式理论,设计模式等

(2)Java Web 开发工程师 = Javaweb + 开发
Javaweb包括:springmvc,springcloud,mybatis等
开发包括:百度,复制,粘贴等

Java Web架构师,又分为:初级,中级,高级三个层次。
Java Web开发工程师,也分为:初级,中级,高级三个层次。

有的人工作五年、十年,依然成为不了架构师,不在于他们不够努力,而在于他们的方向有问题。

技术的提升,不仅需要多看书多思考,还需要有方向有格局有魄力,而方向里面就有格局就有魄力。所以,选择一个正确的方向,比选择低头努力更重要。

2、怎么才能成为架构师呢?

虽然人跟人差别很大,但是绝大多数情况都是相同的,先把共性做好了,剩下的差异各自发展就行了。

我说一下自己的个人感受,以下所言都是通过不断试错,摸着石头过河走过来的,仅供参考。

第一步:别被误导,明辨是非,把握好学习方向。

Javaer成为架构师其实挺难的,因为很多人被误导了,被周围的环境误导,被网络资料给误导了。有“绝活”的人,都忙的要命,那有空闲时间在网络上德化育人呢?所谓的分享很多都是初学者的交流,反正大家都在探索和试错。这就导致了很多人被困在Java这个山头上了,导致学习方向有问题。

术业有专攻弄,这个道理没错,但是很多人做错了,因为要看怎么个专法。以socket编程为例,把Java的socket学一下,把netty搞一遍,把Linux和c++的select和epoll搞一下,把python的tornado搞一下,这才叫专攻。如果仅仅学习Java那么不叫专攻。举例来说,你使用汉语,你算精通法律吗?不能啊,你还需要研究英美的律法,这才叫专攻。生活中的道理,我们都知道,但是我们在计算机上却依然犯错栽跟头。

以高并发这个领域来说,绝大多数Javaer,对高并发的理解和掌握其实很肤浅。这种现状跟工作年限无关,而是跟学习方向有关,所以要把握好方向。方向如何把握,详见下文的分析。

Java擅长应用层面,绝大数Javaer都在忙于业务,忙着增删改查,所以,对高并发的一无所知和茫然失措是任何搞Java开发的人都会面临的难题。即是工作了五年、十年的人,也依然如此。造成现状的原因,我分析了一些,主要有以下几点:

(1)对高并发的理解和掌握,往往与socket编程绑定在一起的。在Javaer的日常工作中,往往都是web编程,很少有机会进行socket编程。虽然web的底层是socket实现,但是web编程和socket编程还是相差甚远。

(2)高并发的根源往往在于select/epoll,是“文件描述符+事件监听+异步通知”的处理机制。听说过select/epoll的人很多,但是真正去编程去应用过的Javaer却是很少的。这就是一个很高的门槛,将绝大数Javaer拦在了门外,这就是上面说的茫然失措的根源所在。

(3)要想体验select/epoll的强劲,需要C/C++的基础。学习C/C++的难度远比Java要大,一个Javaer为了体验select/epoll的强劲,而去坚持半年的业余时间,去学习C/C++,这样的人,不能说没有,但是很少。

(4)很多javaer往往止步于netty。netty是socket的封装,从应用层面来说,它带来了很大的帮助。但是,从理解的角度来说,它让人对socket编程产生了错觉,让人止步于它,而不再深挖socket编程,不再深挖select/epoll的强劲。netty就是一个指路标,它的存在让绝大多数Javaer都已经止步了,让人忘记了离高并发其实还有一长段路要走。犹如,你考完试,心满意足的交上卷子,其实背面的题你还没有做。

第二步:要扩展知识面。

上面一条提到了学习方向,无非就是要懂得切入Java,也要适当的跳出Java,把知识面扩展起来。我个人觉得:

Java + C + Shell + SQL + DataStructure + Coding >= 架构师

架构师需要具备数据库知识,所以SQL这块要精通。架构师不同于DBA,DBA侧重于数据库的运维,而架构师更侧重于SQL编程(锁,事务,索引)。架构师需要具备Linux知识,所以Shell这块要熟练。SQL里面的各种树,Java里面的各种高级类,背后都是DataStructure的知识。

想成为一名架构师,Coding一定得能力过人。我所说的Coding可不是工作中的增删改查,而是指:你要做很多的小工具,小应用。这些东西非常能锻炼人的。为什么呢?原因很简单,因为没有产品和老板催你上线,你有时间和精力能做出高质量的代码,所以能锻炼人。

第三步:要有悟性。

悟性,可不是说有就有的,但是你要是把知识面扩宽了,它也会自动冒出来,可以说:悟性是知识的关系,是系统化学习惯性。有悟性的关键在于知识面广,要做到上面的第二步。

我说一下自己的切身体会吧:Java里面的context我理解不了,但是我从shell里面的用户变量和环境变量以及导出,悟出了context的写作手法;ThreadLocal我也没有吃准,但是我从C++各种变量的作用域,悟出了ThreadLocal能够实现跨函数操作,类似于一个全局变量的作用。Java中的有些异常我没有吃透,但是我从Linux、C++里面学到了信号,发现有的异常并不是出了异常问题,而是一种人畜无害的信号。还有kafka的学习,yarn的学习,等等……。其实,很多知识点,我感觉自己理解的比较透,并不是我有多聪明,而是我的知识面更广,能联想,能左右逢源。

有些时候,我会把自己的发现和心得发布到网上,80%的人会认可,20%的人会喷一下。这也符合了二八定理。对于喷子而言,有的时候我也懒得回应,这些人站着说话不腰疼啊。每一个新的观点新的角度,从无到有,都需要花费大量的时间,耗费大量的心血。且不论正确与否,我能提出来,意味着我已经砸进去了大量的时间和精力,以此为基础,能会有大的失误吗?

第四步:有格局,要做到系统化学习。

如果我是刚毕业的学生,如果我是刚工作一两年的职场新人,我肯定也不会有什么格局。但是我觉得,任何人都不应该顺着自己,让自己呆在舒适区,也别总是盯着眼前的利益。做事要以价值来判定,而不是以收益来判定。

就拿我来说,维护MyBatis中文官网花费了很多的时间,要说挣什么钱,那是没有多少。但是我觉得这是一件值得去做的事情,三年,五年之后,我相信它一定更我带来很多的价值和收益。

2018年和2019年,我写了几个小册子,没有卖出一份,但是我加深了对系统化学习的理解和认识。

在群的管理上我花费了很多的时间,但是通过与各位成员的交流,使我在认知领域,在数学和机器学习方面让我又有了新的提升。

2019年的公开课,报名参与的人就那么一两个,好像挣了20块钱吧,但是我觉得这是非常有价值的事情,让我对知识再次升华。

在群(大概近千人的群)里号召大家好好学习sql,但是真正能体会出sql强大的人,估计不多。初期开发者可能感觉用处不大,但是等到成为高级开发,架构师的行列,任何欠缺的东西,都会成为致命短板的。sql不入门,那肯定是不行的。

第五步:长期执行,潜移默化的学习,做到时空上的系统化。

学习需要长期坚持,往往才能量变到质变。群里的学习气氛,当我看到不太好的时候,我会站出来引导一下。不为别的,就是对的起“中文官网”这个旗号,因为我觉得这是一件有价值的事情。学习需要督促,干活需要逼迫,否则还要学校,还要绩效考核干嘛。

对于系统化的学习,很多人都认可,但是还应该做到时空上的系统化,今年学,明年学,后年再学,这就是时空上的系统化。

标签: none

由于网站运营成本的加大,网站基金日益紧张,故此再增加几个收徒名额,名额有限。 >>>>>>

添加新评论