1.软件架构师需要掌握哪些知识
架构师首先必须具有丰富的开发经验,是个技术主管。因为他必须清楚什么是可以实现的,实现的方式有哪些,相应的难度怎么样,实现出来的系统面对需求变化的适应性等一系列指标。另外,需要对面向过程、面向对象、面向服务等设计理念有深刻的理解,可以快速的察觉出实现中的问题并提出相应的改进(重构)方案(也就是通常说的反模式)。这些都需要长期的开发实践才能真正的体会到,单从书本上很难领会到,就算当时理解了也不一定能融会到实践中去。
在技术能力上,软件架构师最重要也是最需要掌握的知识是构件通信机制方面的知识,包括进程内通信(对象访问、函数调用、数据交换、线程同步等)以及进程外(包括跨计算机)的通信(如RMI、DCOM、Web Service)。在WEB应用大行其道的今天,开发者往往对服务器间的通信关注的比较多,而对进程内的通信较少关注。进程外跨机器通信是构建分布式应用的基石,它是架构设计中的鸟瞰视图;而进程内的通信是模块实现的骨架,它是基石的基石。如果具体到一个基于.Net企业级架构设计,首先需要的是语言级别的认识,包括.NET的CLR、继承特性、委托和事件处理等。然后是常用解决方案的认识,包括ASP.NET Web Service、.NET Remoting、企业服务组件等。总之,丰富的开发实践经验有助于避免架构师纸上谈兵式的高来高去,给代码编写人员带来实实在在的可行性。
其次,具有足够的行业业务知识和商业头脑也是很重要的。行业业务知识的足够把握可以给架构师更多的拥抱变化的能力,可以在系统设计的时候留出一些扩展的余地来适应可能来临的需求变化。有经验的设计人员可能都碰到过这样的事,一厢情愿的保留接口在需求变化中的命中率非常低。也就是说,在系统设计之初为扩展性留下来的系统接口没能在需求变化的洪流中发挥真正的作用,因为需求的变化并没有按照预想的方向进行,到最后还是不得不为变化的业务重新设计系统。这就是因为对业务知识的理解和对市场或者商业的判断没有达到一个实用的、可以为架构扩展性服务的水平。
再次,架构设计师对人的关注必须提升到架构设计之初来纳入考虑的范围,包括沟通以及对人员素质的判断。软件过程是团队协作共同构建系统的过程,沟通能力是将整个过程中多条开发线粘合在一起的胶水。大家都应该碰到过事后说“原来是这样啊,我不知道啊”或者某个开发人员突然高声呼喊“为什么这里的数据没有了”之类的。沟通的目的就是尽量避免多条开发线的混乱,让系统构建过程可以有条理的高效进行。另外,对人的关注还表现在对团队成员的素质判断上,比如哪些开发人员对哪些技术更熟悉,或者哪些开发人员容易拖进度等。只有合理的使用人力资源,让合适的人做合适的事情才能让整个软件过程更加高效。
架构师应时刻注意新软件设计和开发方面的发展情况,并不断探索更有效的新方法、开发语言、设计模式和开发平台不断很快地升级,软件架构师需要吸收这些新技术新知识,并将它们用于软件系统开发工作中。但对新技术的探索应该在一个理性的范围内进行,不能盲目的跟风。解决方案提供商永远都希望你能使用它提供的最新技术,而且它们在推广自己的解决方案的时候往往是以自己的产品为中心,容易给人错觉。比如数据库,往往让人觉得它什么都能做,只要有了它其它什么都不重要了。但事实上并不是如此,对于小型应用可以将许多业务逻辑用script的方式放入数据库中,但很少看到大型应用采用这样的做法。对于新东西需要以一种比较的观点来判断,包括横向的比较和纵向的比较,最后得出一些性能、可移植性以及可升级等指标。另外,新入行的开发人员往往关心新技术动向而忽略了技术的历史,而从DOS时代一路杀过来的开发者就对现在的技术体系有较全面的把握。
2.软件架构师需要掌握哪些知识
架构师首先必须具有丰富的开发经验,是个技术主管。
因为他必须清楚什么是可以实现的,实现的方式有哪些,相应的难度怎么样,实现出来的系统面对需求变化的适应性等一系列指标。另外,需要对面向过程、面向对象、面向服务等设计理念有深刻的理解,可以快速的察觉出实现中的问题并提出相应的改进(重构)方案(也就是通常说的反模式)。
这些都需要长期的开发实践才能真正的体会到,单从书本上很难领会到,就算当时理解了也不一定能融会到实践中去。 在技术能力上,软件架构师最重要也是最需要掌握的知识是构件通信机制方面的知识,包括进程内通信(对象访问、函数调用、数据交换、线程同步等)以及进程外(包括跨计算机)的通信(如RMI、DCOM、Web Service)。
在WEB应用大行其道的今天,开发者往往对服务器间的通信关注的比较多,而对进程内的通信较少关注。进程外跨机器通信是构建分布式应用的基石,它是架构设计中的鸟瞰视图;而进程内的通信是模块实现的骨架,它是基石的基石。
如果具体到一个基于.Net企业级架构设计,首先需要的是语言级别的认识,包括.NET的CLR、继承特性、委托和事件处理等。然后是常用解决方案的认识,包括ASP.NET Web Service、.NET Remoting、企业服务组件等。
总之,丰富的开发实践经验有助于避免架构师纸上谈兵式的高来高去,给代码编写人员带来实实在在的可行性。 其次,具有足够的行业业务知识和商业头脑也是很重要的。
行业业务知识的足够把握可以给架构师更多的拥抱变化的能力,可以在系统设计的时候留出一些扩展的余地来适应可能来临的需求变化。有经验的设计人员可能都碰到过这样的事,一厢情愿的保留接口在需求变化中的命中率非常低。
也就是说,在系统设计之初为扩展性留下来的系统接口没能在需求变化的洪流中发挥真正的作用,因为需求的变化并没有按照预想的方向进行,到最后还是不得不为变化的业务重新设计系统。这就是因为对业务知识的理解和对市场或者商业的判断没有达到一个实用的、可以为架构扩展性服务的水平。
再次,架构设计师对人的关注必须提升到架构设计之初来纳入考虑的范围,包括沟通以及对人员素质的判断。软件过程是团队协作共同构建系统的过程,沟通能力是将整个过程中多条开发线粘合在一起的胶水。
大家都应该碰到过事后说“原来是这样啊,我不知道啊”或者某个开发人员突然高声呼喊“为什么这里的数据没有了”之类的。沟通的目的就是尽量避免多条开发线的混乱,让系统构建过程可以有条理的高效进行。
另外,对人的关注还表现在对团队成员的素质判断上,比如哪些开发人员对哪些技术更熟悉,或者哪些开发人员容易拖进度等。只有合理的使用人力资源,让合适的人做合适的事情才能让整个软件过程更加高效。
架构师应时刻注意新软件设计和开发方面的发展情况,并不断探索更有效的新方法、开发语言、设计模式和开发平台不断很快地升级,软件架构师需要吸收这些新技术新知识,并将它们用于软件系统开发工作中。但对新技术的探索应该在一个理性的范围内进行,不能盲目的跟风。
解决方案提供商永远都希望你能使用它提供的最新技术,而且它们在推广自己的解决方案的时候往往是以自己的产品为中心,容易给人错觉。比如数据库,往往让人觉得它什么都能做,只要有了它其它什么都不重要了。
但事实上并不是如此,对于小型应用可以将许多业务逻辑用script的方式放入数据库中,但很少看到大型应用采用这样的做法。对于新东西需要以一种比较的观点来判断,包括横向的比较和纵向的比较,最后得出一些性能、可移植性以及可升级等指标。
另外,新入行的开发人员往往关心新技术动向而忽略了技术的历史,而从DOS时代一路杀过来的开发者就对现在的技术体系有较全面的把握。
3.架构师都要懂哪些知识
首先必须具有丰富的软件设计与开发经验,这有助于理解并解释所进行的设计是如何映射到实现中去。
其次要具有领导能力与团队协作技能,软件架构师必须是一个得到承认的技术领导,能在关键时候对技术的选择作出及时、有效的决定。
第三是具有很强的沟通能力,软件架构师需要与各路人马经常打交道,客户、市场人员、开发人员、测试人员、项目经理、网络管理员、数据库工程师等等,而且在很多角色之间还要起沟通者的作用。
一般来讲,系统架构师应该拥有以下几方面的能力:
1:具备 5-8 年以上软件行业工作经验;
2:具备 4 年以上 C/S 或 B/S 体系结构软件产品开发及架构和设计经验;
3:具备 3 年以上的代码编写工作经验;
4:具备丰富的大中型开发项目的总体规划、方案设计及技术队伍管理经验;
5:对相关的技术标准有深刻的认识,对软件工程标准规范有良好的把握;
6:对 .Net/JAVA 技术及整个解决方案有深刻的理解及熟练的应用,并且精通WebService/J2EE 架构和设计模式,并在此基础上设计产品框架;
7:具有面向对象分析、设计、开发能力(OOA、OOD、OOP),精通 UML 和 ROSE,熟练使用 Rational Rose、PowerDesigner 等工具进行设计开发;
8:精通大型数据库如 Oracle、Sql Server 等的开发;
9:对计算机系统、网络和安全、应用系统架构等有全面的认识,熟悉项目管理理论,并有实践基础;
10:在应用系统开发平台和项目管理上有深厚的基础,有大中型应用系统开发和实施的成功案例;
11:良好的团队意识和协作精神,有较强的内外沟通能力。
4.架构师具体需要学些什么
基础大概有两大块 1.是要有较强的数据库管理系统的使用能力(比如你要学会Oracle),以及较强的数据库理论知识背景。
2.大数据分析你要掌握概率统计学的知识,学会数据分析工具的使用。比如MATLAB,这个工具非常强大,掌握起来有些难度。
但不是说你掌握了这个工具就能胜任数据分析师的工作了。你还需要,有较强的逻辑分析能力,对各种各样的数据进行建模,然后根据统计分析结果进行最终判定。
建议:入门的时候先从数据库开始,因为这是数据的生存环境,大数据或者称为海量数据都是存储在这其中的。熟悉数据建模,这是个系统性很强的学科,主要是高等数学范畴内的只是,偏统计分析。
最后是勤加练习对各种数据建模分析,当你的结论越来越靠近最优解的时候,你的经验也在不断增长,那么离你的目标就很近了。这是个很有挑战,也是非常复杂的工作。
需要你坚持,大概三年能有小成。但前途一片光明。
5.从程序员到架构师,你需要掌握什么能力
1、开发者和架构师之间最大的区别是什么?
架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。
软件架构师的角色需要理解最重要的架构驱动力是什么,他提供的设计需要考虑这些因素。架构师还要控制技术风险,在需要的时候积极演化架构,并且负责技术质量保证。从根本上讲,架构师是一个技术领导者的角色,这就是最大的区别。
2、一位开发者如何才能成为一位架构师?他/她需要掌握哪些领域之外的能力?
两个字:经验。
我认识的大部分优秀软件架构师同时也是出色的软件开发者,他们都是经过时间逐渐发展成为架构师的。你需要有退后一步看代码的能力,从而理解特定软件系统背后的设计决策。退后一步才能看到“大局”,这是架构师必须掌握的核心技能。
3、你对软件架构的理解是否因为你的经历和实践而改变过?
是的。我对软件架构的理解是根据我在咨询公司工作时在各个项目中负责软件架构的经验形成的。咨询是一件好事,尤其从最近我开始从事独立咨询师这个工作之后,我可以看到很多不同的团队,不同的架构,不同的技术,以及人们不同的工作方式。世界各地的文化多样性又为工作的复杂度增加了一个维度。无论是寻找特定问题解决方案的过程,还是为各种想法去芜存菁的过程,这些经验和与我共事的人的反馈一起最终形成了我今天对软件架构的认识,这些思维也反应在了我的书中。
4、有没有什么事是架构师永远都不应该做的?
有,软件架构师永远都不应该停止编程和停止学习!
在程序员从初级走向资深的过程中,会面临两个支路,一个叫技术主管,另一个则是架构师。
总结程序员到架构师之路的忠告:
1、程序就是一切。文档是紧接其后的事情。因此,把你们的代码写成本身就是文档,而且要好用。
2、测试 测试 测试。
3、单元测试要严格。任何一个单元测试中发现的bug都负担了开发人员成本外的双重代价。你们要知道,我宁愿给你们更多的薪水也不愿找别的QA公司来测试、让你们修改bug。但如果你的程序写的很差,那我只好把这些钱由这些人平摊,你们只能得到其中很小的一块蛋糕。
4、写出好代码要能给人类阅读,给CPU使用。绝对不能向烂代码低头。
5、阅读更多的知识,不要局限于目前的工作所需。如果你只掌握今天需要的知识而不知明天需要的,你不会有发展进步。
6、回家不时的做做饭。是的,真的饭。这会让你知按照菜谱做饭和自己创造一顿饭之间的区别。前者是在做饭前已经知道了需要什么,而后者是根据你目前有的来做 … 就这一点点不同。
7、抽象的能力,抽象思考的能力怎么强调都不为过。现实的需求纷繁复杂,如果架构师不能够把这些乱无头绪的需求抽象成一些“概念”,在概念的层次进行思考,系统根本就无法设计。
8、技术领导力,要用技术的影响力来领导人,而不是威权和职位。换句大白话来说,就是要能让技术人员服你。有了技术影响力,你在团队发出的声音才会被倾听,被尊重。
6.做架构师还需要学些什么
但如果要做一名网站架构师的话,还需要学些什么呢?仅个人看法一般的,如果你是很有经验的phper,有过大中型网站开发经验,基本上就能担任架构师因为php本身就面向架构的一般正规公司,除了技术总监外,架构师应是核心人物也有人认为架构师分硬件部署架构师和软件架构师专业开发中,软件架构师一般是面向对象建模和数据库建模人员。
所以,掌握uml可能是必要的。数据库知识也是必要的。
但数据知识也可以由DBA兼任。硬件架构师多指部署。
服务器集群构建。一般对系统掌握要好,要了解常用的服务器系统和软件。
比如:linux,负载均衡,数据库集群。分布缓存。
一是能安装管理,还要会用。其本上以上两点中任何一个,要做到都不容易。
网站架构师: 所好的事一般的网站不是那么复杂的系统。所以,知识和经验很重要。
所以,一般的phper都身兼数责,足够用。架构师的实践原则:创建面向对象,高性能,易部署,易维护,可扩展,高内聚,低耦合,可移植的系统也有人强调可用性。
7.编程人员要具备什么专业知识
那就要看你做什么咯。
比如程序员,你只要掌握基本的编程就可以了。专科的就做这个(除非特别拔尖),他们不具备计算机复杂编程的能力,只有输入代码的能力。软件嘛一般就VC、vb等
还有软件架构员,他们一般从事软件架构以及重要代码部分编写,注意是编写,不是输入,他们要求比较高,至少要大学本科学历以上。先学C/C++,JAVA 其他的都要等以后自己学。因为电脑不是一成不变的,各种软件开发语言的主流都随时间变化。像现在便携式的计算机设备(IPAD、手机等)都有智能操作系统了,以后那个肯定是需要软件架构员的。以前的都是C语言专家,现在什么专家都有,其中有很多一部分是以前转型来的。
测试员嘛,就是对制作好的程序进行公司内部测试(非内测,是内部测),需要掌握一定软件架构能力,能指出错误,并能提供修补方案。什么都得学。
自己码的字。
8.成为一名优秀的系统架构师需要哪些知识储备
系统架构师的职责:
一、理解系统的业务需求,制定系统的整体框架(包括:技术框架和业务框架)
二、对系统框架相关技术和业务进行培训,指导开发人员开发。并解决系统开发、运行中出现的各种问题。 系统架构师的目的:
对系统的重用、扩展、安全、性能、伸缩性、简洁等做系统级的把握。 系统架构师能力要求:
一、系统架构相关的知识和经验。
二、很强的自学能力、分析能力、解决问题的能力。
三、写作、沟通表达、培训。
角色软件架构师Software Architect 定义
主导系统全局分析设计和实施、负责软件构架和关键技术决策的角色 职责
l、领导与协调整个项目中的技术活动(分析、设计和实施等) 2、推动主要的技术决策,并最终表达为软件构架 3、确定和文档化系统的相对构架而言意义重大的方面,包括系统的需求、设计、实施和部署等“视图” 4、确定设计元素的分组以及这些主要分组之间的接口 5、为技术决策提供规则,平衡各类涉众的不同关注点,化解技术风险,并保证相关决定被有效的传达和贯彻 6、理解、评价并接收系统需求 7、评价和确认软件架构的实现 专业技能
l、技术全面、成熟练达、洞察力强、经验丰富,具备在缺乏完整信息、众多问题交织一团、模糊和矛盾的情况下,迅速抓住问题要害,并做出合理的关键决定的能力 l、具备战略性和前瞻性思维能力,善于把握全局,能够在更高抽象级别上进行思考; l、对项目开发涉及的所有问题领域都有经验,包括彻底地理解项目需求,开展分析设计之类软件工程活动等 2、具备领导素质,以在各小组之间推进技术工作,并在项目压力下做出牢靠的关键决策 3、拥有优秀的沟通能力,用以进行说服、鼓励和指导等活动,并赢得项目成员的信任; 4、以目标导向和主动的方式来不带任何感情色彩地关注项目结果,构架师应当是项目背后的技术推动力,而非构想者或梦想家(追求完美) 5、精通构架设计的理论、实践和工具,并掌握多种参考构架、主要的可重用构架机制和模式(例如J2EE架构等); 6、具备系统设计员的所有技能,但涉及面更广、抽象级别更高; 活动
确定用例或需求的优先级、进行构架分析、创建构架的概念验证原型、评估构架的概念验证原型的可行性、组织系统实施模型、描述系统分布结构、描述运行时刻构架、确定设计机制、确定设计元素、合并已有设计元素 工件软件构架文档、参考构架、分析模型、设计模型、实施模型、部署模型、构架概念验证原型、接口、事件、信号与协议 系统架构师
9.架构师都要懂哪些知识
首先必须具有丰富的软件设计与开发经验,这有助于理解并解释所进行的设计是如何映射到实现中去。
其次要具有领导能力与团队协作技能,软件架构师必须是一个得到承认的技术领导,能在关键时候对技术的选择作出及时、有效的决定。 第三是具有很强的沟通能力,软件架构师需要与各路人马经常打交道,客户、市场人员、开发人员、测试人员、项目经理、网络管理员、数据库工程师等等,而且在很多角色之间还要起沟通者的作用。
一般来讲,系统架构师应该拥有以下几方面的能力: 1:具备 5-8 年以上软件行业工作经验;2:具备 4 年以上 C/S 或 B/S 体系结构软件产品开发及架构和设计经验; 3:具备 3 年以上的代码编写工作经验;4:具备丰富的大中型开发项目的总体规划、方案设计及技术队伍管理经验; 5:对相关的技术标准有深刻的认识,对软件工程标准规范有良好的把握;6:对 .Net/JAVA 技术及整个解决方案有深刻的理解及熟练的应用,并且精通WebService/J2EE 架构和设计模式,并在此基础上设计产品框架;7:具有面向对象分析、设计、开发能力(OOA、OOD、OOP),精通 UML 和 ROSE,熟练使用 Rational Rose、PowerDesigner 等工具进行设计开发;8:精通大型数据库如 Oracle、Sql Server 等的开发;9:对计算机系统、网络和安全、应用系统架构等有全面的认识,熟悉项目管理理论,并有实践基础; 10:在应用系统开发平台和项目管理上有深厚的基础,有大中型应用系统开发和实施的成功案例; 11:良好的团队意识和协作精神,有较强的内外沟通能力。