这篇文是我在今天工作休息之余写下来的,乱侃侃,偷懒一下,呵呵。
首先,我的原本专业是电子信息科学与技术,所以对一些芯片级硬件和软件比较感兴趣,但我现在的工作是软件设计师,又对计算机软件有较深入的理解。闲暇之余,我喜欢看硬件相关的书籍,特别对计算机硬件比较痴迷。其实早在06年学习软件架构设计的时候,我就常乱想设计软件架构。这里说说,一部分中国人的特点,就是从模仿开始。火车不会造,先买别国的火车,然后研究,接着自己造,比买的便宜,搞得人家都不敢卖先进的东西给国人了。软件也一样,架构方面,先学习前人的经验,学习开源的架构特点,然后根据自己实际环境设计架构。(我这里完全没有贬低国人的意思,就是说说,自己有技术有一套做法,自己没技术有另一套学习和实践的做法)
先说说硬件,著名的Intel和AMD,还有IBM,都是计算机硬件的领跑者了。有时候他们会发布自己的硬件架构设计图,以及产品发布路线图等等。我就不自然的会多关注(老专业职业病吧),在看这些硬件架构图的时候,我会去分析,哪个是核心,哪个是缓存,哪个芯片组处理显示,哪个芯片组处理外存等,自己痴迷(没办法,我是硬件发烧友)。
再说说软件,且不说微软,也没办法,谁让咱也是靠他们的系统平台吃饭呢,怪不得盖茨在欧洲演讲时曾经叫嚣如果没有微软那有多少人失业,呵呵。还有就是开源社区的蓬勃发展。软件业的发展也算很迅猛了。目前基本上形成很多理论,包括软件工程(我没看过硬件工程的书籍,呵呵。),设计模式,架构设计等等,可谓是百花齐放了。
对比硬件和软件的架构设计,我就常想,其实所有的设计,无论是硬件,或者建筑学,还有制造业,还是软件,室内设计等等,它们的架构设计原理应该是一样的,应该是可以相互借鉴的,就象道理是相通的一样。
但是,软件业内一直没有形成一套统一的架构。而硬件却实现了统一架构,然后使用统一的外接独立的硬件设备来运行,即定义好了接口,所有外设都往上面靠拢。软件只形成了一套设计的理论,设计的模式,没有形成一套统一的系统。然则,实际情况中,往往很多系统都是在做重复的工作,即不同的企业,不同的业务领域,一再的重复着相同的应用系统设计开发。为什么软件业不能形成一套固定的架构呢?对比起来,一个原因估计是软件的需求是以业务为对象的,正是因为不同的业务产生了不同的各种各样的软件应用系统。
硬件有硬件的特点,软件有软件的好处。硬件离开软件是没有意义的,没有存在的价值。不过,我还是想设计一套统一的软件架构系统,虽然不少软件都提供了插件的功能,但我还是不满足,这个只是统一架构的冰山一角罢了。
从硬件的角度出发,硬件的架构设计,其更多的是考虑元器件的特性,依赖于元器件的更新换代来发展,而且同样依赖于组织定义的硬件接口规范。硬件的基础是元器件工艺,焊接工艺。然后是接口间的连接,通信,接口的规范。再有运行速度的提高,通讯速度的提高,存储容量的提高。硬件架构的设计,还要考虑热功耗,成本,复杂度等等。还有重要的一点,硬件的架构掌握在少数企业中,比如Intel这些领跑者了,而接口的规范,却掌握在一些临时联合起来的企业,比如惠普,索尼之流。
根据硬件的理论,只要提高了依赖基础对象,那么就能提高、促进更快的发展。软件的基础,按照以前的说法,就是算法+数据结构,面向过程,面向数据的开发方法。现今已逐步转变为面向对象,面向方法,面向服务的编程模式了。从这点出发分析,限制软件发展的不是编程语言,而是设计方法。不同的设计者,不同的水平,设计出来的系统就不同,架构也就不同。软件架构的设计,也要考虑成本,复杂度,稳定性,可靠性,重用性等等。软件的架构掌握在少数大型的软件企业,比如微软等,还有开源社区的辛勤的架构设计劳动者们。软件的接口规范,往往依赖于实际应用中的系统业务。
硬件已经实现了统一架构。那么,怎么样才能设计统一架构的软件系统呢?这里再说下,软件之所以是软件,因为它具有非常大的灵活性,如果象硬件那样统一了架构,那么可能就限制了它的发展。本文只从软件统一架构系统出发乱侃,暂且撇开这点限制。受限于目前的编程语言,设计模式,领域业务,这个想法能实现么?软件系统的根本,数据这个对象本身就是不一样的了。不过,有一点可喜的成果是,内容管理系统(CMS)的出现是一大进步。但是它也仅能适应那些单一、相对简单些的应用。比如建站系统,论坛等等,还是没有实现软件统一架构的思想。引擎这个概念的实现也是非常好的突破。根据理论相同的道理(我是这么认为的),以硬件设计的思想出发,统一架构的软件系统应该是一个浑身都是接口的产物。它需要一个运行引擎对象,需要数据总线接口对象,需要指令运行接口对象,需要一个存储对象,需要一个显示对象,需要多个数据交互接口对象,再有,就是这些对象之间通讯的处理对象等等了。这么个系统能造出来么?至少我目前的尝试有一定的困难(有进度,但进展相对缓慢),呵呵。
限于时间问题,本文只开个头,投石问路,后续想到什么再侃。大家对软件的统一架构思想有什么意见或建议,欢迎留言赐教,本人洗耳恭听。
Austin Liu 刘朝辉
Software Designer and Project Consultant
2009年8月27日星期四【牛】壬申月甲辰日己丑年七月初八