架构师 订阅
系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”。因此他/她应该是特定的开发平台、语言、工具的大师,对常见应用场景能给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估自己的团队实现特定的功能需求需要的代价。 系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等。 展开全文
系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”。因此他/她应该是特定的开发平台、语言、工具的大师,对常见应用场景能给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估自己的团队实现特定的功能需求需要的代价。 系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等。
信息
外文名
System Architect
又    称
企业架构师或者系统设计师
中文名
系统架构师
属    性
职业
系统架构师知识结构
软件系统架构师综合的知识能力包括9个方面,即:1、战略规划能力。2、业务流程建模能力。3、信息数据结构能力。4、技术架构选择和实现能力。5、应用系统架构的解决和实现能力。6、基础IT知识及基础设施、资源调配能力。7、信息安全技术支持与管理保障能力。8、IT审计、治理与基本需求分析、获取能力。9、面向软件系统可靠性与系统生命周期的质量保障服务能力。作为系统架构师,必须成为所在开发团队的技术路线指导者;具有很强的系统思维的能力;需要从大量互相冲突的系统方法和工具中区分出哪些是有效的,哪些是无效的。架构师应当是一个成熟的、丰富的、有经验的、有良好教育的、学习快捷、善沟通和决策能力强的人。丰富是指他必须具有业务领域方面的工作知识,知识来源于经验或者教育。他必须广泛了解各种技术并精通一种特定技术,至少了解计算机通用技术以便确定那种技术最优,或组织团队开展技术评估。优秀的架构师能考虑并评估所有可用来解决问题的总体技术方案。需要良好的书面和口头沟通技巧,一般通过可视化模型和小组讨论来沟通指导团队确保开发人员按照架构建造系统。
收起全文
精华内容
参与话题
问答
  • 架构师成长之路(1)--什么是架构师

    万次阅读 多人点赞 2015-10-26 17:12:30
    如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划...

    前言:

    哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。
    
    如果我们要成为架构师,我们自己要面临的三大问题:
    找准自己定位:我是谁?在哪里?
    怎样做好架构师:我要做什么?
    如何搭建架构师知识体系:我该怎么做?
    
    这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做),  执行/行动找准自己定位:我是谁?在哪里?
    怎样做好架构师:我要做什么?
    如何搭建架构师知识体系:我该怎么做?
    
    这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做),  执行/行动

     

    一、架构师定义


        什么是架构师,这个聊架构话题时永恒的问题。每个公司对架构师的定位也有所不同,因为不同公司所处的阶段,业务模式,应用场景也都不一样。对架构的要求也不一样。

         在初创公司的野蛮生长阶段:业务场景和需求边界很难把握,有时候根本不需要架构师,产品需要快速迭代和变现,需求频繁更新,这个时候需要的是快速实现。当然如果公司成长以后,这个阶段就是欠下很多技术债,埋下很多坑,如果人员流动很频繁,后期系统维护成本是非常巨大的。

     

         在公司成长稳定阶段:业务模式和应用场景边界都已经比较清晰,这个时候最需要架构师能对线上业务进行模块划分,系统拆分重构,并做好相关高可用的措施,以保证系统的稳定,安全、高效地运行。

         不同的行业,对架构师的要求也不同,比如电商业务和AI领域,从架构到业务场景,完全是两个物种。

        在百度百科里面这么定义: 系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导人物。具体来说是一个确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员(需求、规范、设计、技术)。主要着眼于系统的“技术实现”。因此架构师应该是特定的开发平台、语言、工具的大师,对常见应用场景能马上给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估自己的团队实现特定的功能需求需要的代价。系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等。

    架构师实际上就是软件的总体设计师。打个通俗的比方比如某个工程总设计师,类似三峡工程的总设计师。

    架构师的形成一定是在实践中积累起来的,而并非上了几次培训班,读了几本书就可以成功的,架构师是在工程实践中培养出来的! 

    二、架构师作用/职责


          架构师在整个软件系统开发过程中都起着重要的作用,并随着开发进程的推进而其职责或关注点不断地变化。

    1、按软件开发过程维度来说:

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

           架构设计阶段:架构师负责对整个系统架构设计,制定开发规范、开发计划,指导整个开发团队完成这个计划。

           开发阶段:架构师则成为详细设计者和代码编写者的顾问,并且经常性地要举行一些技术研讨会、技术培训班等;

           测试和交付阶段:协调做好相关测试和部署。

           维护阶段:软件架构师就开始为下一版本的产品是否应该增加新的功能模块进行决策。

     

     

    2、按职能维度:

     

    1)确认需求
    架构师要懂得用户需求,理解用户真正想要什么,这使得架构师必须要和分析人员不断沟通,反复确认需求规格说明书,以此来保证他精准清楚用户需求。
    项目经理刘先生在受访时说:「架构师会与很多人沟通,例如开发人员,例如我们项目经理,有时甚至是用户本身。架构设计的目的很明确,目的是什么呢?挖掘用户需求。」
    2) 系统分解
    在架构师认可需求规格说明书后,架构师已明确用户需求是是什么,这时候便看架构师的分解能力了。
    系统分解包括纵向分解和横向分解:

    横向分解是对系统分解成不同的逻辑层,确定层与层之间的关系。是指基于技术架构层次进行的人员角色分工和任务分解。常见的分层:

    应用层:主要负责具体的业务逻辑处理
    服务层:提供可复用的服务
    数据层:负责数据的存储和访问
    分层注意事项:①必须合理规划层次边界和接口;②禁止跨层次的调用及逆向调用。

    纵向分解是将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,有助于软件开发和维护,还便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。


    3) 技术选型
    在系统分解后,架构师会最终形成软件整体架构,接下来,架构师的职责是技术选型。
    前端到底用瘦客户端还是富客户端呢?数据库是用MySQL还是MSSQL又或是Oracle呢?技术选型是非常重要的环节,因为需要了解每种技术的优缺点,如果没有足够经验和深厚的技术功底,技术选型很茫然。
    架构师在技术选型阶段会提供参考信息给项目经理,项目经理再从预算、进度、人力、资源等各方面情况来权衡,最终确认。

    4) 制定开发规范
    架构师在项目开发过程中是「灵魂人物」,并且要具备协调组织能力和懂得人员分工。
    在制定技术规格说明阶段,架构师要协调起所有的开发人员,架构师通常会用技术规格说明书与开发人员保持沟通,让开发人员能从各个视角去观测、理解他们负责的模块或者子系统,确保开发人员能够按照架构意图实现各项功能。

     

    3、必备技能关注点:

    1)、方向规划:
    有想法和技术展望目标,制定短期目标

    2)、架构设计:
    集思广益来设计,归类总结,根据讨论结果制定规范。设计不仅仅是技术相关(业务流程,业务方向,模块划分组合,框架设计,流程纰漏等),设计出来还是需要实施的。

    3)、技术攻关:
    疑难技术点攻关,将问题集中化解决,提供平台化解决方案以及选型决策。

    4)、解决疑难问题:
    定期做总结归纳以此分析问题,解决问题。
    发现各类型问题(不仅仅是技术),通过规范,演讲,绘图等方式解决隐患。
     
    5)、互动沟通:
    架构通过团队的沟通总结出方向, 部门之间沟通,开发之间沟通,产品之间沟通,市场沟通,沟通后产出图形化文档及设计。

    6)、开发规范:
    确保系统秩序,统一,规范,稳定,高效地运行。

    架构师无论多牛B,但一定要记住架构是要靠团队做出来的:

    架构师:架构通过团队的沟通总结出方向
    •RD:研发人员经常提出自己碰到的问题,并分享给大家,思维碰撞促进发展
    PM:产品经常提出设想和规划,能够使得架构符合未来发展需求
    •OP:运维经常提出隐患及分析,能使得架构快速拆分模块
    架构师:定期做总结归纳以此分析问题,解决问题
    团队:团队成长、就是每个人的成长、每个人成长眼界自然增长
    团队:团队的成功、就是产品的成功,产品的成功就是公司的成功
    公司的成功可以给你加光环,但光环不代表自己的能力代表经历

     

    我们公司对的明确:

    应用架构师职责:
    1、确认产品需求,负责理解和管理非功能性系统需求,包括可维护性、性能、复用性、可靠性、有效性和 可测试性等等。
    2、把握应用架构设计,对应用进行分解,做好应用的耦合性拆分,提高应用程序的开发效率、可维护性和可扩展性。
    3、技术攻关和解决关键问题,针对疑难技术点攻关,将问题集中化解决,提供平台化解决方案以及选型决策。并针对应用的各类问题定期做总结归纳以此分析问题,解决问题。
    4、明确技术选型,系统性思考从预算、进度、人力、资源等各方面情况来权衡作出合理决策,最终确认技术选型。
    5、制定开发规范,指导整个开发团队在思想层面上的一致,保证系统有序,高效、稳定运行,包括规范、原则、流程等内容。


    应用架构师能力:
    1、技术实力和经验:精通java语言开发,熟悉python语言。能编写核心模块代码。
    2、业务理解能力:理解业务,并转换为可被研发理解的实现方案。
    3、设计能力:清晰理解系统,要做到根据产品宗旨和目标,分析清楚产品定位以及产品业务,再整合利用现有的技术领域,找出最佳方案,
                 实现产品需求和目标。同时具备前瞻性的设计眼光,应用设计即满足当下需求并能够适当扩展。
    4、技术深度和广度:透过问题看本质,能解决疑难问题和绕开问题。全面了解各个层面的知识(数据库、分布式架构、微服务等)
    5、沟通能力:通过沟通确保各方对架构达成共识,并愿意采取行动,推动应用架构快速高效落地。
    6、系统思考能力: 全方位考虑问题,衡取舍能力确保应用架构在现有资源约束下是合理的。

    三、架构师分类


    其实架构师就是个title,每个公司称呼都可能不一样,和架构概念一样。

    软件架构师:

        软件架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。主导系统全局分析设计和实施、负责软件构架和关键技术决策的人员,比如这些架构师的title可能是JAVA架构师、Python架构师、LAPM架构师等等。

    web架构师:

       web架构师是网站系统、功能、模块、流程的设计师,架构师,好比是高楼大厦的设计人员,通常一座大厦在建之前,都先由设计师将蓝图描绘出来,包括其形状、结构、尺寸、材料等等,然后建筑工程师带领工人们按照蓝图将大厦一层一层地建起来

     

    架构师也要看在什么样的公司,中小公司很多架构师都是全能的。通常公司规模和体系越大,分工会越细:大体可以这么分类:

    解决方案架构师:与客户探讨业务需求,将业务、市场,与技术、产品结合起来,为客户提供解决他们需求的方案。比如阿里云针对大客户都有解决方案架构师。

    系统架构师: 从系统的维度,负责整体系统的架构设计,主要是基础服务和各系统间协调上,着眼全局不太注重某个应用本身架构,最终确认和评估系统的需求,比如关注服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等方面的基础架构设计。

    应用架构师:从应用程序的维度,负责某个应用的技术架构,主要偏业务系统,评估应用业务需求,并将业务转换为技术,为研发人员制订核心框架与技术规范 为研发工作澄清技术细节并扫清技术障碍 。关注理解业务,梳理模型,设计模式,接口,数据交互等方面。

    业务架构师:业务架构其实已经开始脱离技术层面了,但是它要求架构师有跨越多系统的大局观,去整合和组织不同系统的技术平台与交互模式。其实这个职位的未来也就是CIO了。 主要内容:理解业务,梳理模型,设计模式,接口,数据交互。从业务流程的维度,关注某一个行业、业务的领域分析,获取领域模型,最终获得系统的模型。也可以叫业务领域专家、行业专家、产品咨询师、资深顾问。
    平台架构师:这里的平台其实包括两个平台,一个是系统平台,也就是负责搭建多个系统整合的系统应用平台;另外一个其实是基础平台,是专门负责搭建基础技术平台;两者其 实区别蛮大,也经常容易被从业人员混乱。举个简单例子,金蝶有平台架构师一职,但是金蝶BOSS应用和金蝶中间件两者招聘的对象和技术要求是截然不同的。

    网络架构师:过去,我们可能听的最多的是网络工程师。不错,一个优秀的网络架构师必须有足够的网络技术基底,并且它的关注点也是系统的基础架构。比如说如果搭建并优化集群环境,如果构建基于云计算的系统应用与部署等等。它对于像淘宝、腾讯这样的互联网公司是极其重要的。
    移动架构师:移动互联网的迅猛发展横向和纵向都细分出了很多新的职责和岗位,移动架构师的职责和作用日益重要,既要整体和全局考虑整个前后端的软件系统架构,又要重点深入移动客户端的架构设计的方方面面,既要有跨平台思维,又要拿捏好原生和混合开发的尺度,另外移动应用的特点,导致移动架构师必须要比传统系统架构师更加注重非功能性的质量属性。
    前端架构师:这也是移动互联网的迅猛发展而细分出来的新的职责和岗位,这里的前端特指网站开发中的前端,主要考虑前端呈现层的设计(HTML/CSS/JS/AJAX/RIA/…),跨浏览器设计等等。

    大数据架构师:比如某些公司做大数据处理,需要理解业务,并通过大数据相关技术来实现。

    。。。。。。

     

     

     

    四、架构师具备素质能力


          •  精通某项技术,能够从本质上类比,触类旁通其他技术

          •  对等所有技术,只有合适和不合适,没有喜欢和不喜欢。

         • 视野开阔,了解不同技术的优缺点。知道使用某项开源技术实现某项业务需求,能够辨别重复造轮子。

         • 精通设计模式,但又不泛用。

         •  把系统拆分成多个子系统或模块。模块之间尽量松耦合,使得原先串行的开发任务变得可以并行发展。

         • 能清楚系统的瓶颈在什么地方, 不断定位技术难度,开发进度,性能,内存等个方面的瓶颈。不断调整骨干力量解决瓶颈,在风险爆发之前消除隐患。

         • 能做好前瞻性设计,预判到需求可能产生的变化。

    架构师团队内做的事情

            •沟通能力:各个方面都要了解,人人想法及规划都要知道,了解产品思想,用了什么方法实现的

            •组织能力:组织推动各种技术的改进及功能的完善

            •谈判代表:左右两难的时候的调解人

            •设计模块及业务:通过图形化设计发现开发后才会发现的业务问题

            •成本规划:通过过往经验评估成本及步伐

            •愿望收集:不断收集建议及愿望,一步步实现

            •传播布道:不断参与行业交流,提高理论及技术知识科普分享团队

     

    五、架构师职场攻略


        《大型网站技术架构+核心原理与案例分析》总结:

         架构师需要处理好个人、团队、公司的利益。需要不断的在工作中发现问题,解决问题,提升工作经验,知识技能和核心竞争力。扩大自身影响力,达成工作绩效。

    1、发现问题,寻找突破


         即使在一流的技术团队,也有数不清的问题,团队人员已经习惯这些积重难返的问题,而且解决问题投入产出比不大。例如:

         1)数据库线程池存在安全漏洞。

         2)版本管理混乱。

     

     作为一个新人,从局外旁观者的视角看待,自然发现很多问题。如果新人急于表现自己,证明自己,往往是事与愿违,四处碰壁。因此新人要先融入团队,和团队共进退,等熟悉情况,了解问题深浅,再寻找突破口,择机而动。

     

    2、提出问题,寻求支持


    1) 把“我的问题”表述成“我们的问题”

    人们都不喜欢问题,问题意味着麻烦。当人们听到你说,“我遇到一个问题的时候”,下意识的远离你的问题。 如果需要他们的支持,就想办法把你的问题变成他们的问题,是他遇到了问题,而你来帮忙解决。

    既然你也是团队一员,问题表述为“我们的问题”。

     

    1) 给上司提封闭式问题,给下属提开发式问题:

    上司一般是做决策,因此给上司提问需要给出建设性的方案或者建议,然后希望得到他的支持,给上司提问:“你觉得A和B哪个方案更好?”

    给下属则相反,用开放式的问题启发他去思考,寻找创新的解决方案。“元芳,这个问题你怎么看?”

    3) 指出问题而不是批评人:

    如果遇到问题,不要责问他为什么出现问题,而是说问题的紧迫性和解决的优先级。

    4)用赞同的方式提出问题:

    如果人们遇到:“你这里有问题”可能会本能自我保护而拒绝你的建议。

    而如果这么说“我非常赞同你的方案,但是我有个小小的建议”。


    3、解决问题,达成绩效


    在解决我的问题之前,先解决你的问题:

    适当的逃避问题:比如我去开个会,回来再回答的你问题。

     

     

     

     

     

    展开全文
  • 架构师

    千次阅读 2012-10-11 15:16:24
    架构师的职责 架构师需要参与项目开发的全部过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调。 架构师主要职责有4条: 1、确认需求...
    架构师的职责
    

    架构师需要参与项目开发的全部过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调。
    架构师主要职责有4条:

    1、确认需求
        在项目开发过程中,架构师是在需求规格说明书完成后介入的,需求规格说明书必须得到架构师的认可。架构师需要和分析人员反复交流,以保证自己完整并准确地理解用户需求。

    2、系统分解
        依据用户需求,架构师将系统整体分解为更小的子系统和组件,从而形成不同的逻辑层或服务。随后,架构师会确定各层的接口,层与层相互之间的关系。架构师不仅要对整个系统分层,进行“纵向”分解,还要对同一逻辑层分块,进行“横向”分解。
        软件架构师的功力基本体现于此,这是一项相对复杂的工作。

    3、技术选型
        架构师通过对系统的一系列的分解,最终形成了软件的整体架构。技术选择主要取决于软件架构。
    Web Server运行在Windows上还是Linux上?数据库采用MSSql、Oracle还是Mysql?需要不需要采用MVC或者Spring等轻量级的框架?前端采用富客户端还是瘦客户端方式?类似的工作,都需要在这个阶段提出,并进行评估。
    架构师对产品和技术的选型仅仅限于评估,没有决定权,最终的决定权归项目经理。架构师提出的技术方案为项目经理提供了重要的参考信息,项目经理会从项目预算、人力资源、时间进度等实际情况进行权衡,最终进行确认。

    4、制定技术规格说明
        架构师在项目开发过程中,是技术权威。他需要协调所有的开发人员,与开发人员一直保持沟通,始终保证开发者依照它的架构意图去实现各项功能。
        架构师与开发者沟通的最重要的形式是技术规格说明书,它可以是UML视图、Word文档,Visio文件等各种表现形式。通过架构师提供的技术规格说明书,保证开发者可以从不同角度去观察、理解各自承担的子系统或者模块。
    架构师不仅要保持与开发者的沟通,也需要与项目经理、需求分析员,甚至与最终用户保持沟通。所以,对于架构师来讲,不仅有技术方面的要求,还有人际交流方面的要求。

    3.3 架构师的误区

    1、架构师就是项目经理
        架构师不是项目经理。项目经理侧重于预算控制、时间进度控制、人员管理、与外部联系和协调等等工作,具备管理职能。一般小型项目中,常见项目经理兼架构师。

    2、架构师负责需求分析
        架构师不是需求分析员。需求分析人员的工作是收集需求和分析需求,并与最终用户、产品经理保持联系。架构师只对最终的需求审核和确认,提出需求不清和不完整的部分,他会跟需求分析员时刻保持联系。架构师是技术专家,不是业务专家。


    3、架构师从来不写代码
        这是一个尚存争论的问题。目前有两种观点:
    观点1:架构师不写代码,写代码纯体力活,架构师写代码大材小用。架构师把UML的各种视图交给开发人员,如果有不明确的地方,可以与架构师随时沟通。
    观点2:架构师本来自于程序员,只是比程序员站的层面更高,比程序员唯一多的是经验和知识,所以架构师也免不了写代码。
        我个人觉得这两种说法是与架构师的出身和所处的环境有关。
        架构师首先是一个技术角色,所以一定是来自于技术人员这个群体,比如系统架构师,多是来自于运维人员,可能本身代码写得并不多,或者说写不出来很漂亮的代码。软件架构师多是来自于程序员,有着程序员的血统和情怀,所以在项目开发过程中,可能会写一些核心代码。我们的理想是架构师不用写代码,但事实上有时候过于理想。架构师写不写代码,可能取决于公司的规模、文化、开发人员的素质等现实情况。另外,架构师也不是跟程序员界限分得那么清楚,按照能力也有高中低之分,写不写代码不是区分两者的根本标准。

    3.4 架构师的基本素质

    周星驰有个片子《喜剧之王》,剧中的尹天仇整天揣着本《演员的自我修养》,一个好演员不仅需要天赋,也需要一定的理论指导,无师自通的人毕竟是少数。架构师的成长过程也是这样。从普通程序员到高级程序员,再到架构师,是一个经验积累和思想升华的过程。经验积累是一个方面,素质培养是另一个方面,两者相辅相成,所以我觉得有必要把架构师的所要具备的素质罗列一下,作为程序员努力的方向。

    1、沟通能力
        为了提高效率,架构师必须赢得团队成员、项目经理、客户或用户认同,这就需要架构师具有较强的沟通能力。沟通能力是人类最普遍性的素质要求,技术人员好像容易忽略,想成为架构师就不能忽略。千万不要抱着这样的观念:怀才跟怀孕似的,时间久了总会被人发现的。还是天桥上卖大力丸的哥们说得对:光说不练假把式,光练不说傻把式。看看你周围的头头脑脑们,哪一个不是此中高手,我们千万不要鄙视,认为这是阿谀奉承、投机钻营,凡事都要看到积极的一面,“沟通”的确是一种能力。我认为自己是一个略内向的人,因为我是农村出来的孩子,普通话都说不好,以前或多或少带有点自卑感,幻想着是金子总会发光,所以在职业生涯中吃了不少亏。现在,我深深懂得了沟通的重要性,我会很主动地跟同事们,跟老大们不定时地沟通,感觉工作起来顺畅多了。

        这一条我认为最为重要,所以排在首位。我甚至认为下面几条都可以忽略,唯一这一条得牢记,而且要常常提醒自己。

    2、领导能力
          架构师能够推动整个团队的技术进展,能在压力下作出关键性的决策,并将其贯彻到底。架构师如何来保证这种执行力?这就需要架构师具有领导能力。

        架构师的领导能力的取得跟项目经理不太一样。项目经理主要负责解决行政管理,这种能力与技术关系不大,他有人权和财权,再扯上一张“领导”的虎皮,采用“胡萝卜加大棒”的方式,基本上可以保证执行力。架构师在项目里面可能更多地使用非正式的领导力,也就是我们常说的影响力,里面包括个人魅力、技术能力、知识传递等等。

    3、抽象思维和分析能力
        架构师必须具备抽象思维和分析的能力,这是你进行系统分析和系统分解的基本素质。只有具备这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。你如何具备这种能力呢?一是来自于经验,二是来自于学习。架构师不仅要具备在问题领域上的经验,也需要具备在软件工程领域内的经验。也就是说,架构师必须能够准确得理解需求,然后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度。经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。但是,如果你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我写作此系列的始动力之一。

    4、技术深度和广度

       架构师最好精通1-2个技术,具备这种技术能力可以更加深入的理解有关架构的工作原理,也可以拉近和开发人员的距离,并形成团队中的影响力。

       架构师的技术知识广度也很重要,需要了解尽可能多的技术,所谓见多识广,只有这样,才可能综合各种技术,选择更加适合项目的解决方案。有的人说,架构师技术广度的要求高于技术深度的要求,这是很有道理的。
    总而言之,一句话:架构师是项目团队中的技术权威。

     

    面向过程和面向对象这两个基本概念,不仅架构师需要非常清楚,程序员、设计师也要非常清楚,这也是系统分析、设计和编码最基本的常识。我接触的程序员,很多人只停留在一种“似是而非”的程度,这是不行的,想要继续前进,就得把基础夯实,所以我觉得很有必要先回回炉,补补课。
    ---------------------------------------------------------------------------------------------------

    展开全文
  • 架构师成长之路(3)--如何成为架构师(方法)

    万次阅读 多人点赞 2015-10-26 17:18:00
    如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划)...

    前言:

    哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。
    如果我们要成为架构师,我们自己要面临的三大问题:
    找准自己定位:我是谁?在哪里?
    怎样做好架构师:我要做什么?
    如何搭建架构师知识体系:我该怎么做?
    这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做),  执行/行动
    
    

    0.能力等级定义


    心理学家德雷福斯经过了大量的调查研究,将人分成了五个等级,构建了“德雷福斯等级模型”。五个等级分别为:新手、进阶新手、胜任者、精熟者以及专家。简单列举一下每个等级的特点,方便我们定位自己在哪个等级。参考《卓越密码:如何成为专家》。

    1、新手:新手一般是初入职场1~3年的员工。他们的特点是严格遵照规定,不会有太多自己的想法,因此不会出大的错误也不会有太大的成绩。

    2、进阶新手:工作几年后,新手开始学会细分任务,慢慢地对工作有了自己的想法。这个时候,已经能达到进阶新手的阶段。

    3、胜任者:第三个阶段是胜任者。胜任者顾名思义,在工作岗位上能够保质保量地完成任务,而且能够制定计划和按情况处理任务。

    4、精熟者:与胜任者相比,精熟者开始能发现工作中出现的问题,并对问题有着自己的思考。此时,精熟者开始建立了自己工作的大局观和整体观,处理问题的时候也更加灵活。

    5、专家:最后一个阶段就是专家,专家的过人之处在于其“无招胜有招”。因为专家工作已经不需要具体的方法和规则,他们的工作就是从现在已有的工作方式中去探寻更个性化、有创造力的解决问题的方法。

     

    我们研发人员发展的技术路径(仅供参考):

     

    一、初级工程师

       具备技能:学习的知识是语言基础、计算机基础理论、网络基础,操作系统等相关基础知识等,应该在大学完成。 依靠指令清单,必须按部就班。

       知识能力:入门了解。知道概念。对全局性、体系性的东西没兴趣。需要有人指导才能干活。但可以靠着百度解决具体的小问题。

    二、中级工程师

       成长阶段:一般工作一年后。

       具备能力:能够独立解决各种各样的领域内问题。

       知识能力:熟练掌握语言工具,技术过硬。

    三、高级/资深工程师(管理自己):

        成长阶段:工作3-5年后,熟悉分布式系统、高性能系统搭建。精通某种开发语言,掌握架构设计能力和业务理解能力。熟练掌握各种设计模式以及具备一定运维能力。
        技术能力:
              1、负责核心复杂功能的实现方案设计、编码实现  。
              2、负责疑难BUG分析诊断、攻关解决

        知识能力:精通语言工具。技术精湛,技术高超、博学多识, 精益求精。

    、资深工程师:

          高级工程师是在技术深度上精通,资深需要在广度上扩大知识面,熟悉多种开发语言。同时具备团队管理经验。
          具备独立设计一个业务模块的能力,并且能够独立设计数据库表以及UML画图,利用部分设计模式以及懂得算法和效率的高质量代码。

    五、技术经理/研发Leader(管理一个团队)

         成长阶段:技术经理本身就是从资深工程师发展而来,很多公司的技术经理根本没有从一线研发做起,大部分就是一个项目经理,带带项目为主,根本无法胜任真正意义上的“技术经理”的工作。
         具备能力:
          1、技术能力:
           1)首先需要具备核心模块代码编程的能力,从设计方案到核心编码,再到后期的代码review,这方面是要能完全胜任的,能识别开发风险。
           2)代码模板研发与推广、最佳实践规范总结与推广、自动化研发生产工具研发与推广
         2、团队管理能力:
           任务管理:开发工作量评估、开发任务分配,
           团队效率:能够帮助团队人员提升能力,以及推动更加合理的考核机制。
           团队专业力:招聘面试、新人指导、领导复盘总结改进
         3、综合能力(沟通协调)能力:此外,还需要具备协调的能力,以及与人打交道的能力。与平级部门、产品、设计、测试、运营打交道的能力。

    五、架构师(专注某个平台的技术架构规划)

    成长阶段:
    能称得上“架构师”的,工作年限至少也要在5至8年以上,具体还要看个人的学习能力、领悟能力和成长速度。
    之所以有架构师这个称谓,主要是由于公司发展壮大之后,需要专注于技术的人才做专业的事;所以,架构师也可以理解为技术专家,以攻克公司技术难题为主。
    需要分离管理族和专业族。整个研发团队可能已经超过100来人了,需要有人专注来做架构规划、设计、日常维护。不能让研发总监和研发Leader又做管理又做技术一股脑都扔给他们。
    具备能力:
    1、架构分析:从功能性需求中识别出需要增加的非功能性需求,好满足性能、可扩展、解耦/集成、安全、可运维、高可用、易部署、易更新。并且识别完非功能型需求,还要做技术选型、技术架构风险识别、技术实现工作量评估
    2、架构设计与实现:非功能性模块的架构设计、接口设计、代码实现。所以需要的是有代码实现能力还要有架构思维的工程师,不需要画PPT的工程师
    3、业务架构设计与实现:需要对跨系统的接口进行识别、实现、维护,需要对能写成公共代码类库的进行分析、识别、接口设计、实现、变更维护。
    4、重构:架构师需要经常做Bug分析、非模板性和公共类库代码检查,以发现代码腐烂程度,以发现还有哪些代码没有做很好的架构与精心的代码设计。所以重构是经常性维护发生的,不是攒到某一刻动大手术,甚至推翻重做,那就不叫重构了。

     

    五、技术总监(管理多个团队leader):

         成长阶段:一般需要工作8至10年以上,首先,技术经理的工作能够做的非常好,再加上公司的发展需要,需要能够同时带领多条业务线或者多个团队共同协作的时候,基本就是技术总监了。
    从管理的层级,技术总监同时管理多个技术经理,管理从业务线划分的团队。
    从技术的层级,能胜任架构师这个级别,也就是技术专家。
         具备能力:
        1、从业务线和团队的角度,需要具备组建研发部、搭建公共技术平台、方便上面各条产品线开发。
        2、通过技术平台、通过高一层的职权,管理和协调各个产品线组。现在每个产品线都应该有合格的研发Leader和高级程序员了。

    五、CTO (软件产品和技术是统一管理的.是商业、产品、技术、管理、团队相平衡的综合统管)。

    成长阶段:CTO的要求是最高的,不是每一个人都胜任CTO,好的CTO在国内非常少,非常稀有。
    可能不少同学会认为CTO只是专注于技术,或者进入一些小公司,挂职某某CTO就认为达到了这个级别,其实这是错误的。
    CTO是一个系统的成长轨迹,不是一朝一夕可以练成的,需要后天的巨大“自我改进”能力。
    CTO,是集软件、产品、技术、管理等诸多能力为一体的,CTO做的事情,是商业、产品、技术、管理、团队相平衡的综合统管。

    具备能力:
    1、业绩达成:洞察客户需求,捕捉商业机会,规划技术产品,通过技术产品领导业务增长,有清晰的战略规划、主攻方向,带领团队实现组织目标
    2、前沿与平台:到这个研发规模规模级别了,一定要有专门的团队做技术应用创新探索和前沿技术预研。而且要和技术平台团队、应用研发团队形成很好的联动作用,让创新原型试点能够很平滑的融入商业平台再让应用研发线规模化的使用起来。大量的前沿探索都死在了内部,做完试点就停滞了,这就需要CTO做好整体的衔接推动工作。
    3、研发过程管理:站在全局立场来端到端改进业务流程,为业务增长提供方便
    4、组织与人才建设:公司文化和价值观的传承;研发专业族团队梯队建制建设、研发管理族团队梯队建制建设;创建创新激发机制,激发研发人创新向前发展,激发黑马人脱颖而出

     

           软件架构师的正式成型在于机遇、个人努力和天赋 软件构架师其实是一种职位,但一个 程序员在充分掌握软构架师所需的基本技能后,如何得到这样的机会、如何利用所掌握的技能进行应用的合理构架、如何不断的抽象和归纳自己的构架模式、如何深入行业成为能够胜任分析、构架为

    一体的精英人才这可不是每个人都能够遇上的馅饼。

    我们找好路径以后,看看我们如何做?  《卓越密码:如何成为专家》这本书里面,介绍的方法是:
    学习能力:确定方向目标,选择高质量学习内容、学习元认知,持续精进学习。
    不断实践:实践检验理论,解决问题,总结提炼。
    思维能力:擅长思考、深度思考:学会归纳、概括,概念,推理。掌握结构化、抽象、系统性、框架等思维。

     

     

    1、走正确的路:高效地学习


      如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员们,你们有没有下面几种感觉?

         一、我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊。

         二、我发现我的水平总是跟不上技术的进步,有太多想学的东西要学,Jquery用的人最近比较多啊,听说最近MVC比较火,还有LINQ,听说微软又有Silverlight了……

         三、  我发现虽然我工作几年了,除了不停的coding,Ctrl+c和Ctrl+V更熟练了,但编码水平并没有提高,还是一个普通程序员,但有人已经做到架构师了。

         四、工作好几年了,想跳槽换个工作,结果面试的考官都问了一些什么数据结构,什么垃圾回收,什么设计模式之类的东西,虽然看过,但是平时用不着,看了也忘记了,回答不上来,结果考官说我基础太差。。。

    有没有,如果没有,接下来就不用看了,你一定是大拿了,或者已经明白其中之道了,呵呵。

    如果有,恭喜你,你进入学习误区了,如果想在技术上前进的话,就不能一直的coding,为了完成需求而工作,必须在coding的同时,让我们的思维,水平也在不停的提高。

     

    写代码要经历下面几个阶段:

    一 、你必须学习面向对象的基础知识,如果连这个都忘了,那你的编程之路注定是在做原始初级的重复!

        很多程序员都知道类、方法、抽象类、接口等概念,但是为什么要面向对象,好处在哪里,要解决什么问题?只是明白概念,就是表达不清楚,然后在实际工作中也用不上,过了一段时间,面向对象的东西又模糊了,结果是大多数程序员用着面向对象的语言做着面向过程的工作,因此要学习面向对象,首先应该明白面向对象的目的是什么?

    面向对象的目的是什么?

         开发语言在不断发展,从机器语言,到汇编,到高级语言,再到第四代语言;软件开发方法在不断发展,从面向过程,面向对象,到面向方面等。虽然这些都在不断发展,但其所追求的目标却一直没变,这些目标就是:
       1.降低软件开发的复杂度
       2.提高软件开发的效率
       3.提高软件质量:可维护性,可扩展性,可重用性等。

         其中语言的发展,开发方法的发展在1,2两条上面取得了极大的进步,但对于第3条,我们不能光指望开发方法本身来解决。

    提高软件质量:可维护性,可扩展性,可重用性等,再具体点,就是高内聚、低耦合,面向对象就是为了解决第3条的问题。因此要成为一个好的程序员,最绕不开的就是面向对象了。

     

    二、 要想学好面向对象,就必须学习设计模式。

         假定我们了解了面向对象的目的,概念了,但是我们coding过程中却发现,我们的面向对象的知识似乎一直派不上用场,其实道理很简单,是因为我们不知道怎么去用,就像游泳一样,我们已经明白了游泳的好处,以及游泳的几种姿势,狗刨、仰泳、蛙泳、自由泳,但是我们依然不会游泳。。。。

    因此有了这些基本原则是不行的,我们必须有一些更细的原则去知道我们的设计,这就有了更基础的面向对象的五大原则,而把这几种原则更详细的应用到实际中来,解决实际的问题,这就是设计模式,因此要学好OO,必须要学习设计模式,学习设计模式,按大师的话说,就是在人类努力解决的许多领域的成功方案都来源于各种模式,教育的一个重要目标就是把知识的模式一代一代传下去。

         因此学习设计模式,就像我们在看世界顶级的游泳比赛,我们为之疯狂,为之着迷。

     

    三 学习设计模式

         正像我们并不想只是看别人表演,我们要自己学会游泳,这才是我们的目的所在。

    当我们看完几篇设计模式后,我们为之精神振奋,在新的coding的时候,我们总是想努力的用上学到的设计模式,但是经常在误用模式,折腾半天发现是在脱裤子抓痒。。。

    当学完设计模式之后,我们又很困惑,感觉这些模式简直太像了,很多时候我们分不清这些模式之间到底有什么区别,而且明白了设计过程中的一个致命的东西--过度设计,因为设计模式要求我们高扩展性,高重用性,但是在需求提出之初,我们都不是神,除了依靠过去的经验来判断外,我们不知道哪些地方要扩展,哪些地方要重用,而且过去的经验就一定是正确的吗?所以我们甚至不敢再轻易用设计模式,而是还一直在用面向过程的方法在实现需求。

     

    四 学习重构

     

         精彩的代码是怎么想出来的,比看到精彩的代码更加令人期待,于是我们开始思考,这些大师们莫非不用工作,需求来了没有领导规定完成时间,只以设计精彩的代码为标准来开展工作?这样的工作太爽了,也不可能,老板不愿意啊。就算这些理想的条件他都有,他就一开始就设计出完美的代码来了?也不可能啊,除非他是神,一开始就预料到未来的所有需求,那既然这些条件都没有,他们如何写出的精彩代码?

        Joshua Kerievsky在那篇著名的《模式与XP》〔收录于《极限编程研究》一书)中明白地指出:在设计前期使用模式常常导致过度工程(over-engineering)。这是一个残酷的现实,单凭对完美的追求无法写出实用的代码,而「实用」是软件压倒一切的要素。

         在《重构-改善既有的代码的设计》一书中提到,通过重构(refactoring),你可以找出改变的平衡点。你会发现所谓设计不再是一切动作的前提,而是在整个开发过程中逐渐浮现出来。在系统构筑过程中,你可以学习如何强化设计;其间带来的互动可以让一个程序在开发过程中持续保有良好的设计。

        总结起来就是说,我们在设计前期就使用设计模式,往往导致设计过度,因此应该在整个开发过程,整个需求变更过程中不断的重构现在的代码,才能让程序一直保持良好的设计,由此可见,开发过程中需要一直重构,否则无论当初设计多么的好,随着需求的改变,都会变成一堆烂代码,难以维护,难以扩展。所谓重构是这样一个过程:「在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构」。重构的目标,就是设计模式,更本质的讲就是使程序的架构更趋合理,从而提高软件的可维护性,可扩展性,可重用性。

    《重构-改善既有的代码的设计》一书也是Martin Fowler等大师的作品,软件工程领域的超级经典巨著,与另一巨著《设计模式》并称"软工双雄",不可不读啊。

     

    五 开始通往优秀软件设计师的路上

    通过设计模式和重构,我们的所学和我们工作的coding终于结合上了,我们可以在工作中用面向对象的思维去考虑问题,并开始学习重构了,这就像游泳一样,我们看完了各种顶级的游泳比赛,明白各种规则,名人使用的方法和技巧,现在是时候回家去村旁边的小河里练练了,练习也是需要有教练的,推荐另一本经典书叫《重构与模式》,引用他开篇的介绍,本书开创性地深入揭示了重构与模式这两种软件开发关键技术之间的联系,说明了通过重构实现模式改善既有的设计,往往优于在新的设计早期使用模式。本书不仅展示了一种应用模式和重构的创新方法,而且有助于读者结合实战深入理解重构和模式。

    这本书正是我们需要的教练,值得一读。

     

    六 没有终点,只有坚持不懈的专研和努力。

          经过了几年的坚持,终于学会了灵活的运用各种模式,我们不需要去刻意的想用什么模式,怎么重构。程序的目标,就是可维护性,可扩展性,可重用性,都已经成了一种编程习惯,一种思维习惯,就像我们联系了几年游泳之后,我们不用再刻意的去考虑,如何让自己能在水上漂起来,仰泳和蛙泳的区别..... 而是跳进水里,就自然的游了起来,朝对岸游去。但是要和大师比起来,嘿嘿,我们还有很长的路要走,最终也可能成不了大师,但无论能不能成为大师,我们已经走在了成为大师的正确的路上,我们和别的程序员已经开始不一样,因为他们无论再过多少年,他们的水平不会变,只是在重复造轮子,唯一比你快的,就是ctrl+c和ctrl+v。

    正确的路上,只要坚持,就离目标越来越近,未来就一定会是一个优秀的架构师,和优秀架构师的区别,可能只是时间问题。

     

     

     

    2、大牛的法宝:不断实践总结


         原文:http://www.cnblogs.com/seesea125/archive/2012/03/30/2425281.html

         接下来我们就要往这个方向努力。然而如唐僧去西天取经一样,要历经种种磨难,一路上打败各种妖魔鬼怪才能继续前行,所以唐僧取经,第一件事,就是招徒弟,遇见妖魔鬼怪就让技术高超的徒弟打败它,徒弟不听话就念紧箍咒,徒弟也搞不定的妖怪,就请观音菩萨搞定,这就是唐僧成功的法宝,没法宝上路,看来我们会死的比较惨啊,哈哈。

        我们在通往架构师的路上,同样会遇到各种各样的问题,但不幸的是,没有菩萨在暗中相助,要是有牛人相助你,那老兄你太幸运了,成功几率大大增加。但我们没有牛人帮助,更没有技术高超的徒弟一路保驾护航,关键招徒弟得开工资啊,我们还穷的自己还养不活呢,怎么办呢?干脆自己动手,找几件护身法宝,留着路上除妖之用。

        问题是从哪找呢?百思不得其解,俗话说思索不如搜索,干脆百度一把,看看牛人都是怎么炼成的,找来找去,还真总结出几个牛人身上的通用法宝,当然独门绝技之类的就不拿了,太多那不动,呵呵。拿着这些法宝上路,嘿嘿,那我们就不是骑着白龙马去西天了,我们骑着摩托去西天,那速度可要快多了。

     

    法宝一:牛人爱惜自己的时间。

        时间就是金钱,时间就是生命,时间如同健康一样,如果时间都没有,那成功也就是浮云了。所以牛人总是很爱惜自己的时间,总是在想办法提高自己的做事效率。我突然想了起来,我QQ里有几个牛人,问问他们点经验,结果大大出乎意料,个个不在线,好不容易发现个牛人在线,当然关系还不错的,至少不会不给面子吧?于是就QQ说一句客气话,“老兄,好久不见啊,最近在忙什么呢?”,消息发出去石沉大海,到第二天上QQ才收到一句回复,“不好意思,昨忙,有事直接打电话”,言简意赅,效率奇高,再想想我们这些普通人的时间真多,一聊天就是半天,搞不好还有N个QQ群在不停的弹窗……

        偶然看到一本书,《时间管理:小强升职记》,顺便打开看下,第一句话这么说的,“前一种人用20%的时间完成了后一种人用80%的时间才能完成的事情,因此前一种人忙着考虑如何打发闲暇时间,后一种人则忙着煮方便面和熬夜。

        假设上面说的真的,我初略算了算,如果一天工作时间8个小时,则牛人的效率,可能就1,2个小时就干完了,这么一算,牛人忙和一年,则等于普通人忙和了4,5年啊!法宝,这绝对是牛人致胜的第一大法宝,俗话说,唯有以快制慢,方能笑傲江湖,没错,东方不败牛就牛在,速度快,快到你还没出招就搞定你了。强大啊,这个法宝一定要随身携带,哈哈。

        所以看了这本书后,我做的第一件事就是QQ关了,动不动就一闪一闪的,思路一直被打断,这不是在浪费自己最大的资本--时间吗?关了几天,发现效率果然出奇的高多了,QQ真是害人不浅啊,当然爱惜时间,还有很多经验,建议有空看看相关的书,受益不浅啊,嘿嘿。 

     

    法宝二:牛人善于总结

         算了算我记得的牛人,包括古代的,孔子,老子,孙子,曹雪芹,鲁迅。。。我想了一下,为什么能记住他们呢,几千年前来,轰动一时的人物应该年年有,代代有,但我们为什么只记住了这些人?很容易想明白了,他们有个共同的特征,就是总结自己的思想,写成了书,并把这种思想传承了下来,而那些身怀绝技但是秘而不传,或者只传近亲的绝技,都在历史的长河中慢慢消失了。

        再看看IT界的,苏杰,写了本《人人都是产品经理》,程杰,写了本《大话设计模式》......,除了写之外,他们还经常出没于各大论坛,讲座,想躲也躲不开啊......。

        看来牛人之所以牛,自己懂的多是一个因素之外,更重要的是把自己的知识总结下来,并努力推广了。

        所以日常总结,随身笔记一定是要做的,总结就是理解它,并且理解了还不要忘记它,时不时还翻回来看看,否则很多知识学习了又忘记了。总结这个法宝,一定要随身携带。 

     

    法宝三:牛人懂得专注

        有句古语是这么说的:能够到达金字塔顶端的动物只有两种,一种是苍鹰,一种是蜗牛。苍鹰之所以能够到达是因为它们拥有傲人的翅膀;而慢吞吞的蜗牛能够爬上去就是认准了自己的方向,并且一直沿着这个方向努力。对人类而言,能够于众生中脱颖而出者实属少数,这些人也可以看到:一种是资质优越、天生异禀,本就是成就大事的种子,这样的人是少之又少,而且有些这样的人还因不知学习而沦落了;另外一种人就是蜗牛一样的人物了,早早就知道自己是常人,却仍然立下鸿鹄之志,凭借后天的坚忍和努力,同样做出常人难以想象的成就。它是一种素质,更是一种能力。

        IT领域需要懂的太多了,运维、DBA,各种操作系统,各种语言......如果什么都想学好,结果必然是什么都略懂,但什么都拿不出手,所以注定无所建树,成不了牛人,而牛人是深刻明白这个道理,所以他们会选择某一点最感兴趣的地方,然后持之以恒的深专下去,最后达到了别人从未达到的高度,我们做IT编程的大部分人都是这也学那也学,简历上写的什么都是精通,其实这样的人,却不敢深问,深问了什么都不懂,因此专注某一个技术领域,是走向成功的铁定法则。

     

    法宝四:牛人注重动手能力

        “纸上得来终觉浅,绝知此事要躬行”。

        看来牛人并不是坐在屋子里成牛人的,而是在不断的动手,在实战中造就了牛人,也充分的说明了学习的终极目的--学以致用。所以我们学习时,一定要动手做,只学习不动手,是成不了牛人的啊。

         拿着这四件法宝去取经,就为成功增加了强有力的保障,并能达到事半功倍的效果。当然在路上多捡几件随身携带,那功力就会更强了,像007一样,口袋里总是需要什么有什么。法宝之重要,犹如练武的找到了降龙十八掌,乾坤大挪移之类的秘籍一样,拿到手了就会成为武林至尊!

     

     

    3、架构师都要懂哪些知识


    Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求。 总结起来大概有下面几点技能要求:

    一、 架构师有优秀的编码能力,解决开发人员无法解决的难题。

    二、 架构师对系统的大数据容量高性能高并发高容错的网站有架构设计和开发经验。

    三、 架构师对操作系统、数据库、服务器各种软件使用的配置比较了解,比如Linux、Web负载均衡、反向代理、数据库集群、容灾等比较了解。

    四、 架构师对软件开发过程有清晰明确的认识,也就是对软件工程有有明确的认识,并能把需求进行分析、建模。

    五、 架构师学习能力很强、接触知识面要很宽广、喜欢关注和接触各种新的技术。

    六、 架构师沟通能力很强。

    七、 架构师对从事的行业的业务要有深刻的了解。

     

    换个角度看看这些要求把:

    第一条要求你是个优秀的程序员。

    第二、第三条要求你要懂DBA,运维都需要懂的知识。

    第四条要求你是个项目经理。

    第五条要求你是个技术全才,不仅学的要深,还要学的广。

    第六条、第七条要求你熟悉公司业务人员、产品人员要懂的知识。

    这个要求太高了,架构师就相当于战争中的司令员的位置,是整个团队的核心和灵魂,这种技术要求甚至技术总监和CEO都不具备,唯一要求少点的就是管理能力,如果再具备管理能力,那就甚至能超过技术总监和CTO了,而中国不乏管理人才,怪不得有人总结说,中国没有合格的架构师呢,也难怪,大概算一算,这种要求相当于一个人学6个人的知识,并且都能达到专业的水平,这就意味着你的领悟能力和学习能力,要高于常人几倍!所以说,成为架构师确实需要天分啊。

     

    成为优秀程序员,需要学好的知识:

    1、 面向对象编程、UML画图、设计模式、代码重构

    2、 常用ORM工具

    3、  MVC,WCF,XMl, JQuery ,SQL以及性能优化

    4、 FrameWork一些深入的知识

    5、 高性能代码,比如静态化,MemCached等手段。

    6、 最好也了解一些其他语言,比如Java,PHP等。

     

    成为DBA,需要学好的知识:

    1、 常用数据库,MSSQL、MySQL、Oracle,性能调优熟练,备份、负载均衡、集群、容灾熟练

    2、 大数据量处理熟练

    3、 各种数据库监控软件

     

    成为运维,需要学好的知识:

    1、 各种Web负载均衡的硬件,比如F5,软件,比如Nginx等原理和配置

    2、 反向代理加速,比如SquID等

    3、 操作系统,Linux是必须懂的,各种好的工具都在Linux下。

    4、 各种性能监控软件。

     

    成为产品和业务以及项目经理,需要学好的知识:

    1、 沟通和理解能力。

    2、 该行业和本公司的业务逻辑。

    3、 软件工程的知识。

    4、 质量控制、进度控制、人员组织等。

     

    看来想成为合格的Web架构师,需要学太多东西了,只有一条路可走--持续不断的修炼和学习。

    另外学习中,采用先深后广的策略是明智的选择,一门学深了,其他知识可能都会融会贯通,那样比较的学起来会很快。否则可能陷入知识的海洋里,没准淹死了。

    总体的看来,Web架构,分为服务器架构和程序架构两个方面的架构,一般的Web架构师还是偏向程序架构,因此学好语言,程序架构是基础,学好了这些,做一个合格的架构师没大问题,毕竟DBA,运维的东西在公司都有专业的人在干。

    所以深度还是要深入学习编程的知识、软件架构知识,有了这个基础后,Web架构师应该在大数据量、高并发、高负载、以及高容错方向再有所了解和涉及,再返过来促进我们对软件架构的思考,这种深-广-深-广的模式是我们学习的方法,只要坚持不懈努力几年,做真正合格的Web架构师是没大问题的。

    另外由于学东西太多,在学习中也要和其他架构师多交流、共同进步,多参考其他架构师的杰作,是很明智的选择。

     

    原文地址:http://www.cnblogs.com/seesea125/archive/2012/03/30/2425281.html

    对原文一些内容做一些修改,感谢作者,尊重原著。

     

     

     

     

     

    展开全文
  • 一个架构师谈什么是架构以及怎么成为一个架构师

    万次阅读 多人点赞 2015-02-25 17:51:00
    所以今天我们先来点”番外篇“,讲讲什么是架构师,什么是架构这个永恒的话题吧。此篇源出自我在公司内部写的一个PPT,它是用于在公司内部向广大技术人员做普及用的一个资料,而CSDN这边的编辑不支持图文混排的效果...

    新年新事,来点轻松的话题。我们调剂一下后再继续讲CAS SSO单点登录吧因为后面的内容全部和代码有关,大家会觉得枯燥。所以今天我们先来点”番外篇“,讲讲什么是架构师,什么是架构这个永恒的话题吧。此篇源出自我在公司内部写的一个PPT,它是用于在公司内部向广大技术人员做普及用的一个资料,而CSDN这边的编辑不支持图文混排的效果,因此一些章节我就直接截取自我的PPT里的内容了,这样可能对大家在阅读上会显得更加生动和活泼一些吧。

     

    架构的定义

     
    先来看看软件架构的普遍定义吧。
    • 一个程序和计算系统软件体系结构是指系统的一个或多个结构。结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关系。
    • 体系结构并非可运行软件。确切的说,它是一种表达,使软件工程师能够:
    1. 分析设计在满足规定需求方面的有效性。
    2. 在设计变更相对容易的阶段,考虑体系结构可能的选择方案。
    3. 降低与软件构造相关联的风险。

    软件架构的生命周期

     
    软件开发有其生命周期,它应该是:
    而软件架构也有着其生命周期,它又是怎么样的呢?

    软件架构的重要性

     

    为什么说一个软件架构是很重要的呢?直接编程直接开发,多EASY?请看下面几点:

    • 软件架构能够满足系统的品质
    • 架构设计使受益人达成一致的目标
    • 架构设计能够支持计划编制过程
    • 架构设计对系统开发的指导性
    • 架构设计能够有效地管理复杂性
    • 架构设计为复用奠定了基础
    • 架构设计能够降低维护费用
    • 架构设计能够支持冲突分析

    什么是好的软件架构

     
    这个问题,可能大家一直都在问,包括一些IT企业也在问,对于这个问题的回答,可能不仅仅是一个简单的语句或者是定义就可以回答的出的,我们来看下面的几个形象的例子:
     
    这个是什么东东呢?乐高玩具,乐高玩具大家肯定都玩过吧?
     
    它即可以以一个完整的模型卖给你,你也可以把它全部打碎了重新从一个模型自由的再去组装成另一个模型,因为每一个乐高的模块在横向、坚向里都有标准的接口,这就是我们常说的高内聚、低耦合。
     

    什么又是糟糕的架构

     
     
    大家看看上面这幅图是什么?
     
    一个是清代的八股文,一个是孔乙己。
     
    还记得回字的四种写法吗?
     
    那么你专门就研究回字的四种写法 ,但你有没有想过我把回字折开来又可以变成几个字?是否好折?
     

    要知道最时髦的并不一定是最好的

     
     
    为什么M1A2和阿帕奇直升机里不用A8处理器,或者是最新的奔腾处理器啊?实用、经过检验的才是最好的
     
     

    成功的软件又是怎么样的呢

     
    我们谈的是软件架构,架构的最终体现是一个软件,那么什么是成功的架构什么是成功的软件呢?
     
    大家看左边的这个图,是美国的“阿利伯克级”宙斯盾驱逐舰,右边的是印度模仿美国的宙斯盾自己设计和建造的”德里级”的“咖喱盾”驱逐舰。
     
    两艘战舰一对比,怎么样?
     
    • 一个是模块化的设计,整体线条流畅,战损时模块可以任意替换。
    • 一个却是拼拼凑凑,线路外露,甲板上布满了各种电子设备和天线,一旦战损,极难维护
     

    架构之美

     
    架构,架构,到底什么是架构?我以前上大学时有一个70多岁的老教授,他上课每讲20分钟左右,需要2个同学”架“着去上一次WC,我们的架构师当然不是指这种”架构湿“。那么我们一直说的架构,到底它是一个什么样的东西呢? 怎么样又可以做出一个完美的架构呢?
     

    架构就像是迷踪拳

     
    动作轻灵敏捷,灵活多变
     
    它其实违背一切传统拳法,因此可以克敌制胜。
     
     

    架构就像是独孤九剑

     
     
    破剑式、破枪式、无招胜有招,它发源于传统武术,又扩展了传统的武术
     
     
     

    架构就像是一件艺术珍品

     
    有时一个看似简单的架构往往却是一件艺术珍品。
     
     
    大家知道这幅画吗?他是挪威画家蒙克的一幅作品叫”呐喊“,蒙克这个人是一个疯子,这幅画很简单,就是随手涂鸦一般,但是大家可知道这幅画值多少钱吗?2012年该画在纽约苏富比拍卖上以1.19亿美元被拍卖。
     

    架构的意境

     
    一个好的架构不应该受限于框架,受限于语言,受限于技术,受限于各种条条框框,它是一种意境。
     
     
     

    架构时需要考虑的几个基本因素

     
     

    JAVA通用领域的相关技术

     
    当然,我们这边主要说的是JAVA,那么作为一名学习JAVA、J2EE的架构师来说,要具备一些什么样的技能才能达到架构师的水平呢?
     
    上面这张图,我们这样来看,它分为3个部分:
     
    1. 顶部,是我们需要掌握的一些技术领域的知识,它可以使我们应对通用领域如电商、企业OA、银行保险金融等领域的一些解决方案和设计
    2. 中部,为了达到顶部这些技术我们需要了解的一些中间件、数据库、开发框架这些知识,它是一根支柱
    3. 底部,底部呢?它是我们的基础,为铺设我们通向中间或者更上层的一个基石,这也是为什么大家有时发觉我的博客和其它博客有不一样的地方,不仅仅有编程还有”中间“的这一层即数据库、性能、安全、框架搭建这些东西混合在里面的原因,因为我不希望大家通过阅读完了我的博客还只是停留在一个码农、码工、螺丝钉的这种水平上。

    架构师的职能

     
    说了这么多架构,我们来说说架构师吧。
     
     
    大家看到了没有,架构师的第一职责就是关注:non-functional requirements,即非功能性需求
     
    很多人对功能性需求和非功能性需求的界线划分还是不清楚,我这边举2个例子说明一下吧:
     

    功能性需求

     

    页面查询,这个查询是关联哪些哪些数据库表,因为我的业务是有这样这样的需求,在界面A里点了一个按钮,然后弹出窗口B,在窗口B里要显示什么样的数据,最后界面A里点完后,当我打开界面B时哪块数据已经随之发生了更改。

     

    非功能性需求

     
    我们的系统查询速度小于2S,是否考虑使用异步查询、使用队队列机制,系统要求可以容纳1000个并发,这个系统要可以做成插件式的,要可以横向扩展,要符合XXX协议,这个Webservice要做成SOAP HEAD内带有BASIC认证,还是做成符合NTLM的认证的,还是使用令牌环认证的?这个下拉框要做成即可输入又可以下拉的,这块认证要访问LDAP?
     
    很多以业务为主的项目型公司认为架构师就是trouble shooting(即排错、查错的意思,就是有错误、出问题了再找架构师),把架构师当成了fireman(救火员),可是你不自己想想为什么出了问题架构师过来2秒、2分钟或者1天半可以解决你们1个月几十人天天到零晨也解决不了的问题呢?嗯?
     
    解决了说这是人家应该的,解决不了,说人家架构师不合格呢?是不是我们应该从这个软件最早的框架上、架构上去发现一下问题呢?
     
    架构师啊,这不是一个trouble shooting的问题啊。
     
    在节前我也进行了一些面试,出于纯技术角度来说,即走架构师,TECH LEADER这样的路线的侯选人。
     
    我还是发觉了不少的问题这也是中国的一个通病:即我们的程序员,很多时候不是在做程序,而更多时候是在做业务逻辑,成了一个某一领域的业务人员了。
     
    当然,我们的程序员在其职业生涯的前3年、4年都是做某一块领域的代码的,这个是没有问题的,但是请一定一定记住,我们是编码,是IT,是程序员,不是“业务人员”!!!

    什么是IT?什么是程序员?什么是Tech Leader?什么是架构师?
     
    这个问题大家有必要好好的去问一下自己,去好好的想一下,架构师的要求是什么?
     
    我这边随便说一些东西:相信对一些要走技术道路的同学们是有帮助的:

    TCP/IP协议,加密解密,计算机原理(增补反码),JPG码,MPEG2-3协议,逻辑电子电路,计算机编译器原理(堆、栈、队列),这些东西你平时工作时一直用到吗?这些是你一直关注的底层吗?
     
    如果你是要走技术路线,一定一定请记得“数据库+ASP/JSP”不是技术,它只比表单制作,报表制作人员稍微强了那么一点点。
     
    请一定记住,技术路线关注的是非功能性需求非功能性需求啊,就是一种一通百通的东西,有了这块底蕴,任何需求和你说清了,对你来说是没有任何“难度”的,或者你再去学,是可以举一反三的啊。

    最近一直面试一些侯选人,做架构师的,在此过程中我对此深有感受,找一个程序员开发不难,招一个架构师,难。。。唉,我觉得大家有必要要考虑一下,如果我走技术路线,我缺什么,我怎么补,还要关注些什么?
     
    科技是第一生产力,管理方法论中的所谓的六SIGMA即六西格玛的第一条就是“技术人材是当下企业的第一生产力”,大家看看能够发财的是哪些公司?阿里,淘宝,支付宝,GOOGLE, 腾迅,互联网,高科技等等等一些企业,他们靠的不是业务逻辑,而是真正的技术,这足以说明问题了,所以大家如果要走技术道路,请多关注一下更细节,更底层的东西吧。
     
    这也是为什么我在之前的博文中所擅述的那些东西的原因,可见企业IT项目开发之七宗罪
    • 第一宗罪:重业务不重技术
    • 第二宗罪:编程开发人员沦为业务开发人员、沦为码农
    • 第三宗罪:IT市场沦为自由市场、小菜场一样的叫买
    • 第四重罪:技术无用论的诞生
    • 第五宗罪:闭门造车,与实际脱节,完全抛弃业务
    • 第六宗罪:消极怠工 
    • 第七宗罪:不思进取

    架构师的分类

     
    一般会把架构师分为:
     
    • 业务架构师即BA
    • 系统架构师SA
    其实从严格意义上业说架构师是可以分成三类的:
     
     
    一般就是把系统架构师和应用架构师合成一类。这个从本质上来讲倒没有什么太大的区别,不伤大雅。
     

    架构师会做什么

     
    一个架构师在一个团队中或者说在一个企业中它具体要做哪些日常工作呢?
     

    架构师并不是万能的

     
    架构师很牛B,可是架构师也是人,他不是超人。
     

    架构师需要掌握的软技巧

     
    技术,是架构师的Hard Skill,那么架构师的Soft Skill有哪些呢?
     
     
     

    架构师不是皇冠上的明珠

     
    大家一定一定要记住,架构师决不是像大家想像中的那样,是所谓的皇冠上的明珠,架构师承担的责任是相当的大的。
     

    如何成为架构师

     
    人类是如何进化的?
     
    学习、使用工具、社会协作性、不断的总结经验。

    架构师也会退化到比一般的程序员都不如

    如果停止了学习的步伐,那么。。。。。。

     

    谈架构师的自我修养

     

    学习之道

     

    需要掌握的基本功中的基本功

     
     
    大家注意,上面这个列表在学习时是有先后顺序的,从上至下分别为第一步,第二步,第三步。。。。。。不要觉得枯燥,你可以去试试,真的,被折腾着和被快乐着。

    Bad artist copy good artist steal

     
     

    放正你的心态

     

    不断的需要自我激励

     
    成功的唯一方法便是,承认现实,超越现实,鼓起勇气并善用它。
     
    • 学会平静的对待生活中的不完美之处,适应自己的情绪,了解如何让它们自然宣泄出去
    • 学习如何把不完美的地方转换成我们的优势,激发我们的创造力
    • 自我激励,不管外部条件是否有激励性,找到一种激发最佳状态的情绪,学习如何在我们的意识中制造一些波动来激励我们前进
     
    此文献给开春后工作的众IT技术人员和那些将要或想要走上IT道路的朋友们,祝大家新年新事,工作和学习顺利,最后我还将在2015年继续我的博客写作。
                                                                                                                                                                                                                            --吾以吾血荐中华之IT。
    展开全文
  • Java系统架构师全套课程
  • 架构师成长之路(2)--架构师必备技能(目标)

    万次阅读 热门讨论 2015-10-26 17:16:01
    如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划...
  • 架构师成长之路(4)--架构师知识体系(方法)

    万次阅读 多人点赞 2015-12-10 11:26:43
    如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划...
  • 软件架构师求职:我2017年10月6号入职,这4个月,仍有4个邀请,都拒绝了。 如何成为软件架构师:理论联系实践。 软件架构师培训:不需要! 何志丹  2014年过了软考的软件架构师,2016年4月25号到极点3维...
  • Atitit 架构师的分类 架构师都有哪些种类? 1. 应用架构师 应用架构师是行业中数量最多的架构师,主要负责公司产品的技术架构。产品架构师需要对业务有足够的理解,根据产品需求设计架构,在运营团队的协助下...
  • 架构师不仅仅是团队中的角色,更是一种思维方式,就算你是程序员,每天也会做很多设计决定,这其中有些颇具架构意义,任何人一旦做出了影响软件系统结构的决定,实际上已经充当了临时的架构师,而无论你是什么角色,...
  • CSDN架构领域编辑采访了一些与会讲师,谈谈他们将在会上分享的内容、相关技术和程序人生,带你领略讲师...曾历任Ctrip国际机票引擎架构师、5173分布式存储和分布式计算架构师。多年来一直致力于网站架构和分布式计算的
  • 对程序员来说,“传说中的架构师”的薪资比较充满诱惑,年薪四五十万对他们来说是一件比较简单的事情。在实际项目开发过程中,架构师扮演的是多面手,技术、开发管理一肩挑,所以薪资自然也少不了,那么Java架构师...
  • 本课程首先围绕普通开发人员如何向架构师转型这一课题,从架构师的角色以及转型过程中会遇到的困难及其解决方法切入展开讨论,总领整个课程。课程主体部分从软件架构体系结构、架构设计、技术体系等角度出发,详细...
  • 架构师图谱

    千次阅读 2017-08-09 21:25:25
    作为一个程序猿,每个人都有一个架构师梦,那么如何成为一个架构师,成为架构师又需要具备哪些技能呢?这里总结了软件开发中的一些技能树,图谱来源于网络。架构师图谱Java图谱微服务技能树网络安全架构师设计模式...
  • 架构师不是一个职业工种,而是一种能力,而且架构师也分很多种,不同领域的架构师是不一样的.比如互联网架构师和物联网架构师,没有什么可对比的.架构要考虑什么1.考虑系统能做什么,不能做什么,就是常说的系统边界2.确定...
  • 架构师职位常见面试题

    千次阅读 多人点赞 2019-06-06 11:04:29
    一、架构师的日常职责是什么? 总体而言,架构师负责软件领域的顶层设计。 架构师需要根据公司的发展,规划企业未来若干年的架构,制定可落地的架构方案,解决技术难题,做技术选型与攻关,落地具体的架构。优秀的...
  • 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题。...
  • 前言 近几年,Android 开发的套路日趋成熟,越来越多的 Android 工程师获得了「高级」的称号,也有不少人在参与公司的 ...市场真正需要的所谓「高级架构师」到底需要具备什么条件?在此和大家探讨一下 Android 工程...
  • 架构师=企业级架构师+SOA架构师+云技术专家 ----不要将云架构师误认为成企业架构师 写在前面:原作者经常被猎头公司委托寻找云架构师,这是该作者写的一篇简单清晰明了的关于云架构师应该具备什么条件的文章。 ...
  • 如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划...
  • 怎样成为一个优秀的架构师

    万次阅读 多人点赞 2019-10-08 17:15:37
    怎样才算是架构师架构师是一个既能掌控整体又能洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。看似完美的“人格模型”背后,是艰辛的探索。 架构师不是一个人,他需要建立高效卓越的体系,...
  • 架构师成长之路 1 --什么是架构师

    千次阅读 2018-11-11 10:12:05
    架构师成长之路 1 --什么是架构师
  • 在软件开发圈,“架构师”是一个受万人追捧的头衔,架构师给人的感觉是站在软件系统后面指点江山的诸葛亮,一个系统的如何运作、运作得如何,架构师都能提前设想出来。 然而“梦想是美好的,现实却是残酷的”,很多...
  • 架构师之路(三)谈谈架构师的职责

    千次阅读 2018-12-05 11:34:38
     很早就想写一些架构师系列的文章了,因为自己做架构设计也有几年了,有得有失,想以此文来谈谈自己对架构师职责的认识。架构师这个话题很大,从技术选型到架构选型,从业务建模到系统建模,无一不是在做着决策。 ...
  • JAVA架构师面试题,如何成为架构师

    万次阅读 多人点赞 2017-11-05 14:52:36
    JAVA架构师面试题,如何成为架构师 经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。 基础题目 Java线程的状态 进程...
  • 阿里十年架构师用一张图告诉你什么是系统架构师 Java架构解析 2018-11-03 20:54:41 这张图从架构师的综合能力、岗位认识、岗位职责等方面,清楚的画出了作为一个架构的基本准则。人人都想成为架构师,可作为架构...
  • 1、Java架构师是什么? 要想往Java架构师的方向发展首先要知道Java架构师是什么? Java架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。一个Java架构师得需要...

空空如也

1 2 3 4 5 ... 20
收藏数 163,628
精华内容 65,451
关键字:

架构师