软件架构师主要是做什么?。?/h3>软件架构师是软件行业中一种新兴职业 , 工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划 。主导系统全局分析设计和实施、负责软件构架和关键技术决策的人员 。根据“第三届中国软件工程大会”的报告,在中国,未来五年,高端软件人才需求缺口达20万 。而每年自动成长起来的软件架构师只有几百人,可见市场需求的巨大 。

文章插图
扩展资料:
架构师的主要任务:
1、领导与协调整个项目中的技术活动(分析、设计和实施等)
2、推动主要的技术决策 , 并最终表达为软件构架
3、确定和文档化系统的相对构架而言意义重大的方面 , 包括系统的需求、设计、实施和部署等“视图”
【软件架构师_java软件开发工程师和java软件架构师 有啥区别】参考资料来源:百度百科-软件工程程序员,架构师,软件工程师的区别1、程序员,架构师,软件工程师的能力要求不同,程序员是从事程序开发、程序维护人员,但是不擅长写文档 。软件工程师的技术要求比较全面,会熟练的写语言代码,也会写一些项目的文档 。架构师是软件开发过程中的重要人物,主要负责大系统项目的架构设计 。
2、程序员,架构师,软件工程师级别不同,程序员分为初级程序员、中级程序员 , 软件工程师是从事软件职业的人员的一种职业能力的认证,架构师是团队领导型人物,是需要从资深软件工程师里面提升为架构师 。

