【架构师工资】如何从Java工程师成长为架构师?

2019-08-02
字体:
浏览:
文章简介:我觉得这样的问题,像 @刘成 的回答方式就更好些,每个人有每个人的特性,我认为问:我怎么提高,很难获得很好的答案,因为制定学习方法,必须因人而异,而这种形式,更适合高端培训,而不是知乎这种问答网站.而问经验,经历就很好,你从不同的人眼里,可以被解读出不同的有用信息,这样不同的人可以取自己需要的部分.其实在国内软件发展并不像美国那样长久地发展,而是在互联网时代集中爆发,架构师已经和初始的含义有所变化,目前,在国内架构师 = 真正含义上的 架构师 首席工程师.狭义的,真正的架构师是负责处理高层的,所

我觉得这样的问题,像 @刘成 的回答方式就更好些,每个人有每个人的特性,我认为问:我怎么提高,很难获得很好的答案,因为制定学习方法,必须因人而异,而这种形式,更适合高端培训,而不是知乎这种问答网站。而问经验,经历就很好,你从不同的人眼里,可以被解读出不同的有用信息,这样不同的人可以取自己需要的部分。

其实在国内软件发展并不像美国那样长久地发展,而是在互联网时代集中爆发,架构师已经和初始的含义有所变化,目前,在国内架构师 = 真正含义上的 架构师 首席工程师。

狭义的,真正的架构师是负责处理高层的,所谓架构,高到大部分同学无法理解,比如我司全球有4万多从业人员,涉及12个大的产品门类,横跨从fintech到政府网站的很多领域,在这样的公司负责总架构的CTO office的高级架构师他们,事实上是连特定的某个系统都不太深入去看了,他们只负责宏观的技术走向,这种宏观,既不是什么语言,什么框架,也是不是哪个类库哪个包,而其下,每个产品门类都有自己的主任架构师,这些中级架构师,包括我在内,主要基于高级架构师的指导方针,设计产品门类中所实际出售的产品群,比如我属于fintech里面的B2B的部分,主要服务金融,在我这里一共有不到十个系统作为产品出售,那么每个产品的走向,技术栈,产品间的集成,与新技术的融合就是主要的工作重点。

而首席工程师,也有叫做application architect的,主要是负责一个产品当中的技术难点攻关,这是大部分同学所能理解的“技术大牛”,他们是精通某些语言或者框架技术的技术者,而架构师,比如我,并不如首席工程师那么精通各种技术的实际实现。

当然,有鉴于目前知乎的认知能力逐渐逼近初中两年级,当我说“架构师的技术能力不及首席工程师”的时候,是在说“张无忌武功不如张三丰”,没尹志平什么事情。

回过来,讲国内,毕竟大部分人还是在国内,在硅谷,你除了几个顶级大佬,基本上没什么机会会升到架构。国内来说,我们把目前的职称泡沫去掉,大约在国内通行的P7 level左右开始可以算架构师了(刚拒绝一个阿里P8的邀约,所以请那位很nice的猎头给我讲解了下相关的工作内容),其实主要还是做的首席工程师的工作,也就是解决疑难杂症,间或做些小的组件系统的设计开发优化工作。

可以说,真正意义上的架构师,大约是三分之一实际工程能力,三分之二规划能力,而国内意义上的架构师,正好相反,三分之二实际工程能力,三分之一规划能力。

下面讲讲我做JAVA的过程,算是抛砖引玉。

我2005年本科毕业于华东理工大学的计算机系,家里不是很有钱,考虑了一下觉得还是先工作挣点钱好了。3500块签了一个当时的创业公司。现在这个公司在业内做得也不错,只是因为行业的关系,行外是不太知道的。和现在的互联网公司不同,传统公司是按照做项目来晋升的,也就是先从一个项目的初中高级工程师,再到这个项目的架构师,统管整个项目的的技术,为什么呢?因为JAVA世界和其他语言存在一个明显差异就是其组件太多,JAVA世界的组件,并不能等同于其他语言的类库,类库是语言API级别的东西,在同一个JVM内执行,而JAVA当中存在大量以系统级别存在的组件,这些组件之间的交互,并非一个简单的方法调用,而是以系统集成的方式而存在。

