架构师是所有程序员为之奋斗的目标,但是很多小伙伴对架构师的理解只是定义在字面上,并不明白架构师的真正意义,下面通过一个故事来说明:
Simon是一家外企软件公司的总经理,最近给一个问题愁坏了。项目一个接一个的下来,人手越来越紧张。Simon是个极限编程的粉丝,但也不得不批准了一份又一份的加班申请。HR经理把这个问题归结到房价上,他的妙论是“怕失业了还不上房款,不敢跳槽”。
K项目组长Allen终于忍不住了,带了一个只有一年工作经验的小伙子要Simon面试,“很聪明!经验少了点。”
Simon皱了皱眉毛,说:“你不知道这个职位最低要求是三年工作经验吗?”
Allen说:“这已经是三个月里通过技术考试中最好的一个了,老大,试试吧。”Allen是Simon多年的哥们,比较随便。抵到面子上来,Simon只好让Allen把小伙子带进来。
Simon的面试通常是三步曲:
问题一:你能说说毕业后的主要工作经历吗?
问题二:再说说你在公司的地位?
问题三:你的发展目标是什么?等回答后,比如说构架师,他就跟着问:想象一下你当构架师的一天,说给我听听?
小伙子回答第一问题很快很清楚,一年工作当然没什么东西。Simon觉得小伙子挺聪明。所以在小伙子回答了第二个问题后,问了一个发散性的问题:“你刚才说你在公司里处于中等水平,那比你差的人为什么会比你差呢?”
这个问题是个陷阱。小伙子冒冒失失回答说:“我觉得他们每天工作是为工作而工作,工作没有责任感。”
Simon点点头说:“是吗?那真是糟糕的员工。那你刚好比糟糕的员工好一点了?”
小伙子的脸一下子红了,“我不是这个意思……”
“好了,那你说说比你好的人为什么比你强?”
“我觉得他非常努力,工作很多年了还在学习各种构架,水平很高。”于是Simon就问那最后一个问题。果然,小伙子回答的是要成为构架师。大概70%的人想成为构架师。但是构架师是什么呢?
Simon问道:“那你为什么要成为构架师呢?”
小伙子一愣,大概还没有人这么置疑过。“年纪大了,不能老写程序吧。”这个回答,让Simon想起关于他对什么是老的定义:当你希望做年轻人做的事情时,你就还年轻;如果你希望做老年人做的事情,你就老了。这和你出生了多长时间是没有关系的。
Simon接着问:“好吧,那你说说你成为构架师以后,每天都会做什么?”
小伙子说:“我还没想过,不过,我想应该主要是需求分析,设计构架吧……”这大概是现在年轻人的通病,年轻人很容易追逐一些自己也不清楚的目标。
Simon问:“那设计构架具体都做些什么呢?”
小伙子这次的回答是:“比如,选择程序框架,决定用Spring或Struts等等。”
“哦,那我问你,你怎么说服别人是用Spring还是Struts呢?”
“如果我有经验,我会知道哪个更好……”
“是吗,但关于Spring或Struts的知识任谁都可以很容易得到。如果别人不同意你的建议,你怎么说服他?如果同意你的建议,那你不过是作出了和别人一样的认识,别人又凭什么认可你呢?”
小伙子没想过构架师日子里还有一个说服人的工作,说:“我是构架师,我应该有权力做决定吧?”
Simon想起权力的三种层次,第一层,任命;第二层,专业;第三层,品德。
Simon问:“如果在一个成熟的软件企业里没有你所想象的构架师呢?或者说,构架师这种职业已经死亡或消失了呢?你会怎么定位你的职业?”
Simon画了一个系统构架,然后又给小伙子看了一段代码。“那一个更难懂?”Simon问。
小伙子指着代码说:“代码难懂。”
Simon的解释是:“这就是为什么实际上所谓的构架师不存在的原因。一个更简单的东西怎么会更有价值呢?每个人都能够画出这种构架图,但不是每个人都能写出好的代码。”
送走了小伙子,Simon有点难受。他有点喜欢这个小伙子,但是,这又是一个被愚蠢的教育和误人子弟的技术杂志污染的家伙。Simon在自己的笔记本中加了一句话:中国程序员最愚蠢的认识之三:我想当构架师。前面两个赫然是:
35岁后写不动程序了;
我只要做Java(C++);
那么,你对“架构师”这个职业又是如何理解的?接下来我们通过几个问题来看看架构师是如何理解“架构师”这个职位的
1、架构师应该做什么工作?
1)负责/参与技术架构设计、重构、优化,根据业务规划及技术规划制定应用架构方案;
2)负责/参与系统的架构设计和系统设计、详细设计;
3)参与技术难题攻关,进行技术验证;
4)参与核心功能的架构与代码编写,开发与维护系统公用核心模块;
5)分析系统瓶颈,解决各种疑难杂症,对系统进行性能调优;
6)承担核心功能代码编写,重点项目架构设计开发;
7)深入理解业务需求,分析和发现系统的优化点,负责推动产品性能和架构优化;
8)新人指导、培训,主导技术难题攻关,提升团队整体技术水平;
9)负责公司的技术方向、技术规划,为公司业务发展提供全面的技术保障;
10)研究决策公司技术发展路线,规划公司产品的技术架构;
12)负责协调项目开发或实施的各个环节,把握项目的整体进度;
13)指导建立完善、规范的软件开发流程和高品质的管理体系并参照执行。
2、有了架构师公司会收益什么?
架构师在整个软件开发过程中都起着重要的作用,并随着开发进程的推进而其职责或关注点不断地变化,在需求阶段,架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等等,此外,架构师还要经常审查客户及市场人员所提出的需求,确认开发团队所提出的设计;在需求越来越明确后,架构师的关注点开始转移到组织开发团队成员和开发过程定义上;在软件设计阶段,架构师负责对整个软件体系结构、关键构件、接口和开发政策的设计;在编码阶段,架构师则成为详细设计者和代码编写者的顾问,并且经常性地要举行一些技术研讨会、技术培训班等;随着软件开始测试、集成和交付,集成和测试支持将成为软件架构师的工作重点;在软件维护开始时,架构师就开始为下一版本的产品是否应该增加新的功能模块进行决策。
3.、架构师需要什么能力?
1)拥有10年以上从业经验,8年以上技术开发及团队管理经验,有大中型项目开发经验;
2)具备 4 年以上 C/S 或 B/S 体系结构软件产品开发及架构和设计经验;
3)深厚的技术背景,熟悉多线程开发、服务器集群、负载均衡;
4)具备丰富的大中型开发项目的总体规划、方案设计及技术队伍管理经验;
5)对相关的技术标准有深刻的认识,对软件工程标准规范有良好的把握;
6)具有面向对象分析、设计、开发能力(OOA、OOD、OOP),精通 UML 和 ROSE,熟练使用 Rational Rose、PowerDesigner 等工具进行设计开发;
7)精通大型数据库如 Oracle、Sql Server 等的开发;
8)对计算机系统、网络和安全、应用系统架构等有全面的认识,熟悉项目管理理论,并有实践基础;
9)在应用系统开发平台和项目管理上有深厚的基础,有大中型应用系统开发和实施的成功案例;
10)具备良好的客户需求分析能力、业务和技术方案策划和设计能力;思路清晰,具备很强的文档撰写能力和良好的语言表达能力;
11)精通多种软件构架、设计模式、很强的解决项目开发中技术难题的能力。
在此我向大家推荐一个架构学习交流群。如果你想学习这套系统化的课程体系,你可以加群。交流学习群号: 744642380, 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良
课程体系
源码分析:
性能优化:
微服务架构:
团队协作:
分布式专题:
电商专题:
并发编程专题: