你离架构师还有多远?欢醉

在需求阶段,软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等等,此外,架构师还要经常审查客户及市场人员所提出的需求,确认开发团队所提出的设计;

在中国不缺程序员,缺的是高级架构师,先来看看两者的薪酬对比,就知道两者间的差距:

但为什么在如此庞大的基数下,架构师的数量这么少,中间差了什么?对于普通程序员来说,成为高级架构师的门槛主要有以下几点:

3、对编程的认知。顶级程序员和平庸程序员,本质区别是遇到问题时的思考方式,这就是所谓的顶级程序员思维,一种高效解决问题的思维方式。这种思维方式,不是读几本Java书能学到的,而需要经过大量项目实战,才能总结提炼出来。

4、差的学习环境。很多程序员的学习环境很差,在公司经常加班,工作几年后,发现自己除了更熟悉公司业务外,能力没有得到半点提升,或周末基本不学习,而是出去玩。这么差的自制力和学习环境,很难让能力提到大的提升。

上面四点,每一点都非常难做到,也正因为这样,才会出现平庸的程序员很多,架构师却凤毛麟角的现象。

那如何才能克服上面四点,成为一名合格的Java架构师呢?

俗话说“没有见过好程序,怎么可能写出好程序”,同样,也可以说“不了解架构师的能力、工作,怎么可能成为架构师”,如果没有接触过顶级架构师,那你怎么知道自己要往哪个方向努力?所以,最好的方法是找个顶级架构师,去教你“高效的学习方法”、“完整的知识体系”和“对编程正确的认知”,让他去督促你学习,为你营造出“良好的学习环境”。

大牛不多,不太可能每个团队都有技术大牛,只能说团队里面会有比你水平高的人,即使他每天给你开小灶,最终你也只能提升到他的水平;而如果是跨团队的技术大牛,由于工作安排和分配的原因,直接请教和辅导的机会是比较少的,单凭参加几次大牛的培训,是不太可能就成为技术大牛的。

既然java架构师,首先你要是一个高级java工程师,熟练使用各种框架,并知道它们实现的原理。

熟练使用linux操作系统,必备。

那成为架构师所需要具备哪些技能?

架构师思考的是全局的东西,是如何组织你的系统,以达到业务要求,性能要求,具备可扩展性(scalability),可拓展性(extendability),前后兼容性等。可能涉及到的东西包括了从硬件到软件的方方面面。

一个合格的架构师要耐得住寂寞,在同事不停的在打荣耀而你只能不停的学习,是踩着坑上位的,是无数次推翻之前自己设计的“狗屎”架构,无数次日日夜夜加班而炼成的。

架构师不仅要上知技术实现细节,而且还要会项目管理、设计理论、性能优化、熟练使用各种工具,为公司各种业务提供技术支持,从前端到后台再到数据库、运维,哪里需要去哪里,还要一副好口才能睡服领导同事。

现在的架构师还要懂微服务、不会点分布式、大数据技术、机器学习也会被鄙视的。

想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,如果这些技术问题不懂怎样做到,如何能够找到解决方案呢?这是成为架构师的必要条件。架构师还要针对业务特点、系统的性能要求提出能解决问题成本最低的设计方案才合格,人家一个几百人用户的系统,访问量不大,数据量小,你给人家上集群、上分布式存储、上高端服务器,为了架构而架构,这是不可取的,所以总结两点:架构师的作用就是第一满足业务需求,第二最低的硬件网络成本和技术维护成本。如果想要成为一名优秀的架构师还需要根据业务发展情况,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。

大厂的大神还有如下的几个建议:

首先是要多读一些书,其中最基础的是类似于重构和设计模式这种书,你需要知道很多小尺度级别上的问题解决技巧(如果你要做导演,你首先要做得是能熟练地把一个句子翻译为一组镜头),以及这些作者梳理问题的方式,反过来问一下自己,如果让你来写设计模式这本书,你有哪些知识点可以写?你如何组织这些知识点?如何让大家接受你的观点。