所以JAVA世界,尤其需要架构师,来处理各个系统之间的集成,做JAVA做到高级,一般来说主要就处理两个层面的事情,底层性能,高层集成。

那么我是如何走过这条路的呢?

我们撇开努力,方法正确这些因人而异的东西,有的人,一天写了半小时代码就觉得自己很努力,有的人一天写了十小时代码,却比不写更糟,这都是要做个体咨询,不能在一个回答里讲清楚,我只说一句,如果你有“我也是这么做的呀,为什么我没会?”那么大概率你的努力或者方法有问题。

我们那时候,并没有现在知乎上通行的“我两年了怎么还没成为架构师,肯定是因为我一直做业务代码”这种愚蠢的浮躁,我入行的时候,就是做业务代码,做了足足两年。然而同样是做业务代码,用不用脑子做,结果是不一样的,不谈其中的艰辛和挣扎,两年后,通过做业务代码编码,非常熟悉了B/S结构下一个request从浏览器提交开始,到服务器,服务器转发到框架,框架转发到业务层,业务层到数据持久层,这一个过程,乃是任何人晋升高级的基础中的基础,任何花俏的框架,技术,都逃不开这个过程,这个过程是每个人都需要深刻理解的。

我记得我2007年的时候,以架构师身份,其实那时候是赶鸭子上架的,访问波兰,为一个小项目的最终交付去见客户的时候,给我一个很重大的冲击,也就是架构设计。我们从底层学上来的孩子,都是自下而上的学习的,从来没有考虑过,为什么。

而转到架构师,你需要学会如何自顶而下地看问题,为什么我要这样设计restful?为什么我要用ajax?为什么我要用ESB?为什么我要前后端分离,这些问题的开始思考,是打破工程师和架构师壁垒的第一步,在此,我仍然要提一点我的担忧,我看过很多同学,想要“强行”理解这种概念,通过百度搜几个名字,再类比到自己了解的日常生活上来,这是不可取的,如果一个术语他涉及的相关术语你不懂,就要去搞懂,而不是绕过,这样你是不会真的懂的。

我认为我真正的是一个架构师,是在2009年,做完一个原型产品设计和同时管理7个微型项目,这其中逼得我不得不思考,以何种重用性来解决问题。再之后的日子,主要还是重复劳动,增加习惯性,至今而已。

看完流水账,我给各位几个建议,我一般不喜欢像公众号那样长篇大论地又是图,又是建议,12345,我崇尚的简单的三板斧练到极致就是超神。我一直重复的两句话,1是无他,唯手熟尔,2是一力降十会。很多同学的问题在于你坚持不下去,才会去试图寻找《宝典》《捷径》《21天智商税套餐》,这点上,我是可以理解的。我给你们的建议只有两条,很贴近实际

第一,时刻练习,终身练习。练习不单单是打代码,也包含思维的练习,在你可以上机的时候,希望你不要去玩什么LOL,吃鸡,我很明确地告诉你,在职业的前5年,你少玩1分钟,多练一分钟,以后你就能10倍的玩回来。

在你不能上机的时候,也不要去做什么跳一跳,王者荣耀,练习你的脑,看看你周围的世界,马路上来回车辆,电梯上行下行,奶茶店排队,任何时候,你都可以问自己,这个系统,我怎么抽象成程序,我怎么写出来。这种训练是日积月累的,我自己是这种训练的受益者,已经养成了本能,任何时候,脑子有空,都会自动训练建模能力,代码化能力,我将这种比作寒玉床,才是真正比别人强的法宝。

