开发者和架构师之间最大的区别是什么
1、开发者和架构师之间最大的区别是什么?
架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。
软件架构师的角色需要理解最重要的架构驱动力是什么,他提供的设计需要考虑这些因素。架构师还要控制技术风险,在需要的时候积极演化架构,并且负责技术质量保证。从根本上讲,架构师是一个技术领导者的角色,这就是最大的区别。
2、一位开发者如何才能成为一位架构师?他/她需要掌握哪些领域之外的能力?
两个字:经验。
我认识的大部分优秀软件架构师同时也是出色的软件开发者,他们都是经过时间逐渐发展成为架构师的。你需要有退后一步看代码的能力,从而理解特定软件系统背后的设计决策。退后一步才能看到“大局”,这是架构师必须掌握的核心技能。
3、你对软件架构的理解是否因为你的经历和实践而改变过?
是的。我对软件架构的理解是根据我在咨询公司工作时在各个项目中负责软件架构的经验形成的。咨询是一件好事,尤其从最近我开始从事独立咨询师这个工作之后,我可以看到很多不同的团队,不同的架构,不同的技术,以及人们不同的工作方式。世界各地的文化多样性又为工作的复杂度增加了一个维度。无论是寻找特定问题解决方案的过程,还是为各种想法去芜存菁的过程,这些经验和与我共事的人的反馈一起最终形成了我今天对软件架构的认识,这些思维也反应在了我的书中。
4、有没有什么事是架构师永远都不应该做的?
有,软件架构师永远都不应该停止编程和停止学习!
程序员从初级走向资深的过程中,会面临两个支路,一个叫技术主管,另一个则是架构师。
总结程序员到架构师之路的忠告:
1、程序就是一切。文档是紧接其后的事情。因此,把你们的代码写成本身就是文档,而且要好用。
2、测试测试测试。重要的事情说三遍。
3、单元测试要严格。任何一个单元测试中发现的bug都负担了开发人员成本外的双重代价。你们要知道,我宁愿给你们更多的薪水也不愿找别的QA公司来测试、让你们修改bug。但如果你的程序写的很差,那我只好把这些钱由这些人平摊,你们只能得到其中很小的一块蛋糕。
4、写出好代码要能给人类阅读,给CPU使用。绝对不能向烂代码低头。
5、阅读更多的知识,不要局限于目前的工作所需。如果你只掌握今天需要的知识而不知明天需要的,你不会有发展进步。
6、回家不时的做做饭。是的,真的饭。这会让你知按照菜谱做饭和自己创造一顿饭之间的区别。前者是在做饭前已经知道了需要什么,而后者是根据你目前有的来做…就这一点点不同。
7、抽象的能力,抽象思考的能力怎么强调都不为过。现实的需求纷繁复杂,如果架构师不能够把这些乱无头绪的需求抽象成一些“概念”,在概念的层次进行思考,系统根本就无法设计。
8、技术领导力,要用技术的影响力来领导人,而不是威权和职位。换句大白话来说,就是要能让技术人员服你。有了技术影响力,你在团队发出的声音才会被倾听,被尊重。
为什么大多数人不是架构师?
架构师,程序员,产品经理的区别,大概就是建筑行业里建筑师,建筑工人,甲方业主的区别。产品经理说我要建这么这么一栋楼,架构师说好吧,我来帮你看看是做成砖木结构还是框架结构,房型怎么设计,水电气怎么布局,预算多少,然后程序员上阵,按照图纸把楼建起来。运营是大楼的物业管理,负责营运大楼。
软件开发越来越成为传统行业(即便在互联网企业),一个成熟的软件团队内部自然会分化出这些角色,各展所长。但非常不同的是,建筑工人很少能自发成长为建筑师,后者都是科班出身,因为建筑学科已经高度发达,需要掌握结构力学,美学等技术,现在软件行业还没有这么高的成熟度,程序员和架构师接受的都是一样的计算机教育,所以程序员可以自学升级到架构师,走一条不同的升级打怪路线。
那么,架构师是什么人呢?
按所工作的不同软件层分,有网络架构,系统架构,数据架构,业务架构,应用架构,平台架构。
按所解决的问题领域分,有电商架构,支付架构,搜索架构,安全架构,性能架构,游戏架构,多媒体架构,等等等。
按其工作的深度来分,有集成架构,业务架构,模块架构,框架架构,中间件架构,软件架构,引擎架构,服务器架构,甚至编程语言架构。
是不是太乱了?好比在设计师的世界观里一切东西都需要设计。软件也需要精心设计,在优秀的程序员眼里,每一行代码都需要架构!都体现了架构。
为了解决问题,程序员自然需要架构,他们中的佼佼者被冠以架构师的名号,获得了一定的话语权,逐步成为一个职业分工,我想,这就是架构师的本来面目。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的Java交流群:681179158,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
---------------------
作者:张大春
来源:CSDN
原文:https://blog.csdn.net/qq_39627461/article/details/84994910
版权声明:本文为博主原创文章,转载请附上博文链接!
架构师主要做些什么,你知道吗
小伙伴们,新年好!
感谢大家对「IT老兵哥」原创文章的支持顶赞,❤️❤️❤️!把有价值的知识或经验分享给更多人,在分享中提升个人价值,这是我写作、分享的初衷和动力,在新的一年里我会更加努力,也希望能够继续获得各位小伙伴的支持!坚持原创不易,如果文章有价值,千万要记得在手动点个「推荐」哦,^_^
祝大家新年在家庭、事业和生活上都有新的进步,我们一起加油干!⛽️⛽️⛽️
年前我们一起聊了 程序员为什么要懂架构、架构是什么 和架构都有哪些类型 这三个话题,今天我们来看看架构师是怎样开展工作的,他/她需要对接上下游哪些角色,以什么作为工作输入,最终要对外输出什么产物。这些内容既有助于我们跟架构岗同事更好的协作,也可以作为是否往架构转型的参考,接下来我们一起揭开架构师的神秘面纱吧!
1.架构设计的输入是什么?
软件系统最终要构建成什么样,这是由项目干系人的各种要求决定的。通常,我们将这些要求归集在产品需求文档之中,这份产品需求就是架构设计的输入。我们可以将这些需求划分为:
功能需求:完成某项业务需要的功能操作,例如:共享单车客户端软件需要支持单车定位、扫码解锁等。质量需求:每项功能操作要达到什么样的质量要求,例如:易用性、可靠性、安全性、性能等等。商业需求:软件系统需要以什么样的成本、迭代速度推向市场,如何提升产品的市场竞争力等等。2.架构师要对接哪些角色?
这些需求源自项目干系人、商业管理、商业竞争、法律法规、技术环境、政治约束和生命周期等不同维度的诉求,架构设计就是要区分这些需求的优先级权重,然后找出相对最优的方案来平衡满足各个方面的诉求,最终基于这个架构设计方案研发出相应的软件系统推向市场,并收集市场反馈输入到下一次迭代演化当中。
因此,架构在开展工作的过程中需要对接老板、产品、项目、开发、测试、安全和运营等各种岗位角色,他们都是架构需要关注和服务的内部客户,他们的痛点就是架构工作的驱动因素。
3.架构设计的输出
关键场景(KeyScenarios):分析产品需求并从中提炼出关键的业务场景,架构设计必须要通过这些关键业务场景的验证,例如:共享单车的关键业务场景包括:用户注册登录、支付账号绑定、单车租借归还等。逻辑视图(LogicalView):为了实现关键业务场景,整个软件系统从逻辑上需要划分成多少个子系统。如果关键业务场景比作一幕话剧,那么逻辑视图就是出演话剧的主要角色,它是面向最终用户,对功能需求负责。过程视图(ProcessView):过程视图是以逻辑视图为基础的,逻辑视图是系统的静态结构,过程视图是系统的动态流程。如果把关键场景比作故事剧本,逻辑视图就是角色人物,过程视图就是让这些角色人物把故事剧本演练一遍,在该视图中每个角色人物的分工定位和交互关系都会被明确下来,集成人员可以根据它来验证系统。开发视图(DevelopmentView):通过逻辑视图、过程视图确定了子系统的划分和职责定位,开发视图就是明确每个子系统采用什么样的技术栈来实现,包括编程语言、开发框架、分层结构、项目工程等。开发视图主要是输出给编程人员,编程人员基于此就可以开始编码实现相关的工作了,所以说架构设计就是桥接需求和实现的。物理视图(PhysicalView):待构成整个系统的子系统都开发完成之后,我们需要将这些子系统部署到真实的物理环境当中,物理视图就是明确每个子系统需要什么规格的软硬件环境,分别部署到哪个网络区域,不同网络区域是否要开通防火墙,以及每个子系统需要部署多少个实例才能满足业务需求等,它主要是面向系统工程师。4.架构设计的工作流程
第一步,分析产品需求梳理出关键业务场景;第二步,基于关键场景划分子系统,输出逻辑视图;第三步,基于关键场景、逻辑视图确定业务交互流程,输出过程视图;第四步,基于逻辑视图、过程视图确定子系统技术栈,输出开发视图;第五步,基于逻辑视图、过程视图和开发视图确定部署方案,输出物理视图。今天暂时先分享到这里,接下来我们还要继续聊架构,敬请关注哦。坚持原创不易,如果你觉得有价值,麻烦动动手指点下文「 推荐 」按钮,让更多小伙伴可以看到,老兵哥会更有动力坚持分享的。另外,我后续还会分享职业规划、应聘面试、技能提升、影响力打造等经验,关注「 IT老兵哥 」,赋能程序人生!
软技能-热门文章:(首发公众号)2020来了,你的2019晒好封存了吗?“花式”裁员套路深,你知道吗?遭遇裁员,如何渡过心理危机?如何在寒冬中找到好工作?2C还是2B,跟找工作有什么关系?大公司vs小公司,你会选哪个?记住这一点,不怕找不到好工作!跳槽,跳还是不跳,该怎么跳?程序员“求包养”攻略揭秘很努力了,为什么我还在原地踏步?硬技能-热门文章:程序员必须懂的架构入门课 123架构到底是什么?来听程序老兵怎么说!架构竟然有这么多种,那我该怎么选呢?如何设计出优美的WebAPI?程序员必须掌握的性能调优XYZ如何把单体式应用拆解成微服务?【上】如何把单体式应用拆解成微服务?【下】图解Spring:HTTP请求的处理流程与机制【1】图解Spring:HTTP请求的处理流程与机制【2】图解Spring:HTTP请求的处理流程与机制【3】