看完这两本书之后,非常推荐你看一下MartinFowler写的《企业应用架构模式》和EricEvans的《领域驱动设计》这类书,他能扩大你的视野,专注于更有意义的问题,而不是设计模式究竟有多少种这种缺乏意义的问题。有一句话叫,“如果要成功,就要远离那些廉价的娱乐”。类似的,对于软件工程师来讲,要想让自己更强,就要远离那些廉价的争论(vimvsemacs,linuxvsunix,redhatvsdebian,这些争论其实并没有太大的价值)。

那如何学习呢?

例如:

1)Learning

这个是第一阶段,看书、google、看视频、看别人的博客都可以,但要注意一点是“系统化”,特别是一些基础性的东西,例如JVM原理、Java编程、网络编程,HTTP协议等等,这些基础技术不能只通过google或者博客学习,我的做法一般是先完整的看完一本书全面的了解,然后再通过google、视频、博客去有针对性的查找一些有疑问的地方,或者一些技巧。

2)Trying

这个步骤就是解答前面提到的很多同学的疑惑的关键点,形象来说就是“自己动手丰衣足食”,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。例如:

还有很多方法,这里就不一一列举,简单来说,就是要将学到的东西真正试试,才能理解更加深刻,印第安人有一句谚语:IhearandIforget.IseeandIremember.IdoandIunderstand,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。

当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。

3)Teaching

一般来说,经过Learning和Trying,能掌握70%左右,但要真正掌握,我觉得一定要做到能够跟别人讲清楚。因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习。同时,讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。

这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌握很全面了,但一写就发现很多点没考虑到;组内培训的时候也经常看到,有的同学写了PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚,或者有的点其实是理解错了。写PPT、讲PPT、讨论PPT,这个流程全部走一遍,基本上对一个知识点掌握就比较全面了。

最后撒点鸡汤,所谓学而时习之,温故而知新,即使是架构师也需要不停的学习、思考,新的技术层出不穷,不变的是那颗不甘安逸的心。

