给那些想成为架构师的人泼桶冷水


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


一、架构师资源被追捧


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

 

火到什么程度呢?火到成了“见光死”,一旦我生成分享链接,就被百度屏蔽了。致使我不得不将这个资源屏蔽掉,否则每天都有很多人催着我更新链接。

不光如此,淘宝上也是各种架构师资料满天飞,看看这么这个吧,在淘宝上大卖呢:
 

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


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

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

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

 

 
 
 

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


虽然人跟人差别很大,但是绝大多数情况都是相同的,先把共性做好了,剩下的差异各自发展就行了。我说一下自己的个人感受。我是通过不断试错,摸着石头过河走过来的。


第一步:把握好学习方向。


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

第五步:长期执行,潜移默化的学习。


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

四、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开发工程师,也分为:初级,中级,高级三个层次。

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

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

五、红黑鸟学习系统的介绍


最近一段时间,我利用业余时间开发了一个学习系统,就叫:红黑鸟学习系统。

初衷是给徒弟们学习(第二学习阶段)使用的,也可开发给非徒弟使用。徒弟们在学习要求上有更严格的规定,并且学完之后给以资格认证。


它是基于tornado+mysql+redis+kindeditor开发的Java也好,Python也好,c/c++,我都能搞出个东西,有种左右逢源的感觉。


这个系统目的只有两个:(1)传递价值(2)挣些钱,充实网站基金。

我知道,任何做收费的事情,肯定会引发一部分人反感。在你们反感的同时,我需要强调一点:我们所有免费的东西都是靠收费项目来支持的。天下之大,皆是如此。放眼整个IT行业,任何开源的项目和组织,背后都有营收来源。

我们的营收项目,所挣来的钱,远比你们想象少的多。当前计划,我想着招20个名额,按照人均200元/年来算,总共大概收入4000元。但是,我明白理想和现实之前的差距还是很大的。曾经有一天,忙活了整整一天的时间,才募集到15元的网站基金。这一天令我影响深刻,难以忘怀。

其实,服务器成本,一年得花费3千多,管理成本也得花费一笔钱,还有其他各种花销都是一笔不小的开支。上面这些钱其实并不够。世道就是这样,要么做大,要么做死。我希望MyBatis中文官网能做起来,能活的健康。

对于人均200元/年,这个定价,有的人感觉高,有的人感觉还行。这么说吧,如果有1千人参加,我可以定价为20元/年,甚至,如果有大笔捐赠基金,我都可以免费。

再多说一点吧,比起掘金的小册子,比起极客时间的小册子,200元的定价的确有点高。但是,这种对比是有问题的:
(1)MyBatis中文官网出售的是服务和时间,那些小册子出售的是知识。
(2)MyBatis中文官网传递的是科学的学习理念,以培养良好的学习习惯为己任。那些小册子绝大多数只是知识的包装和变现。
(3)MyBatis中文官网是非盈利性网站。掘金,极客时间等,都是一些商业机构,可以赔本赚吆喝啊,因为背后有资本支撑。发展不好,大不了裁员嘛,比如去年大裁员事件。
(4)我是MyBatis中文官网这个山头的老大,掘金和极客时间那些都是技术专家级别。我也是技术专家级别,放眼全国,技术专家多的是,这没有什么稀罕的。当了十多年的老和尚,都可以当做一个哲学博士,都是时间的累积,没有什么可以稀罕的。但是行业的领头人,这个却是难得,我也很在乎这个头衔,我可以花费五年的时间,花费重金拿下mybatis.cn这个域名,因为我对技术很痴迷。术业有专攻,那些专家在某些方面远胜于我,但在有些方面我甩他们不知道几条街。能扛起中文官网这个大旗,需要实力,格局,魄力的。他们定价低,有他们的理由,我定价高,我有我的价值。堂堂一个中文官网,去跟这些公司做对比,这不是我想看到的。对价格有异议的,可以理解,一寸光阴一寸金,寸金难买寸光阴,等你需要的时候再过来就行。

六、红黑鸟学习系统的特点


(1)实现过度学习。要想完成100%的目标,肯定需要付出120%的努力。遵循这个简单的学习,本系统整体的学习时间跨度为12个月甚至更长。如果有人对此表示异议,那么请问问自己,那些几天、几周、几月就能掌握的东西,能不能让你具备核心竞争力呢?其实,门槛越低,掌握的人越多,反而没有什么竞争力了。
(2)实现系统化学习。很多人不知道什么是系统化学习。本次系统学习将从C/C++钻入,然后从Java钻出,从socket进入,然后从epoll钻出,从netty进入,然后从微服务钻出。这就是一种系统化的学习。
(3)有效的提醒和监督机制。只有在规定的时间内才能解锁,如果在规定的时间没有学,则过期将失效。学习之前,会通过短信提醒用户。


七、费用方面:


(1)众位徒弟免费参加,供第二学习阶段所使用。

(2)群内人士,240元/年;群内人士,贡献过网站基金的200元/年。

(3)对网站基金贡献超过100元的,免费参加。

(4)外面的人参加,300元/年。

(5)建议分期付款,利用支付宝花呗分期,分12期,每期20元到25元不等。

(6)以上价格会有浮动,但是不会很大。跟成本有关,成本高的好,价格会高一点,成本低的话,价格会低一点。

八、网站基金


MyBatis中文官网的所收费用,都归入网站基金。网站基金会在每年的6月底7月初公布一次。仅公开1到6月的营收,因为没有时间去核算跨度太大时间段的收入。请各位理解。

课程内容列表

学习内容
学习目标
(1)掌握三种编译器;
(2)掌握链接的目的
(1)掌握main函数的返回值;
(2)掌握头文件以及引入头文件
(1)掌握整数和小数的表示
(1)掌握各种池化思想:内存池,连接池,线程池
(1)深刻掌握文件描述符
(1)加深对socket数据传输的理解
(1)掌握进程与描述符的的关系
(1)加深对TCP链接和保活的理解
(1)加深对HTTP协议的理解;
(2)用socket实现HTTP的技术细节
(1)体验epoll的强大:事件机制,异步回调;
(2)熟悉epoll的底层数据结构
(1)掌握生成者和消费者的开发模式
(2)掌握配置属性的代码实现
(1)掌握线程池的用法
(2)掌握事件队列的思想
(3)掌握监听器写作手法
(1)掌握两种存储方式:内存索引,数据块存储
(2)掌握压缩
(1)熟悉时间轮思想
(1)掌握环状数据结构的设计和实现
(2)掌握时间轮的设计原理

红黑鸟系统基于:
Tornado + MySQL + Redis


累积参加人数:13人


红黑鸟学习系统 @ 2019年