文章插图
3、程序员,架构师,软件工程师平均年薪不同,美国谷歌程序员的工资最低年薪平均水平为12.8336万,软件工程师平均工资较高,谷歌软件工程师年薪平均水平为25-30万美元,架构师的工资水平是最高的,谷歌大数据架构师年薪为50-60万美元 。
参考资料:百度百科—软件架构师
百度百科—软件工程师
百度百科—程序员软件系统架构师必修内容是什么?对于任何一个软件开发人员来说,架构师都是一个令人向往的角色 。就连世界首富比尔盖茨在2000年卸任公司CEO的同时,也担任了微软公司的荣誉角色“首席软件架构师”,可见“架构师”这一称谓的吸引力 。架构师是公司的“金领”,有着非常高的收入,很少需要考虑生存的问题,从而有更多的精力思考关键技术问题,形成“强者愈强”的良性循环 。部分优秀的开发人员在工作了一定时间后,就要开始考虑自己的未来到底向哪个方向发展 。如果开发人员的沟通能力强过技术能力 , 在补充一定的项目管理知识后 , 可以向技术管理的方向转型 。如果其对技术一直很感兴趣,而沟通能力也不弱,则可以试着进一步加强技术修养,以期向架构师的方向发展,最终“修成正果” 。
那么,到底什么是架构师呢?所谓的架构师 , 应该是一个技术企业的最高技术决策者 。他主要负责公司软件产品或软件项目的技术路线与技术框架的制订 。好的架构师都是善良的独裁者 , 具有很强的技术、良好的写作能力、良好的口头表达能力,能够在各个层次进行沟通 。从开发人员到架构师的成长应该是阶梯式的,一般来讲开发人员在刚刚开始工作时只能开发简单的独立软件模块 , 慢慢的随着经验的增长,他开始接触一些相互之间有信息传递的模块,而后来,他会发现自己接到的开发任务已经不是一个独立的单体,这些任务由一些专门的软件部分组成,可能包含数据库,工作流引擎,消息服务等等各种功能模块,可能分布在不同的服务器上,所有的部分协同起来,完成软件功能 。而这时候,体系结构的好坏将直接决定了系统的性能和可扩展性,而就在这时候,这名优秀的开发人员也开始思考架构师应该思考的问题了,或者说,他向成长为架构师的道路迈出了一大步 。
什么是架构师最具价值的技能呢?就是要了解不同的知识,做一个“杂家”或者说“博学家” 。当然 , 如果你的数据库技术非常棒,或者你在工作流引擎方面具有不可超越的专家知识,那也是很不错的 。好的架构师有好多都是从专家成长过来的 。但是,这不是架构师应该做的事情,架构师应该做的是了解所有的东西,既了解技术的宏观面,又了解技术的细节 。真正的架构师不仅仅要了解软件,也要了解硬件 , 在关键的部位使用合适的硬件来取代软件,可以成倍甚至成百倍的提高整个系统的效率 。下面我将会以互联网行业对的架构师的要求为例,向大家讲解作为架构师应该具备的知识 。
互联网行业是当前最激动人心的行业之一 , 很多的创新都来自于这个行业,而每一个大型的网站如Google,Yahoo,Myspace等都需要解决一个非常复杂的问题,就是网站的分布式向外扩展(Scale Out)的问题 。解决这个问题,需要最优秀的架构师对业务进行剖析,利用软硬件将网站进行重构,甚至根据业务研发相应的分布式技术 , 解决网站复杂的分布式计算的问题 。如果你想在这个行业中成为一名架构师的话,需要至少掌握网络知识,硬件,软件,网站优化等方方面面的知识:
网络知识
当前的软件已经绝对不是那种仅仅跑在一台单机上的孤立应用了 。不仅仅是在互联网行业,任何一个行业的软件,都要求其具有网络功能 。因此,网络知识是架构师必备的知识 。我们所说的网络知识,不仅仅包括TCP/IP , http等互联网行业常用的软件协议,也包括网络规划,甚至更具体的说,根据网站应用所处的地理环境进行网络规划 。比如人们常说:“这世界上最远的距离不是生与死的距离,而是电信到网通的距离”(笑)如果应用是建立在中国的,就要考虑电信用户和网通用户访问网站的速度应该都比较快才可以 。这时候的解决方案可能有多种,比如采用CDN(Content Delivery Network内容分发网络)使得网站的内容发布到离用户最近的服务器,又可以采用把服务器放在一些所谓的双线机房中 , 甚至将几种方案结合起来使用 。这些都统统归到网络知识中 。做为公司的架构师,要对这些知识都有所了解,才有助于在遇到问题时找到最佳答案 。
硬件知识
了解硬件的极限 , 是架构师的基本功 。我见过一些人,他们的眼中软件硬件都是没有极限的,需要资源就申请 , 系统性能下降了就买更高级的设备 。然而 , 硬件的性能有很大一部分取决于I/O设备 。而这些I/O设备依靠的都是机械物理运动,这种运动是有极限的 。因此当资源访问量增大到一定的程度时,这种物理运动将成为瓶颈 。比如说,在开发网站的过程中 , 记录访客的状态是一件很重要的事情 , 一般来说可以使用HttpSession来记录 。而HttpSession的存储问题将是一个很大的挑战,尤其是多机共享Session时 , 将HttpSession存成文件并通过多机共享或网络备份的方式来解决分布式的问题是常用的方案,然而,架构师必须考虑到这种方案是有I/O极限限制的 , 很难扩展到超过一定规模的大型网络 。同时,架构师应该了解目前最近的硬件发展是否对软件系统会造成一定的影响,比如在多核的条件下是否对软件编程有新的要求,是否会对运行在虚拟机和非虚拟机上的程序有影响等等 。
软件知识
软件知识所包含的范围就更加广泛了 。对于互联网行业来讲,架构师要了解操作系统,数据库,应用服务器等各方面的知识 。比如说 , 如果网站使用的操作系统是Linux,就要了解这个Linux版本的性能与局限性,比如说最多可以存放的单个文件为多大 。有的数据库的数据是以单个文件来存放的,虽然我们很少见到数据库中的数据多到不能再放入一条记录的情况 , 但是作为架构师,请时刻注意,这种可能性是有的 。而且如果你有幸在一家高速成长的互联网企业中,而你所负责的应用又没有经过优化的话,可能你会很快见到这种现象 。这种现象的发生可能是由于操作系统不支持大文件的原因 , 也可能是数据库不支持大文件 。不论如何,架构师应该在这种现象发生之前就把一切都准备好 。对数据库中表的拆分是架构师应该遇到的另外一个困难 。一般来说增加应用服务器比较简单而增加数据库服务器则是比较复杂的问题,如果一个站点由多个数据库支持 , 架构师需要考虑如何在保证数据一致的情况下,让多个数据库分担压力 。有些解决方案是将数据库的读写分开,使得大多数的查询sql不经过核心数据库 , 而只是访问数据库的副本,但事实上,这种方式也只能维护规模不大的网站 。对于大型的网站来说,把业务分散到不同的数据库中,只共享必要的数据,才是合理的提高网站扩展性的解决方案 。
其他知识
作为系统架构师,可能还需要对分布式系统,负载均衡,网络安全,数据监控等等各方面都有所了解 。不仅仅是了解理论知识,也要对相关的产品和业界进展有一定的认识 。比如说做负载均衡最好的产品是那种 。目前最常用的备份策略是什么 , 有什么缺点 。如何使用缓存,如何做好日志分析等等 。
刚刚谈到的是架构师需要掌握的知识,然而,冰冻三尺非一日之寒 。这个过程需要我们慢慢的积累 。如果你已经进入到公司进行软件开发,请时刻关注你所开发软件的性能与可扩展性,而不仅仅局限在功能上,时刻想着任何一个简单的问题:我开发的模块如果放在多人并发的环境下会怎样,慢慢的就会有所心得 。如果你还是一个在校学生,不要想着自己离架构师这个职位还很遥远 。要知道 , 成为架构师的修炼之路是很长的,甚至可以说是终身的,因此早点进入学习状态 , 不断修炼自己 。在学校期间学好离散数学,数据结构,操作系统,编译原理,体系结构,数据库原理等关键课程,并积极寻找机会到外面实习 , 增长自己的工作经验 。如果有机会去到一些技术主导的公司中工作,就一定不要放弃这种机会,慢慢就会成长起来 。最重要的,你会养成关注技术,勤于思考的好习惯 。当有一天你发现自己对任何技术难题都可以一眼看到其本质,并能够将其分解为一个个可轻松解决的模块,你会由衷的感觉到知识给你带来的快乐,或许那一天,你已经是一个架构师了 。
什么是软件架构师?软件架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划 。架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作 。他必须对开发技术非常了解,并且需要有良好的组织管理能力 。可以这样说,一个架构师工作的好坏决定了整个软件开发项目的成败 。
软件架构师的职责是把需求转换为软件世界的模型 。4+1视图中以use case作为核心 , 其中功能性需求以及部分非功能性需求会被软件架构师通过分析和设计,映射为各种软件设计模型 。从OOA/OOD角度说,use case 在这个过程中是要转换为各种UML , 其中类图 , 序列图,状态图是最常用到的 。这个转换过程是需要智慧的,use case是目的,各种OO的原则是指导,设计模式是经验,灵活运用是能力 。里面蕴涵了设计的美感,我觉得这个过程是衡量一个软件架构师的最重要的指标 。
当然这个过程是迭代和反馈的,我觉得概要设计和详细设计只是思考同一个问题的粒度不同而已 。
另外就是我们要熟悉语言,详细设计是要转换为代码的 , 而且跟语言是有关系的 。语言比如java/c++等,详细设计的模型是有很多不同的 。就需要软件架构师有过这个过程,并且是非常良好的映射 。
除了语言就是要熟悉某个技术领域,比如J2EE/DOTnet.从J2ee来说,可能需要了解比如jsp/servlet/ejb/jndi/jta/jdbc等 。还需要了解各种web framework,o/rmapping,ioc/aop容器等等 。还有的就是一些技术组件和业务组件,不如workflow,rules engine等等 。另外比如各种database.熟悉这些东西的目的,是把这些软件和组件合理并且有机的组织起来成为一个开发的架构 。这个过程是需要创造力和想象力的 。可能很多人认为这个地方正是软件架构师体现能力的地方 。
怎么成为一个软件架构师架构师是一个充满挑战的职业,知识面的宽窄往往决定着一个架构师的架构能力 , 所以在这一点上我比较赞成你的学习方式 , 就是要阅读大量的技术书籍,但我希望你不要仅限于软件相关的书籍,经常泡技术论坛,一方面可以结交朋友 , 一方面可以增加自己的知识面 。
公司的大小往往决定了所做的项目规模 , 一般的大项目不太可能直接总包给小公司去做,但这并不妨碍小公司可以分包到大项目的一部分 。在做小项目的同时也可以积累丰富的经验,我自己就是一个这样的例子 。
我在小公司混迹了5年多 , 其中也偶尔有1两个大公司,比如大唐电信,但是基本上都是小公司,从基层的程序要到公司的开发总监都做过 , 甚至自己还设计过包括LED显示屏,密码键盘在内的收费系统 , 自己联系厂家OEM,当然这些今天已经广泛应用了,当时我们的客户用上之后还是非常震撼的 。
知识面的宽广对于一名出色的架构师来说是必不可少的技能,也许很多人对架构的理解还停留在设计模式,重构 , SOA等等的软件层面 , 然而这仅仅是非常基本的东西,架构师的脑子里不光需要知道让软件如何高效的运行,还需要知道如何去结合网络,存储,甚至一些文件系统的特性,比如GFS,NFS,XFS,NTFS等等,而且架构师还需要知道一些编程语言的特性 , C,C++,Java,PHP,Python , Lisp , JS等等,现在是一个混合编程的时代,只了解一种语言 , 即使再精通也会使你在架构系统的时候受到很大的局限性 。
再有一点,架构师需要对数据库技术有深刻的认识,因为现今是一个信息时代,大量的信息都是需要存储并检索的,数据库设计的不好,将会严重影响系统的性能 , 而这一点往往会被我们的设计人员忽略,他们只知道遵守那些范式而不会结合数据的特性去设计数据库 。
看你的编程情况,你好像做PHP开发比较多,PHP比较适合B/S结构的应用开发,这会限制一个架构师的思路 , 我建议你再学习一门适合做C/S开发的语言 , 拓宽自己的视野 。
从一个程序员到架构师是一个很大的变化,架构师需要从大的方面考虑,而不只是考虑这个模块该用哪种设计模式去开发 。不能急于求成,也许是我自己变化的比较慢,我用了10年的时间,这10年里,我使用超过一年的编程语言包括了delphi , C++ , Java , python,使用的数据库包括了oracle,infomix,sybase,sqlserver , mysql,javadb,sqlite等等,使用过大型机 , 小型机,服务器 。unix,linux,windows都至少做过两年以上的开发,这些使用和开发的经历会大大增强一个人在做架构师这个职业时的技术素养 。
总之,想要成为架构师 , 需要有耐心 , 不断学习,拓宽自己的视野,不仅仅局限于自己眼前的项目,关注开源技术,关注热门技术社区的新动向 。
请问有没有 “软件架构师”的认证目前,软件架构师的认证在国内基本上是空白,既没有专业的培训机构 , 也没有专门的认证指南和权威的教育认证机构 。
在国外,软件架构师的培养与认证具有严格的过程,明确规定了教育目标、认证的要求和学习课程等方面的内容 。下面 , 介绍三个组织的软件架构师认证情况 。
UC
在UC Irvine的软件架构师认证计划[27]中,为了拿到软件架构师C级认证,学员必须完成11个单元的必修课程和至少4个单元的选修课程 。这些课程包括:
·必修课程:软件系统建模和分析概论(2个单元)、系统分析基?。?个单元)、用户需求的分析和文档化(3个单元)、软件架构项目(3个单元) 。
·选修课程:信息系统项目管理(2个单元)、系统性能建模(2.5个单元)、管理业务改进项目(2.5个单元) 。
UC Irvine的软件架构师认证要求学员具有业务系统建模,决定用户需求,评价业务过程的能力,掌握项目管理技术,能设计完善的、具有最佳可适应性和可扩展性的架构 。该认证程序以一门实践课程结束,在实践课程中,学员从头开始,设计一个大规模软件解决方案的架构 。
CMU
SEI在软件架构师方面的认证[42]包括三个职位,分别是软件架构师、ATAM评估师和ATAM主任评估师 。这些认证都需要学习2年的课程 。其中软件架构师需要学习的课程有软件架构:原理与实践、软件架构文档化、软件架构设计与分析和软件产品线 。
iCMG
iCMG对软件架构师的认证强调7个层次的课程学习 , 如图2所示[30] 。在该认证体系中,上面的3个层次由其合作伙伴完成,iCMG只负责下面4个层次的知识体系 。
java软件开发工程师和java软件架构师 有啥区别java软件开发工程师与java软件架构师的区别如下:
java软件开发工程师是从事软件开发相关工作的人员的统称 。主要职责有:RFID相关应用软件、信息管理类软件的设计、研发、维护、安装实施;数据库管理及应用开发;根据要求进行软件概要设计、详细设计、编码、单元测试工作及说明文档的编写 。
而java软件架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划 。主导系统全局分析设计和实施、负责软件构架和关键技术决策的人员 。架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作 。必须对开发技术非常了解,并且需要有良好的组织管理能力 。可以这样说,一个架构师工作的好坏决定了整个软件开发项目的成败 。
- 软件需求分析_软件的需求分析怎么写啊?
- 软件技术支持_软件开发经验,要不要转行做技术支持
- 软件开发项目管理办法_软件开发项目管理容易陷入哪些困局
- 软件开发项目管理制度_软件开发项目管理的前言
- 软件开发专业_大学想学软件开发,要报什么专业?
- 软件工程试题及答案_软件工程题目?
- 软件工程师面试题_软件测试工程师面试官应该问什么问题
- 软件工程师职业规划_应聘JAVA软件开发工程师,问及未来职业规划,该怎么答
- 软件工程专业学什么_软件工程专业难学吗?
- 软件工程专业_软件工程专业学生可以考哪些证书
