|
本帖最后由 hiyachen 于 2015-8-29 20:16 编辑
1: 一名优秀的架构师,除了需要具备抽象的思维,优秀的技术前瞻性,多领域的知识储备,还需具备什么特质?架构师的技能:
域。域层次捕获项目的业务环境。
项目洞察力。项目洞察力对系统将会有的对企业的业务影响进行通讯。它以投资回报分析量化了这个影响。项目洞察力表示该项目的最高抽象层次。
业务处理。系统层次为公司内的业务处理建模。对于极其复杂的单位来说,这个层次可以再细分到子层次:部门、部门间以及部门内。
UI 规范。UI 规范设计了实现业务处理的用户界面。它是由 UI 设计文档和功能 UI 原型组成的。
详细要求。详细要求指定了系统要求的最低层次抽象。它包括诸如数据类型格式和详细业务规则等详细信息。它还包括专业性要求,例如,性能、可用性、安全性、国际化、配置、可扩展性和灵活性要求等。
体系结构。系统的体系结构被组织到六个视图中:
逻辑。定义软件层和执行系统功能的主要抽象。
并发。捕获系统的并行方面,包括交易、服务器场和资源争用。
安全性。定义用于身份验证、授权、保护机密和日志记录的方法。
部署。定义网络拓扑和系统的部署配置。
组件。定义系统组件、其接口以及依赖项。
数据。定义持久性数据的设计结构。
1、卓越的程序员
Fred George先生说:“不编程的架构师的职业生涯是短暂的”。他说这句话的背景主要是针对有些架构师的设计与实现有断层的问题而言的,因为如果架构师不去实践,只是想当然的认为“没问题,这个想法能实现”,那么对于项目的落实而言是个很大的隐患。支付宝架构师冯大辉也表示过,架构师是一个比较“虚”的岗位,主要的问题都在“落地”的过程中。
2、抽象思维
很多优秀的架构师们都一致的表示,逻辑思维和抽象思维能力是一个架构师最重要的素质。eBay的Randy Shoup先生称拥有条理清晰的逻辑思维能力的人“就像稀有动物那样难找”。Fred George则表示“驾驭概念的技能,在我看来是每一个人最高的潜力”,并表示自己不太介意这样一个苗子在其他方面的技能和经验的匮乏,因为在他看来除了思维之外的其他因素都是可以培养的。
3、技术前瞻性
有人谈到技术高手与架构师的区别就在于,架构师不光是着眼于现在,不仅仅局限于开发细节,比如如何调用,如何并发等等。而是跳出三界外,考虑一下面向未来问题和潜在风险的应对之道。
4、问题解决大师
只是,架构师之所以为架构师,是在于他们在面对庞大系统之时,仍然能够敏锐的发现其底层之真实。这不仅需要此哲学层面的“内功”,还需要架构师具有多领域知识和经验的积淀。
5、多领域知识
架构师身为一名技术领袖,需要通过发散知识的光芒来统御开发团队的。如果只是对本行业知识做到烂熟于心,那还仅仅是一名熟练工的水平。要想晋升更高的层次,还需要跳出“只缘身在此山中”的困惑。
6、沟通能力
做到人性化的沟通,需要我们在平时就进行培养。写出大部头的架构书,有的时候并没有用VISIO画出的简单架构图好理解。人对图形理解远远大于对文字的理解,直观简单的UML图可以极大的方便程序员理解架构师的意图。
7、内力
很多人理解的内力就是开发技术,包括语言的掌握、对框架的掌握、数据库管理能力、安全管理能力等等。但是我们看到,架构更多的内力体现在对技术的综合运用上,光会编程的程序员,最多就能做到高级程序员,也就是技术实现上的高手。
8、权衡取舍
Fred George先生提出了“短期滥用”的说法,即在系统能够承受的范围内做出一些妥协。在ATAM方法中,分析的思路是基于“情景”的:你需要提出各种可能的情景,然后来证明在每一个用户使用场景中,系统的哪一些内容是必要的、不可丢弃的——从而确定哪些部分是暂时可以不予考虑的。
9、管控能力
架构师在管理和控制的能力上,需要有自己独到的见解,而不是简单的认为这是项目经理或者财务部门的事情。身为技术专家的架构师,随不需要处理那些烦杂的日常管理。奇虎架构师李钊在一次接受采访时道出过架构师们的心声,技术人才转向管理就是莫大的浪费。对,如果架构师只是一味的去进行项目管理,那就和其他市场人员没有任何区别了。在这里架构师所需要的管理与控制,其实是从技术的角度,对一些问题的控制,特别是开发过程中的监控,而不是普通意义上的纯粹管理。
10、艺术气质
一个优美的系统则是可以像有机的生命一样成长的,这是因为从系统开始架构的那一刻起,架构师就考虑到这个系统以后将会面临的挑战,为系统的成长预留好空间。项目经理经常会对这位架构师提出的看似理想化的要求不置可否——项目经理只想着能够尽快以比较低的成本实现客户的需求,然而这些充满艺术美感的想法其实是打造健康——因而优美——的系统的根本因素。
SOA的架构设计。确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”。因此他/她应该是特定的开发平台、语言、工具的大师,对常见应用场景能马上给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估自己的团队实现特定的功能需求需要的代价。 系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等。
架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作。他必须对开发技术非常了解,并且需要有良好的组织管理能力。可以这样说,一个架构师工作的好坏决定了整个软件开发项目的成败。
首先必须具有丰富的软件设计与开发经验,这有助于理解并解释所进行的设计是如何映射到实现中去。
其次要具有领导能力与团队协作技能,软件架构师必须是一个得到承认的技术领导,能在关键时候对技术的选择作出及时、有效的决定。
第三是具有很强的沟通能力,其实这一点好像什么角色都最好具备,软件架构师需要与各路人马经常打交道,客户、市场人员、开发人员、测试人员、项目经理、网络管理员、数据库工程师等等,而且在很多角色之间还要起沟通者的作用。在技术能力方面,软件架构师最重要也是最需要掌握的知识是构件通信机制方面的知识,比如远程过程调用(RPC,Remote Procedure Call)、JAVA RMI、CORBA、COM/DCOM、各种标准的通信协议、网络服务、面对对象数据库、关系数据库或者NoSQL数据库等等,另外,架构师应时刻注意新软件设计和开发方面的发展情况,并不断探索更有效的新方法。开发语言、设计模式和开发平台不断很快地升级,软件架构师需要吸收这些新技术新知识,并将它们用于软件系统开发工作中。当然,行业的业务知识对软件架构师也是很重要的,有助于设计出一个满足客户需求的体系结构,优秀的软件架构师常常因为要尽快获得对行业业务的理解而必须快速学习并且进行敏锐的观察。
但作为一个架构师,在整个软件系统的开发过程中是乐趣无穷的,因为这个角色很具有挑战性,有时需要左右逢源、八面玲珑,有时又需要果断坚定、不留情面。在国内,较少软件企业拥有独立的架构师,通常一个软件高手身兼数职,既是项目经理,又是软件架构师,
2:你认为一名程序员,应该如何丰富自己的知识储备以及扩展自己的视野?如何在硬件条件上逐渐向优秀的架构师靠拢?
接触过一些架构师。譬如阿里的架构师就有很多种、很多的等级。从初级架构师到首席架构师。
架构师不是需要成为的,而是项目和产品的需要。一般的项目和产品团队是不需要架构师的。
架构师需要经验、对代码的深耕。领域决定设计。架构师的工作过程:
(1)按照架构说明书,将整个架构环境搭建起来。
(2)开发一套便于开发人员开发的开发框架。
(3)设计了Swing的MVC模式,并开发实现。
(4)开发了整个系统的基础组件,为了实现架构中的复用的原则,这个很重要。
(5)负责整个系统的权限的管理,这个很重要,跟各个模块都有关系。
(6)负责开发的编码规范的制定,包括JAVA的编码的规范,同时还有质量属性方面的编码的规范。
(7)整个系统的异常处理、日志、错误验证等机制的设计和开发;
(8)第三方系统和工具的集成,如报表系统,浏览工具的集成等;
3: 除了这些硬件条件,从一个默默无闻的程序员成为内功深厚的架构师还需要什么?比如心态上应该如何?架构师需要关注各方面的工作。
软件架构在软件项目中的价值,软件架构师在项目管理团队中的定位;
软件架构的发展方向和未来趋势;
平台;
架构与系统的关系,平台与应用的分离;
软件工厂;
面向对象设计的重新解读;
类设计的原则(开闭原则、依赖倒置原则、替换原则、单一职责原则、接口分隔原则、组合复用原则、所知最少原则);
包设计的原则(包内聚和包耦合);
面向对象设计原则与GRASP架构模式;
(1)开发组织架构框架(TOGAF)
(2)架构开发方法(ADM)
(3)模型驱动架构(MDA)
(4)基于用例面向方面软件架构设计(AOSD)
架构设计的原则(可维护性、可扩展性、可重用性、互操作性等);
组件(Component)的设计;
封装(encapsulation)、抽象(abstraction)和委派(delegation)的原则;
应用设计模式来实现好的结构;
设计模式的本质论;
分析创建型模式:单例模式、抽象工厂模式;
分析结构型模式:桥梁模式、装饰模式、适配器模式、代理模式、合成模式;
分析行为型模式:命令模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式;
设计模式的综合应用;
AOP与OOAD, GOF设计模式关系
案例分析
失败案例的失败原因剖析;
媒体屏、爬虫、编辑器、文件解析器
需求建模(域建模,用例建模)
业务建模
架构建模
应用建模
数据库建模
测试建模
利用UML进行XML建模
电子商务站点的分析设计
软件架构涉及12种服务模式;
中间件的设计
分析SAP的中间件设计思想
分析国内中间件研发状况
MVC模型;
表现层框架设计
(表现层中UIP设计思想、表现层动态生成设计思想、表现层的模块通讯设计思想);
中间层架构设计
(业务逻辑层组件设计、业务逻辑层工作流设计、服务界面设计、业务逻辑层实体设计、Web服务应用场景、业务逻辑层框架);
数据访问层设计(持久层架构设计)
5种数据访问模式、数据访问层组件设计、工厂模式在数据访问层应用、ORM、Hibernate与CMP2.0设计思想、灵活运用Xml Schema、事务处理设计、连接对象管理设计; XML设计、数据架构规划与数据库设计;
企业集成框架设计
(1)解决方案、数据集成、应用(接口)集成及应用服务
(2)EAI参考模型:业务模式、概念模式、逻辑模式、物理模式和实现模式
(3)如何设计企业应用系统集成
(4)深层剖析Web Services
(5)分析微软CRM软件的集成策略;
医疗信息集成系统架构设计;
国内常见的开发团队组织架构分析;
软件生命周期进程模型介绍(【RUP与XP】【Agile与CMMI】【MSF】);
合同、需求、潜在风险、社会因素、法律法规行政因素、管理因素、时间因素、开发力量因素、钱相关因素、延期风险、交付因素、返工因素、等等
风险分类和风险关联性分析;
风险控制手段;
(1)软件的质量建模
(2)评估软件架构质量的价值
(3)怎样改变软件架构的质量
(4)如何评价软件架构
(5)评估软件构架师的能力
(以实际项目案例为背景)
(1)两个千万级行业项目的系统架构设计分析
(2)企业门户站点架构设计
|
|