“在我工作的六年多时间里,除了第一年是纯粹编码以外,其余时间都在做和架构设计有关的工作,当然也还一直在写各种各样的代码。”张友邦认为架构设计可能看起来很神秘,新入门或没有架构设计经验的程序员刚开始的时候会有种不知所措的感觉,但其实架构设计是件很容易的事,它只是软件系统开发中的一个环节而已,整个软件系统的开发和维护以及变更还涉及到很多事情,包括技术、团队、沟通、市场、环境等等。
<o:p></o:p>
<o:p></o:p>同时,张友邦表示,虽然架构设计是件容易的事情,但也不是大多数没有架构设计经验的程序员想象中的画画框图那么简单。把几台服务器一摆,每一台服务器运行什么软件分配好,然后用网络连接起来,似乎每个企业级应用都是如此简间单单的几步。但现实生活中的软件系统实实在在可以用复杂大系统来形容,从规划、开发、维护和变更涉及到许许多多的人和事。架构设计就是要在规划阶段都把后面的事情尽量把握进来,要为稳定性努力,还要为可维护性、扩扩展性以及诸多的性能指标而思前想后。除了技术上的考虑,还要考虑人的因素,包括人员的组织、软件过程的组织、团队的协作和沟通等。
另外,架构设计还需要方法论的指导。张友邦强调,这些方法论的思路包括,至上而下的分析,关注点分离,横向/纵向模块划分等。有时候觉得架构设计决策就像是浏览Google Earth,实际上反映的是一种自上而下的决策过程。对问题的分解是软件思维的基本素质,可以有横向分解、纵向分解以及两者的结合。能不能有效快速准确的分解问题,是软件开发人员需要首先训练的项目。另外,架构设计中图形化的工具非常有用,它能把系统的结构和运作机制以图形化的方式表达出来。也正因为这样才有了架构设计就是画框图的误会。再者,架构设计是一个工程性质的工作,对当事人的实际从业经验要求较高。只有对市场上的各种技术有较全面的了解之后才有可能设计出一个尽可能满足各种设计约束的架构。
<o:p> </o:p>在谈到架构师需要具备的能力上,张友邦认为架构师首先必须具有丰富的开发经验,是个技术主管。因为他必须清楚什么是可以实现的,实现的方式有哪些,相应的难度怎么样,实现出来的系统面对需求变化的适应性等一系列指标。另外,需要对面向过程、面向对象、面向服务等设计理念有深刻的理解,可以快速的察觉出实现中的问题并提出相应的改进(重构)方案(也就是通常说的反模式)。这些都需要长期的开发实践才能真正的体会到,单从书本上很难领会到,就算当时理解了也不一定能融会到实践中去。
<o:p> </o:p>在技术能力上,软件架构师最重要也是最需要掌握的知识是构件通信机制方面的知识,包括进程内通信(对象访问、函数调用、数据交换、线程同步等)以及进程外(包括跨计算机)的通信(如RMI、DCOM、Web Service)。在WEB应用大行其道的今天,开发者往往对服务器间的通信关注的比较多,而对进程内的通信较少关注。进程外跨机器通信是构建分布式应用的基石,它是架构设计中的鸟瞰视图;而进程内的通信是模块实现的骨架,它是基石的基石。如果具体到一个基于.Net企业级架构设计,首先需要的是语言级别的认识,包括.NET的CLR、继承特性、委托和事件处理等。然后是常用解决方案的认识,包括ASP.NET Web Service、.NET Remoting、企业服务组件等。总之,丰富的开发实践经验有助于避免架构师纸上谈兵式的高来高去,给代码编写人员带来实实在在的可行性。
<o:p> </o:p>其次,具有足够的行业业务知识和商业头脑也是很重要的。行业业务知识的足够把握可以给架构师更多的拥抱变化的能力,可以在系统设计的时候留出一些扩展的余地来适应可能来临的需求变化。有经验的设计人员可能都碰到过这样的事,一厢情愿的保留接口在需求变化中的命中率非常低。也就是说,在系统设计之初为扩展性留下来的系统接口没能在需求变化的洪流中发挥真正的作用,因为需求的变化并没有按照预想的方向进行,到最后还是不得不为变化的业务重新设计系统。这就是因为对业务知识的理解和对市场或者商业的判断没有达到一个实用的、可以为架构扩展性服务的水平。
<o:p> </o:p>再次,张友邦提到,架构设计师对人的关注必须提升到架构设计之初来纳入考虑的范围,包括沟通以及对人员素质的判断。软件过程是团队协作共同构建系统的过程,沟通能力是将整个过程中多条开发线粘合在一起的胶水。大家都应该碰到过事后说“原来是这样啊,我不知道啊”或者某个开发人员突然高声呼喊“为什么这里的数据没有了”之类的。沟通的目的就是尽量避免多条开发线的混乱,让系统构建过程可以有条理的高效进行。另外,对人的关注还表现在对团队成员的素质判断上,比如哪些开发人员对哪些技术更熟悉,或者哪些开发人员容易拖进度等。只有合理的使用人力资源,让合适的人做合适的事情才能让整个软件过程更加高效。
<o:p> </o:p>另外,张友邦认为架构师应时刻注意新软件设计和开发方面的发展情况,并不断探索更有效的新方法、开发语言、设计模式和开发平台不断很快地升级,软件架构师需要吸收这些新技术新知识,并将它们用于软件系统开发工作中。但对新技术的探索应该在一个理性的范围内进行,不能盲目的跟风。解决方案提供商永远都希望你能使用它提供的最新技术,而且它们在推广自己的解决方案的时候往往是以自己的产品为中心,容易给人错觉。比如数据库,往往让人觉得它什么都能做,只要有了它其它什么都不重要了。但事实上并不是如此,对于小型应用可以将许多业务逻辑用script的方式放入数据库中,但很少看到大型应用采用这样的做法。对于新东西需要以一种比较的观点来判断,包括横向的比较和纵向的比较,最后得出一些性能、可移植性以及可升级等指标。另外,新入行的开发人员往往关心新技术动向而忽略了技术的历史,而从DOS时代一路杀过来的开发者就对现在的技术体系有较全面的把握。
<o:p> </o:p>构架师不是通过理论学习可以搞出来的,不学习并且亲自实践相关知识肯定是不行的。就像前面说到的,架构设计是一个工程性质的事情,只有在不断实践的基础上才能逐渐熟悉起来。实践的内容并不是去深挖各种语言的特性,因为系统架构师是设计应用系统架构而不是设计语言(除非你是要实现DSL)。更多的时候需要带着一种比较的眼光去实践,把不同的实现方式下的优缺点做个总结,做到自己心里有数,等具体的上下文环境下才好判断采用什么样的方式方法。把基础打牢的同时掌握一定的方法,架构设计不是想象中的那么难。【记者/付江】
张友邦:张友邦,男,微软认证专家,系统分析员,希赛网专业顾问,中国计算机学会会员。1980年生于四川宜宾,2002年获得国防科技大学宇航科学与工程系空间工程专业学士学位,2004年初成立长沙石斑软件有限公司并担任总经理,2006年底出任广州快网信息技术有限公司技术总监,2007年10月任湖南新邮信息技术有限公司软件中心副经理。主要研究领域包括软件架构与设计、WEB RIA、流媒体与计算机图形图像。受国家自然科学基金资助,于2001年发表国家级核心刊物学术论文一篇。
分享到:
相关推荐
系统架构分析师是怎样炼成的? 系统架构分析师是怎样炼成的? 系统架构分析师是怎样炼成的?
### 系统架构师的成长之路 #### 一、引言 在信息技术领域中,系统架构师扮演着极其重要的角色。他们不仅需要具备深厚的技术功底,还需要拥有良好的沟通能力和项目管理经验。本文将深入探讨系统架构师成长的过程,...
健壮、优雅、灵活和易维护的软件架构是怎样炼成的?本书通过一系列优秀的文章回答了这个问题,这些文章来自于十几位当今一流的软件设计师和架构师。在每篇文章中,作者都向我们展示了一个著名的软件架构,并分析了...
系统架构设计师(高级)复习精华 1系统架构:系统架构师是怎样炼成的 2系统架构:小议软件架构设计要点3
健壮、优雅、灵活和易维护的软件架构是怎样炼成的?本书通过一系列优秀的文章回答了这个问题,这些文章来自于十几位当今一流的软件设计师和架构师。在每篇文章中,作者都向我们展示了一个著名的软件架构,并分析了...
健壮、优雅、灵活和易维护的软件架构是怎样炼成的?本书通过一系列优秀的文章回答了这个问题,这些文章来自于十几位当今一流的软件设计师和架构师。在每篇文章中,作者都向我们展示了一个著名的软件架构,并分析了...
在技术转型方面,作者温昱强调了架构设计的重要性,并为读者提供了多条阅读路径,包括架构设计入门、大系统架构设计、需求到架构全过程以及结合工作实际解决问题的路径,帮助读者逐步深入理解并掌握软件架构设计。...
风云四号卫星系统总设计师董瑶海曾形象地描述了其高空间分辨率带来的观测能力,就如同在几公里之外放几盏烛光,风云四号能够清晰地观察到每一个光点。 风云四号卫星的研制也证明了中国在气象卫星技术领域的国际竞争...
到了2013年,业务型DBA和架构师成为了发展趋势,这表明了DBA工作不仅限于基础的技术操作,还包括了更多的业务分析和架构设计工作。 总的来说,Oracle DBA的职责是全面而复杂的,涵盖从数据库的创建和部署到监控、...
是SQL开发工程师、DBA升级成为架构师的机会。课程内容:第一课Postgresql使用基础:发展历程、安装、建库。第二课Postgresql使用基础:客户端使用、基本对象管理。第三课Postgresql使用基础:开发应用中的基本特性。...
- 安全架构:通过零信任的访问控制系统aTrust提供安全可信的访问和智能极简的安全架构。 - 访问安全:SangforAccess主打SASE,用于提高远程接入访问的安全性。 - 融合计算:ARM超融合基于国产ARM架构,结合生态...
BI系统的架构通常由数据仓库、数据分析和数据挖掘以及报表展现层组成。 在进行数据分析时,常用的传统数据分析工具包括回归分析、时间序列分析、分类器、聚类、频繁模式挖掘等。这些工具和方法能够帮助数据分析师...
该软件广泛应用于产品经理、交互设计师、信息架构师等多个领域,不仅限于产品经理和高保真原型的制作。实际上,Axure RP9 的使用者包括商业分析师、用户体验设计师、IT 咨询师等,甚至在教育和定制化开发中也有应用...
通过深入学习《Jacob, Ng, Wang - Memory Systems: Cache, DRAM, Disk》,读者将能够全面理解现代计算机存储系统的设计原理和优化方法,这对于系统架构师、软件开发者和硬件工程师来说都是至关重要的知识。
R语言算法在Hive系统架构下的使用,可以使得数据分析师在处理大数据集时更加灵活和高效。 #### 逆回购套利的需求分析 逆回购套利依赖于资金的时间价值和市场供求关系。当市场资金紧张时,逆回购利率会急剧升高,...
对于本课程的资料,炼数成金网络课程提供了明确的法律声明,强调所有教学资料只能在课程内使用,禁止在课程以外的范围传播,否则可能会涉及法律和经济责任。 #### 总结 大数据环境下的Pig实战,其实质是利用Pig作为...
这些设计模式是软件开发的宝贵工具,理解并熟练应用它们可以提升软件设计的品质和可维护性,是系统架构师等高级职位必备的知识。通过灵活运用这些模式,开发者能够构建出更加健壮、易于扩展和维护的软件系统。
报告中提及的科技属性公司也包含在这一产业链中的企业,它们在新材料、电池管理系统等关键技术领域进行布局,是未来增长潜力较大的细分市场。 5. 光伏产业链 光伏设备的关注重点在于技术升级带来的投资变化,特别是...