如何从Java工程师成长为架构师？
我觉得这样的问题，像 @刘成 的回答方式就更好些，每个人有每个人的特性，我认为问：我怎么提高，很难获得很好的答案，因为制定学习方法，必须因人而异，而这种形式，更适合高端培训，而不是知乎这种问答网站。而问经验，经历就很好，你从不同的人眼里，可以被解读出不同的有用信息，这样不同的人可以取自己需要的部分。 其实在国内软件发展并不像美国那样长久地发展，而是在互联网时代集中爆发，架构师已经和初始的含义有所变化，目前，在国内架构师 = 真正含义上的 架构师+首席工程师。 狭义的，真正的架构师是负责处理高层的，所谓架构，高到大部分同学无法理解，比如我司全球有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%的用户了。  而如果你是初高中，那么，我倒是建议你去看看解释型或者脚本语言，这个阶段，主要是培养兴趣，能做出什么都是其次。  小学以下，比如我给我女儿儿子制定的计划，总是从图形化编程的现实机器人开始的，这是认识世界的好机会。