第二,找到合适的同行者。其实,最好的提高,是一个好的师父。我自己就受益于这样的我铭记终生的恩人,但是问题的关键在于这样的恩人,是可遇不可求的。为什么?因为只有在工作当中遇到一个愿意教,有水平的良师,他才能无偿自愿给你良好的带领(因为他的薪水包含了带你的部分),在工作以外,别人并没有义务带新,而为了盈利带新的人或着培训班,一定需要讲究规模效应,因为新人钱也不多,你没有20万学一个JAVA,有20万愿意出钱的人,大多是MBA那个程度。

而你知道,小班化,一定是效果好过大班的。很现实的一个事情就是比如我有能力带好新人,我有实际在过去公司带过100多新人的成绩,但是我是不会在一个私信过来,就给你几十个小时的教导的,现实就是这样。

所以你更应该找到合适的同行者,采取相互学习的方式。我曾经为了了解为什么现在知乎程序员的水平下降的这么厉害,匿名加入了几个知乎上看来的群,里面基本上并没有什么帮助,整天除了互相吹捧就是拿些自己也不懂的IT新闻出来显示,偶尔我看不下去了给几个提点,不是没人理睬,就是被冷嘲热讽。

这就不是良好的学习提高氛围。我认为合适的学习小组是固定10人左右,每天保证1到2个小时的讨论,每周有轮值主持人,定几个话题,这种学习小组,对大一到工作2年以内的人,都是有比较大的促进意义的,记住,大家都是同行者,不怕说错,就怕不说。

共勉,希望可以作为他山之石,助你成玉。

============今天我女儿比较配合,所以多唠叨两句==============

JDK9加spring5以后,java算是上了一个台阶,跟上了时代的步伐,并不是以前的“只有商用”了。

我奉劝各位同学,要看自己的年纪来计划自己的学习过程,除非你是马爸爸的侄子。

比如你现在大三大四,那么你应该走传统javaweb,一方面容易出成就去面试,一方面目前市场上这个需求最大。javaweb你也要走jsp路线,同时针对jsp里面的共同路线,加强html5 js的部分,以防你进不了中大厂,起码先找个小公司创业公司有个饭钱。

而如果你高二大一大二,我觉得你要开始看react也就是spring webflux,这是最新的路线,也是将来更明确的方向。同时,我认为中国互联网在目前属于内容为王的时代,所以各家厂的技术,除了顶级大厂都不强,但是,根据美国类似的发展,5年内,肯定会进入下一个阶段,这个时候,内容成熟了,那么技术的需求量就上来了,比如现在你看到知乎,我作为一个知乎普通用户,都能体会到他的灾备,CDN,message有问题,架构上一定存在组件之间通信障碍,并没有一个非常畅通的SOA,现在只是一个内容分发,当逐渐增减了视频,无论是DMS,还是索引,都会产生后续的技术债,现在只是视频上传,图片上传,可能有个简单的图片查重以减少存储空间,那么之后,量上来了以后,如何智能图片查找?如何提示用户你上传了类似,很相似的图片无须再反复上传?再进一步,图像的识别索引技术?视频现在是人工审核的,那么量逐渐增大,自动识别显然是需要的。

而且中国互联网相当讲究完整生态,那么后续和科学界开放接口,做大以后提供社科实验室等一系列的做法,都是需要技术打底的,这些目前美国在探索,中国是很少有人会想到的,因为这几年,内容 营销就可以赚翻,然而,三年以后,就不一定了。

这时候,你们的机会就来了,所以你们切记不要跟风学习,比如那些在知乎上吹破天的脚本语言,解释性语言。你们需要保持自己的独立思考能力,多阅读下美国的最新技术进展,以获取方向。我们java的小萌新,只要记住,跟着两个大佬走,spring和直升机基金会,也就是apache,就够了,养成一个好习惯,每周去他们的官网看看最新消息,在java世界来说,你已经击败了90%的用户了。

而如果你是初高中,那么,我倒是建议你去看看解释型或者脚本语言,这个阶段,主要是培养兴趣,能做出什么都是其次。

小学以下,比如我给我女儿儿子制定的计划,总是从图形化编程的现实机器人开始的,这是认识世界的好机会。