读感:不错,实在,看的懂!没那么高深,也没那么浅薄!大道在脚下
“在我工作的六年多时间里,除了第一年是纯粹编码以外,其余时间都在做和架构设计有关的工作,当然也还一直在写各种各样的代码。”张友邦认为架构设计可能看起来很神秘,新入门或没有架构设计经验的程序员刚开始的时候会有种不知所措的感觉,但其实架构设计是件很容易的事,它只是软件系统开发中的一个环节而已,整个软件系统的开发和维护以及变更还涉及到很多事情,包括技术、团队、沟通、市场、环境等等。
同时,张友邦表示,虽然架构设计是件容易的事情,但也不是大多数没有架构设计经验的程序员想象中的画画框图那么简单。把几台服务器一摆,每一台服务器运行什么软件分配好,然后用网络连接起来,似乎每个企业级应用都是如此简间单单的几步。但现实生活中的软件系统实实在在可以用复杂大系统来形容,从规划、开发、维护和变更涉及到许许多多的人和事。架构设计就是要在规划阶段都把后面的事情尽量把握进来,要为稳定性努力,还要为可维护性、扩扩展性以及诸多的性能指标而思前想后。除了技术上的考虑,还要考虑人的因素,包括人员的组织、软件过程的组织、团队的协作和沟通等。
另外,架构设计还需要方法论的指导。张友邦强调,这些方法论的思路包括,至上而下的分析,关注点分离,横向/纵向模块划分等。有时候觉得架构设计决策就像是浏览Google Earth,实际上反映的是一种自上而下的决策过程。对问题的分解是软件思维的基本素质,可以有横向分解、纵向分解以及两者的结合。能不能有效快速准确的分解问题,是软件开发人员需要首先训练的项目。另外,架构设计中图形化的工具非常有用,它能把系统的结构和运作机制以图形化的方式表达出来。也正因为这样才有了架构设计就是画框图的误会。再者,架构设计是一个工程性质的工作,对当事人的实际从业经验要求较高。只有对市场上的各种技术有较全面的了解之后才有可能设计出一个尽可能满足各种设计约束的架构。
在谈到架构师需要具备的能力上,张友邦认为架构师首先必须具有丰富的开发经验,是个技术主管。因为他必须清楚什么是可以实现的,实现的方式有哪些,相应的难度怎么样,实现出来的系统面对需求变化的适应性等一系列指标。另外,需要对面向过程、面向对象、面向服务等设计理念有深刻的理解,可以快速的察觉出实现中的问题并提出相应的改进(重构)方案(也就是通常说的反模式)。这些都需要长期的开发实践才能真正的体会到,单从书本上很难领会到,就算当时理解了也不一定能融会到实践中去。
在技术能力上,软件架构师最重要也是最需要掌握的知识是构件通信机制方面的知识,包括进程内通信(对象访问、函数调用、数据交换、线程同步等)以及进程外(包括跨计算机)的通信(如RMI、DCOM、Web Service)。在WEB应用大行其道的今天,开发者往往对服务器间的通信关注的比较多,而对进程内的通信较少关注。进程外跨机器通信是构建分布式应用的基石,它是架构设计中的鸟瞰视图;而进程内的通信是模块实现的骨架,它是基石的基石。如果具体到一个基于.Net企业级架构设计,首先需要的是语言级别的认识,包括.NET的CLR、继承特性、委托和事件处理等。然后是常用解决方案的认识,包括ASP.NET Web Service、.NET Remoting、企业服务组件等。总之,丰富的开发实践经验有助于避免架构师纸上谈兵式的高来高去,给代码编写人员带来实实在在的可行性。
其次,具有足够的行业业务知识和商业头脑也是很重要的。行业业务知识的足够把握可以给架构师更多的拥抱变化的能力,可以在系统设计的时候留出一些扩展的余地来适应可能来临的需求变化。有经验的设计人员可能都碰到过这样的事,一厢情愿的保留接口在需求变化中的命中率非常低。也就是说,在系统设计之初为扩展性留下来的系统接口没能在需求变化的洪流中发挥真正的作用,因为需求的变化并没有按照预想的方向进行,到最后还是不得不为变化的业务重新设计系统。这就是因为对业务知识的理解和对市场或者商业的判断没有达到一个实用的、可以为架构扩展性服务的水平。
再次,张友邦提到,架构设计师对人的关注必须提升到架构设计之初来纳入考虑的范围,包括沟通以及对人员素质的判断。软件过程是团队协作共同构建系统的过程,沟通能力是将整个过程中多条开发线粘合在一起的胶水。大家都应该碰到过事后说“原来是这样啊,我不知道啊”或者某个开发人员突然高声呼喊“为什么这里的数据没有了”之类的。沟通的目的就是尽量避免多条开发线的混乱,让系统构建过程可以有条理的高效进行。另外,对人的关注还表现在对团队成员的素质判断上,比如哪些开发人员对哪些技术更熟悉,或者哪些开发人员容易拖进度等。只有合理的使用人力资源,让合适的人做合适的事情才能让整个软件过程更加高效。
另外,张友邦认为架构师应时刻注意新软件设计和开发方面的发展情况,并不断探索更有效的新方法、开发语言、设计模式和开发平台不断很快地升级,软件架构师需要吸收这些新技术新知识,并将它们用于软件系统开发工作中。但对新技术的探索应该在一个理性的范围内进行,不能盲目的跟风。解决方案提供商永远都希望你能使用它提供的最新技术,而且它们在推广自己的解决方案的时候往往是以自己的产品为中心,容易给人错觉。比如数据库,往往让人觉得它什么都能做,只要有了它其它什么都不重要了。但事实上并不是如此,对于小型应用可以将许多业务逻辑用script的方式放入数据库中,但很少看到大型应用采用这样的做法。对于新东西需要以一种比较的观点来判断,包括横向的比较和纵向的比较,最后得出一些性能、可移植性以及可升级等指标。另外,新入行的开发人员往往关心新技术动向而忽略了技术的历史,而从DOS时代一路杀过来的开发者就对现在的技术体系有较全面的把握。
构架师不是通过理论学习可以搞出来的,不学习并且亲自实践相关知识肯定是不行的。就像前面说到的,架构设计是一个工程性质的事情,只有在不断实践的基础上才能逐渐熟悉起来。实践的内容并不是去深挖各种语言的特性,因为系统架构师是设计应用系统架构而不是设计语言(除非你是要实现DSL)。更多的时候需要带着一种比较的眼光去实践,把不同的实现方式下的优缺点做个总结,做到自己心里有数,等具体的上下文环境下才好判断采用什么样的方式方法。把基础打牢的同时掌握一定的方法,架构设计不是想象中的那么难。【记者/付江】
张友邦:张友邦,男,微软认证专家,系统分析员,希赛网专业顾问,中国计算机学会会员。1980年生于四川宜宾,2002年获得国防科技大学宇航科学与工程系空间工程专业学士学位,2004年初成立长沙石斑软件有限公司并担任总经理,2006年底出任广州快网信息技术有限公司技术总监,2007年10月任湖南新邮信息技术有限公司软件中心副经理。主要研究领域包括软件架构与设计、WEB RIA、流媒体与计算机图形图像。受国家自然科学基金资助,于2001年发表国家级核心刊物学术论文一篇。
分享到:
相关推荐
018最新JAVA架构师培训视频教程(附笔记、源码、视频教程 全网盘链接) 内含完整资料及代码: 一、互联网并发编程 ...六、互联网中间件架构设计 七、互联网框架应用 八、互联网分布式综合项目实战(转载)
### 架构设计的核心价值与实现路径 #### 新闻价值观:技术社群的镜像 - **目标受众**:InfoQ中文站明确将其新闻价值观的核心受众定位为架构师、项目经理、团队领导者以及高级开发人员。这一定位反映了对于这些群体...
本文档面向的主要读者群体包括系统用户、软件设计师、程序开发员、测试人员以及售后技术支持团队,确保了从需求到实现的各个阶段都能有明确的设计依据。 1. 引言 引言部分主要阐述编写这份设计说明书的目的,背景...
系统架构师需要设计出可扩展、高可用的系统,处理复杂的技术挑战。性能优化涉及代码优化、数据库查询优化等,以提高软件运行效率。安全性则是确保软件免受攻击,包括输入验证、防止SQL注入、XSS攻击等。 最后,成为...
8. **人员配置**:虽然文档未详述,但建立和推广这样的电子商务网站需要包括但不限于产品经理、技术开发人员、UI设计师、市场营销团队、客户服务团队、物流管理等岗位。 这个方案强调了从消费者需求出发,打造独特...
随着经验和技术的积累,网络工程师可以晋升为网络系统设计师,负责设计和规划企业网络架构。 网络工程师的就业前景广阔,不仅可以在网络公司、IDC中心、ISP服务商等专业技术机构工作,也可以在大公司担任技术支持或...
其中包括RPA开发工程师、售前工程师、业务分析师、架构师、运维工程师、项目管理、项目负责人、企业高管、HR等多种角色。社区提供了各种丰富的教程、资讯、文章、问答、招聘、活动、项目等供大家一起交流和成长。 ...
8. **人员配置**:虽然文档没有具体列出,但建立和推广这样一个网站通常需要的技术和营销团队可能包括:网页设计师、程序员、网络营销专员、客户服务代表、产品经理、物流协调员、品牌经理和销售人员等。 这个方案...
真的很感谢Sybase,可以说PowerDesigner横跨了需求分析师、架构分析师、系统分析师、数据库设计师好几个领域,甚至集成了代码生成,只是一般很少使用。界面很简洁,入门级的使用也很简单, 这里以一个简单的在线报价...
### FPGA学习经历详解 ...从Verilog语言的学习到FPGA的设计与开发,再到Nios II软核处理器的学习,FPGA的学习之路既充满了挑战也充满了乐趣。通过不断实践和积累经验,你将能够成为一名优秀的FPGA设计师。
Power 9芯片首席架构师Brian Thompto表示,就一系列的性能标准而言,预期明年底上架的Power 9的性能与Power 8比有50%至2倍多的提高。内核和芯片层次上的新设计有助于提高性能。 --------------------- 作者:...
某项具体功能地实现,的确是顾问的基本功,但如果要从SAP业务顾问提升到另一个层次,无论是方案架构师、项目经理,还是管理咨询、业务流程专家(BPX, Business Process Expert),都需要对企业架构、组织功能和业务...
某项具体功能地实现,的确是顾问的基本功,但如果要从SAP业务顾问提升到另一个层次,无论是方案架构师、项目经理,还是管理咨询、业务流程专家(BPX, Business Process Expert),都需要对企业架构、组织功能和业务...
某项具体功能地实现,的确是顾问的基本功,但如果要从SAP业务顾问提升到另一个层次,无论是方案架构师、项目经理,还是管理咨询、业务流程专家(BPX, Business Process Expert),都需要对企业架构、组织功能和业务...
- **AndroidGallery实现CoverFlow**:展示如何利用AndroidGallery组件实现类似苹果CoverFlow的效果,对于UI设计师和前端开发者很有帮助。 - **WindowsPhone数据存储方式转载**:介绍了Windows Phone应用程序中的数据...
- 《分布式Java应用:基础与实践》:淘宝架构师的经验分享,对分布式系统有深入阐述。 在学习过程中,除了阅读书籍,实践是必不可少的。尝试编写小程序,参与开源项目,或自己动手做小项目,都能有效提升技能。...