如何成为一个合格的 架构师

首先标注一下:这篇文章不是我写的,只是看了之后感触很大,于是就记录一下来了。

前言

忠言逆耳利于行,虽然是一桶冷水,但是想必对每个人都有一番作用。 

1、架构师资源被追捧

在MyBatis中文官网上我收集了很多的资源,但是我发现最热最火的视频资源是下面这套教程:《Java高级架构师》

如何成为一个合格的 架构师_第1张图片

火到什么程度呢?火到成了“见光死”,一旦我生成分享链接,就被百度屏蔽了。致使我不得不将这个资源屏蔽掉,否则每天都有很多人催着我更新链接。不光如此,淘宝上也是各种架构师资料满天飞,看看这么这个吧,在淘宝上大卖呢:

如何成为一个合格的 架构师_第2张图片

2、看完各种视频教程,真能成架构师吗?

首先,说一下“看完”的问题。客观的说,大多数人是不会看完的,因为大家都没有那么多空余时间去看的。假设大家都看完了这些视频,甚至包括全网上所有的视频,结果能不能成为一个架构师呢?我个人觉得:肯定成不了架构师。

让我们看看这些资料到底都有些什么内容吧。这些内容,其实跟软件和框架的使用说明书没有什么区别。而且绝大数是我们所接触过的技术点,网上搜索一下,就能看到类似的内容。

这些视频看起来十分诱人,很大部分的原因在于它比百度搜索出来的东西更系统化。但是看看使用说明书,就能成为架构师?未免太简单了吧。

如何成为一个合格的 架构师_第3张图片

如何成为一个合格的 架构师_第4张图片

如何成为一个合格的 架构师_第5张图片

如何成为一个合格的 架构师_第6张图片

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

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

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

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

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不入门,那肯定是不行的。

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

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

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

你可能感兴趣的:(架构)