架构师之路/系统分析员、系统架构师、项目经理的区别/ 软件架构师之路

架构师(Architecture)是目前很多软件企业最急需的人才,也是一个软件企业中薪水最高的技术人才。换句话说,架构师是企业的人力资本,与人力资源相比其能够通过架构、创新使企业获得新的产品、新的市场和新的技术体系。那么什么是架构师、架构师的作用、如何定位一个架构师和如何成为一个架构师呢?这是许多企业、许多程序员朋友希望知道的或希望参与讨论的话题内容。 

所谓架构师通俗的说就是设计师、画图员、结构设计者,这些定义范畴主要用在建筑学上很容易理解。小时候到河中玩耍,经常干的事就是造桥,步骤如下:1、在沙滩上画图;2、选择形状好看、大小适合的石头;3、搭建拱桥。其中我们挑出来画图的那位光PP小孩就是传说中的“架构师”了。 

在软件工程中,架构师的作用在于三方面:1、行业应用架构,行业架构师往往是行业专家,了解行业应用需求,其架构行为主要是将需求进行合理分析布局到应用模型中去,偏向于应用功能布局;2、应用系统技术体系架构,技术架构师往往是技术高手中的高手,掌握各类技术体系结构、掌握应用设计模式,其架构行为考虑软件系统的高效性、复用性、安全性、可维护性、灵活性、跨平台性等;3、规范架构师是通过多年磨砺或常年苦思顿悟后把某一类架构抽象成一套架构规范,当然也有专门研究规范而培养的规范架构师。他们的产物往往也分为应用规范和技术规范两类。 

与建筑学类似,如果软件系统没有一个好的架构是不可能成为成功的软件系统的。没有图纸的建筑工地、没有设计的造桥工程都是不可以想象的混乱世界。建筑工程如是,软件工程中亦然! 

由于国内合格、胜任的软件架构师极为少见,直接导致了我国民族软件产业水平的落后。在未来以信息产业为主导的社会,信息产业水平的低下将直接影响国家核心竞争力。究其原因,无企业非急功近利、个人缺乏引导。 

企业的急功近利是有无法克服的原因的,那就是社会发展总体水平。“生存是第一位的,赚钱是第一位的”,多年来许多客户抱怨国内的软件公司无法信任、系统项目累做累败、公司越换越差,但因国外不可能给中国做应用系统项目还不得不找国内软件公司做。由于人月费用低、公司开发成本高,软件企业对于应用只能草草了事,拿钱走人(很多公司拿不到后期尾款)。这样的环境下,企业几乎无法投入更多资源培养自己的架构师,加上眼花缭乱的跳槽风气企业更是不愿投入…… 

那么要成为架构师的途径似乎只有现在较为流行的软件学院和个人自我培养了。关于软件学院我接触过不少,其宗旨绝大部分都是造就(or打造)企业需要的软件架构师(or程序员or人才)。教师来源与企业、学员来源与企业、人才输送到企业是他们办学的手段。尽管各个如雨后春笋般出现的软件学院口号差不多,但恐怕大多只是为了圈钱卖学位了事... 

架构师不是通过理论学习可以搞出来的,不过不学习相关知识那肯定是不行的。参考软件企业架构师需求、结合目前架构师所需知识,总结架构师自我培养过程大致如下仅供参考: 

1、架构师胚胎(程序员)学习的知识是语言基础、设计基础、通信基础等,应该在大学完成,内容包括java、c、c++、uml、RUP、XML、socket通信(通信协议)——学习搭建应用系统所必须的原材料。 

2、架构师萌芽(高级程序员)学习分布式系统、组建等内容,可以在大学或第一年工作时间接触,包括分布式系统原理、ejb、corba、com/com+、webservice(研究生可以研究网络计算机、高性能并发处理等内容) 

3、架构师幼苗(设计师)应该在掌握上述基础之上,结合实际项目经验,透彻领会应用设计模式,内容包括设计模式(c++版本、java版本)、ejb设计模式、J2EE架构、UDDI、软件设计模式等。在此期间,最好能够了解软件工程在实际项目中的应用以及小组开发、团队管理。 

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

然而学海无涯,精力有限,个人如何能够很快将这些所谓的架构师知识掌握?这是秘密,每个人都有自己的独门家传秘笈就不敢一一暴露了。不过有一点就是广泛学习的基础之上一定要根据个人兴趣、从事领域确定一条自己的主线来努力。