THE END
1.应用软件架构工程师应用软件架构工程师招聘猎聘应用软件架构工程师招聘频道为您提供大量的应用软件架构工程师招聘信息,有超过10000多应用软件架构工程师招聘信息任你选寻,招聘应用软件架构工程师人才就来猎聘应用软件架构工程师招聘!求职找工作就用猎聘聊。https://www.liepin.com/s/0245d864fffabd326b338d98e5898e5a/
2.软件架构师的主要工作职责及能力要求软件架构师的主要工作职责及能力要求 工作职责 工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。主导系统全局分析设计和实施、负责软件构架和关键技术决策的人员。 能力要求 https://blog.csdn.net/huwei2003/article/details/51392131
3.软件架构工程师岗位职责(工作内容,是做什么的)软件架构工程师是做什么的?有前途吗?工资待遇怎样?76.3%的岗位拿¥20-50K/月。招聘要求高吗?学历本科最多占77.9%,经验5-10年最多占39.5%。软件架构工程师岗位职责怎么写?为你汇总北京中冶设备研究设计总院有限公司,通号院等公司的工作描述。https://www.jobui.com/gangwei/ruanjianjiagougongchengshi/
4.北京海淀区软件系统架构师(高级软件工程师)Android系统工程师/架构师 2-4万北京-海淀区恒玄科技(上海)股份有限公司 协议栈软件架构师 2-4万·13薪北京-海淀区中关村泛联移动通信技术创新应用研究院 大模型应用研发专家(天然气销售与管道)(A149148) 2-4万北京-昌平区昆仑数智科技有限责任公司https://jobs.51job.com/beijing/119662341.html
5.架构师和软件工程师架构师与软件工程师:软考视角下的职业探析在信息技术飞速发展的今天,软件行业已经成为推动社会进步的重要力量。软件架构师和软件工程师作为这一行业中的两大核心角色,他们的职责、技能以及发展前景备受关注。特别是在软考(软件专业技术资格和水平考试)的背景下,探讨这两大职业的定位与差异,对于提升行业整体水平具有重要意义。 https://blog.51cto.com/u_14568336/11201094
6.程序员“封爵之路”:工程师架构师和项目经理有何区别?工程院士 CEO CTO 首席信息官/首席数字官/首席创新官 工程副总裁/工程总监 首席架构师 软件架构师 工程项目经理/项目经理 技术主管/工程主管/团队负责人 首席软件工程师 高级软件工程师/高级软件开发人员 软件工程师 软件开发师 初级软件开发人员 实习软件开发人员 https://xz.chsi.com.cn/xz/zyts/201903/20190327/1777026277.html
7.软件工程师招聘要求20220525094128.doc. . 第1页 共10页 1 1、职位名称:资深J2EE软件架构工程师1名 岗位描述: 1.深入开掘工程需求为软件开发提供架构设计; 2.主持和参与系统逻辑模型和物理模型设计并实现原型; 3. 开发和维护统一的软件开发架构,发现和解决存在的软件设计问题; 4.从事关键性模块代码的编写,指导和培训编程工程师。 5.主持编写软件设https://max.book118.com/html/2022/0525/7116156120004124.shtm
8.软件工程师软件工程师(Software Engineer)是软件设计人员、软件架构人员、软件工程管理人员以及从事软件开发相关工作的人员的统称。 软件工程师的工作内容包括:负责对公司各部门提出的需求进行分析和可行性评估;负责公司ERP、生产、仓储等软件系统的研发和设计;负责公司相关软件系统的单元测试、集成测试;负责公司自研系统及外购软件系统https://baike.sogou.com/v316626.htm
9.《汽车软件架构》的读后感当一名普普通通又不会Linux的汽车嵌入式软件工程师遭遇到Automotive SPICE的降维打击,他发现自己身处V Model的最底端,即SWE.3 软件详细设计和写代码。未来的职业发展何在?除了转管理还有更好的出路吗? Automotive SPICE已经为我们指明了方向,SWE.2 软件架构设计和SWE.5 软件集成都是普通的嵌入式软件工程师可以发展http://esnl.hnu.edu.cn/info/1005/2566.htm
10.茹炳晟软件测试52讲软件测试艺术架构师测试工程师全栈测试当当人民邮电出版社官方旗舰店在线销售正版《测试工程师全栈技术进阶与实践 茹炳晟 软件测试52讲 软件测试艺术架构师测试工程师全栈测试自动化测试》。最新《测试工程师全栈技术进阶与实践 茹炳晟 软件测试52讲 软件测试艺术架构师测试工程师全栈测试自动化测试》简介、书评http://product.dangdang.com/1527175905.html
11.2173软件工程师和设计师SoftwareEngineersandDesigners2173 软件工程师和设计师头衔范例 Example Titles 应用程序架构师 application architect 计算机软件工程师 computer software engineer 嵌入式软件工程师 embedded software engineer 软件架构师 software architect 软件设计工程师 software design engineer 软件设计验证工程师 software design verification engineer http://www.andyyimin.com/876/2173.html
12.「软件工程师招聘」2024年最新软件工程师招聘信息智通人才网软件工程师招聘频道,为软件工程师求职者提供2024年最新最全且真实有效的软件工程师招聘信息,731个优质职位正在热招中!软件工程师招聘求职,找工作,就上智通人才网.https://www.job5156.com/index/zhaopin_zwrjgcs/
13.6大互联网岗位人才画像卡:软件开发?架构?产品UI本篇文章分享互联网行业6大岗位的人才画像卡,具体包括软件开发工程师、架构工程师、产品经理、UI 设计师、测试工程师、实施工程师。 1、软件开发工程师人才画像卡 图片 2 、架构工程师人才画像卡 图片 3、产品经理人才画像卡 图片 4、UI设计师人才画像卡 图片 5、测试工程师人才画像卡 图片 6、实施工程师人才https://weibo.com/ttarticle/p/show?id=2309404695092165476526