第一篇:中国优秀软件架构师感悟录
《程序员》百期文章回顾之9——中国优秀软件架构师感悟录
我认为,优秀的软件架构师在软件开发行业中占据着很重要的位置。国外优秀的软件都是因为软件架构师开发了一个扩展性很强的架构才使产品不断完善和升级的。反观中国,一大部分企业比较急功近利,认为界面够漂亮就行了,完全不关心代码的组织和架构。日本这几年也在注重软件架构上的分析和设计,所以有很多产品和项目外包让中国来做利润最少的部分。我们应该开始有意识地做这方面的事情,培养出一大批中国的优秀软件架构师。只有这样,中国的软件才有希望!
来自业界的声音
什么是架构师呢?架构师是软件行业中一种新兴职业或者是角色,他要主导系统全局的分析设计和实施、负责软件构架和关键技术决策。其工作职责是在一个软件项目开发过程中,将客户的需求转化为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作。他必须对开发技术非常了解,并且需要有良好的组织管理能力。可以这样说,一个架构师工作的好坏决定了整个软件开发项目的成败。
在中国,有多少人算得上是“软件架构师”呢?或许很多人抱着不屑一顾的看法,认为只有盖茨才算得上是架构师,其他人都不过是朝自己的脸上贴金。不过,我们却不同意这种说法,因为毕竟软件架构师只是一种角色,就像只承认米开朗基罗是建筑师一样,都是极端的。
中国软件这么多年的发展中,已经有一批出色的程序员跳出了程序的限制,正在从系统架构和全局设计的角度创建大型软件甚至软件平台,有些人虽然担任着管理职位,但在技术上他们仍然无愧于软件架构师的称谓。而程序员通过了解这些架构师的经验和体会,也能够朝更高的方向发展。也希望通过他们的感悟,尽可能吸引更多的人走上软件架构师的职位。
梁永昌趋势科技研究部和软件系统架构部副总裁
主持产品与项目:1990年开发出LANProtect For Novell Netware Server第一版。此产品为业界第一个为Netware Server设计的反病毒产品,领先其它品牌九个月。从1995年至今,担任趋势科技反病毒引擎(VSAPI)软件架构师。这是因为在进行LANProect的产品设计时,遇到当时反病毒引擎和其它产品在源代码上无法共享的问题,当时反病毒引擎越来越复杂,各个产品使用的反病毒引擎功能不尽相同,造成客服相当困扰。因此决定将反病毒引擎独立出来成为一个共享的模块,至今趋势科技所有反病毒产品都使用此引擎模块。
感悟:软件架构师在工作的范围和责任上与盖房子的建筑师很类似,必须知道他要盖的是什么房子,有多少预算,施工期有多长,现在要的是两层楼,但以后会不会要加盖上去,厕所要几个,厨房在哪里,哪里要设门,哪儿要开窗,梁柱要多粗,要用什么材料?因为,盖四合院和十层大楼是不一样的。
同样,软件架构师必须知道他要设计的是什么软件,将被什么样的客户在什么样的环境下使用,可使用系统资源限制是多少,兼容性要求高不高,安全要求是什么等级,会不会有下一个版本,下一个版本又将增加什么功能,模块和模块之间的关系是什么,每一个不同的考虑都会影响设计,软件架构师就是要在考虑过种种因素后决定软件的架构和使用技术。
大家都知道,要在老四合院顶上加盖十层楼,全部推倒重来可能是唯一的可行方案。同样,软件因架构不好造成的问题或限制是很难改善的,有时甚至必须重新设计,这将会是一项耗时费力的投资,与其到时再来一次,不如现在就把架构做好。就像各式各样的建材一样,现在的软件市场上有太多现成的模块可供软件架构师选用,但这也造成一个问题:很多软件架构师只知有哪些模块可用,却不知模块内部做了什么工作。这种知其然不知其所以然的软件架构师随着Internet盛行而兴起,这种软件架构师现在到处可见,架过Web Server,写过CGI/VBS,再连上个Database,简历上就自称软件架构师,多层式网络架构(Multi-Tiers Web Serivce Architecture)谈起来头头是道,讨论起细节却让人摇头。现成的模块可以用,也应该用,但最重要的是要知道模块的功能和限制是什么,为什么会有这样的限制,为什么用这个模块而不用另一个。
其实商业软件架构师最大的挑战还是在折中的拿捏上。人力总是不足,时间永远不够,面对现实状况的压力,当完美设计(每个人都如此自认)无法如愿被全盘采用时,讨论(或争吵)就不可避免,效能可不可以让步,安全等级能不能降低些,哪些项目可以改变,哪些又该坚持到底,这些都是要做出的决定,而且更重要的是要能让大家充分了解你做此坚持是出自何种考虑。
软件架构师的工作伙伴大都也是技术人员,就像自古文人相轻一样,技术人员彼此的尊敬只会建立在技术能力的优越性上,软件架构师必须要有深厚的技术底子和宽广的业界信息,再加上一点口才和亲和的态度,这才容易获得其它工程师的认可和尊敬,也才不会你画你的十层楼,他盖他的四合院。
廖恒毅佳软公司董事长
主持产品与项目:曾负责中文之星2.0的开发,佳软企业管理软件的架构设计,拼音加加等一系列软件的架构设计。
感悟:软件设计是一项极具挑战性的工作。尽管软件设计人员为世界上无数的人提供了工作的便利,让大家的工作越来越自动化,软件设计者自己的工作却远没有见到能够自动化的可能性。无数的人为了找到一套软件设计的理论苦苦追寻,到目前为止,很难看到有什么实质性的进展。当银弹总是不出现的时候,也许大家都应该想想,其实银弹也许根本就不存在。
大家都听说过这个寓言故事。一个数学家跟国王下国际象棋,国王问他如果赢了,要什么样的奖励。数学家说,很简单,你在第一个棋盘格放一粒米,第二个棋盘格放两粒米,然后一直翻倍下去,把整个64个棋盘格放满就好了。国王很痛快地答应了数学家的要求。但是,当国王真的给数学家奖励的时候,才发现这是不能兑现的,因为没有任何一个国家,即便是加上全世界的粮食也不够。
讲这个大家耳熟能详的故事,其实是想谈谈我对软件架构师的认识。真正的软件架构师所面临问题的复杂度,其实与这个故事很相像。大家都在凭直觉理解软件的复杂度。而且都想得很浅,1,2,4,8…… 多简单的问题,即便是想到第十级,也不过就1024。再往下想一些,也还是大家能够理解的数字。而人们凭着直觉,也就顶多想到第20格。第20格的数字还没有超出人们的理解范围的。真正的难题在第40格以后,很少有人能够理解第40格以后是什么了。而第60格的难度呢,根本就不是第40格能够比拟的。如果我们大家都仅仅用直觉的加法来理解问题的话,最后,我们会进入不可解的范畴。人类真正聪明的地方就在于发明了对数,用对数的方法解决了对这个问题的理解。即便是第64格,也不难理解了,不过就是2的64次方。
当然,软件复杂度的问题其实比这个问题更加难解,所以我们到现在为止,还没有找到软件中的这个对数算法。但是,基于目前软件界的认知,我们多少有了一些解决方案:对象编程,组件模型,多层结构……,已经为软件设计提供现实可行的方法。问题是,这些概念理解起来也非常不容易。大家都说着同样的词汇,却有可能干着完全不同的事情,所以才会有误解,才会有争执。软件架构师是一个靠无数经验积累的结果。尤其是优秀的软件架构师,跟所有别的能够成为“师”的职业一样,在对自己的行业有了基本的了解之后,在自己不断成长的过程中,并没有一定的套路的。靠的是领悟力,靠的是对这个现实世界哲学性的思考。当用哲学的眼光来观察这个世界的时候,就离一个优秀的软件架构师不远了。
一个优秀的软件架构师,如果他愿意学的话,同样应该能够做出很香的饭菜来,因为软件架构师和厨师有相通的地方。大家以为如何?师者,通也。
何健金算盘CTO,首席架构设计师。
主持产品与项目:4年管理软件架构设计经验,曾经先后规划和设计了金算盘多年的主流产品。1997年,自主设计和开发了金算盘电子表格,以当时最先进的VC开发出的产品的功能、界面、特性比当时的Excel更具有本地化特色,作为财务管理软件的报表系统,在当年的全国财务软件评测中报表获得了第一。2002年,在多年的管理软件架构开发的背景下,经过长期的探索和思考,形成了平台的构想。并采用了先进J2EE技术,成功开发出了金算盘VP平台。
感悟:架构师是客户需求和开发者之间的桥梁。在软件行业中,一般提到的架构师是技术架构师,而实际上产品架构包括业务架构和技术架构,只有技术架构和业务架构紧密结合才有可能真正创造出一个好的系统。
产品架构是现代应用开发领域最重要的课题。在这个课题里,没有终结答案可寻,惟有恒久的问题存在。在纷繁的问题中,最重要和最“真”的问题是产品竞争力问题。除此之外,软件架构的目的还包括满足既有客户需求和提高开发效率,并且要求产品架构能更好地支持商业流程,有利于企业业务集成。金算盘VPS系列产品就是以此为指导进行架构的产品。
我在做了多年的产品架构后,对这项工作也有一些自己的感触:
首先,架构是技术。按照摩尔定律的推断,软件业的技术也同样在日新月异地发生着变化,我们已经见证了开发工具越来越短的生命周期。从VB到ASP.Net,从C到Java,无论采用什么新的语言,都体现了不同时期的架构要求。架构已经跨越了简单的过程模型,对象-时间模型,而今更多的是谈论MDA,模型的快速建立,使得软件能够快速适应用户变化成为了可能。而采用先进的技术,使得软件能够更加深度地满足客户需求。技术本身的发展是无止境的,如何使得软件能够适配新技术,成为一种更为重要的技术。采用各种模式的设计、逻辑分层、降低技术耦合使得技术的融合成为可能,也成为一项高难度的技术。
其次,架构是艺术。产品架构师需要捕捉技术和业务这个完整拼图里的某一块或某个脉络作为设计的线索。架构师永远不是先知,而是“存在的探索者”,产品架构的结果要在产品开发周期完毕时才能被印证。产品架构既要反映对技术的需求,使得架构满足对技术的适配,对发布模式能够提供多样化支持,能够满足性能的要求,还能够满足对业务管理的需要,要适应目标应用的业务特性。这样的架构,才是为应用服务的软件架构,而不仅仅是一个简单的可重用的技术工具。更重要的是它具有软件的管理基因,正如平台能够得到大量客户认可,其中最主要的就是它为客户提供了技术平台、管理工具、基础业务,并使得它们有机地高效地结合在一起。如同流淌的艺术作品一样,充满了生机和互动。
同时,架构是质量。好的架构可以使得软件产品成为一棵常青树。在和国内外软件产品对比分析的时候,经常有这样的感悟,其实好多国外的软件产品,采用的技术并不是最先进的,但是它具有非常优秀的质量,产品稳定可靠,同时还具有良好的技术适配能力,从而使得产品适应技术变化的能力非常强。这样,投资人对软件的投资价值能够得到最充分的体现,这是国内职业经理人非常值得关注和学习的。
陈小群互信互通信息技术有限公司研发主管
主持产品与项目:全球眼数字视频监控系统。系统组成包括客户端、中心服务平台,包括:接入服务器、前端视频服务器、分发服务器、存储服务器、全球眼应用服务器等。系统规模为17个开发人员用时8个月,源代码行数大约15万。
感悟:软件架构对软件系统来说就象建筑结构对建筑物、人骨架对人一样,是其它成分的基础,是满足功能和性能需求的关键,因此,软件架构师对软件研发项目的成败具有决定性的作用。
软件架构师并不像他的名字所提示的那样仅仅负责架构的设计,通常他的工作还包括,作为技术专家负责协助开发部门、技术支持部门、产品规划部门等各方解决技术问题。因此,他的管理和沟通能力是同样重要的。其它主要的知识和技能还包括分析和解决问题的能力、将需求转化为设计的能力、对系统未来发展的预见能力等。
一个优秀的程序员会是一个优秀的软件架构师吗?不一定。对于一个复杂的软件系统来说,架构设计通常都不是一个人就可以完成的任务,需要一组具有不同知识的工程师协作完成,在这个过程中,架构师要做大量的解释、说服、协调、总结、归纳、妥协等工作。一个没有担任过负责人的程序员缺乏这方面的经验。
同时,国内一种普遍的现象是,大量缺乏编程经验的博士、硕士、项目经理负责软件架构设计,并声称不需要学习编程也能搞好软件架构设计。计算机科学是一门实验的、技能性的学科,许多概念必须在编程实践中体会,技能更是必须要操练才能提高。很难想象一个不懂编程的人会理解设计模式,而不懂设计模式的人会是一个优秀的软件架构师!一个看了很多棋谱但从没有实战过的人声称自己是布局高手,你会信吗?
全球眼数字视频监控系统是一个大型分布式系统,它的开发涉及到分布式系统、网络编程、网络协议、视频、音频、控制、系统管理、数据库、内容管理、Web编程等许多方面的知识。作为软件架构师,在技术方面感受最深刻的是对化繁为简,以及分析和解决问题能力的要求。化繁为简就是将一个复杂的解决方案分解为一系列简单的小方案,不仅可以提高开发效率,而且还可以提高系统的稳定性。对于不断出现的技术问题,架构师应该能够迅速判断其难度、重要程度,自己解决不了的话,可以有效利用其它资源解决。
在非技术方面,沟通能力特别重要,你要将你的设计思想传达给开发团队,这件事情已经很不容易了,更困难的是,你还要传达给技术支持人员,甚至一些非技术人员。有的时候,你还必须妥协,采用一些其他成员支持的、也许不是最好的解决方案,以保持团队的士气。
总之,管理、沟通、经验、分析问题和解决问题的能力是一个软件架构师必备的素质。对于一些所有工程师都应该具有的素质,比如,工作热情、责任心、迎接挑战的勇气等,就不用多说了。
许式伟金山软件WPS产品架构师
参与产品与项目:曾参与WPS Office之电子表格项目和WPS Office 2002项目。从2002年至今,参与WPS V6项目。成立框架项目,负责KFC(金山基础代码库)、数据层、IO体系(XML标准等)以及Shell(用户界面)等公共组件的研发。
感悟:今年是金山软件创建十六周年,十六年来金山的每一款成功软件都凝聚了历代软件架构师的心血。每一个金山人都会对自己职业有着深刻认识。
从性格角度来讲,软件构架师需要心思细腻而严谨;从职业特征来看,软件构架师要充分理解和尊重软件产品的需求。由需求引导设计而不是相反。因此,需要特别强调产品需求的重要性。记得GOF有这样一句话:“设计应该支持变化--获得最大限度复用的关键在于对新需求和已有需求发生变化时的预见性,要求你的系统设计要能够相应地改进”。每个程序员都希望能够写出最好的程序,并使自己的程序更能适应变化。但事实表明,程序能力尤其是框架设计能力并不是天生的,而是取决于程序构架师对需求的理解程度。如果在不了解系统需求的前提下,就开始进行设计,那么即使是天才,也不能设计出完美的框架。
从另外一方面讲,软件构架师的设计只能应付可预测的变化,而构架师本身的技术积累和对需求的理解程度,往往会决定所设计的框架对需求变化的应变能力。大多数的设计人员都趋向于追求完美,大多对“开闭法则”(OCP:Open Close Principle,注:Software Entities should be open for extension,yet close for modificaiton.:程序应该可扩展但又不可修改)非常认同。而这是一个理想状态,但又不可太过,一味地让系统应付位置的变化,会让自己套上一个无形的枷锁,更为正确的做法是:让自己知道的尽可能多,当设计新版本WPS Office V6的整体框架时,通常会参考Microsoft Office和旧版本的WPS Offfice,有时甚至会看PDF对同一功能的支持情况,对同类产品的研究和比较,有助于很好地设计新产品的程序框架。
此外,作为软件构架师,一定要善于听取和接纳不同的意见,能够包容新的思想,愿意了解最新的技术和想法。优秀的软件工程师,他应该具有创新的理念和兼容并包的胸怀,比如:C#、AOP等。尽管我最喜欢C++的自由,但并不排斥去了解Java、C#等语言对其的改进,很多新的事物,会让我获得共鸣与灵感。
正如上面所讲,软件工程师需要更强的技术积累和更缜密的思维,以及对需求的深刻理解、兼容并包的创新意识和胸怀,软件构架师的职责顾名思义,从事的主要工作职责就是设计软件产品的程序构架,也就是要,对他最终设计的结果--软件产品的程序框架负责。可操作性和系统的应变能力是软件构架师的主要职责和工作重点。
我虽不是计算机专业,却是一位计算机狂热爱好者,对C语言有着深刻的领悟,被同学们戏称“C狂”,曾独立开发、与同学合作开发软件。我对于感兴趣的东西,总是去探索它内在的实质性内容。从小就酷爱数学的我,在推理的严谨上对自己要求非常高。我相信一个观念:严谨绝对不是创造的对立面,而是创造性思维的必备条件。
王栋 盛世龙吟数字科技
主持产品与项目:主持产品与项目:负责国家疾病预防控制中心的“非典型肺炎个案调查报告管理系统”、“国家疾病报告管理信息系统”、“SARS早期预警监测试点项目”。国家质量产品认证中心的“认证人员管理系统”等。其中采用Apex Portal Server(24人/月)兼容于JSR-168的portal实现,采用一些成熟的开放框架,使用轻量级设计开发理念,加速开发速度缩短开发周期。
王栋 盛世龙吟数字科技
感悟:软件架构师是团队中的一员,和其他项目成员没有什么区别,只不过承担的职责要大些,因为毕竟架构设计师所作的工作比较重要。架构设计师的具体工作是为系统设计架构,做技术的决策。而国内对于各种角色分工不明确,通常架构师都有项目管理的职责。
一个成功的架构设计师一定是不仅精通设计工作而且精通实现工作的。缺乏了设计的实践,就缺少了对系统整体的把握;缺乏了实现的实践,则缺少了对系统中某些重要技术点的全面了解。在和团队成员的交流当中,特别是讲述自己的设计思想时,设计图固然重要,但设计图只能提供一个概念模型,真正的设计还是需要用源代码体现。为了更好的设计和实现还要掌握各种工具和类库的使用,因为架构设计师有时还是技术咨询顾问。
在系统设计和技术决策时,最难做到的就是平衡和取舍。在规定的时间内,团队内部人员的技术水平和状态、技术的成熟稳定度、技术实现的难易程度等因素都会影响系统架构的最终实现。比如去年四月底—正是SARS在北京闹得最凶的时候,我们接到了国家疾病预防控制中心的《非典型肺炎个案调查报告管理系统》的开发任务,由于国家疾病控制中心没有一套基于互联网的疾病申报系统,给这种突发性的传染性疾病申报工作带来一些困难。全部基于传真和电话的申报信息必须经过人工处理才能形成报告上报,而面对神秘的SARS,申报的内容在不断的调整,上报的流程也在不断地更改,如果我们仍然按照通常的应用程序开发方法,可能很快就能完成这样简单的数据提交工作,但是如果任何地方稍有改变,程序开发人员必须在现场完成程序更改。由于当时的特殊情况,我们的开发团队也不可能保持特别大的规模,而时间要求又极其苛刻——一周之内系统要测试上线。经过权衡,认为必须满足可实时动态定制申报内容以及定制的查询统计,我们承担着巨大的压力,最后决定采用简化的模型实现系统,用项目成员最熟悉的技术和概念,完成保证系统运行的最小功能集合。
对于一个系统或产品,还需要有不断改善它的耐心,有时还需要推翻重新实现的勇气。上边提到的项目第一阶段,在疯狂的加班加点中基本完成了。不过,由于时间仓促系统还是有改进和提高的余地。在接下来的几个月时间内,我们做的就是不断对这个系统细化,深化,修改,调整。这时候,其他相关项目也要启动了,启用我们的核心引擎后,经过很短时间的定制,都分别上线运行了,充分体现了原有模型的设计重用性和系统的可扩充性。但精益求精,针对新的需求,我对原有的一些设计缺陷有了新的认识,界面不够灵活、流程不能定义、结构稍显混乱,等等。
随着又一个项目,所有上次积累下来想修改的东西都有了机会重新实现,这是多么美好的感觉。国家质量认证中心的业务系统,有更多表单要填写,有更多的复杂流程要实现,有更多的组织机构和角色要定义,需要更灵活的表现形式和配置功能。以前的系统引擎就不能满足了,就决定使用更新的结构、更新的工具甚至是更新的过程来实现。这回我们做到了每一个工作流可以用户自定义,每一个工作流节点中的表单用户可以自定义,每一个查询都可以自定义。随着时间推移,这套系统也在不断演进中。作为软件架构师,学习的能力和态度、敏锐的观察能力是非常重要的。必须通过各种途径学习和观察。对于目前国内的应用状况和互联网应用的不断深入,在不断的学习和观察中我觉得不管在哪些方面都需要整合,不管是企业内部的各种信息孤岛还是互联网上的各种应用。如何去整合资源,为最终用户服务,这个问题让我自然想到了Portal,这将是我们公司下一个重要发展方向。面对Portal世界中纷繁的技术,下一波的学习和实践就要启动了。
一个软件架构师,要勤于学习、观察、思考,决不放弃对最底层实现技术的掌握同时需要把握好系统框架的平衡,学会正确的取舍,并且要有耐心和勇气面对自己的设计,不断进行改进甚至重新实现。
周恒 浪潮软件技术研究中心
主持产品与项目:开发了Web应用框架,配套开发包,树立了企业应用框架在浪潮软件的地位。这一产品也从以Web应用框架1.0为基础,发展到今天的包含Web应用框架、工作流平台、商业服务平台、业务规则引擎等的企业应用框架3.0。这一企业应用框架也已在除烟草外的通讯、卫生、政务、税务等行业全面开花。
感悟:回顾工作两年来的情况,分析和目标的差距,朝着目标一步步前进,谈谈我的反思和体会:
补充基础理论知识。IT的技术发展是非常快的,新技术层出不穷,但是各种技术之间很多原理是一样的,是相通的,重要的是要把原理搞通。
扩宽知识面。最初,我的知识面还是太窄,当时对于网络、存储、大小型机、大型数据库几乎都没有深入的接触和使用。对于构建一个全新大型的基于J2EE的企业应用系统来说,架构师需要熟悉数据库技术、操作系统技术、存储、网络技术,J2EE体系架构,MVC框架,Java程序语言,还需要熟悉一到两个应用服务器、一到两门大型数据库。
架构师需要具备扎实全面的技术,掌握广泛的开发技能,超离于程序语言之上,熟悉多种系统架构,有丰富的开发经验,能选择并设计合理的方案。
要深入。深入到本质里面去,绝对不能浮躁。不光要了解表象,还必须了解隐藏在表象里面的本质。架构师不只是使用者,更多的是建造者,创新者,每一个决定都可能会影响几十个开发人员和成百上千的使用者,因此必须深入熟悉技术的本质,了解原理,才能灵活运用,不可能临时抱佛脚,现学现卖。
浮躁只会让人一事无成。曾见过一些人,写了两月程序,就嫌写程序低级要去做设计,刚写了两月设计,就嫌设计低级,就要去搞需求分析,刚搞了两天分析,又觉得搞技术没前(钱)途,就要去搞管理或者搞市场。也见过一些人,搞了三月嫌工资低,跳一下涨点工资,再搞三月又跳跳涨点工资。跳来跳去,开始还能往“上”跳,到后面只能被赶着往下跳了。
加强交流和沟通。曾经闷头苦学,希望能学得很牛,把什么都研究透了,然后可以教徒弟,可以带出一批人来。在这个过程中总是碰到一些槛,虽不至于灰心丧气,但也挺郁闷。头告诉说不要指望一个人都干完了,再厉害也不可能把啥都搞明白,一方面要形成一个学习的气氛,大家都很厉害,水涨才能船高,另外一方面要加强和业界尖端人士的交流,共同提高。
学习能力对于一个搞IT的人来说非常重要,如果没有很强的学习能力,很难快速适应技术变化的能力。
有一年只做了一个物流管理系统一个单,基于J2EE的单子,一切都是从头做,单子额不大内容却不少。虽然最后顺利完成,却因为广泛使用了应用服务器提供商提供的一个不成熟的扩展包而吃尽了苦头。虽说架构师不纠缠于细节,但是忽略了细节却可能造成严重的后果。对于7X24小时系统,一个细节不处理好,就会造成停机和严重的损失。细节就是追求完美,架构师既要有好的大局观,也不能忽略细节,要求我们不仅对原理搞明白,很多时候必须对具体技术实现有透彻的了解。
架构师要对系统的功能负责,对系统的成熟度负责,对系统的成本负责,架构自软件始而始,自软件终而终。架构师需要参与拟定项目的各种标准和规范,要指导大家,要和低层设计人员探讨一些难点的设计问题,他不仅仅是一个技术高手,还要充当技术的领导者,因此,学习一些软件工程的知识和提高领导力是绝对有必要的。
在项目组中,架构师是一个角色,不一定就是一个人,可能是一个小组。
架构师虽然不要忽略细节,也要警惕过分追求完美,架构师学会放弃,在系统的功能、成熟度、成本中取得平衡,从客户的角度和开发者的角度来考虑问题。特别是要警惕技术情结,不能一味追求最新的不成熟的技术,对于难以完成的功能,也需要暂时舍弃。不可能一下造成最完美的系统,袁德俊 软件工程师 自由职业
主持产品与项目:1997年金山游侠开发成功,一直从事系统编程多年。目前,自主开发的C语言规范的脚本语言“NGNc”具有高聚合低偶合的系统设计。NGNc从体系结构和应用层级都与JAVA如出一辙,绝非模仿,而是从需求中来。
感悟:自从电脑出现在我的视野,能延伸我的头脑是我对计算机的最直接感受。而从事软件编程更给我无穷的力量和冲动,探索、挑战、驾御是我从一个个不眠之夜的开发中获得的最大乐趣。起初只是简单的重复着编译Sample,添加个别功能,以为语言就是计算机的全部。随着系统编程的深入,渐渐我的思维习惯转变了,操作系统的代码跟踪,给了我更大的空间去探索,就象进入了一个幽暗神秘的海洋,漫漫地与现在的各种概念越来越远,有时候同朋友们沟通都缺乏了共同的关注焦点。
开发NGNc完全是个偶然的机会。一直以来,用VC的IDE环境开发项目,并组织和管理项目需要的文件,尽管VC的功能很强大,但在项目后期,每每都是因为修改个别的数据,而重新编译整个项目,很麻烦。起初,通过设计系统的数据文件格式,将数据文件搬移出项目,将引擎和数据分离,只在修改数据的时候,用数据编辑器或简单文本进行描述。编制数据编辑器虽然可以避免规范数据输入等优点,但额外工作产生了:文本描述成为我们主要的目标。
最初文本描述方法简单,比如Window的Ini文件管理模式。随着文本文件格式的逐步复杂,文本文件到特定数据格式的转换工具越来越想向C语言转变。这就是NGNc的第一个产生的契机。我们叫它“DataOut”,顾名思义就是将数据拿出来的意思。项目开发的越多,项目后期对控制逻辑和规则描述的需求也逐步呈现出来。仅仅DataOut已经不能满足我们的需要,起初同文本数据描述一样,只是简单的规则罗列,但随着功能的发展,支持简单的类C语言的规则书写方式被支持了。
发展到现在NGNc已经完全成为了真正的C语言,并拥有自己的虚拟机,IDE调试环境,NGNbios的UI支持库,它还将会拥有很多很多。随着我对NGNc的驾御,我的视野宽广了,可以想象在它的支持下的应用会更加开枝数叶。
另外说明一下:NGN是“Engine”的音,NGNc是我对它的期望,不只驱动应用,更可以驱动我的梦想,就如同每个程序员在深夜里完成一段代码后的成就感一样。我对“软件架构师”的理解是,它只是众多软件行业内的一个分工,无论它的高度如何,需要多么资深的背景,多少年头的开发经验,他只是一个岗位,就如同其他岗位一样,他需要思考他这个层面的问题。任何一个岗位都可以说是一个架构师,如同:人体、器官、组织、细胞,都是个相对封闭的系统,都异常的精密,只是它们都有它们各自的责任范围。
软件架构师如果是软件工程师的能力体现,他应该具备从宏观到微观的全部知识,并在他的头脑中运转着整个行业甚至世界的模型,他可以通过自己头脑的精密模拟,实现对任何问题的把握,无论是宏观还是微观。我们之所以需要这样的人,就是因为我们的电脑无法完成如此复杂的计算,即使用巨大的知识库阵列也无法达到大脑的快速处理速度,有时候,架构师的一个感觉就可以左右整个行业甚至未来。具备这样高度的人是值得人们崇拜的!
后 记
软件架构师可细分为应用架构师和技术架构师,应用架构是软件本身作为一个应用而存在的结构,技术架构是使应用能够运转的支撑架构。就像软件是为社会为生活服务一样,技术架构是服务于应用架构的。
有不少新员工,因为基本是从大学毕业的人,学习接收新东西的能力都挺快,但是成就迥然有别。有的人,也具有强烈的好奇心,但为了学习而学习,敝帚自珍,不愿意应用到开发和工作中去,这种人,学到一定程度就很难再提高,学习能力只能算是不及格。
而且,还有一些立志做J2EE架构师的程序员,不但不愿意深入学习Java虚拟机规范,对于API也只是一知半解。问其理由,答曰,犯不着搞明白,到用的时候查查API就行了。天哪,到用的时候查查API就行了,如果你是一个摩天大楼的建筑师,到盖高楼的时候现查查各种建材的参数规格指标就能盖起大楼来了么?就能把水、电、梁、管、消防等搭配得合情合理么?想想看,我们做的架构可能也会影响大批设计师和程序员,影响大批使用的用户,岂是现查API就能行的?
因此,我们可以说:架构是一门科学,更是一门艺术,触类旁通,除了掌握深厚的技术知识以外,要尽可能多地掌握领域知识。成为架构师,没有速成的办法,唯有实践+努力。
第二篇:软件架构师岗位职责
架构师的职责就是设计一个公司系统的基础架构,并提供关于怎样建立和维护系统的指导方针。具体来讲,架构师的职责主要体现在以下几方面:
1、负责公司系统的架构设计、研发工作。
2、承担从业务向技术转换的桥梁作用。
3、协助项目经理制定项目计划和控制项目进度。
4、负责辅助并指导系统分析开展设计工作。
5、负责组织技术研究和攻关工作。
6、负责组织和管理公司内部的技术培训工作。
7、负责组织及带领公司内部员工研究与项目相关的新技术。
8、管理技术支撑团队并给项目、产品开发实施团队提供技术保障。
9、理解系统的业务需求,制定系统的整体框架(包括、技术框架和业务框架)。
10、对系统框架相关技术和业务进行培训,指导开发人员开发。并解决系统开发、运行中出现的各种问题。
第三篇:软件系统架构师个人简历
当今社会,个人寻求职业已成为一种风尚、一种必然,而求职的先行程序往往是求职信那关于软件系统架构师的个人简历有哪些呢?下面是写写帮文库小编为你整理的软件系统架构师个人简历范文,希望你喜欢。
软件系统架构师个人简历范文篇1
姓名:某某某
性别:男
年龄:27岁(1989年1月19日)
居住地:重庆
电 话:152******(手机)
最近工作[1年8个月]
公 司:XX有限公司
行 业:计算机软件
职 位:系统架构设计师
最高学历
学 历:本科
专 业:计算机科学与技术
学 校:重庆大学
自我评价
本人性格随和乐观,积极向上,爱好广泛,喜欢钻研,工作认真负责,拥有较强的组织能力和适应能力,并具有良好的身体素质。乐于沟通,易于融入集体,乐于助人,学习能力较好,注重理论与实践相结合,在工作中不断提高专业知识之余,同时也在不断地提高做人、做事的的能力,争取将工作做得更好,争取做更好的自己!
求职意向
到岗时间:一个月之内
工作性质:全职
希望行业:计算机软件
目标地点:重庆
期望月薪:面议/月
目标职能:系统架构设计师
工作经验
2013/12 — 2021/8:XX有限公司[1年8个月]
所属行业:计算机软件
技术部 系统架构设计师
1.多次对软件工程项目进行实地需求调研,与客户进行深入沟通,了解项目需求。
2.负责产品软件总体方案设计,做出概要设计及详细设计,并制作成文档。
3.深入理解关系型数据库理论知识,并可运用其做出数据库结构设计。
2012/7 — 2013/11:XX有限公司[1年4个月]
所属行业:计算机软件
技术部 系统架构设计师
1.熟练使用PowerDesinger进行数据库设计,依据项目需求进行数据库设计。
2.描述对象模型、数据模型、功能模型,对项目进行UML设计,制作文档。
3.开发出结构合理,宜于扩展的数据库逻辑设计模型和物理设计模型。
教育经历
2008/9— 2012/6 重庆大学 计算机科学与技术 本科
证书
2009/12 大学英语四级
语言能力
英语(良好)听说(良好),读写(良好)
软件系统架构师个人简历范文篇2
------基 本 资 料-------
姓 名: 性 别: 男
出生年月: 1988-10-25 目前所在地: 湖南
-------求 职 意 向-------
寻求职位: java软件工程师
求职地区: 湖南 工资待遇: 4000
到岗时间: 随时到岗
自我评价: 为人诚恳、自信,工作中踏实、沉稳、积极进取且有耐心。
服从上级安排且有良好的团队合作精神。
学习能力很强,敢于面对困难和挑战。
具有良好的心理素质和抗压能力,能适应加班。
-------工 作 经 验-------
就职公司: 湖南信息科技有限公司 公司行业: 信息技术和互联网(计算机软硬件,通讯)
就职时间: 2012年1月到2013年6月 就职部门: 软件部
公司性质: 民营/私营企业/非上市公司 就职职位: 软件架构师
工作描述: 参与J2EE项目的设计和编写,进行后台的日行维护和数据更新。
技能专长: 1.熟练使用JSP、Servlet、Jdbc等进行Java Web的编程开发。
2.熟悉Struts、Hibernate、Spring、Ibatis等框架,能熟练的进行SSI或SSH整合开发。
3.熟悉JavaScript、jQuery等框架;掌握Ajax异步技术,并能应用其进行开发。
4.熟练使用Eclipse、MyEclipse、VS等IDE开发工具。
5.熟练应用Apache、Tomcat、WebLogic等服务器进行Java Web的开发配置和部署。
6.熟悉Oracle、Sql Server,了解MySQL等数据库应用开发。
7.熟练运用SVN、CVS版本控制工具进行项目的配置管理。
8.了解UML统一建模语言,能够使PowerDesigner等建模工具。
9.熟悉Linux的基本操作。
10.熟悉c#,了解c、c++。
软件系统架构师个人简历范文篇3
基本信息
姓 名:陈XX
性 别:男
婚姻状况:未婚
民 族:汉
户 籍:武汉
年 龄:34
现所在地:贵州
身 高:180
联系电话:139********
电子邮箱:***
求职意向
希望岗位:技术总监、项目经理、系统架构设计师
工作年限:10年
职称:高级
求职类型:全职
可到职日期:随时
月薪要求:面议
工作经历
xx年3月—至今 xx有限公司,担任技术总监。
主要工作是:
负责公司的项目产品规划、产品开发方向、项目研发管理及控制:
1、组织并制定相关技术体系的技术标准和技术规范;
2、负责组织公司开发项目的总体方案设计,指导并审核公司产品项目的总体技术方案;
3、协调技术部与销售部之间的工作,包括任务复杂度、任务处理时间等方面的协调;
4、对客户提出的开发需求进行可行性评估和风险评估,并制定相关开发计划;
5、对项目开发进度进行监督,并对各项目进行最后的质量评估。
xx年3月—xx年7月 xx有限公司,担任系统架构设计师。
主要工作是:
1、负责公司软件项目的架构、总体设计、需求分析设计;
2、编写技术标准、设计文档;
3、负责新技术研发,软件技术指导和监控;
4、负责公司员工培训;
5、参与软件项目管理、测试管理和风险管理等。
xx年3月—xx年7月 xx有限公司,担任开发经理。主要工作是:负责公司ERP软件管理与开发;负责与速达软件的合作开发,项目顾问;与客户交流、谈判;软件实施顾问。
xx年3月—xx年7月 xx有限公司,担任开发组长。主要工作是:
1、负责项目的架构、开发和管理;
2、负责数据库、Internet电子商务的技术支持及其开发;
3、负责监督团队的开发,以及开发人员的培训,为公司培养优秀的技术人才;
4、带领团队成功开发了至少3个以上的大中型软件项目。
教育背景
毕业院校:重庆大学
最高学历:本科
获得学位:学士
毕业日期:2006-07
所学专业一:应用化学
所学专业二:软件工程
语言能力
英语水平:良好
国语水平:优秀
粤语水平:一般
个人自传
我是个热爱生活,性格开朗,喜欢钻研的人。对于在任何事情都能够深思熟虑,考虑完善后才处理问题。对自己永远是高标准,严格要求自己,永远追求突破。以诚待人,以德服人,以理教人,就是我对人的基本态度。
第四篇:软件架构师工作的职责
软件架构师工作的职责
职责:
在充分调研和理解客户业务需求的基础上,为企业应用/产品做架构设计
与客户沟通设计方案,协助他们做出关键的技术决策
在构建整个企业系统架构的过程中,能很好的平衡可靠性,可用性,可扩展性,可维护性,易管理性,及安全性等
代码审查
对软件开发生命周期,方法/标准,应用架构以及技术设计/解决方案等方面有较深刻见解
了解最新的技术与方法及如何恰当应用
任职需求:
本科或以上学历,毕业于计算机科学,软件工程,信息技术,信息系统,商务等相关专业,或拥有同等的教育水平和工作经验
___年以上分布式系统设计和开发的经验
在分布式,高需求,软件构架方面有丰富的经验
了解不同的企业软件解决方案,企业级服务器/服务,工具,及___实践
有丰富的面向对象设计和编程知识
曾经在以住的项目中担任过技术架构师
能熟练地运用英语进行书面和口语沟通
能与分布全球各地的团队成员一起顺畅工作
软件架构师工作的职责2
职责:
1、面向公司战略目标诉求进行架构设计、规划及管控,支撑变革蓝图与变革路标设计;
2、主导公司级项目的业务架构及业务解决方案设计,负责业务需求的转化及2B流程有效拉通;
3、支撑变革、流程、信息化项目中架构的评审,实现架构原则和标准的落地及日常执行;
4、参与公司IoT架构设计与项目实施工作;
5、变革与流程信息化治理体系建设与优化,引导变革解决方案建设实施,提供公司架构治理的方向和策略建议。
任职资格:
1、本科及以上学历,理工科背景优先;
2、优秀的沟通和理论联系实际的能力,精通企业架构及流程管理方法论;
3、熟悉房地产行业流程管理___实践和业界流程管理最新发展趋势优先;
4、___年以上工作经验,___年以上大中型企业的变革、流程、过程改进部门工作经验或咨询公司流程管理咨询经验,___年以上房地产行业相关领域工作经验优先;
5、拥有或曾通过以下一种或多种认证(或同等认证)者优先:
TOGAF
Architect
PMP6、熟悉IoT技术以及有相关实施经验优先。
软件架构师工作的职责3
职责:
1、主要负责核心系统的架构设计,框架搭建以及核心模块的开发;
2、负责解决后端系统中的性能瓶颈与技术难题;
3、负责核心系统的技术方案的编写与评审;
4、负责公司技术标准的制定与评审。
任职资格:
1、本科以上学历,专业不限,___年以上Java开发经验,___年以上架构设计经验;
2、精通JAVA的Spring、Mybatis等主流框架,熟悉Hadoop、ZooKeeper等分布式架构和系统;
3、熟悉Oracle、Mongo、Redis等关系与非关系型数据库;
3、知识面广,专研技术,对解决有挑战性的技术问题充满激情;
4、有独立分析和思考问题并加以解决的能力和习惯;
5、有较强的文档编写能力,能独立完成技术方案、设计方案的编写;
6、了解基础的数据结构和算法,对常见问题,能正确运用合适的数据结构和算法加以解决;
7、熟悉两种以上流行的框架,且不停留在单纯使用的层次,必须对框架的实现原理、应用场合、使用限制有基本了解;
8、善于沟通,团队协作精神良好,乐于分享经验与感悟,促进团队共同进步。
软件架构师工作的职责4
职责:
1.负责公司核心业务系统的技术架构,分析、整理出对应的技术架构方案;
2.负责产品架构分析,提出软硬件架构整体设计及数据库存储设计方案;
3.负责核心技术问题的攻关,协助解决项目开发过程中的技术难题,进行新技术的研究与技术积累;
4.改进和评审相关产品系统架构方案,控制产品系统架构质量;
5.参与制定技术标准,编写相应的技术文档,完善并沉淀企业技术架构。
任职要求:
1.本科及以上学历,计算机相关专业,至少___年以上服务端开发经验;
2.精通至少一门主流语言,Java/Python/C#/Go/Ruby等;
3.具备软件产品系统架构设计和实践经验,以及丰富的大中型开发项目总体规划和方案设计经验;
4.熟悉操作系统架构设计与搭建,并能保证架构的稳定性、可扩展性;
5.具备良好的团队沟通与协作能力,责任心强,工作认真细致;
6.有电商、财务、供应链、制造等IT系统开发经验者优先。
软件架构师工作的职责5
职责:
1、负责软件工程的需求调研,进行需求分析,编写需求分析书;
2、负责项目的概要设计,包括功能结构规划、功能子系统划分、实现模型设计、数据库设计等;
3、核心、关键模块的算法设计或功能编码实现;
4、制定软件开发计划;
5、负责指导软件工程师执行具体的软件开发工作,完善开发方法,提高执行效率。
任职资格:
1、本科以上学历,软件工程等相关专业,___年以上软件开发经验;
2、熟悉C#等高级程序语言,有较好的程序编写经验;
3、熟悉C/S、B/S
网络架构、熟悉基于TCP/IP等的网络编程;
4、有较强的沟通能力和文字表达能力。
第五篇:软件架构师的主要职责说明文
软件架构师的主要职责说明文
职责:
1、挖掘和分析业务需求,对公司业务平台进行架构改进和升级设计,制定架构升级规划和过渡方案;
2、承担软件产品核心功能的开发工作,牵头保障整个系统不出现重大技术故障;
3、进行技术评估与产品选型;
4、负责技术任务管理工作,制定设计规范、开发规范和文档规范,对任务进行合理拆分和跟踪,把控开发质量;
5、把握业界前沿的技术栈和框架,合理引入团队,提升大家的技术能力和开发效率。
任职要求:
1、___年以上软件开发经验,___年以上系统架构经验,具有物联网平台开发/大数据分析经验者尤佳;
2、有高并发,复杂系统设计和架构经验,并主导设计过所在公司重要系统;
3、具备良好的业务建模能力,能够结合业务场景抽象业务模型;
4、有一定的带团队、带项目的能力,能够辅导人员,组织团队完成项目目标;
5、在技术领域方面有一项非常擅长,如业务建模、数据分析、数据交换、流程引擎、系统架构、系统优化等。
软件架构师的主要职责说明文2
职责:
1.致力于推进适应未来发展趋势的中台系统规划和落地。能够利用新思路、新方法提升中台的专业性,并在服务能力创新、中台效能升级、容量、稳定性及可靠性保障方面不断带来各种突破;
2.以与团队一起交付价值为核心理念深入理解业务需求、设计系统架构和规划技术选型方案,结合公司战略助力行业技术变革;
3.主导川酒集团的技术规范建设及核心开发工作。
岗位要求:
计算机相关专业本科及以上学历,___年以上大型互联网或大型IT公司核心系统开发、设计工作经验;
有丰富前、中、后台软件系统架构工作经验,熟悉大型互联网电子商务体系架构,深入理解分布式计算,微服务等架构模式;
对互联网、大数据和云计算等技术有深刻理解和敏锐感觉,创新能力强;
热爱技术,工作认真、严谨,对系统质量有近乎苛刻的要求意识,善于沟通与团队协作;
有较强的逻辑思维能力,善于分析、归纳、解决问题,能够带队进行项目开发;
长期坚持写博客、公开交流或贡献开源代码者优先
软件架构师的主要职责说明文3
职责:
1.需求分析,产品设计,确定产品需求文档中的产品规范和文案;
2.负责新产品/功能的详细设计和原型展示。协调市场、开发、运营、管理等团队确立产品方案;
3.协调技术开发人员,跟踪产品开发进度,完成产品的开发、测试、版本管理,产品上线等相关工作;
4.参与产品核心模块的代码编写;
岗位要求:
1.本科以上学历,两年以上软件产品规划及设计经历;
2.能独立运用Axure等工具设计出产品的整体架构;
3.对行业的未来发展有清楚完整的见解,了解产品及竞争对手的最新动态,熟悉移动APP应用;
4.熟悉软件开发技术(.net
/
C++
/
java
/
html
/
js
/
css)、操作系统原理、数据库原理、网络协议及软件架构;
5.热爱计算软件管理及设计,对工作充满激情,能够承受较大的工作压力;
6.条件特别优秀者,待遇可适当放宽。
软件架构师的主要职责说明文4
职责:
1、参与微服务应用开发框架研究开发工作;
2、总体技术框架的规划与设计,重构、优化现有产品的技术架构;
3、根据业务规划及技术规划制定微服务平台架构解决方案;
4、负责关键技术的预研和攻关,提高系统的扩展性、稳定性和安全性;
5、带领团队进行技术难点的攻关和落地实施。
岗位要求:
1、具备___年以上的java开发经验,计算机或相关专业本科或以上学历,2、JAVA基础知识扎实,了解常用算法,熟悉基于JavaWeb的B/S架构应用开发,了解Java
EE规范;
3、熟悉Sping
Boot/Spring
Cloud/Dubbo等微服务框架和架构,了解其原理和使用其优缺点,并有实战经验;
4、熟练Docker/Kubernetes等容器化系统,熟悉分布式、缓存、消息等机制,能对分布式常用技术进行合理应用,解决实际架构问题
5、优秀的面向对象分析、设计和编程能力;
6、良好的分析文档编写习惯和编码习惯;
软件架构师的主要职责说明文5
职责:
1、根据公司产品具体项目需求,分析、设计与实现系统架构方案,2、负责产品架构分析,提出软硬件架构整体设计,数据库存储、信息安全等设计方案,3、指导其他工程师的设计工作;对相关产品系统架构方案进行评审及改进,控制产品系统架构质量;负责软件核心技术问题的攻关,系统优化;协助解决项目开发过程中的技术难题;
4、制定开发规范,参与制定技术标准,编写相应的技术文档,并对通用技术进行整理,提高技术复用。
5、积极了解业界发展、相关新技术及趋势,促进技术进步和创新。
任职要求:
1.___年以上平台软件架构开发、设计经验;有成功案例;
2.熟练使用主流开发框架;
3.熟练使用主流开发工具和建模工具,熟悉当前比较主流的企业架构理论;
4.熟悉各种服务器操作系统(LINUX、UNIX、windows
server)和各种中间件的部署、管理;
5.具备良好的识别和设计通用框架及模块的能力,有云、移动互联网、大数据方面的开发经验。
6.有系统性能优化与评估的实际经验,能用工具对系统的代码进行评估。