如果说架构师是在模型图纸上工作的,那么模型元素必须是实实在在的,正如我们不可能期望抽象派画家来设计高楼大厦,没有实际意义的模型元素,是不可能构筑出软件系统的。迄今为止,绝大部分软件架构师是依赖软件程序员来实现他们的架构意图的,这二者直接的鸿沟是显而易见的。设计模式的出现是为缩短二者之间的鸿沟所做的努力,目的是让架构师和程序员之间有更多的共同语言和规范。尽管设计模式让软件开发效率和质量有一定程度的提升,但是它始终面临一个很明显的局限,那就是人的因素。人虽然在创造性方面有绝对优势,但是在精确性、持久性、效率、质量上是无法比拟机器的。所以我们希望在软件系统构建过程中,人和机器发挥各自的长处,也就是说,让人来扮演架构师的角色,而让机器来扮演程序施工者的角色。事实上,目前已经有了成功的模式了,那就是KCOM 商业工程(
http://www.kcomsoft.com)企业应用平台所采用的基于设计的全自动化软件工厂模式,采用这种模式,架构师在工具平台所提供的模型图设计环境里做软件系统的设计,设计结果由工具平台自身所带的“软件工厂”自动加工成最终企业应用软件系统。这样的开发模式,能使企业应用软件系统的开发在效率、质量上有了质的提升,从根本上区别于传统的设计模式,因为这里的设计模式已经包含在软件工厂编译器之中了。

 系统分析员、系统架构师、项目经理的区别

系统分析员重点关注客户的业务,将客户的需求转化成类似用例图这样的表示,从而架起客户与系统设计人员之间的桥梁,
所以系统分析员要朝着客户业务专家的方向发展针对现有系统在业务/数据/组织结构等方面进行合理的分析和优化等功能,
就是能指出系统中哪些东西是好的哪些有问题等等.,比如专注电信行业、电力行业、金融行业等。

系统架构师关注的是软件的骨架,就像设计大楼的设计师一样,把大楼的框架设计好,至于里面的分隔、装修等不是他的关注点,
所以系统架构师往往能够从系统需求(规格)书中很快的抽象出今后系统将会成为怎么样的一个系统的轮廓,
然后将部件、部件与部件之间的交互用类似UML这样的建模语言表达出来,供详细设计人员参照。系统架构师必须拥有相当的工作经验,
并善于从以往的项目中总结出各种设计模式并加以引用到新的系统中来。

项目经理一般是指软件开发项目经理,其关注点是开发计划的编制、计划的执行、计划的检查等,以按时保质开发出软件为终极目标,
但涉及面却非常广,既要有良好的技术背景,又要有与人沟通的能力(一般技术人员出身的人最欠缺的),要讲究一定的方法论,
但更要掌握管理方方面面的最佳实践。 


常和好友孙向晖探讨软件开发之道,他把我作为架构师推荐到程序员杂志,提笔良久却不敢下笔。虽然多年来一直负责开发浪潮软件的企业应用架构,却总觉软件架构师在软件行业中是一神圣的称号,所以不敢随便妄称架构师。 

    本文叙述了笔者工作以来的历程,穿插谈谈工作以来的一些关于架构师的体会。 
尚在大学时候,非常崇拜那些技术天才,特别对求伯君前辈等以一己之力编写著名软件的前辈豪杰等佩服得五体 投地,期望有一天也能像他们那样成为大侠。无论黑天白夜,挥斥键盘程序人生,累了可以游戏中十步杀一人,何等自由与潇洒?
    毕业后到公司,有了机器,抱床被子到办公室,静躺着躲过12点钟保安手电的扫射检查,就可以在里面通宵奋战了。两个月时间,也终于把自己打造成气质癫狂、头发蓬乱、脸色苍白、双眼通红、键盘敲得满屋响,具备技术高手的一切外表特征的狂人了。和大多数新工作的程序员一样,那时是比较喜欢搞纯技术的工作,隔壁办公室还有另外一位气质癫狂的战友,和我一样喜欢键盘敲得满屋响,闲暇时候常聊些技术话题,也都对写数据库的增删改程序比较深恶痛绝,觉得比较俗。
    不甘于平静的生活,决定跳槽去淘金,新去的公司使用Lotus,在这个公司持续了短暂的两个月的通宵奋战。对Lotus学得也算小有心得。
(回头想想,如果没有工作前几年的知识积累和对技术的狂热,我或许永远也走不到现在这条路。) 对技术的狂热兴趣和爱好,不仅对于架构师,而且对于想做好任何工作的人都是必要的,只有对真正感兴趣的工作,方能做得出类拔萃。
转眼间风气云涌,.COM泡沫正起,BS开始大行其道,试用期没有结束就辞职开始了短暂的创业经历。头是个为了搞个程序可以几天不合眼的人。他认准了BS结构和J2EE,带着我们追逐J2EE之梦,那时是2000年初。
不过这次是完全不用Lotus,改为使用Java了,从学校时候使用VB,到工作后用Unix下C,新的公司用Lotus,现在又完全不用Lotus改用Java了。从学校时候使用VB,到工作后用Unix下C,新的公司用Lotus,每样在周边环境中都能成为佼佼者。有一段时间也是比较浮躁,寻思刨根究底每样都学明白又有什么用?书到看时方去学就行了。这种心态前前后后持续了半年,其间虽然还熬夜,却是都打游戏了。一段时间下来,做J2EE的应用心里还是没有一点底,募然回首,发觉这一段时间收获空空如也。
在头的指导下,对自己做了反思和重新定位,其时架构师的概念在国内开始比较热了,于是我对给自己树立了一个目标,做架构师。目标树立起来后,回顾工作两年来的情况,分析和目标的差距,朝着目标一步步前进。下面是当时的一些反思和体会:
补充基础理论知识。IT的技术发展是非常快的,新技术层出不穷,但是各种技术之间很多原理是一样的,是相通的,重要的是要把原理搞通。笔者所在的学校以管理严格、学生基础扎实、踏实勤奋而著称。但在大学的时候毕竟由于缺乏实践对理论的认识不到位,工作以后回过头来看看老书,发觉有更深刻的认识和丰厚的收获。
扩宽知识面。当时知识面还是太窄当时对于网络,对于存储,对于大小型机,大于大型数据库几乎都没有深入的接触和使用。对于构建一个全新大型的基于J2EE的企业应用系统来说,架构师需要熟悉数据库技术、操作系统技术、存储、网络技术,J2EE体系架构,MVC框架,Java程序语言,还需要熟悉一到两个应用服务器、一到两门大型数据库。
架构师需要具备扎实全面的技术,掌握广泛的开发技能,超离于程序语言之上,熟悉多种系统架构,有丰富的开发经验,能选择并设计合理的方案。
学习尽可能多的领域知识。软件架构师可细分为应用架构师和技术架构师,应用架构是软件本身作为一个应用而存在的结构,技术架构是使应用能够运转的支撑架构。就像软件是为社会为生活服务一样,技术架构是服务于应用架构的。因此,要做架构师,不能只喜欢纯技术,还要学习尽可能多的领域知识。
要深入、深入到本质里面去,绝对不能浮躁。不光要了解表象,还必须了解隐藏在表象里面的本质。架构师不只是使用者,更多的是建造者,创新者,每一个决定都可能会影响几十个开发人员和成百上千的使用者,因此必须深入熟悉技术的本质,了解原理,才能灵活运用,不可能临时抱佛脚,现学现卖。
(我后来曾见过一些立志做J2EE架构师的程序员,不但不愿意深入学习Java虚拟机规范,对于API也只是一知半解。问其理由,答曰,犯不着搞明白,到用的时候查查API就行了。天哪,到用的时候查查API就行了,如果你是一个摩天大楼的建筑师,到盖高楼的时候现查查各种建材的参数规格指标就能盖起大楼来了么?就能把水、电、梁、管、消防等搭配得合情合理么?想想看,我们做的架构可能也会影响大批设计师和程序员,影响大批使用的用户,岂是现查API就能行的?) 
浮躁只会让人一事无成。曾见过一些人,写了两月程序,就嫌写程序低级要去做设计,刚写了两月设计,就嫌设计低级,就要去搞需求分析,刚搞了两天分析,又觉得搞技术没前(钱)途,就要去搞管理或者搞市场。也见过一些人,搞了三月嫌工资低,跳一下涨点工资,再搞三月又跳跳涨点工资。跳来跳去,开始还能往“上”跳, 到后面是只能往被赶着往下跳了。
加强交流和沟通。曾经闷头苦学,希望能学得很牛牛,把什么都研究透了,然后可以教徒弟,可以带出一批人来。在这过程中总是碰到一些槛,虽不至于灰心丧气,但也挺郁闷。头告诉说不要指望一个人都干完了,再厉害也不可能把啥都搞明白了,一方面要形成有一个学习的气氛,大家都很厉害,水涨才能船高,另外一方面要加强和业界尖端人士的交流,共同提高。
关于交流和沟通,古语中提的文人相轻,感觉现在是国人相轻,市场和技术人员相轻,公司间的技术人员之间相轻,殊不知,家里如何横没用,我们应该瞄准的是国外的大厂商,超越他们才是我们中国软件同行的目标。
前两天去建材市场买装修的材料,每家店主都回告诉你这个价高是因为使用了进口材料,那个价低是因为使用了国产的。让人感觉非常的不爽。
要创新,树立正确的学习能力观。当时感觉头说得没错,需要加强交流沟通,自己距离目标差的太远,周边没法寄希望能有人带着做,于是甚至都想到跳槽赔着钱当学徒工都行。头告诉我做好自力更生的准备,国内当时就是欠缺好的架构师,干得好的大多都搞管理去了,剩下没搞管理的不见得碰得到,就算碰到了不见得肯带你,就算肯带你不见得真就比我厉害。我相信他绝对没有贬低同行的意思,只是为了激励我罢。
学习能力对于一个搞IT的人来说非常重要,如果没有很强的学习能力,很难快速适应技术变化的能力。
(我后来碰到不少新员工,因为基本都是从大学毕业的人,学习接收新东西的能力都挺快,但是成就迥然有别。有的人,也具有强烈的好奇心,但为了学习而学习,敝帚自珍,不愿意应用到开发和工作中去,这种人,学到一定程度就很难再提高,学习能力只能算是不及格。
笔者后来在浪潮软件烟草事业部开始做基于J2EE的应用的时候,及时将以前学到的新知识和技术运用到开发中去,从而确立了楼上企业应用框架在浪潮软件的地位。)
在那一年只做了一个物流管理系统一个单,基于J2EE的单子,一切都是从头做,单子额不大内容却不少。虽然最后顺利完成,却因为广泛使用了应用服务器提供商提供的一个不成熟的扩展包而吃尽了苦头。虽说架构师不纠缠于细节,但是忽略了细节却可能造成严重的后果。对于7X24小时系统,一个细节不处理好,就会造成停机和严重的损失。细节就是追求完美,架构师既要有好的大局观,也不能忽略细节,要求我们不仅对原理搞明白,很多时候必须对具体技术实现有透彻的了解。
基于J2EE的BS应用毕竟市场还小,加上其它一些原因,在2001年上半年,公司倒闭员工整体并入浪潮软件成为了浪潮软件的烟草事业部,同时带进浪潮的还有一个J2EE的Framework,楼上Web应用框架1.0。
倚靠浪潮的市场优势和品牌优势,依靠楼上架构的卓越品质和快速二次开发 的能力。浪潮软件在烟草业行业占有率连续几年排名第一。而楼上系列产品也以Web应用框架1.0为基础,发展到今天的包含Web应用框架、工作流平台、商业服务平台、业务规则引擎等的楼上企业应用框架3.0。
楼上企业应用框架也已在除烟草外的通讯、卫生、政务、税务等行业全面开花。依赖楼上企业应用框架构建的在多个行业属于首例全省大型集中式企业Web应用。
在使用楼上企业应用框架构建Web应用中,也有一些经验教训。
在最初的程序中程序员把太多的东西都放到内存session之中,我看见了这个问题并提出来以后数据量大可能会存在问题,但是不少人都认为已经写了不少了改的话返工太多,决定以后再改吧,我屈服了没有继续抗争。但是事实证明我们大家都错了,我们后来有了更大范围的返工,造成不少宕机。架构师应该意志坚强,既不偏执,也不轻易屈服。
客户有时候会提出一些超过条件所能承受的要求,比如说不愿意新建一个OLAP库,要在很繁忙的OLTP库上做复杂的报表查询。如果满足客户的要求,其结果是最后性能达不到要求,影响实时操作的使用。或者即使把性能优化到能满足客户的要求,却付出非常高的代价,最后客户和我们都得不偿失。这时候需要我们要不卑不亢,和客户沟通,说服客户采用更好的技术方案,架构师不仅要和客户沟通,还要和项目经理沟通,和程序员、测试人员沟通。
架构师要对系统的功能负责,对系统的成熟度负责,对系统的成本负责,架构自软件始而始,自软件终而终。架构师需要参与拟定项目的各种标准和规范,要指导大家,要和低层设计人员探讨一些难点的设计问题,他不仅仅是一个技术高手,还要充当技术的领导者,因此,学习一些软件工程的知识和提高领导力是绝对有必要的。
在项目组中,架构师是一个角色,不一定就是一个人,可能是一个小组
架构师虽然不要忽略细节,也要警惕过分追求完美,架构师学会放弃,在系统的功能、成熟度、成本中取得平衡,从客户的角度和开发者的角度来考虑问题。特别是要警惕技术情结,一味追求最新的不成熟的技术,对于难以完成的功能,需要暂时舍弃,不可能一下造成最完美的系统。
架构是一门科学,更是一门艺术,触类旁通,除了掌握深厚的技术知识以外,要尽可能多的掌握领域知识。
成为架构师,没有速成的办法,唯有实践+努力。
 
感谢后记:
     感谢我的父母及哥姐,他们教会我如何做一个有道德的中国人!
感谢我的妻子,在我穷困潦倒的时候一如既往的支持我,在我失意颓废的时候鼓励我,在我骄傲的时候泼冷水清醒我!
 感谢我的头张晖,没有他的指导,我现在可能还在跳来跳去寻找职业!
 感谢我的领导和同事,他们让我对国产软件更加有信心,他们让楼上框架更上一层楼!
 感谢孙向晖同志,他是楼上框架中开发工具、开发方法和协同平台的架构师,参与本稿的审校!
附笔者介绍:
周恒,网名ZHNT,现年28岁,98年西安电子科技大学计算机软件专业毕业,毕业后一直从事一线的软件研发与管理工作,现任浪潮软件技术研究中心总经理。主持并参与了山东省建行电话银行系统、山东省建行中间业务系统、山东风翔物流管理系统以及大连、山东、南京、广西、黑龙江、吉林、山西、广西、兰州、江西等十余个省市集中烟草信息系统项目,对企业级应用软件开发有许多独到的见解。
熟悉OOAD、J2EE、工作流技术和企业级应用建模技术,是IT之源专栏J2EE专家,具备丰富的平台和中间件开发经验。主持开发了浪潮企业级应用框架、浪潮工作流引擎、浪潮Web应用框架、浪潮商业服务平台、浪潮协同开发平台、浪潮门户平台等平台和中间件。上述平台和中间件广泛应用于浪潮开发的金融、烟草、移动、政务、卫生、税务等行业的多个产品中。
个人爱好:足球、篮球、乒乓球等运动
附参考书目:
笔者所在部门,因为是作公司整个平台和架构的部门,要求所有的程序员都要熟读:
编码的奥秘、Java虚拟机规范、JDK源码、深入Java虚拟机、Java编程思想、Java与模式、J2EE规范、分析模式、设计模式。
附浪潮楼上企业应用框架介绍:
浪潮楼上企业应用框架(LEAF,Langchao Enterprise Application Framework)是国内第一个基于J2EE规范的真正的应用软件开发平台。浪潮楼上企业应用框架是一套基于J2EE规范的面向企业级应用的企业级应用框架,代表商业应用的实体对象相互协作实现核心商业过程,允许开发者使用此框架来开发完成最终的不同需求。
浪潮楼上企业应用框架博采众长,吸收了先进和成熟的技术和架构思想,借鉴了浪潮多年的大型企业及应用系统的经验,使用了大量企业级应用模式、企业级数据集成模式、企业级开发管理模式,并经过若干大型成功项目的检验。从1998年至今,经过多年的演变和发展,已在此基础上成功地构建了金融、烟草、移动、政务、卫生、税务等行业的众多大型应 用。

你可能感兴趣的:(项目经理)