技术技能是架构师的必备条件。你需要有技术技能来获取这个职位,但是情商和理解组织业务的能力才定义了你有多优秀。
程序员的理想?如果是选择技术这块,他们的理想都是架构师。这个问题在我们这个行业来说是很突出的,有的人理想做管理,有的人理想做技术。那么想做技术的这些开发人员来说,他们都很向往这种架构师的角色,应该说架构师也确实是站在技术这块是最高的级别。但是他们怎么成为架构师,在这个过程当中,他们应该做什么事情,应该怎么去往这个方向努力,其实他们都很茫然。事实上我们也知道,现在我们这个行业很多架构师,尤其是做技术的这些架构师,他们很多都是从开发人员这样一步一步走上来的。
但是在这个过程当中,有的人就倒下了,有的人就一直就是成为一名普通的开发人员,或者软件工程师,没有走上这样一个层面。原因就在于,架构师需要的能力和开发人员需要的能力还是有区别的,我们要求架构师要有实现方面能力,这跟做建筑这块不一样,建筑方面可以直接培养一个架构师,但是就我们这个行业来说,从学院里面培养出来一个架构师是不大可能的,是需要有很多经验的积累,也是要有编码的这样一些技巧,这是必须的。就是架构师必须要了解实现,但是如果停留在实现这个层面,就不可能成为一名合格的架构师,是因为架构师把握的更多的是大局的东西,是一个更高层面的、抽象方面的知识。
怎么才能成为一名架构师呢,需要在这方面有意识的培养自己,第一个培养,就是从行业这块,因为做我们这个软件行业,根据不同的领域,领域模型可能不一样,业务流程不一样,业务规则不一样。那么如果你对这个行业的业务规则、业务流程不清楚,你也很难得到一个好的理论模型,也就很难得到一个好的架构,所以从行业这方面,要有意识的培养这方面的能力。就是你可以集中在你公司所从事的一些行业,比如金融行业,或者制造行业,或者保险行业,电信、通讯这方面的行业,要有这方面的能力,你要有意识去积累。而不是要埋头光顾着写代码,而是有意识的去参与一些需求这块的理解和分析,这是我认为第一个。
第二个,就是要去掌握一些提高自己的抽象能力,提高自己的建模能力。因为架构师所需要具备的最大的、最强的一个能力,就是能够从很纷繁复杂的需求当中,从很多细节实现当中,能够去抽象出一个共同的东西出来,能够从不同的地方,能够找到共同的地方,也就是所谓的共性和可变性这样一种分析,他们在这一方面的能力把握的非常好。然后这一方面的能力,把握抽象出来以后,还要把它形成为一个模型,形成出领域模型、分析模型、设计模型,通过这个模型的方式来把它表达出来,就是我认为要有意识的要积累这方面的能力。
第三个,我认为应该有意识的、有前瞻性的去了解这方面的知识,不管是从网络上,包括像咱们InfoQ也有一个架构的专区,架构专区有很多很优秀的文章,都是国内外一流的架构师写的一些文章,可以有意识的去看这些方面的文章,或者是读一些优秀的书籍。那么从这方面来培养你在架构这一块的能力。
第四个我觉得还有一个交流,有意识的提高交流,很多开发人员为什么没有在最后成为架构师,就是因为他们很多技术人员可能
比较内向,偏向于研究,偏向于和机器打交道,而忽略了和人打交道。而架构师,我刚才也说了,架构师是在业务和实现的技术人员两者之间搭建一个桥梁,这桥梁一方面是从书面的角度、文档的角度来进行协作、交流,另外一方面就是口头方面来交流,而我们开发人员在这一方面还有所欠缺。所以我认为,开发人员要最后成长为一个架构师,第一个你要把目标定好,定好之后,就要有意识的往这个方向去发展,要培养架构师具备的这些能力。再根据多做一些项目,有效的、及时的去总结这些项目的经验,或者说及时的去学习一些,因为你可能是开发人员,但是在你的项目组里边,肯定有架构师类似这样的角色存在,那么你可以有意识的向这个架构师去学习,或者说从他那个地方得到的一些东西、方案,你学会去思索,去思考,这样我觉得慢慢的从经验上去积累,从技术上去积累,从能力上去提高,慢慢的我想,给你一个好的机会,一定能会成为一名合格的,乃至于优秀的架构师。
困难应该还是抽象的能力和大局观的能力。因为我们要求开发人员的能力,就是要求他具体的实现能力,把握细节,某一个算法的一个实现,然后某一个业务流程,他怎么去实现,或者某一个技术,不管是什么语言,或者什么平台,某一个技术,比如说安全,或者是写一个Web Service,或者是写一个权限管理。在这一块来说,他们的能力是很强的,但是怎么把它提取到更高的抽象能力和大局观这块,我觉得很多开发人员都比较欠缺。
首先从技术角度先说一下,对于架构师我的看法是首先要专,然后是博。就是第一个,必须得深入去了解你所擅长的某一个框架,某一个平台,一定要专。我说所谓的专,不是说把它每个细节都掌握得很清楚,而是要把它内在的原理搞得很清楚,这样即使碰到一个新的问题,你也可以能够很快的解决。因为架构师在基础这块,要树立起技术的权威,如果你设计出来的模型你自己都不清楚,我打个比方来说,你对通讯的协议都不清楚,你怎么去做架构设计,你怎么去把握它,所以必须得专。
但是,还有一个很重要的就是要博,因为我们做架构、做软件,不一定是,一直做项目都会只用一个平台,只用一门技术,而且现在的项目,其实有一个发展,是多语言、多平台共存的这样一种发展,很多项目我们看到都有这种趋势。那么如果说你只懂一门技术,只钻一门框架,只钻一门平台,那么当需要你去集成多个系统的时候,你可能就束手无策了,所以一定要博。那么博的意思是说,由于软件,不管是什么平台,不管是什么框架,不管是什么语言,其实它的原理是相通的。由于你专了,所以你对它的语言、原理、平台的机制都很清楚,你要再去快速的掌握其他的技术,是非常容易的。但是又有区别,你需要去把握它不同的地方,同时你还可以取长补短,你可以用另外一个技术的优势来弥足你现在所用的技术的缺陷,所以这是我对技术方面的认为。
而从业务来说,你要成为一位行业的专家,当然是最好,但是人的精力是有限的。一般来说我们有两种情况,一种情况就是如果这个架构师,他一直只做一个方向,就是他一直做汽车制造这块,那他可能随着经验的积累,慢慢慢慢的,他可能会成为一个汽车行业专家。但是事实上这种情况是很少的,很多架构师可能会面对另外一个新的项目,比如说你原来做汽车制造,现在让你做金融的,那你该怎么办?所以我们一般的做法是,如果一个大的公司、大的团队,我们会有专门的领域专家,由领域专家来负责业务这块,或者由客户来负责业务这块。但是我们的架构师也必须要对业务要有一定的了解,至少你要把一些行业的术语要搞清楚,这样你才能够和你的客户和领域专家在沟通上没有任何的问题,所以我不认为说,每个架构师都必须得成为一个业务专家,但是至少你在做这个架构之前,你必须要了解这个业务,了解这个行业。
如何评价系统架构的好坏?
从功能需求方面来说,如何去衡量架构师是成功的、是好的,其实很简单,就是要满足功能、满足客户需求。那我们可以利用一些方法,比如说需求矩阵、用需求跟踪这些方面,或者通过原形这些角度来和客户进行沟通,通过客户这边来了解我们这个架构方案在功能需求方面是否满足需求。然后我们可以利用一些方法,比如驱动设计,或者通过用力这些方式去驱动,把领域模式,也就是所谓的业务模型,把它建好。
从非功能性需求来说,其实是架构的一个难题,提到有安全方面、性能方面、可扩展性、可伸缩性,要求都很多。比如我们现在,都知道像Twitter、FaceBook,他们的业务都很简单,像Twitter就很简单,我follow你,然后你去follow我,那业务很简单。
但是作为一个Twitter的架构师要求很高,要求最高的可能在性能、安全稳定性这块,因为访问的人很多,所以性能这块如何去衡量,就需要有一些衡量的指标,比如响应时间之类的。在业界有很多解决这种非功能性需求方面的通用的一些方法,比如从性能角度来说,一般是利用缓存,在硬件方面不能再高的改善的情况之下,最重要的可能就是利用缓存,不管是用普通的缓存,还是用分布式缓冲。另外就是考虑可伸缩性,通过集群的方式,增加服务器的方式来提高这种性能。这些东西呢,我们就是在做架构的时候,我觉得在前期就要考虑好。
而且我觉得还有一个方法,就是把每一个功能、非功能性的因素,在权衡或者评价这个架构是否合适的时候,可以把它的因素扩大化,比如原来客户只要求能够承担十万人同时上线,你可以把它放大,你放大到一百万人,当同时上线的人数达到一百万人的时候,这个架构会不会出问题,通过这样一种方式,就是把某一个因素扩大化,来衡量你的架构。另外一个预先做调研,预先做架构,架构这块我可以先做,先做出一个原形出来,架构的原形,我们通过一些测试手段,通过压力测试,这方面的一些测试手段,来权衡这个架构是否有问题。
如何来保持架构师技术的敏锐度?
编码也是能够提高他的技术敏锐度。写整个解决方案的大体上的一些编码,而不是抠具体的算法,一些细节的实现,比如说我甚至可以写一个框架性的东西出来,然后具体的实现由开发人员去填,另外比较困难的东西,可以由你来编码去解决。还有从面向对象的角度来说,你可以写一些基类或者抽象类,把一些共同的东西提取出来。如何保持敏锐度呢,首先编码这个角度来说,我们要随时磨炼,我知道像我们很多世界一流的,象Kent Beck、Martin Fowler这些人,他们每天都还在写代码,就是要提高这方面能力,如果长期不写,就有可能到真正去做项目的时候,碰到一个问题需要你来写的时候,你写不出来。
程序员如何走向架构师?前者指导建议:
第一个就是,要认清自己,就说你的特长是什么,你的性格,你自己要有充分的了解,如果你确实在协调能力方面、组织能力方面、口头表达能力方面、交流能力方面、抽象能力方面你达不到,你可以选择另外路子。而不是觉得架构师好,你就一定要去做,其实在这个行业有很多角色都是非常好的,走到最后成为专家照样是能够得到很好的事业;
第二个要认清目标,你的目标是什么。而且你这个目标有一个近期的短期和长期目标,你在近一年要做什么事情,过三年、五年你要达到一个什么样的高度;如果没有目标,那就意味着你不会去关注你周围的跟这个目标相关的事情。在心理学上有一个重要的法则叫吸引力法则,就说只有当你心里有所想,这些信息它才会来找你。
第三,要找到适合自己的方法,因为每个人的能力不一样,特长不一样,学习方法可能都不一样,那么你的方法是什么,你要找到。比如说你可以通过多去阅读源代码,阅读一些开源的项目,或者说你可以多看书,多做项目之后,你可以在网上多找一些相关的文档,这些都是一些好的学习方法,像我现在每天保持阅读网络上的一些文章,或者是阅读书籍,特别有的书籍,是一些很一流的,战斗在一线的架构师,写的一些心得体会的总结。有的东西,可能在我们做的项目根本就没办法碰得到,但是在将来的项目中有可能会碰到,如果你还寄希望于在将来的时候碰到问题的时候你再去找,那就会出现很大的问题。
第四,未雨绸缪,你要事先做好准备,打下坚实的基础;最后一个,我认为最重要的是,基础很关键,不要好高骛远,不要一下子我要成为架构师了,好,我现在就去面向对象思想我都不太了解,设计模式我都不太了解,好,我现在就去搞架构模式,我去做架构的研究,我去分析这些架构的整个实现的原理,你根本就没有办法去掌握,所以你先要脚踏实地的先把最关键、最基础的东西先掌握好,就像我刚才说的要先专后博。先把这个东西研究的很透,而且不要抱着一个思想,就说我知道了就行了,要知其然,而不知其所以然,这样就会有很大的问题,我们要去把它研究透。包括像现在,就拿C#这种语言来说,你可能觉得这门语言你很清楚了,但事实上这个C#里面,涉及到框架的,比如说PC垃圾回收怎么运行机制,内存的管理是怎么去管理的,多线程是怎么处理的,并发是怎么去解决的,有很多很多东西需要深入的去分析,而不是盲目的知道C#的语法就够了,这五点对于开发者来说是一个比较重要的,应该说是比较重要的一个能力。
学习是很重要的一个层面,我们说形成知识技能是不够的,一定要让它应用并且形成自己的智慧,这才是有价值的。培根说了知识就是力量,那发展到今天,我们越来越发现实际上,就像彼得?德鲁克说的,知识本身这个它不产生价值,哪怕它在我们脑海里装的太多太多,只是知识而已,只是装在脑袋里的知识,东西而已,让它产生价值最佳的方式是什么?应用和分享知识。
即使你有好用的锤子,也不要把身边所有东西都当成钉子。在快速变更的现代科技社会,经验法则不会一直适用。传统智慧说永远不要在数库里面实现业务逻辑。为何这个说法传播如此广泛?大多数架构师都有类似经验,这会导致原始数据库在硬件方面如巨兽般增长,无法运行,也非常难维护。
这个假冒克苏鲁恐怖神出现的原因是主要数据库平台常常缺乏两个重要而且立等可用的特性:横向划分数据库的能力(比如根据数据实体划分数据)和纵向划分数据库的能力(不同的数据库实体放入不同数据库中)。当然,我们可以自己建立这两种特性,但是数据库管理团队以外的人常常也想处理类似问题。对于DBA来说这是赖以生存的手段而不是用于解决问题的能力。也就是说,对数据库做划分或者队列的技术常常要存在于数据库之外,使得开发者需要自己处理协议转换、多种接口、数据集成等问题。
简单的事情有效果
简单说,任何需要超过三句话来解释给其他人的事情,都不会实际有效的工作。
简单解决方案的另一个效果是促使你思考,而多思多想总是好的。总之,朝着让系统应用更为简单的目标去迎接所有需求、定律以及标准,毫不留情的去掉所有导致系统缓慢的多余脂肪。
创新一定会有风险,因为有投入,而且产出是不可预知的,但是不创新的风险更大,因为如果你不创新,但不能保证我们的竞争对手也不创新,在竞争领域里,不能单单把眼光放到团队内,而是要放在整个市场,放在我们的竞争对手。就一句,创新有风险,不创新风险更大。
转载地址 http://yandavid.blog.163.com/blog/static/107790842010813105733521/
相关推荐
在IT行业中,从一名程序员成功转型为架构师是许多技术人员的职业发展目标。系统架构设计程序员向架构师转型之路是一项艰巨但充满挑战的任务,涉及到技术深度、广度、沟通能力以及业务理解等多个方面。以下是对这一...
《软件架构设计:程序员向架构师转型必备》是一本旨在帮助程序员提升技能,迈向更高层次——架构师的著作。在IT行业中,架构师的角色至关重要,他们不仅需要掌握编程技术,还需要具备系统设计、项目管理以及业务理解...
Web数据挖掘Web数据挖掘Web数据挖掘Web数据挖掘Web数据挖掘
本视频教程仅面向有兴趣转型向Java系统架构师,大数据系统架构师的学员,主要包括四部分内容:一、程序员VS架构师 ;二、架构设计与架构师 ;三、架构风格与架构模式 ;四、架构师转型模型 ;五、面向对象设计原则
本课程首先围绕普通开发人员如何向架构师转型这一课题,从架构师的角色以及转型过程中会遇到的困难及其解决方法切入展开讨论,总领整个课程。课程主体部分从软件架构体系结构、架构设计、技术体系等角度出发,详细...
【标题】: "IT程序员如何成为架构师" 这个主题是关于软件开发人员如何转型为高级技术角色——架构师的指南。在这个过程中,程序员需要掌握的不仅仅是编程技能,更包括系统设计、技术选型、团队协作以及业务理解等多...
这份"Android从程序员到架构师之路_讲义_ppt"压缩包文件提供了丰富的教学资料,旨在帮助开发者掌握关键技能,理解架构设计原理,提升项目管理能力,最终实现职业转型。 1. **基础技能巩固**: - **Java语言**:...
本资料仅面向有兴趣转型向Java系统架构师,大数据系统架构师的学员,主要包括四部分内容:一、程序员VS架构师 ;二、架构设计与架构师 ;三、架构风格与架构模式 ;四、架构师转型模型 ;五、面向对象设计原则
接下来,"软件架构设计:程序员向架构师转型必备(第二版).pdf"可能是一本详尽的指南,帮助程序员提升到架构师的角色。这本书可能涵盖了: 1. **基础理论**:介绍架构设计的基础概念,如模块化、抽象、封装和继承等...
### 系统架构师的成长之路 #### 一、引言 在信息技术领域中,系统架构师扮演着极其重要的角色。他们不仅需要具备深厚的技术功底,还需要拥有良好的沟通能力和项目管理经验。本文将深入探讨系统架构师成长的过程,...
通过深入学习上述知识点,Java开发者可以逐步转型为Java架构师,具备设计、指导和优化复杂系统的能力。这两个文件名虽然简洁,但它们代表的学习路径却是全面且深度的,涵盖了成为一个成功Java架构师所需的所有核心...
首席互联网架构师高级研修班免密视频课程(高端),全套72.49G: 1、系统架构设计的原理、核心技术与案例分析...2、程序员向架构师转型之路篇 5章 3、卓越的项目管理应用与实践 2章 4、企业项目篇 2章 5、架构拓展篇 1章
软件设计师是程序员进阶的一个重要方向,他们扮演着类似建筑架构师的角色,负责构建软件的结构和框架。在微软,比尔·盖茨曾担任首席软件设计师,这一职位象征着对技术发展方向的深刻洞察和领导力。对于程序员而言,...
《J2EE架构师手册》正是为这样的转型之路提供了详尽的指导。它不仅涵盖了编程语言如C#和Java的基础知识,更专注于Java领域的Spring和Struts等框架的应用与整合。 Spring框架是Java EE领域中最流行的应用框架之一,...
[软件架构设计:程序员向架构师转型必备(第二版)].温昱.扫描版.pdf 可能涵盖了以下内容: 1. **系统架构模式**:例如微服务架构、SOA(面向服务架构)、单体架构等,每种模式都有其适用场景和挑战。 2. **数据库...
例如,一个专注于后端开发的程序员可能会成长为一名优秀的系统架构师,负责整个系统的结构设计和技术选型等重要工作。 #### 二、项目管理路线 对于那些具备一定技术基础同时又善于沟通协调的程序员而言,转型成为...
1. 架构师的年终总结:文章通过程序员票选最受欢迎的编程语言为切入点,展现了开发人员对技术的喜好和趋势的把握。这反映了软件开发者在日常工作中对新技术、新工具的关注和应用,是架构师了解行业动态的重要参考。 ...
2023全球架构师峰会深圳站(脱敏)PPT合集,共42份。 云环境下的企业运维平台演进历程 从数据库历史看分布式数据库的架构设计趋势 从程序员焦虑话技术人能力进阶 分布式应用运行时的落地实践 国投瑞银微服务平台...
在中国,系统架构师是一个不错的选择,需要广泛的知识面,能够快速理解和分析客户需求,评估项目的工作量、风险和所需资源。此外,良好的沟通能力和文档撰写能力也是必不可少的。为了成为优秀的架构师,需要在某一...