`
ruilin215
  • 浏览: 1142786 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

旧文重发:谈企业软件架构设计

阅读更多

这篇专访是ZDNET的李宁编辑在2007.03月期间做的。

[编者语]
最近在网上读到了“杀不死的人狼——我读《人月神话》”系列文章。是周爱民关于《人月神化》的读书心得。《人月神化》在软件工程里一本很有分量的书,讲述了Brooks博士在IBM公司 System/360家族和OS/360中的项目管理经验。周爱民在他的这一系列文章中用自己架构师经历为基础,从他的视角重新品读了这本书。而这也使我有了采访下他的想法,从中我们也许可以了解到中国企业内软件架构设计这个环节的现状。目前周爱民是盛大网络架构师。想与ZDNet技术专家一起分享你的智慧吗?请联系我leesbfpsj#hotmail.com.在此特别感谢周爱民在百忙中抽出时间回复了这次访谈。

1, 您好,请先向我们的网友简单做一下自我介绍好吗?
================

我94年开始学习电脑,基本上从一开始就学编程。从96年开始涉及商业软件开发,到现在约十一年了。其间我在郑州的一家软件公司呆了7年,历经了一家软件公司的中兴到消亡,因而也意识到工程、管理在软件企业——当然也包括其它类型的企业——中的价值。后来,从03年开始的一年多时间,我在郑州的另一家公司任软件部经理,也开始实践自己的工程和管理思想。很好,到现在我离开这家公司一年多了,公司状况依然很不错。我认为,团队或公司并没有因为你的缺席而变得糟糕,那便已经是良性管理的表现了。关于“Borland Delphi产品专家”,其实更多的是一个圈子的认可,而非行业的认可。我在“大富翁论坛(delphibbs.com)”活动了很长的时间,得到了一些朋友们的认可,后来Borland要评选这个专家的时候,大家推举了我,于是就得了这个称号。其实在我看来,优秀的人才、专家很多,我大约是人缘好点,运气好点罢。

我05年9月开始到盛大网络,任架构师一职。当时Borland China也有offer,但在顾问、软件工程师与架构师之间,我选择了架构师这个职务,因为我对这个角色更加感兴趣。我目前的工作,主要是盛大的软件平台方面的架构、设计和一些实施方面的事务。虽然很多人认为盛大是做游戏的公司,但我基本不涉及游戏产品的开发。

在开发技术方面,我03年出版过一本《Delphi源代码分析》。在工程方面,《大道至简——软件工程实践者的思想》一书在下月初就应出版了,它的第一版是以电子版的形式发布的。我在写的第三本书则是讲计算机语言的,题材是“动态函数式语言”。

2,您做为盛大网络的架构师,请介绍一下在软件项目中平台架构师是一份怎样的角色?主要处理哪些工作?
================

架构师有很多种。很多人把体系架构师与架构师等同,其实不对。各类架构师基本素质要求大抵一致,例如分析能力、设计的技术方法,以及对设计目标的前瞻性。但是他们的专业素质会有一些差别。举个实例来说,如果让我设计游戏引擎的架构,我就会做不好。但是,如果这个游戏引擎要设计成一个独立的平台层次,具有语言无关性、平台整合能力,或是对不同类型游戏的统一支撑,那么就是平台架构师的职责了。

具体来说,平台架构师会决策某个部分与其它部分的相互关系、界面的规约和检测评估它们的方法。如果一个游戏引擎只为某个游戏而设计,那么是用不到平台架构师的。但如果A游戏中的引擎要移植到B游戏,或者更多的游戏,甚至只是抽离它的部分,以作为某种体系中的一个数据交互层,那么就需要平台架构师来考量技术上的可行性、稳定性以及它对于更大范围内的平台建设的价值——当然,如果没有价值,架构师也会否定它。

平台是长期建设的。平台架构师的重要职责之一,就是长期的规划和持续的推进。所以平台架构师的工作总是伴随客户的战略决策的。如果一个设计只是解决短期的技术问题,那么也并不需要平台架构师,但如果是几年或十几年要在上面持续经营的一个整体方向,那么平台架构师就需要围绕战略来设计架构的蓝图,并决定规划的实施步骤。在这些方面,他可能需要协调很多团队一些来工作。不过,这可不是跟项目经理抢饭碗。因为项目经理重在实施,而架构师重在规划。

当然,事实上我也做一些其它类型的架构设计工作。例如设计一个小的模块,或者一个业务工件。好的架构师不会拒绝这些工作,而是从更多的、细节的工作中发现整体与局部的关系。也只有触及到具体工作的细节,架构师才可能更早地发觉设计上的隐患或者与目标的偏差。

3,《人月神话》这本书30多年来一直被认为是项目管理者的必读书,最近也看到您的blog里写了一系列相关的书评。您是怎么看到书中“项目实施法则“和实际项目工作之间的关系。
================

这几个问题我基本上都在《杀不死的人狼》一文中讲过了。概括来说,我认为有以下三点:

一、讨论“有或没有”银弹这样的话题没有意义,因为《人月神话》所述的人狼根本杀不死,而且Brooks所设想的银弹也过于学术。
二、《人月神话》从广义工程的角度设定了这个命题,这个命题的根本目标与次要目标正好与具体工程(狭义工程)相反。
三、我承认《人月神话》神话所述的答案以及建议在如今的软件工程中得到了体现。但我们应该更清醒地辨析出现象、答案与本质,并分析哪些是本质的自然延伸,而哪些只是《人月神话》所带来的影响——Brooks预言了未来,也就改变了未来,即使未来未必应该如此。


与大多数人不一样的是,我更多的是从与Brooks的预言不一致的那些现象是去发现一些东西。我所看到的是,正是在改变了Brooks的命题,或者认识到他所述的“本质”未必正确的时候,我们才找到了一些“不一样的成功”。我提醒大家关注这些事例,以及它们与传统工程、广义工程的本质差异。

我并不反对《人月神话》中的大多数工程观点,以及我们现在的软件业中的工程实践经验。但是狭义工程没有必要去追寻银弹或那些看起来看银弹的东西,我们应该更加灵活。

4企业在进行项目的软件架构设计时,需要考虑哪些关键的问题?
================

企业实施过程中的架构问题,可以分成两个部分来考虑。一个是软件企业自身,一个是工程的目标客户(有些时候它与前者一则)。基本上来说,架构设计首先是面向客户的,甚至在整个工程的绝大多数时候都面向客户。因为理解决定设计,所以让架构师尽可能早地、深入地了解工程目标、应用环境、战略决策和发展方向,是至关重要的。否则,架构师是不可能做出有效的设计来的。

架构设计关注于三个方面:稳定、持续和代价。

稳定性由架构师的设计能力决定。架构的好坏是很难评判的,但基本的法则是“适用”。如果一个架构不适用,那么再小或者再大都不可能稳定。所因此进一步推论是“架构必须以工程的主体目标为设计象”。看起来这是个简单的事,但事实上很多架构设计中只是在做边角功夫,例如为一两处所谓的“精彩的局部”而叫好,全然不顾架构是否为相应的目标而做。

持续性由架构师的地位决定。如果不能认识“设计的一致性”,以及架构师对这种一致性的权威,那么再好的架构也会面临解体,再长远的架构也会在短期内被废弃。架构的实施是要以牺牲

自由性为代价的,架构师没有足够的地位(或权威),则不可能对抗实施者对自由的渴望。通常的失败,并在于架构的好或坏,而是架构被架空,形同虚设。

代价的问题上面有过一点讨论,但方向不同。这里说明的是,如果架构师没有充分的经验,不能准确评估所设计的架构的资源消耗,那么可能在项目初起便存在设计失误;也可能在项目中困于枝节,或疏离关键,从而徒耗了资源。这些都是架构师应该预见、预估的。

对于企业设计来说,上面三个方面没有得到关注的结果就是:迟迟无法上线的工程、半拉子工程和不停追加投资的工程项目。我不否认项目经理对这些问题的影响,但事实上可能从设计就开始出了问题,而项目经理只是回天乏术罢了。

最后说明一下,我认为目前大多数的企业项目都缺乏架构上的考量。大多数软件公司只是出于自身的需要(例如组件化和规模开发)而进行架构设计。这样的设计不是面向客户的,事实上这增加了客户投资,而未能给客户项目产生价值。这也是我强调架构面向客户的原因之一。

5 目前,你的团队在使用什么样的产品或者方法来进行软件架构设计?
================


架构设计的主要输出是文档,因而并没有什么特别的工具来帮助你做架构设计。很多工具是辅助分析的,例如MindMananger;另外一些则可能辅助你表述,例如Together和Rose。

大多数技术出身的架构师会仅把“软件编写的东西”才称为工具。其实不然,会议室里的那面白板也是我的工具之一。放开思路,市场规划图、技术架构路标图、特性/收益规划图等等这些图表也是我们的工具。除开这些之外,模式语言和建模语言也是主要的、形式化的工具。

我经常按RUP的规范写文档,也偶尔放弃其中的某些具体格式。这些既有的文档模板也是工具。当然,毋庸置疑的是这样的工具也包括WORD和PowerPoint——很多人并不知道,我有1/4的设计是先用PowerPoint/Visio来完成的。

具体到方法,则非常多了,但应用哪一种则与场景有关。不过最先做的则是分层,这与自顶向下的结构分析很象——事实上在分析和设计的最初阶段,这种方法几乎是必须的。

6,您觉得国内外软件架构设计这个环节的主要不同在哪里?
================


正如你这个问题所表现出来的一样:我们太注重于工程环节的某个局部。

国外软件行业在工程实践经验上已丰富得多,因此大多数程序员、项目经理或测试人员等等对工程的理解也深刻得多。他们并不自恃于当前的环节,也不否认其它环节。这意味着在整体实施

中大家更容易达成一致。然而国内的软件工程则很少强调这种合作,项目经理强调管理,程序员强调技术,架构师强调一致性和持续性,测试人员则很开心的看到每一个错误并以及数量作为评核依据。

显然这里出了问题:我们的合作环节在各自为战。大家都在强调自己的重要性,于是工程就没法做了。解决的法子,还是让大家都意识到对方工作的目标与职责,而不仅仅是了解自己的那个小圈子。

7,可以介绍一下你目前的Qomo项目吗?我们的网友该如何参与?
================

Qomo(Qomolangma OpenProject)是一个JavaScript上的开源项目。目前Qomo 1.0正式版已经发布了。Qomo V1以语言补实为基本思想,在JavaScript上扩展了AOP、OOP、IOP和GP等编程方法,基于它自身的完备的实现,Qomo也提供了Builder和Profiler工具和相关的库。

Qomo V1只是整个Qomolangma OpenProject构想中的一很小一部分——尽管它重要。Qomo项目提出的整体目标是:
 -Qomo内核是足够强大的能应用在不同的JavaScript宿主环境下的通用扩展。
 -Qomo有能力提供胶合不同的应用环境下功能需求的中间代码。
 -Qomo可以作为定制的宿主应用的代码包的一个部分以提升应用的体验或局部性能。

所以Qomo V1并不完备。即便是我们正在展开的Qomo V2,也并不完备。V2计划提供组件库、数据库存取层和图形表现层。此外,Qomo V2也打算启用数个实践项目,一方面作为Qomo的范例,另一方面也验证Qomo的设计。

Qomo已经在sourceforge上注册过,但在那里表现并不活跃。你可以总是从我的blog上得到Qomo的最新消息,包括Qomo的计划与每个版本发布。至于参与这个项目,请发mail给我。

我的联系方式(mail/msn/gtalk): aiming@gmail.com

与本访谈相关的信息:

“新手的开源之路”
http://blog.csdn.net/aimingoo/archive/2006/01/27/589274.aspx

Qomolangma.V1.0的发布说明
http://blog.csdn.net/aimingoo/archive/2007/02/06/1503015.aspx

杀不死的人狼——我读《人月神话》
http://blog.csdn.net/aimingoo/archive/2007/03/12/1526396.aspx

分享到:
评论

相关推荐

    0分重发:ListBox删除多个选择项目示例

    -----不好意思,取消资源分后重发,内容一样-------- ListBox的一个非常简单的例子,主要介绍同时删除多个选择项目的方法。 用ListBox.Items.Remove()方法删除一个item后,其items集合和SelectedItems集合都会...

    阿里重发大师(国际版)

    强盛的信息重发:具有强盛的商机信息重发功能,支持多网站、多帐号同步重发,多线程、多任务批量生发功能。  灵活设置重发时间:可以任意设置每条信息的重发时间。更精准重发商机信息,更有效的晋升信息排名。  ...

    信息重发助手第一部分

    信息重发助手是一款针对诚信通会员、慧聪网站和阿里国际站的自动重发软件,本重发软件解除了您每天登陆网站,重发信息的苦恼,任意一条信息都可以随意定时重发,信息重发成功率接近100%,从而达到提高信息排名的目的...

    App架构接口的设计.pdf

    App架构接口的设计.pdf 本资源主要介绍了App架构接口的设计,涵盖了大数据框架Hadoop和Apache Spark的异同,数据分析和处理的方式,以及RESTful架构在App接口设计中的应用。 知识点1:Hadoop和Apache Spark的异同 ...

    阿里产品信息重发助手

    阿里重发助手,是针对阿里巴巴中国站诚信通会员的一款产品重发,提高产品排名的软件。重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天中,设置...

    MCU初学者Uart串口操作入门程序参考-重发/超时/ACK等

    本文将通过“MCU初学者Uart串口操作入门程序参考-重发/超时/ACK等”这一主题,深入探讨Uart串口的基础知识,以及如何在实际编程中实现重发、超时和ACK确认机制。 1. **串口通信基础**: - **UART工作原理**:UART...

    Alifresh信息重发助手 v1.5.3

    信息重发助手是一款针对诚信通会员、慧聪网站和阿里国际站的自动重发软件,重发软件解除了您每天登陆网站,重发信息的苦恼,任意一条信息都可以随意定时重发,信息重发成功率接近100%,从而达到提高信息排名的目的。...

    阿里巴巴信息重发排名

    阿里信息重发,是针对阿里巴巴中国站诚信通会员的一款产品重发,提高产品排名的软件。重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天中,设置...

    阿里巴巴诚信通信息重发器

    阿里巴巴信息自动重发器,是针对阿里巴巴中国站诚信通会员的一款产品重发,提高产品排名的软件。重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天...

    营销软件 诚信通重发助手 带注册机

    【诚信通重发助手】是一款专门针对阿里巴巴诚信通会员设计的营销工具,旨在提升商家的产品信息更新效率,增强在线商品的曝光度。该软件的主要功能是帮助用户定期、批量地重新发布产品信息,以保持商品在搜索结果中的...

    阿里巴巴信息重发排名大师

    阿里重发排名大师,是针对阿里巴巴中国站诚信通会员的一款产品重发,提高产品排名的软件。重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天中,...

    阿里巴巴信息重发助手

    共找到 122122 条 玻璃瓶 供应信息 如果一旦排名靠后,意味着本企业被买家搜索到的机会很少,排名固然很重要了! 您只有不断的发送产品信息,才能让排名超前, 但在阿里上,相同的信息一天只能重发一次,对于这样,...

    佳鹰重发助手-阿里诚信通版

    本软件自采用多线程模拟手工重发技术,并根据阿里排名规则设定相应的重发时间和重发周期,使您的信息有好的搜索排名,本重发软件解除了您每天登陆网站,重发信息的苦恼,任意一条信息都可以随意定时重发,信息重发...

    重发中企网-OA

    4. **源码阅读与分析**:深入源码,了解OA系统的架构设计、数据处理机制、以及工作流引擎等关键部分的实现。 5. **系统集成**:探讨OA系统如何与其他企业应用(如ERP、CRM)集成,实现企业信息系统的整体优化。 6....

    序列号和TCP/UDP重发协议课件

    在计算机网络中,序列号和TCP/UDP重发协议是确保数据可靠传输的关键机制。滑动窗口协议是一种流量控制策略,用于管理数据在网络中的发送速率,以防止数据包的丢失、重复或乱序。 滑动窗口协议的工作原理是基于两个...

    EmojiChat聊天页面实现支持发送失败重发.rar

    - **用户体验**:设计友好的用户交互,如显示错误提示,提供重发按钮,并限制连续重发的频率,防止滥用。 - **后台服务**:考虑使用后台服务处理发送任务,避免阻塞主线程,保证应用的流畅性。 - **消息队列**:为了...

    阿里巴巴排名重发优化编辑软件

    软件包含阿里巴巴排名优化、信息优化、批量操作供求信息、批量快捷操作

    电信设备-一种拥有通信协议及重发机制的SPI通信装置.zip

    标题中的“电信设备-一种拥有通信协议及重发机制的SPI通信装置”表明了我们要讨论的是一个用于电信设备的SPI(Serial Peripheral Interface)通信系统,它具有特定的通信协议和重发机制。SPI是一种同步串行接口,常...

    组播通讯重发控制

    udp速度远大于tcp,很多地方还是选择了UDP;点对点已经有了RDUP与UDT。组播方面有RTPS协议(DDS的通讯协议),openpgm。但是没有源码。 根据开发的原理,做了简单的组播重发与分包。学习

Global site tag (gtag.js) - Google Analytics