架构蓝图–软件架构 “4+1” 视图模型

架构蓝图–软件架构 “4+1” 视图模型

 

Philippe Kruchten, 高级技术专员

 

简介: 本文基于多个并发视图的使用情况来说明描述软件密集型系统架构的模型。使用多重视图允许独立地处理各”风险承担人”:最终用户、开发人员、系统工程师、项目经理等所关注的问题,并且能够独立地处理功能性和非功能性需求。本文分别对五种视图进行了描述,并同时给出了捕获每种视图的表示方法。这些视图使用以架构为中心的、场景驱动以及迭代开发过程来进行设计。

引言

我们已经看到在许多文章和书籍中,作者欲使用单张视图来捕捉所有的系统架构要点。通过仔细地观察这些图例中的方框和箭头,不难发现作者努力地在单一视图中表达超过其表达限度的蓝图。方框是代表运行的程序吗?或者是代表源代码的程序块吗?或是物理计算机吗?或仅仅是逻辑功能的分组吗?箭头是表示编译时的依赖关系吗?或者是控制流吗?或是数据流吗?通常它代表了许多事物。是否架构只需要单个的架构样式?有时软件架构的缺陷源于过早地划分软件或过分的强调软件开发的单个方面:数据工程、运行效率、开发策略和团队组织等。有时架构并不能解决所有”客户”(或者说”风险承担人”,USC 的命名)所关注的问题。许多作者都提及了这个问题:Garlan & Shaw        1、CMU 的 Abowd & Allen、SEI 的 Clements。作为补充,我们建议使用多个并发的视图来组织软件架构的描述,每个视图仅用来描述一个特定的所关注的方面的集合。


回页首
架构模型

软件架构用来处理软件高层次结构的设计和实施。它以精心选择的形式将若干结构元素进行装配,从而满足系统主要功能和性能需求,并满足其他非功能性需求,如可靠性、可伸缩性、可移植性和可用性。Perry 和 Wolfe 使用一个精确的公式来表达,该公式由 Boehm 做了进一步修改:

软件架构 = {元素,形式,关系/约束}

软件架构涉及到抽象、分解和组合、风格和美学。我们用由多个视图或视角组成的模型来描述它。为了最终处理大型的、富有挑战性的架构,该模型包含五个主要的视图(请对照图 1):

  • 逻辑视图(Logical View),设计的对象模型(使用面向对象的设计方法时)。
  • 过程视图(Process View),捕捉设计的并发和同步特征。
  • 物理视图(Physical View),描述了软件到硬件的映射,反映了分布式特性。
  • 开发视图(Development View),描述了在开发环境中软件的静态组织结构。

架构的描述,即所做的各种决定,可以围绕着这四个视图来组织,然后由一些用例 (use cases)或场景(scenarios)来说明,从而形成了第五个视图。正如将看到的,实际上软件架构部分从这些场景演进而来,将在下文中讨论。

图 1 - “4+1″视图模型 图 1 - "4+1"视图模型

我们在每个视图上均独立地应用 Perry & Wolf 的公式,即定义一个所使用的元素集合(组件、容器、连接符),捕获工作形式和模式,并且捕获关系及约束,将架构与某些需求连接起来。每种视图使用自身所特有的表示法-蓝图(blueprint)来描述,并且架构师可以对每种视图选用特定的架构风格(architectural style),从而允许系统中多种风格并存。

我们将轮流的观察这五种视图,展现各个视图的目标:即视图的所关注的问题,相应的架构蓝图的标记方式,描述和管理蓝图的工具。并以非常简单的形式从 PABX 的设计中,从我们在Alcatel 商业系统(Alcatel Business System)上所做的工作中,以及从航空运输控制系统(Air Traffic Control system)中引出一些例子―旨在描述一下视图的特定及其标记的方式,而不是定义这些系统的架构。

“4+1″视图模型具有相当的”普遍性”,因此可以使用其他的标注方法和工具,也可以采用其他的设计方法,特别是对于逻辑和过程的分解。但文中指出的这些方法都已经成功的在实践中运用过。

逻辑结构

面向对象的分解

逻辑架构主要支持功能性需求――即在为用户提供服务方面系统所应该提供的功能。系统分解为一系列的关键抽象,(大多数)来自于问题域,表现为对象或对象类的形式。它们采用抽象、封装和继承的原理。分解并不仅仅是为了功能分析,而且用来识别遍布系统各个部分的通用机制和设计元素。我们使用 Rational/Booch 方法来表示逻辑架构,借助于类图和类模板的手段        4。类图用来显示一个类的集合和它们的逻辑关系:关联、使用、组合、继承等等。相似的类可以划分成类集合。类模板关注于单个类,它们强调主要的类操作,并且识别关键的对象特征。如果需要定义对象的内部行为,则使用状态转换图或状态图来完成。公共机制或服务可以在类功能 (class utilities)中定义。对于数据驱动程度高的应用程序,可以使用其他形式的逻辑视图,例如 E-R 图,来代替面向对象的方法(OO approach)。

逻辑视图的表示法

逻辑视图的标记方法来自 Booch 标记法4。当仅考虑具有架构意义的条目时,这种表示法相当简单。特别是在这种设计级别上,大量的修饰作用不大。我们使用 Rational Rose? 来支持逻辑架构的设计。

图 2 - 逻辑蓝图的表示法 图 2 - 逻辑蓝图的表示法

逻辑视图的风格

逻辑视图的风格采用面向对象的风格,其主要的设计准则是试图在整个系统中保持单一的、一致的对象模型,避免就每个场合或过程产生草率的类和机制的技术说明。

逻辑结构蓝图的样例

图 3  显示了 Télic PABX 架构中主要的类。

图 3 - a. Télic PABX 的逻辑蓝图 b.空中交通系统的蓝图 图 3 - a. Télic PABX 的逻辑蓝图 b.空中交通系统的蓝图

PABX 建立终端间的通信连接。终端可以是电话设备、中继线(例如,连接到中央办公室)、连接线(PABX 专线到 PABX 线)、电话专线、数据线、ISDN 等等。不同的线路由不同的接口卡提供支持。线路 controller 对象的职责是在接口卡上对所有的信号进行解码和注入,在特定于接口卡的信号与一致性的小型事件集合之间进行相互转换:开始、停止、数字化等。controller 对象同时承载所有的实时约束。该类派生出许多子类以满足不同的接口类型。terminal 对象的责任是维持终端的状态,代表线路协调各项服务。例如,它使用 numbering plan 服务来解释拨号。conversation 代表了会话中的一系列终端 。conversation 使用了Translation Service(目录、逻辑物理映射、路由),以及建立终端之间语音路径的Connection Service 。

对于一个包含了大量的具有架构重要意义的类的、更大的系统来说,图 3 b 描述了空中交通管理系统的顶层类图,包含 8 个类的种类(例如,类的分组)。

进程架构

过程分解

进程架构考虑一些非功能性的需求,如性能和可用性。它解决并发性、分布性、系统完整性、容错性的问题,以及逻辑视图的主要抽象如何与进程结构相配合在一起-即在哪个控制线程上,对象的操作被实际执行。

进程架构可以在几种层次的抽象上进行描述,每个层次针对不同的问题。在最高的层次上,进程架构可以视为一组独立执行的通信程序(叫作”processes”)的逻辑网络,它们分布在整个一组硬件资源上,这些资源通过 LAN 或者 WAN 连接起来。多个逻辑网络可能同时并存,共享相同的物理资源。例如,独立的逻辑网络可能用于支持离线系统与在线系统的分离,或者支持软件的模拟版本和测试版本的共存。

进程是构成可执行单元任务的分组。进程代表了可以进行策略控制过程架构的层次(即:开始、恢复、重新配置及关闭)。另外,进程可以就处理负载的分布式增强或可用性的提高而不断地被重复。

软件被划分为一系列单独的任务。任务是独立的控制线程,可以在处理节点上单独地被调度。

接着,我们可以区别主要任务、次要任务。主要任务是可以唯一处理的架构元素;次要任务是由于实施原因而引入的局部附加任务(周期性活动、缓冲、暂停等等)。它们可以作为 Ada Task 或轻量线程来实施。 主要任务的通讯途径是良好定义的交互任务通信机制:基于消息的同步或异步通信服务、远程过程调用、事件广播等。次要任务则以会见或共享内存来通信。在同一过程或处理节点上,主要任务不应对它们的分配做出任何假定。

消息流、过程负载可以基于过程蓝图来进行评估,同样可以使用哑负载来实现”中空”的进程架构,并测量在目标系统上的性能。正如 Filarey et al. 在他的 Eurocontrol 实验中描述的那样。

进程视图的表示法

我们所使用的进程视图的表示方法是从Booch最初为 Ada 任务推荐的表示方法扩展而来。同样,用来所使用的表示法关注在架构上具有重要意义的元素。(图 4)

图 4 - 过程蓝图表示法 图 4 - 过程蓝图表示法

我们曾使用来自 TRW 的 Universal Network Architechure Services(UNAS0) 产品来构建并实施过程和任务集合(包扩它们的冗余),使它们融入过程的网络中。UNAS 包含 Software Architect Lifecycle Environment(SALE)工具,它支持上述表示方法。SALE 允许以图形的形式来描述进程架构,包括对可能的交互任务通信路径的规格说明,正是从这些路径中自动生成对应的 Ada 或 C++ 源代码。使用该方法来指定和实施进程架构的优点是易于进行修改而不会对应用软件造成太多的影响。

进程视图的风格

许多风格可以适用于进程视图。例如采用 Garlan 和 Shaw 的分类法1,我们可以得到管道和过滤器(Pipes and filters),或客户端/服务器,以及各种多个客户端/单个服务器和多个客户端/多个服务器的变体。对于更加复杂的系统,可以采用类似于 K.Birman 所描述的ISIS系统中进程组方法以及其它的标注方法和工具。

进程蓝图的例子

图 5 - Télic PABX 的过程蓝图(部分) 图 5 - Télic PABX 的过程蓝图(部分)

所有的终端由单个的 Termal process 处理,其中 Termal process 由输入队列中的消息进行驱动。Controller 对象在组成控制过程三个任务之中的一项任务上执行:Low cycle rate task 扫描所有的非活动终端(200 ms),将 High cycle rate task(10 ms)扫描清单中的终端激活,其中 High cycle rate task 检测任何重要的状态变化,将它们传递给 Main controller task,由它来对状态的变更进行解释,并通过向对应的终端发送消息来通信。这里 Controller 过程中的通信通过共享内存来实现。

开发架构

子系统分解

开发架构关注软件开发环境下实际模块的组织。软件打包成小的程序块(程序库或子系统),它们可以由一位或几位开发人员来开发。子系统可以组织成分层结构,每个层为上一层提供良好定义的接口。

系统的开发架构用模块和子系统图来表达,显示了”输出”和”输入”关系。完整的开发架构只有当所有软件元素被识别后才能加以描述。但是,可以列出控制开发架构的规则:分块、分组和可见性。

大部分情况下,开发架构考虑的内部需求与以下几项因素有关:开发难度、软件管理、重用性和通用性及由工具集、编程语言所带来的限制。开发架构视图是各种活动的基础,如:需求分配、团队工作的分配(或团队机构)、成本评估和计划、项目进度的监控、软件重用性、移植性和安全性。它是建立产品线的基础。

开发蓝图的表示方法

同样,使用 Booch 方法的变形,仅考虑具有架构意义的项。

图 5 - 开发蓝图表示方法 图 5 - 开发蓝图表示方法

来自 Rational 的 Apex 开发环境支持开发架构的定义和实现、和前文描述的分层策略,以及设计规则的实施。Rational Rose 可以在模块和子系统层次上绘制开发蓝图,并支持开发源代码(Ada、C++)进程的正向和反向工程。

开发视图的风格

我们推荐使用分层(layered)的风格,定义 4 到 6 个子系统层。每层均具有良好定义的职责。设计规则是某层子系统依赖同一层或低一层的子系统,从而最大程度地减少了具有复杂模块依赖关系的网络的开发量,得到层次式的简单策略。

图 6 - Hughes 空中交通系统(HATS)的 5 个层 图 6 - Hughes 空中交通系统(HATS)的 5 个层

开发架构的例子

图 6 代表了加拿大的 Hughes Aircraft 开发的空中交通控制系统(Air Traffic Control system)产品线的 5 个分层开发组织结构。这是和图 3 b 描述的逻辑架构相对应的开发架构。

第一层 和第二层组成了独立于域的覆盖整个产品线的分布式基础设施,并保护其免受不同硬件平台、操作系统或市售产品(如数据库管理系统)的影响。第三层为该基础设施增加了 ATC 框架,形成一个特定领域的软件架构(domain-specific software architecture)。使用该框架,可以在第四层上构建一个功能选择板。层次 5 则非常依赖于客户和产品,包含了大多数用户接口和外部系统接口。72 个子系统分布于 5 个层次上,每层包含了 10 至 50 个模块,并可以在其他蓝图上表示。

物理架构

软件至硬件的映射

物理架构主要关注系统非功能性的需求,如可用性、可靠性(容错性),性能(吞吐量)和可伸缩性。软件在计算机网络或处理节点上运行,被识别的各种元素(网络、过程、任务和对象),需要被映射至不同的节点;我们希望使用不同的物理配置:一些用于开发和测试,另外一些则用于不同地点和不同客户的部署。因此软件至节点的映射需要高度的灵活性及对源代码产生最小的影响。

物理蓝图的表示法

大型系统中的物理蓝图会变得非常混乱,所以它们可以采用多种形式,有或者没有来自进程视图的映射均可。

图 7 - 物理蓝图的表示法 图 7 - 物理蓝图的表示法

TRW 的 UNAS 提供了数据驱动方法将过程架构映射至物理架构,该方法允许大量的映射 的变更而无需修改源代码。

物理蓝图的示例

图 8 - PABX 的物理蓝图 图 8 - PABX 的物理蓝图

图 8 显示了大型 PABX 可能的硬件配置,而图 9 和图 10 显示了两种不同物理架构上的进程映射,分别对应一个小型和一个大型 PABX。C、F 和 K 是三种不同容量的计算机,支持三种不同的运行要求。

图 9 - 带有过程分配的小型 PABX 物理架构 图 9 - 带有过程分配的小型 PABX 物理架构
图10-显示了过程分配的大型PABX物理蓝图 图10-显示了过程分配的大型PABX物理蓝图

场景

综合所有的视图

四种视图的元素通过数量比较少的一组重要场景(更常见的是用例)进行无缝协同工作,我们为场景描述相应的脚本(对象之间和过程之间的交互序列)。正如 Rubin 和 Goldberg 所描述的那样6。

在某种意义上场景是最重要的需求抽象,它们的设计使用对象场景图和对象交互图来表示4。

该视图是其他视图的冗余(因此”+1″),但它起到了两个作用:

  • 作为一项驱动因素来发现架构设计过程中的架构元素,这一点将在下文中讨论。
  • 作为架构设计结束后的一项验证和说明功能,既以视图的角度来说明又作为架构原型测试的出发点。

场景的表示法

场景表示法与组件逻辑视图非常相似(请对照图 2),但它使用过程视图的连接符来表示对象之间的交互(请对照图 4),注意对象实例使用实线来表达。至于逻辑蓝图,我们使用 Rational Rose 来捕获并管理对象场景。

场景的例子

图 11 显示了小型 PABX 的场景片段。相应的脚本是:

1. Joe的电话控制器检测和校验摘机状态的变换,并发送消息唤醒相应的终端对象。

2. 终端分配一些资源,并要求控制器发出拨号音。

3. 控制器接受拨号并传递给终端。

4. 终端使用拨号方案来分析数字流。

5. 有效的数字序列被键入,终端开始会话。

图 11 - 本地呼叫的初期场景――阶段选择 图 11 - 本地呼叫的初期场景――阶段选择

视图之间的对应性

各种视图并不是完全是正交的或独立的。视图的元素根据某种设计规则和启发式方法与其他视图中的元素相关联。

从逻辑视图到过程视图

我们发现逻辑视架构有几项重要特性:

  • 自主性:对象是主动的、被动的还是被保护的?
    • 主动对象享有调用其他对象或其自身操作的主动权,并且当其他对象对其进行调用时,具有对其自身操作的完全控制权。
    • 被动对象不能主动调用任何操作,对其他对象调用自身的操作没有控制。
    • 被保护对象不能主动调用任何操作。但对自身的操作有一定的控制功能。
  • 持久化:对象是暂时的还是持久化的?它们是否会导致过程或处理器的终止?
  • 依赖性:对象的存在或持久化是否依赖于另一个对象?
  • 分布性:对象的状态或操作是否能被物理架构中的许多节点所访问?或是被进程架构中的几个进程所访问?

在逻辑视图中,我们认为每个对象均是主动的,具有潜在的”并发性”,即与其他对象具有”平行的”行为,我们并不考虑所要达到的确切并发程度。因此,逻辑结构所考虑的仅是需求的功能性方面。

然而,当我们定义进程架构时,由于巨大的开销,为每个对象实施各自的控制线程(例如,Unix 进程或 Ada 任务),在目前的技术状况下是不现实的。此外,如果对象是并发的,那么必须以某种抽象形式来调用它们的操作。

另一方面,由于以下几种原因需要多个控制线程。

  • 为了快速响应某类外部触发,包括与时间相关的事件。
  • 为了在一个节点中利用多个 CPU,或者在一个分布式系统中利用多个节点。
  • 为了提高 CPU 的利用率,在某些控制线程被挂起,等待其他活动结束的时候(例如,访问外部对象其他活动对象时),为其他的活动分配 CPU。
  • 为了划分活动的优先级(提高潜在的响应能力)。
  • 为了支持系统的可伸缩性(借助于共享负载的其他过程)。
  • 为了在软件的不同领域分离关注点。
  • 为了提高系统的可用性(通过 Backup 过程)。

我们同时使用两种策略来决定并发的程度和定义所需的过程集合。考虑一系列潜在的物理目标架构。以下两种形式我们可以任选其一:

  • 从内至外:
    由逻辑架构开始:定义代理任务,该任务将控制一个类的多个活动对象的单个线程进行多元化处理;同一代理任务还执行持久化处理那些依赖于一个主动对象的对象;需要相互进行操作的几个类或仅需要少量处理的类共享单个代理。这种聚合会一直进行,直到我们将过程减少到合理的较少数量,而仍允许分布性和对物理资源的使用。
  • 由外至内:
    从物理结构开始:识别系统的外部触发;定义处理触发的客户过程和仅提供服务(而非初始化它们)的服务器进程;使用数据完整性和问题的串行化(serialization)约束来定义正确的服务器设置,并且为客户机与服务器代理分配对象;识别出必须分布哪些对象。

其结果是将类(和它们的对象)映射至一个任务集合和进程架构中的进程。通常,活动类具有代理任务,也存在一些变形:对于给定的类,使用多个代理以提高吞吐量,或者多个类映射至单个代理,因为它们的操作并不是频繁地被调用,或者是为了保证执行序列。

注意这并不是产生最佳过程架构的线性的、决定性的进程;它需要若干个迭代来得到可接受的折衷。还存在许多其他方法,例如 Birman 等人5 或 Witt 等人7提出的方法。 确切的实施映射的方法不在本文的讨论范围,但我们以一个小的例子来说明一下。

图 12 显示了一个小的类集合如何从假想的空中交通控制系统映射至进程。

flight 类映射至一个 flight 代理集合:有许多航班等待处理,外部触发的频率很高,响应时间很关键,负载必须分布于多个 CPU。并且,航班处理的持久化和分布性方面都取决于 flight server,为了满足可用性,还是使用 flight server 的一台备份服务器。

航班的 profile 和 clearance 总是从属于某个航班,尽管它们是复杂的类,但它们共享 flight 类的进程。航班分布于若干其他进程,特别是对于显示和外部接口。

sectorization 类,为 controller 的权限分配建立了空域划分。由于完整性约束,仅能被一个代理处理,但可以与 flight 类共享服务器过程:更新得并不频繁。

location 和 arispace 及其他的静态航空信息是受到保护的对象,在几个类中共享,很少被更新;它们被映射至各自的服务器,分布于其他过程。

图 12 - 从逻辑视图到过程视图的映射 图 12 - 从逻辑视图到过程视图的映射

从逻辑视图到开发视图

类通常作为一个模块来实现,例如 Ada 包中可视部分的一个类型。密切相关的类(类的种类)的集合组合到子系统中。子系统的定义必须考虑额外的约束,如团队组织、期望的代码规模(通常每个子系统为 5 K 或 20 K SLOC)、可重用性和通用性的程度以及严格的分层依据(可视性问题),发布策略和配置管理。所以,通常最后得到的不是与逻辑视图逐一对应的视图。

逻辑视图和开发视图非常接近,但具有不同的关注点。我们发现项目规模越大,视图间的差距也越大。例如,如果比较图 3 b 和图 6,则会发现并不存在逐一对应的类的不同种类到层的映射。而如果我们考虑类的种类的”外部接口”-网关种类时,它的实现遍布若干层:通讯协议在第 1 层或以下的层,通用网关机制在第 2 层,而特定的网关在第 5 层子系统。

从进程视图到物理视图

进程和进程组以不同的测试和部署配置映射至可用的物理硬件。Birman 在 ISIS 项目中描述了详细的映射模式5。

场景主要以所使用类的形式与逻辑视图相关联;而与进程视图的关联则是考虑了一个或多个控制线程的、对象间的交互形式。

模型的剪裁

并不是所有的软件架构都需要”4+1″视图。无用的视图可以从架构描述中省略,比如: 只有一个处理器,则可以省略物理视图;而如果仅有一个进程或程序,则可以省略过程视图。  对于非常小型的系统,甚至可能逻辑视图与开发视图非常相似,而不需要分开的描述。场景对于所有的情况均适用。

迭代过程

Witt 等人为设计和架构指出了 4 个阶段:勾画草图、组织、具体化和优化,分成了 12 个 步骤7。他们还指出需要某种程度的反向工程。而我们认为对于大型的项目,该方法太”线性 化”了。在 4 个阶段的末尾,可用于验证架构的内容太少。我们提倡一种更具有迭代性质的方法,即架构先被原形化、测试、估量、分析,然后在一系列的迭代过程中被细化。该方法除了减少与架构相关的风险之外,对于项目而言还有其他优点:团队合作、培训,加深对架构的理解,深入程序和工具等等(此处提及的是演进的原形,逐渐发展成为系统,而不是一次性的试验性的原形)。这种迭代方法还能够使需求被细化、成熟化并能够被更好地理解。

场景驱动(scenario-driven)的方法

系统大多数关键的功能以场景(或 use cases)的形式被捕获。关键意味着:最重要的功能,系统存在的理由,或使用频率最高的功能,或体现了必须减轻的一些重要的技术风险。

开始阶段:

  • 基于风险和重要性为某次迭代选择一些场景。场景可能被归纳为对若干用户需求的抽象。
  • 形成”稻草人式的架构”。然后对场景进行”描述”,以识别主要的抽象(类、机制、过程、子系统),如 Rubin 与 Goldberg6 所指出的 ―― 分解成为序列对(对象、操作)。
  • 所发现的架构元素被分布到 4 个蓝图中:逻辑蓝图、进程蓝图、开发蓝图和物理蓝图。
  • 然后实施、测试、度量该架构,这项分析可能检测到一些缺点或潜在的增强要求。
  • 捕获经验教训。

循环阶段:

下一个迭代过程开始进行:

  • 重新评估风险,
  • 扩展考虑的场景选择板。
  • 选择能减轻风险或提高结构覆盖的额外的少量场景,

然后:

  • 试着在原先的架构中描述这些场景。
  • 发现额外的架构元素,或有时还需要找出适应这些场景所需的重要架构变更。
  • 更新4个主要视图:逻辑视图、进程视图、开发视图和物理视图。
  • 根据变更修订现有的场景。
  • 升级实现工具(架构原型)来支持新的、扩展了的场景集合。
  • 测试。如果可能的话,在实际的目标环境和负载下进行测试。
  • 然后评审这五个视图来检测简洁性、可重用性和通用性的潜在问题。
  • 更新设计准则和基本原理。
  • 捕获经验教训。

终止循环

为了实际的系统,初始的架构原型需要进行演进 。较好的情况是在经过 2 次或 3 次迭代之后,结构变得稳定:主要的抽象都已被找到。子系统和过程都已经完成,以及所有的接口都已经实现。接下来则是软件设计的范畴,这个阶段可能也会用到相似的方法和过程。

这些迭代过程的持续时间参差不齐,原因在于:所实施项目的规模,参与项目人员的数量、他们对本领域和方法的熟悉程度,以及该系统和开发组织的熟悉程度等等。因而较小的项目迭代过程可能持续 2-3 周(例如,10 K SLOC),而大型的项目可能为 6-9 个月(例如,700 K SLOC)。

架构的文档化

架构设计中产生的文档可以归结为两种:

  • 软件架构文档,其结构遵循”4+1″视图(请对照图 13,一个典型的提纲)
  • 软件设计准则,捕获了最重要的设计决策。这些决策必须被遵守,以保持系统架构的完整性。                                      图 13 - 软件架构文档提纲 图 13 - 软件架构文档提纲

回页首

结束语

无论是否经过一次本地定制的和技术上的调整,”4+1″视图都能在许多大型项目中成功运用。事实上,它允许不同的”风险承担人”找出他们就软件架构所关心的问题。系统工程师首先接触物理视图,然后转向进程视图;最终用户、顾客、数据分析专家从逻辑视图入手;项目经理、软件配置人员则从开发视图来看待”4+1″视图。 在 Rational 和其他地方,提出并讨论了其他系列视图,例如 Meszaros(BNR)、Hofmeister。Nord 和 Soni(Siemenms)、Emery 和 Hilliard(Mitre),但我们发现其他视图通常可以归入我们所描述的 4 个视图中的一个。例如 Cost&Schedule 视图可以归入开发视图,将一个数据视图归入一个逻辑视图,以及将一个执行视图归入进程视图和物理视图的组合。

表 1 - “4+1″视图模型一览表 表 1 - "4+1"视图模型一览表


回页首

致谢

“4+1” 视图的诞生要归功于在Rational、加拿大的 Hughes Aircraft、Alcatel 以及其他地方工作的同事。笔者特别感谢下面这些人的贡献: Ch. Thompson、A. Bell、M.Devlin、G. Booch、W. Royce、J. Marasco、R. Reitman、V. Ohnjec、E. Schonberg。

参考资料

  1. D. Garlan & M. Shaw, “An Introduction to Software Architecture,” Advances in Software Engineering and Knowledge Engineering, Vol. 1, World Scientific Publishing Co. (1993).
  2. D. E. Perry & A. L. Wolf, “Foundations for the Study of Software Architecture,” ACM Software Engineering Notes, 17, 4, October 1992, 40-52.
  3. Ph. Kruchten & Ch. Thompson, “An Object-Oriented, Distributed Architecture for Large Scale Ada Systems,” Proceedings of the TRI-Ada ’94 Conference, Baltimore, November 6-11, 1994, ACM,p.262-271.
  4. G. Booch: Object-Oriented Analysis and Design with Applications, 2nd. edition, Benjamin-Cummings Pub. Co., Redwood City, California, 1993, 589p.
  5. K. P. Birman, and R. Van Renesse, Reliable Distributed Computing with the Isis Toolkit, IEEE Computer Society Press, Los Alamitos CA, 1994.
  6. K. Rubin & A. Goldberg, “Object Behavior Analysis,” CACM, 35, 9 (Sept. 1992) 48-62
  7. B. I. Witt, F. T. Baker and E. W. Merritt, Software Architecture and Design-Principles, Models, and Methods, Van Nostrand Reinhold, New-York (1994) 324p.
  8. D. Garlan (ed.), Proceedings of the First Internal Workshop on Architectures for Software Systems, CMU-CS-TR-95-151, CMU, Pittsburgh, 1995.

 

原文出处 :

架构蓝图–软件架构 “4+1” 视图模型 : http://www.ibm.com/developerworks/cn/rational/r-4p1-view/

 

.Net Framework 中相关技术简介

Windows Workflow Foundation(WF):工作流引擎,基于工作流的开发使程序的业务逻辑与代码相分离,从而可以大大提高软件开发的效率。

Windows Communication Foundation(WCF): 用于实现应用程序间(包含不同语言开发的程序)通信的技术,WCF构建在SOAP协议之上。

Windows Presentation Foundation(WPF): 集成WebForm与WinForm于一体的界面开发方案

WPF的全称是Windows Presentation Foundation,是微软新发布的Vista操作系统的三大核心开发库之一,其主要负责的是图形显示,所以叫Presentation(呈现)。
作为新的图形引擎,WPF是基于DirectX的,当然增加了很多新的功能。其2D和3D引擎的强大看看Vista的界面就明白了,再加上其对Aero图形引擎的支持,更加让你刚到神奇。顺便提一下,Aero是专门为3D桌面开发的引擎,可以让桌面实现神奇的3D翻转,这绝对是操作系统有史以来的一次神奇尝试,虽然对硬件配置的要求也是惊人的,此前已有相关报道称,Vista对显卡十分挑剔就是出于运行Aero的考虑。

P.S. : WPF就是所谓下一代Windows界面层技术,就算是winform的下一代吧。

Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。WCF为服务提供了运行时环境(Runtime Environment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使用服务。理论上讲,创建服务并不一定需要WCF,但实际上,使用WCF却可以使得创建服务的任务事半功倍。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。

P.S. : 它整合了.Net平台下所有的和分布式系统有关的技术,例如ASP.NET Web服务(ASMX)、增强Web服务扩展(WSE)、.Net Remoting、企业服务(Enterprise Service)和微软消息队列(MSMQ)。你就先把它想成Web Service的下一代也没什么问题。

LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

继续阅读“.Net Framework 中相关技术简介”

附录: 大学十年 (林锐)

摘自<<软件工程思想>>  附录: 大学十年
作者:林锐

 

写此文使我很为难,一是担心读者误以为我轻浮得现在就开始写自传,二是担心朋友们误以为我得了绝症而早早留下遗作。
不论是落俗套还是不落俗套地评价,我在大学十年里都是出类拔萃的好学生。并且一直以来我对朋友们和一些低年级的学生们都有很大的正面影响。这 十年是一个从幼稚到成熟的过程,交织着聪明与蠢笨、勤奋与懒散、狂热与怯懦、成功与失败。做对了的事可树立为榜样,做错的事可挂作为警钟。我写下经历与感 受,期望以此引导和勉励无数比我年轻的学生们。我资历尚浅,既没有哲学家的深遂,也没有诗人的风华,不足以堂皇地育人,只能讲一些故事以表心愿。

我出生在1973年的春节,属牛,是“牛头”。父母为我起了很好听的名字叫“林锐”。这暗示着上天对我别有用心,将降大任于我,可是这时候上 帝去了一趟厕所。天堂与人间的时差如此之大,就在上帝大小便的几分钟内,我混混沌沌地度过了童年和少年,天才因此成为凡人。我小时候生长在浙江黄岩的偏僻 山区。父母都是中学教师,由于山区师资缺乏,父母经常要从一个山头调到另一个山头教学。我换读过的小学的数目比我的年龄还大,没有伙伴,也没有家的概念。 我就象活在货郎担里的小鸡,缩成一团,在高兴或恐惧时至多“啾”“啾”地叫几声。我在读小学与初中的8年里,既不聪明活泼,也不调皮捣蛋,确切地说象块木 头,简直是我名字的反义词。在学习上我没有受过一次表扬,也没有任何值得留念的人或事。唉,无论我现在多么努力都已无法追回失去的8年金色年华,好心痛!
我草草地并且稀里糊涂地在13岁时从初中毕业,无处可去。这下我发慌了,开始渴望学习。我灰溜溜地离开山区,可怜巴巴地到一个比较好的乡下中 学重读初三。我勤快得早晨4:30就起来读英语,脑袋似乎也被吓开窍了,“数理化”学得很好,并且生平第一次在物理考试中得了满分。当我“再一次”从初中 毕业时,我以全校第一的成绩考入了黄岩中学读高中。
黄岩中学分农村班与城市班,我当然是农民阶级。“阶级区别与歧视”对我是相当有促进作用的。我连任了几年的卫生委员,星期六和星期天同学们习 惯地把活留给我,我这小官当得有滋有味。《物理》学得极好,有一种直觉帮我快速准确地解题,常常是老师刚把题目写完我就报出答案来。上物理课时我没法讲废 话,因为我一开口就是标准答案。
可惜我的文科成绩极差。那时期盛传“学好数理化,走遍天下都不怕”,我们年少不懂事,糟踏了学文科的好时光。我写作文的最高目标就是不逃题, 考试前我总是反复祈祷:我没干过坏事,保佑我作文不逃题吧!历史考试时填写“任课老师某年某月某日在我家乡英勇就义”,比谁的成绩更接近零分。更让我沮丧 的是,这些行径都不是我发明的,我顶多是个跟屁虫而已,一点回忆的自豪感都没有。我现在认为文科教育实质是素质教育,如果素质不高,男孩再聪明也难以成大 器,当然也难以吸引好女孩。
高考时我语文得了54分(是班里的中上水平),总分只比重点线高十几分。我不敢报考好地方,只好选择内地。选来选去觉得西安与成都两个城市还 不错,我拿把尺子在地图上一量,发现我家乡离西安的直线距离较短,于是就选了西安。老师们只听说过西安交通大学比较有名气,但谁也不了解。我以为在西安交 通大学是学习开火车、开轮船的,尽管我也很渴望能开车开船,但考虑到自己的身材单小,就忍痛割爱了。我觉得西安电子科技大学的名字很好听,符合我做科学家 的梦想,于是就报考西安电子科技大学(以下简称西电)技术物理系。
上帝精神拌擞地从厕所回来,发现我已经上大学。也许他原先想把我安排在清华或者北大的,但事已至此,干脆也就撒手不管了。他这一偷懒反而是好事,我在读大学的十年中自由发展,成了卓而不群的学生。

刚进西电,首先吸引我的是麻雀和馍。那麻雀滚圆滚圆的,简直是会飞的肉弹。它们不怕人,成堆聚集吵闹,常让我误以为是没有人管教的一群小鸡。 那馍又白又大,既不放盐也不放糖,既不象馒头也不象包子。馍凉了后贼硬,据说有同学被楼上扔下的半块馍砸中脑袋,当场长出一个“肉包子”。最好笑的是人们 把“馍夹肉 ”叫成“肉夹馍”,那东西实在好吃。
西电原是军校,作风严谨,校园并不华丽,生活有些单调。尽管我来自山清水秀的地方,可我的确喜欢西电的粗犷与憨厚。有一天我看到一个新生写的 很肉麻的赞美西电的大字报,有一句是“我踏上了东去的列车”,我不禁笑掉牙。这一笑意味着“大个子欺负小个子”历史的结束,“小个子欺负大个子”新纪元的 开始。
上大学的第一个学期刚好碰上美国打伊拉克(“沙漠风暴”行动)。那时全国都在谈电子战,我们全校都是研究电子的,而且以军事应用为主。在那种气氛里,同学们都有很强的使命感,并且被鼓动得信心十足。
一日,系主任视察早读,偏偏有同学迟到。系主任喝问:“你为什么迟到了?”“因为我来迟了,”同学毫不含糊地回答,昂然入座。那时候的学生充满了理由。
我在班里年龄小个子也小,上课时就象猩猩堆里的猴子那么显眼。由于我们是物理系学生,第一学期的《普通物理》课程就显得非常重要。系副主任给 我们上课,他长得象叶利钦,口若悬河,板书极快。象在高中上物理课那样,我常在“叶利钦”刚写完题目时就报出答案。开头几次,“叶利钦”满脸疑狐地扫视我 们,好像是要抓住拔掉他自行车气门芯的那个捣蛋鬼。后来他在第一排发现了我,我俩乐得裂了嘴。课间休息时,“叶利钦”常坐在我旁边,乘他给同学们答疑时, 我就用笔拔弄他硕大无比的手指,在他指甲上涂点什么。
在第一学年,我就象乱草丛中的野花那样脱颖而出,倍受老师和同学们的关怀。就在我光荣到感觉屁股都能绽放光彩的时候,发现了令我胆战心惊的学 习缺陷——不会做实验。一进实验室,我就束手无策,浑身发抖。我相信大一的学生们都有虚荣心,为了维护“最聪明”这个荣耀,我完全可以掩盖、躲避甚至偷偷 地弥补实验能力的不足。我做了一件了不起的事:为了对抗虚荣的引诱,我夸大其辞地把“缺陷”告诉每一个我认识的人,让我没有机会欺骗自己。
聪明的人并不见得都有智慧,他可能缺乏“真实”这种品质。虽然我是在硕士毕业的时候才立下誓言——“做真实、正直、优秀的科技人员”,但我在18岁的时候就已经做到了“真实”,我必定一生保持。
第一年暑假回家,得到一个惊喜:家里竟然有了电路实验室!因为我常在信中鼓吹自己实验能力何等之差,“长此以往,下场将极为悲惨”。父母经不 起这种“恐吓 ”,当英语教师的父亲将半年的工资连同“私有财产”全部捐出,每周到很远的商品交易市场购买电子元件以及器材,在家里建立了实验室。父亲很威严,我从小就 怕他,但那个暑假我一点也不怕他。我们一起做实验,都从零学起,话不投机就用电烙铁“交流”,完全是同事关系。后来,我的兴趣转向了计算机,家里的实验室 就由父亲独掌,继续发扬光大。现在父亲修理电器的水平在家乡远近闻名,学生们都忘了他是英语教师。
母亲是数学教师,年轻时略有姿色,智力远胜我父亲。当她与他在山头的学校里相遇时,他一顿热情洋溢的饭菜就把她缴械了。我小时候家里很贫穷, 家就象一条飘荡的小船,父亲划桨,母亲掌舵。当我6岁上学时,母亲就说:“儿子啊,你将来只能靠笔吃饭而不能靠锄头吃饭。”小时候,母亲怕我变狡诈而不允 许我学下棋。尽管我在大学里已经相当出色,母亲来信总不忘叮嘱“德智体全面发展”。她常用独特的方式检查我:
(1)看我是否变胖。如果我胖了,表明我懒了。因为勤奋的人没有理由变胖。
(2)看我说话是否还快。如果我说话慢条斯理,表明我变笨了。因为脑子灵活的人没有理由说话不快。
我读博士研究生时,母亲的眉头才舒开。她经常在师生中发表自由言论:“儿子的智力与性格完全是我遗传的,他爸毫无半点功劳。”

本科第三学期的主要课程是电路分析。电路题目常常很滑稽,当你满头大汗地解完方程式时,答案往往是零。我归纳了不少公式用于简化计算,所以照样能在老师画完电路图时报出答案。学习是如此的轻松以致于我有太多的课余时间。在课余我常做两件有意思的事:
(1)我为学习较差的十几名同学办了补习班,给他们讲课,改作业,出考题。我就象老母鸡那样看护着一群小鸡,使班长、学习委员等班干部形同虚设。我这样做既提高了自己的表达能力,又帮助了同学。这事不是老师叫我干的,是我自己的主意。
(2)我经常在宿舍里焊接电子线路,技艺渐精。我曾花了两天时间,把磁带盒做成能发声、发光的精美礼物,乐颠颠地送给一个女孩子。可惜不久后我迷上了计算机,从此再也没亲手做过好玩的东西。
上大学以前我根本没见过计算机。在第四学期时我遇到了十年来最敬爱的老师周维真,从而对编程产生了强烈的兴趣。他教我们Fortran语 言,Fortran语言本身对我没有影响,影响我的是周老师高尚的师德以及他在教学和科研中的敬业精神。我从他那里学到的是怎样做人,怎样做事。
很多计算机系老师改作业时喜欢打“√”或打“×”了事。周老师不仅把作业里的错误都找出来,而且逐一评注“好在哪里”和“差在哪里”。为了不让周老师过于劳累,全系同学有一个约定:上课时不准吵闹,否则别来;作业必须清楚,否则别交;提的问题必须有质量,否则闭嘴。
Fortran语言期末考试,我的卷面成绩是97分,有个女同学考了99分。我当时官为课代表,想不到被一个女生超过,甚为沮丧。可是报到系里的成绩单 上,我的成绩是99分,那个女同学是97分。我以为周老师搞错了,跑去问他。周老师笑笑说:“你平时的学习表现,该得满分。不能因为考试中的一个失误而打 击你的积极性,所以给你加2分作为鼓励。而她一上机就束手无策,要让她知道考试成绩高并不表示已经学好了,扣她2分以示警告。你本来就是第一名。”这时又 跑来一个“查”成绩的同学,他得了59分,哀求周老师让他及格。周老师说:“你的试卷我看了好几遍,的的确确是59分。而你平时的学习表现也不会超过59 分。这一分不能加,否则我会害你一生。”在我这一级(90级),周老师至少为技术物理系教出两名软件高手——我和马佩军。我和马佩军读到硕士时已在软件方 面雄霸西电,计算机系学生毫无翻身之望。由于马佩军
不好名利,风头让我一人独得。我离开西电数年后,余威尚在。可惜我和周老师相处不到一年,他便调到北京信息工程学院。然而师恩的厚薄不在于时间长短,好的老师会让人想念、感激一辈子。

在上大学的前三个学期,学习如同表演,有趣而且轻松。自从第四学期学习了计算机课程,我就有了新的追求,我多么渴望拥有一台计算机,可以天天编程。如果挨一个巴掌能换取一分钟上机时间的话,我愿意每天挨1440个巴掌。如果非得加上一个期限不可,我希望是一万年。
我本科的专业是半导体物理,一二年级由系里负责教学,三四年级由微电子所负责教学。在第四学期末,我央求系里把我推荐到微电子所参加科研,贾 新章教授“收留”了我。我踏进微电子所的那一脚,让我从纯粹学习转向了科研,从“高分低能”转向了“低分高能”。我终于有了一台286电脑,那个暑假我就 睡在实验室里,时时刻刻守着它,深夜里我一个人冲着它发笑,一会儿盖上布,一会儿掀开布,一会儿摸摸它的“脸”,一会儿理理它的“辨子”。我很快地完成了 任务:设计一个“立方运算”的模拟电路,并且学会了C语言。
西电有个好传统,每年冬季举办一次全校性的“星火杯”学生科技作品竞赛。每届都有六七百件作品展示,低年级的学生看后无不热血沸腾,跃跃欲 试。我很希望能独立开发一套软件,参加本届“星火杯”竞赛。贾新章老师是研究集成电路可靠性的,见我如此热切,就让我开发“集成电路可靠性分析软件”。
我开始一边研究数值算法,一边设计软件。从炎热的8月份到发冷的十一月,几乎天天通宵编程,程序很快增长到一万多行。在离竞赛还剩一个月左右 的时候,出现了大量的问题。不仅程序老是出错误,而且发现原先的算法并不有效。此时已经没人能够“救”我。贾老师不会编程,不知道问题究竟出在程序上还是 出在算法上(实质上两者都有问题)。而那些懂软件开发的年青教师,实在看不明白我的上万行程序是如何组织的。他们只能悲伤地看着我挣扎。由于我经常逃课, 好学生变成了坏学生。系里意见极大,贾老师十分为难。不少老师和同学劝我赶紧“改邪归正”,放弃项目,不值得因小失大。当时我有个无法动摇的信念:如果放 弃一次,那么碰到下一个挫折时我就会继续放弃;如果坚持而成功,那么碰到下一个挑战时我会激励自己再取成功。
在压力面前,我依然坚挺。每当略有进展时,心里就一阵狂喜,但很快又会碰到新的困难,有时一坐就是20个小时。每天在喜悦的颠峰与苦恼的深渊 之间反复折腾。在竞赛前两天,我终于成功地完成了软件研发,结果获得软件与论文两个二等奖。这个荣誉本身不值得一提,并且我付出很重的代价——对物理专业 失去兴趣而彻底抛弃了它。但那时我才19岁,在极限状态下,我磨练了意志,使我日后充满激情。在本科四年级,我认识了微电子所的郝跃老师。他是数学博士, 是微电子所最有才华、最潇洒、最有领导风范的青年学者。我常去向他请教数学问题,他讲得意气风发,我听得如痴如醉。我俩一个月的“交流量”很多硕士花一年 时间也得不到。有一天,郝老师说:“你做我的学生吧。”我就毫不迟疑地从贾老师门下“跳槽”到郝老师门下。郝老师后来是我的硕士导师,他高兴时喜欢说: “好,很好,非常好!”我看着他升教授,
升博导,升副校长,师生两人分别在各自的阶层中名声显赫。
在三四年级,我的专业课程没有一门及格过。但由于微电子所的老师们已经认可了我,就把我的卷面成绩作为及格线,“水涨船高,水落船低”,我对 同学们的帮助莫大于此!如果要我考研究生,我绝对考不上。系主任安毓英觉得我将来很有前途,于是不顾别人反对,一锤定音让我免试读硕士研究生。

读硕士研究生时,我的科研条件相当好。导师十分开明,任我自由发展。我最喜欢做的事是设计图形用户界面和开发数据可视化软件。图形软件的最大 魅力是即便它毫无用处,你也可以自我欣赏。总有人担心“花很多精力、物力让界面那么漂亮,图形那么逼真是否值得?”这种问题不能强求别人与你一致。我当时 赞美女孩子的最高境界就是把她和我的图形软件相提并论。
我喜欢设计用户界面是因为自己有相当好的美感。在读本科时我模仿过六七个流行软件的界面。那时期大家编程都用Turbo C 2.0,我伪造了一个“Turbo C 2.6”。有个北大的博士生来实验室参观,看“Turbo C 2.6”后对我导师说:“郝老师,你们的工具比我们的先进多了”。
我常常向同学演示、卖弄自己开发的软件。觉得还不过瘾,就写了一篇名为“用户界面设计美学”的短文。凡是路过我实验室的同学都被我逮住,被迫 听完我得意之极的朗读,茫然者与痛苦者居多。不久我的朗读便所向披糜,闻声者逃之夭夭。这篇文章我6年后照搬到博士学位论文中,可见当初写时的确有所“超 前”。
我的研究工作基本上以集成电路的数值计算为主,数值计算产生的一堆数据常把我搞得晕头转向。我发现用图形来表征、解释数据可以让自己不再迷糊 下去,那感觉就象刚睡醒时冲凉水一样。我硕士学位论文中的软件就是用图形来仿真集成电路生产过程中“缺陷”对成品率的影响。我并不是在看了学术论文后才开 始研究可视化技术的,我是在做了工作后才发现那些好玩的技术叫做“可视化”。由于我肚子里头的确有货,在硕士一年级,我没有使用“剪刀”与“浆糊”(这是 很多人写书的法宝),只化了三个月时间就写完第一本著作《微机科学可视化系统设计》。
我在读硕士期间的工作强度与本科时的相当,但工作方式有很大不同。我有了明确的目标:(1)开发自主版权的软件产品;(2)培养做领导的才 能。这个目标可以通过团队工作,参加全国性大学生科技竞赛而实现。我在西电成立了“可视创意软件小组”,马佩军、戴玉宏、马晓宇是我的主要技术伙伴,帮手 很多。有几个漂亮的女生负责宣传(有一个长得像孟庭苇)。办公室里贴满了标语,如“创造性的事业要靠激情来推动”,“生于忧患,死于安乐”,“让春天消 失”。还有大幅的 “作战图”,倒计时牌。每个伙伴写了一张“军令状”放在机器上,我迄今还记录着那些纯真、活泼、充满激情的文字。那是多么艰苦而幸福的日子,夜里放震耳欲 聋的音乐、咬尖辣椒提神,有伙伴累得蹲在厕所里睡着了。
在1994年和1995年的冬季,我们的软件作品分别获中国大学生应用科技发明大奖赛二等奖和全国大学生“挑战杯”学术科技作品竞赛二等奖。 在西北地区,我们是“老大”。我成了西电学生的榜样,仰慕我的学生有一大批,我刚到浙大读博士时,收到一个西电计算机系学生的信,他说:“你走了,我呆在 西电没有意思,我准备考浙大的硕士生,你到哪里我就跟到哪里。”
在硕士毕业前,我在鉴定表上这样写道:“我热爱科技事业,如同热爱生命一样。近5年的科研工作带给我最充实的生活,也寄托着我美好的向往。可我同时也感到了痛苦,因为5年来我耳闻目睹科研中太多的弄虚作假。我发誓做一名真实、正直、优秀的科技人员,以正身自勉。”

我在西电度过了幸福的6年半,最让我牵肠挂肚的是“吃”、“友情”和“爱情”。当我第一次吃红红的和青青的辣椒时,“感动”得满脸是泪,那滋 味让我觉得前 17年白活了。我在读硕士时已经能自力更生,我开发的软件不仅竞赛获奖争了名气,而且还挣了钱(卖了二十多份软件,平均每份挣500元)。写书得稿费 7000元,那时我简直就是富翁。这些钱的小部分用来给女孩子买礼物,大部分用于和与哥儿们吃香的喝辣的。
我相信自己已经尝遍了西安的小吃,并且发现了一个“秘密”:最好吃的东西都在地摊上,最香的东西一定是辣的,最辣的东西一定是的。曾经沧海难 为水,我在浙大的三年里很少再吃辣椒,因为怕它玷污我心目中的辣椒。在我小时候,我爸很讨厌土豆(在困难时期他吃了太多的土豆),他竟然因此不让我吃土 豆。我哪敢跟他论理,于是忍啊忍,一直忍到我上大学“远走高飞”。如果说辣椒是我新交的女朋友,那么土豆就是我天生的命。我在西电经常用电炉(从来都没被 抓住过)做“以土豆为核心”的菜,天长日久,朋友们干脆叫我“土豆”。我吃饱土豆和辣椒后不免深思而感叹,人要是认认真真地吃,真的花不了多少钱,那些贪 官究竟是怎么吃掉巨款的?我将来怎么吃得掉自己挣来的钱?我在读中学与本科时,满头白发,脑袋可以当白炽灯泡用。当我硕士毕业再照镜子时,吓了一跳,白头 发不见了!我不知道究竟是哪种食物起的作用(估计是辣椒)。那些早生白发的小伙子们,你们就到西安上学吧。

马佩军是我在西电最早的朋友。刚入学时我们分到一个宿舍,他象国民党兵盘问良家妇女那样上下打量我,问:“喜欢干啥?”我怯生生地回答:“打 乒乓球。”他再问:“什么风格。”我答:“快球。”他突然象阎锡山那样怪笑,拍拍我的肩膀说,“好!我喜欢,以后你就是我的朋友。我是陕西人,农民,会开 拖拉机和卡车。这里是我的家,以后你有啥事,就对我吱一声。”
马佩军和我打乒乓球时口中念念有词:“哼!你对我狠,我对你更狠;你对我好,我对你更好。”他好几次说要把世上最好吃的板栗送给我一袋,这一 袋板栗我到现在都没拿到。马佩军夜里极能侃,吹他家乡的人跑得快,常把野兔追断气。有时他吹得太离谱,常令我们6个舍友群起而攻之。为了把我们一举歼灭, 他白天到图书馆查“资料”,夜里再挑起事端。双方就象印度与巴基斯坦,常干两个秃子争一把梳子的事。马佩军上大学前也没见过计算机,但他对计算机技术有极 强的领悟力。我们第一次上机时,他把我拉到打印机旁边说:“帮我防着管机房的,我要修理这台打印机 ”。还没等我反应过来,他就开始“肢解”打印机。我无比深刻地体会到:歹徒在作案时都不害怕,最提心吊胆的就是那个放风的。他在5分钟内修好了打印机,我 佩服得五体投地,甘愿下次再跟他干“坏事”。
我们读本科和硕士时主要用DOS操作系统,那时期病毒泛滥。马佩军杀病毒不用软件,用手杀。看他杀病毒简直是一种享受:噼里啪啦地敲一阵子汇编命令,然后机器就好了。求救电话太多,他经常无怨无悔地带着那双铁手游荡于西电各个角落,却不知道编写个杀病毒软件来赚钱。
我一直认为马佩军是西电编程第一高手,他编程的时候根本不是人,是指针。之所以我的名气大,一是因为他不好名利,二是我把他的程序写上了我的名字(并且卖了不少钱)。
马佩军的女朋友是我介绍的,我一眼就看出她将嫁给他。后来俩人果真结婚了,只是他嫁给了她,现在他还有了一只“小马驹”。硕士毕业后,马佩军 留在西电读博。前年我再见到他时,他说我害死他了,快乐得要宰了我。马佩军在西电已经呆了十年,禀承了西电所有的优点与缺点——“很土但结实耐用”。我在 西电时很土气,离开西电后变得“半土不洋”。马佩军简直就是西电人自己的“兵马俑”,每次看到他或者想起他时,我就明白自己的“根”还在西电。我喜欢陕西 人源于马佩军。

宋任儒是我们的班长,也是班里最早的党员,满口仁义之道,比唐僧还让人受不了。在二年级时,我迷上一个比我大一岁有了男朋友的女同学,多日沮 丧。他看在眼里痛在心里,跑去把那女同学教育了一通。苏联解体的时候他十分沉痛,在思想教育课上,他向我们作了深刻的检讨,好象是他没有管教好戈尔巴乔夫 那小子。最后他为我们点燃了希望:在不久的将来,“苏联”将重新成为苏联,共产主义旗帜将继续在全世界飘扬。
在本科三四年级,他对跳舞十分入迷,连上厕所都滑翔而去。我那时常把自己关在实验室里搞科研,极少有空与他玩乐,等到本科毕业时,猛地发现他 已经风度翩翩。宋任儒在读本科时学习既不好也不差,我们从来没有合作研究过什么。我喜欢他是因为他很有情趣,不落俗套,并且刚正不阿。也许,我俩本来就有 相似的秉性,只是表现不同而已。
本科毕业时,他分到威海工作,走之前我为他饯行。可在硕士开学时,我的房门被人一脚踢开,他对我喊了一声“林子啊,我又回来了”。我就象祥林嫂见到了被狼叼走的孩子那样惊喜。
宋任儒读硕士时被发配到临憧771所,他在那里过上了乐不思蜀的日子。有一天,他带来两个看上去很文静的女孩子(一个读硕士,一个读本科)来 串门。就在我洗水果的几分钟里,三个人已玩得乐翻了天,两个女孩满屋子追他,一会儿把他按到桌子上打,一会按到床上打。我惊诧至极而又羡慕至极,恨不得挨 打的人是我。想不到上学竟然会有这等欢乐,看来我读硕士的日子白过了。
后来,那个大一点的女孩子嫁给了他。当他带她去见公婆时,公公长叹一声:“把儿子交给你,我就放心了。”而婆婆已乐得合不拢嘴,竟然无法叹气。
现在,宋任儒已从复旦大学获得博士学位,比我更早地成家立业。他和她既是夫妻,又象兄妹,还象伙伴。他叫她“聪聪”,她叫他“笨笨”。
“聪聪”问“笨笨”:“老公啊,人活着为了什么?”
“笨笨”答:“就是让咱们每天快快乐乐。”
我亲眼看到的幸福莫过于此。

我在大二时曾为系里学习最差的十几名同学办了补习班,谢伟在这个补习班里名列倒数前茅。在他睡懒觉时,我象催命鬼那样喊他捅他。他无比吃力地抬起沉重的眼皮,就象软弱无力的举重运动员,还没有挺起来就趴下了。
他开始呻吟:“这一次就饶了我吧,下一次我一定,一定会去的,求你了。”我不肯。
“那么让我再睡5分钟,”他不死心。
我仍不同意。
“那么你就从1数到10,要慢一点,”他讨价还价。
当我数到9时,他就接着数9.1,9.2, 9.3 ……
一开始他觉得我很好玩,后来他就离不开我了。并不是因为我学习好,而是那时侯我天真并且充满活力。在三四年级我忙于科研时,他照顾我的生活, 叫我“少爷 ”,既做管家又做兄长。我们不仅共用饭菜票,并且共用仅有的一个碗,总是他买饭菜和洗碗。我们那一级的学生大多崇拜巨人公司的创始人史玉柱,我问谢伟:“ 我是不是和史玉柱一样能吃苦?”他说:“如果考虑年龄因素,你已经比他更能吃苦。你将来一定能做大事业,我就把希望寄托于你了。”
在我们都还不成熟的时候,我成了他心中的灯塔,只要灯不灭,希望就在。现在他为了娶一个日本姑娘,披荆斩棘追到日本,有了新的希望。二十几年来,我就为一个男人哭过,那时他本科毕业离校。

我读硕士研究生时,由于受我的影响,本系三四年级的学生蜂涌至微电子所参加科研。夜里看十二层高的科技大楼,灯火通明、热闹非凡的那一层就是微电子所。那时,我在微电子所学生中的地位仿佛伊拉克的萨达姆,手下兵将极多。
我写第一本书时,有好几个人帮我输入稿子,使我没时间慢腾腾地打草稿。我就象金庸写小说,有如神来之笔,想到那里就写到那里,写了一段他们马上输入一段,一气呵成。那本科技书写得很滑稽,同学们看得笑出眼泪,编辑看了拍案叫绝,只改了几个字就出版了。
那时侯我的心情是如此之好,为一男同学乱蓬蓬的头发写了一篇散文,并送他一把梳子。又把一女同学的实验报告写成评书。我的文笔大概就是这样练出来的。
这一群学生中,戴玉宏、史江一和马晓华是我最好的伙伴(我们都属于牛)。戴玉宏其貌甚帅,眉中有一根白毛闪闪发光,因此号称“白眉鹰王”。 “白眉鹰王”武功了得,是我软件产品的核心开发人员,我们合作最深最久。后来我开公司,他就从广州辞职到杭州为我助威,令我感动不已,可见读大学时期我们 有多铁!戴玉宏有一次打饱嗝,整整打了两天两夜,我差点心疼死。
我尚未发迹之日曾与戴玉宏在校园里卖花,无人问津,就请电子工程系的鲁洁救助。鲁洁温柔貌美,她一言一笑尤如春风吹拂苏堤的杨柳,令人心里一 荡再荡。顷刻间就有男生围观,有人看花,有人看“贵妃”,鲁洁一走,我和戴玉宏可怜得就象两根蜡烛。鲁洁读大学时调皮捣蛋,到四年级时还不太会编程。她的 本科毕业设计是仿真“雷达跟踪飞行物”,程序基本上全是我编写的。我已记不起用了什么公式,只知道每次计算后都弹出一个对话框“报告长官,击中目标”。鲁 洁毕业后到深圳的一家软件公司工作,几年一过,她成了行家。再与她交谈时,我只有听的份,象鸡啄米一样点头。
史江一和马晓华都是陕西人,和马佩军一样厚道热情。史江一性格稳重,属于“你办事我放心”的那类人。我对微电子专业一窍不通,全靠他帮我混过实验这一关。后来我开公司失败,陷入经济危机,就把希望工程的一个小孩托给了他。
马晓华是我最不放心的人。他常常为别人做事情,但热情过头就忘了自己的事情。有几个不道德的学生就利用他的这个缺点,经常使唤他,并且借他的 钱不还。马晓华喜欢为那些人“卖命”并且挨训,他总是在受虐待够了的时候再跟我们嘀咕,我们实在气不过,只好对着他的屁股追加一顿拳脚,并给他一个绰号 “受虐狂”。但愿他找个好老婆,我可以早日放心。
我们这一群小伙子同时喜欢上一个女孩子,她叫姜姗,是她班里的四大美人之一。我们不仅没有争风吃醋,而且心甘情愿地让她坐遍每个人的脖子。姜 姗小姐5岁时她爸姜晓鸿成了我的同事,我们经常一起去钓鱼,亲得象一家人。姜姗喜欢大喊大叫,声音高过帕瓦罗蒂,我们教唆她喊她爸“姜球球”。我常带姜姗 到小吃摊去吃女孩子不敢吃的东西,并哄她:“世上最好吃的东西是鸡屁股。”
她无师自通地加上一句:“世上最好听的屁是鸡放的屁。”
我常想着将来生个儿子并把他培养成天才,但如果能有姜姗这样的女儿,不要儿子也罢。

在本科三年级我第一次参加“星火杯”竞赛并获得软件二等奖后,马上成为低年级学生眼中的明星。我义务当上了一年级学生的上机辅导员。一天晚上我巡视机房,一女生请求帮助。
我见屏幕上空白一片,根本没有一行程序,十分疑惑地问:“什么问题?”
“没有问题。”她把书往我手上一塞说:“这些作业你帮我做。”然后就自个子跟她的同学玩乐,把我撇在一边,似乎我辛辛苦苦地学习就是为了给她做作业。
我定神对她细看,发觉她简直就是《射雕英雄传》里的黄蓉再世,顿时心就“突突突”直跳。当天晚上我没睡着,接下几天的课不知所云。在选修课《操作系统》考试时,我给家里写了一封超短信:请快寄钱来,我谈恋爱了。我交了白卷直奔她去。
我的初恋只有两个月,却让我思念了8年。她离我而去时没有任何理由,而我却失魂落魄。在我本科毕业前的18个月里,白天我狂热工作强作笑容, 夜深人静时心痛如刀割而无法抑制。没有人为我“疗伤”,我是硬挺过去的,这一段经历使我日后心理承受能力极强。后来我开公司的失败虽然对信心有所打击,但 根本无痛可言。
我们分手后并未成为陌生人,就象两只刺猬,离得远了就有点留恋,离得近了,就刺着对方。认识她时我虽然已略显才气,但并不具备成熟男人的魅力,很多事情我并不知道怎么去把握。有时“喜欢”并不能成为“爱”,感情也许是永远研究不透的学问。

我读硕士研究生时有了一群生机勃勃的朋友,感情的伤痛被淹没了。朋友堆里夹着一位女生,她文雅而富有气质。平日里无拘无束,大伙戏称她是我的 秘书。我的言行举止和穿着都经过她的调教,俩人出双入对,十分亲近,不知不觉有了感情。别人已经把我们当成恋人,我和她牵着小姜姗散步时,简直就象一家 人。
可是我当时着迷于事业,认为自己不久将干一番惊天动地的事。鉴于史玉柱在创业时就离过婚,所以我认为感情是事业的累赘,两者不可得兼。更糟糕 的是,我和第一个朋友藕断丝连,偏偏她俩是同班同学。我知道脚踩两只船没有好下场,可我的的确确同时喜欢着两个人,并梦想她俩能合二为一。我情愿被人指 责,也不愿掩饰真实的感觉。有时她俩一同走过,我站在路上丢了魂似的看着俩人的背影,任凭看热闹的人指指点点。
我和第二个朋友已经有了很深的感情,她毕业后我曾坐火车千里送鲜花给她,让她感动过。而我固执的性格和对初恋的思念终于让她心碎。尽管我们已经几年没见,我依然看得见她留在我心里的那颗眼泪。

我在西电六年半的学习和生活也许是一生中最珍贵的,叫我怎能不爱西电。两年前我回西电,惊奇地发现校园里房前屋后长满了待收割的小麦!这所大学是从事电子科技的,种小麦干啥呀?朱总理曾讲过:“目前国家粮食充足,再来三年自然灾害也不怕。”现在国泰民安,似
乎用不着“深挖洞,广积粮”吧。我素知西电提倡勤俭节约、自力更生,但与其种小麦还不如种蔬菜呢。老同学告诉我,种小麦是为了应付“211” 工程(为21世纪选拔100所重点大学)的检查团,因为“211”工程有较高的绿化指标。偏偏检查赶在冬天,那时的西北极难长草。西电本来就人多地少,地 上一长草马上就会被谈恋爱的学生给折磨死。一到冬天,整个校园就光秃秃一片。小麦在年轻的时候还真和青草长得一个模样,用小麦绿化校园可谓千古绝笔,检查 团的那些权贵人士早已五谷不分,岂知所见的“草坪”乃是麦田。

浙江大学依山而傍西湖,是个美丽而高贵的大学。1997年春天,我就象干儿子那样挤进她的怀抱,并期望得到关爱。我到了向往已久的计算机辅助 设计与图形学(CAD&CG)国家重点实验室读博士学位。导师是石教英教授,石老师虽然年过六旬,但精力充沛,红光满面,施拉普纳不及他半分精 神。
我幸福地幻想着大干一番自己喜爱的专业,并计划在35岁左右成为实验室主任。开学的第一天,我兴冲冲地奔向实验室。进门不到5分钟,就因不懂规矩被看门的年青女子训了几次。为了不再冒犯规矩,我就老老实实地抓起一份计算机报纸并且站着阅读,心想这下不得罪谁了吧!
突然一个气得脸色铁青的男人(机房管理员之一)对我断喝:“你在干什么!你怎么可以不经允许就翻看别人的报纸!”似乎我是他一生中见到的最无耻的人。
我就象一个情窦初开的少年飘飘然地去拥抱梦中情人,不料迎来两个耳光,此下场比《猫和老鼠》中的猫还惨。如果这两个年轻人有幸看到我这篇文 章,应该好好悔过自新,她与他的工作态度打击过数十个学生的积极性。我本是因为向往CAD&CG实验室而来的,得到的却是极坏的第一印象。(我博 士毕业后,这两人也离开了实验室,我替后来的学生们谢天谢地。)
CAD&CG实验室在理论研究方面很有名气,但我的兴趣是开发实用的软件,“嫁错人”了。我颇费周折地考入CAD&CG实验室,却尚未热身就全力而退,决心自立门户。至今我都没有用实验室的计算机编过一行程序。

刚读博士时我穷困潦倒,只有一床,一盆,一壶,一碗。我那些穷朋友们象挤牙膏一样挤一些钱资肋我。我买了一台计算机,在宿舍里开发软件产品 “可视化软件开发工具 VA 4.0”。1997年8月,我去北京参加首届中国大学生电脑大赛软件展示,路费也是借的。同学为我壮胆时说:“如果不能获奖,就回到实验室干活吧。”我说 一定会拿第一名,不然去干啥。
在软件展示时,我们发现很多好的作品是国家的科研项目,根本不是学生个人的作品,违背了竞赛的宗旨。如果允许这样做的话,学校可以运几条生产 线过来。我写了一份抗议书,找了十几个人签名(很多人敢恨而不敢签)。但抗议能顶屁用,我参加过的科技竞赛、听过见过的科研鉴定多了,哪一次我没看到虚 假?我写抗议书是因为眼里容不得沙子。如果我在北大读政治,恐怕早就遭殃了。这次竞赛选出十个“软件明星”,只有我的软件和清华大学博士生的项目值得一 看。他的项目水平很高,但那不是他个人的作品(评委甚至认识他的导师,知道项目的来龙去脉)。综合诸多因素,我的作品被评为第一,他的项目被评为第二。组 委会来拍电视,可是找不到浙江大学的展板。因为浙江大学没有任何准备,我是一个人来的,我的作品夹在杭电的作品之中,没名没姓。我只好从塑料袋上剪下“浙 江大学”四个字,贴在展板上撑撑门面。自新中国成立以来,清华大学就一直在浙江大学头上“作威作福”,我好歹也争了一口气。可是颁奖时,组委会竟按地方顺 序从北京念起,我沦落到第七,差点咽气。
我曾在上海的一辆公共汽车上与一位北京来的旅客聊天,此公极健谈。似乎他到上海旅游的目的就是为了发掘北京的优越性。见我挂着浙江大学的红色 校徽,且对清华、北大并不神往,不禁十分迷惑,就问:“浙江大学在浦东还是浦西?我要去看看。”北京已经是极度优越了,就请不要把什么鸡毛蒜皮的好东西都 拿走。

1997年11月,在穷得快挨饿的时候,我获得了中国大学生跨世纪发展基金特等奖(全国共20名,奖金1万元),到人民大会堂领奖。给我们出钱的是一个靠 资本运作发财的集团,在宴会前,该集团领导人和我们座谈,他什么不好吹偏偏吹自己是个高科技企业:“我们主要从事生物工程,几年前就掌握了克隆技术,英国 的‘克隆羊’简直是小菜一碟。……我们在东北有个农场,新品种的小麦长得比人还高,麦粒跟葡萄一样大,你们不久都会喝到用这种小麦酿的啤酒。……我如果去 美国炒个总统,那就跟玩似得。”
我们几个获奖的博士生吃饱喝足、拿了钱后,关起门来把那个老板臭骂一通,扬长而归。别以为给钱就能让我们说好话!
刚拿了“跨世纪发展基金”,又马上获得“浙江省青少年英才奖”,浙江大学也给我发奖学金。比起那些一个月只有300元工资的博士生们,我简直 是“暴富”。还了朋友们给我的“救济款”后,仍然是个“富翁”。我老是觉得手头的钱是“抢劫”来的,心里不踏实。于是找浙江大学校团委“诉苦”,请校团委 把我的“不义之财”捐给浙大的贫困学生。校团委的老师热情而坦诚,说愿意等我成为真正的富翁时再接受捐款,现在不能让我“杀鸡取卵”。但为了能让我表达心 意,建议我资助“希望工程”的中学生,让我选了5个初一的学生,每个学生500元。我轻浮地以为自己真的帮助了5个中学生,直到1998年暑假我见到了其 中的一个中学生,才发现自己做的好事只不过杯水车薪而已。我是到了自己贫困失意时才真正去帮助那些孩子的。

在1997年,我在学生时期的荣誉已登峰造极,觉得自己的翅膀已经硬了,不想再混下去。我总以为自己是第二个史玉柱,应该开个软件公司来振兴 民族软件产业。我曾到东软集团(沈阳)参加“民族软件产业青年论坛”,大不咧咧地作了一次演讲(现在发现演讲的内容没有一项是可以操作的)。杭州有一个记 者来采访我,我谈了一天的理想,记者还是没听明白,干脆自己写新闻报道,并且含蓄地做了一个广告:万事俱备,只待投资。
由于我能说会道,频频上电视,引来近10个投资者。我选择了一位年龄比我大一倍、非常精明的商人作合伙人,成立了“杭州临境软件开发有限公 司”。彼时,我可谓光芒四射,名片上印着“以振兴民族软件产业为已任,做真实、正直、优秀的科技人员。”浙江大学有关部门想开除我,被我“晓之以理、动之 以情”安抚住。
我当时想开发一套名为Soft3D的图形系统,此系统下至开发工具,上至应用软件,无所不包。公司名字起为“临境”有两个含义:一是表示身临 其境,这是我对图形技术的追求;二是表示快到了与SGI公司称兄道弟的境界,这是我对事业的追求。“临境”这个名字我在读本科时就已经想好了,1997年 底公司成立的那一天,我有一种“媳妇熬成婆”的悲壮感觉。
我从实验室挖来一位聪明绝顶的硕士生做技术伙伴。他叫周昆,年龄很小(1978年出生),研究能力极强。如果按照浙江大学计算机系博士生毕业 的论文要求,他入学读硕士的那一天就可以博士毕业。周昆的头明显比我的大,估计其脑容量至少是我1.5倍。我曾经以师兄的身份为他洗过一双袜子,他因此觉 得我是个好人。我俩一拍即合,常常为Soft3D的设计方案自我倾倒。一想到Microsoft公司的二维Windows系统即将被Soft3D打击得狼 狈不堪时,我们就乐不可支,冲劲十足。
我已经把“振兴民族软件产业”列入日程,并且提前担忧将来钱挣得太多用不完该怎么办。1998年5月份,我们做了一套既不是科研又不全象商品 的软件。软件产品宣传了几个月,并没有出现订单如潮、接应不暇的局面(事实上压根就没有反应)。我意识到没有找对市场,但仍觉得产品中的一些技术很有价 值,将它改装成其它软件也许能开创“东方不亮西方亮”的新局面。
于是我向只有一面之缘尚在北大方正工作的周鸿袆求助。他是真正的软件高手,当我小心翼翼地展示约10万行C++代码的软件时,他竟在十几分钟内就指出多处重大的设计错误,使我目瞪口呆地意识到整个软件系统的价值为零。那种心痛啊,就象眼睁睁看着孩子被狼吃掉一样。
到1998年10月,我用光了30万元资金。周鸿袆再一次从北京飞到杭州,三下五除二替我把只活了一年的公司关闭掉。他放心不下,觉得我“恶病需用猛药治”,于是意犹未尽地把我捉到北大方正插在他管辖的部门,让我学习怎样做事情。
北京寒冷的冬天可以营造一种凄凉的气氛,冲去一切可以自我原谅的借口。我并不是太爱虚荣的人,知道这次失败是我的毛病积累到一定水准忍不住喷发出来的结果。我绝不能以年纪尚轻不太懂市场与管理为理由轻率地敷衍过去。
从北大方正“劳改”了两个月回来,我心服口服地承认失败了。我把察觉到的数十个毛病列出来,日后一个一个克服掉。现在我能比较清醒地分析我和投资方所犯的主要错误,以祭我那幼年夭折的软件公司。
我的主要错误:
(1)年青气盛,在不具备条件的情况下,想一下子做成石破天惊的事。我的设计方案技术难度很大(有一些是热门的研究课题),只有30万元资金的小公司根本没有财力与技术力量去做这种事。
(2)我以技术为中心而没有以市场为中心去做产品,以为自己喜欢的软件别人也一定喜欢。我涉足的是在国内尚不成气候的市场,我无法估计这市场有多大,人们到底要什么。伙伴们跟着我瞎忙乎一整年,结果做出一个洋洋洒洒没人要的软件。
(3)我做到了“真实、正直”,但并没有达到优秀的程度。我曾得到很多炫目的荣誉,但学生时代的荣誉只是一种鼓励,并不是对我才能和事业的确认。正因为我不够优秀,学识浅薄,加上没有更高水平的人指点我,才会把事情搞砸了。
投资方的主要错误:
(1)投资方是个精明的商人,他把我的设计方案交给美国的一个软件公司分析,结论是否定的。但他觉得我这个人很有利用价值,希望可以做成功其它事情,即使Soft3D软件做不成功,只要挣到钱就行。这种心态使得正确的可行性分析变得毫无价值。
(2)由于我不懂商业,又象所有单纯的学生那样容易相信别人。他让我写下了不公正的合同,我竟然向他借钱买下本来就属于我的30%技术股份。 他名为投资方,实质上双方各出了一半的资金(他出51%,我出49%)。他在明知Soft3D软件不能成功的情况下,却为了占我的便宜而丧失了应有的精 明,最终导致双方都损失。关闭公司时,他搬走了所有东西。我明明投入了技术,又亏了15万元,却一无所得。几个月后当我意识到不公平而找他协商时,他说: “只能怨你自己愚蠢,读到博士,连张合同都看不懂。”此事充分地显示了我的无知与愚蠢。自己的奋斗没有必要后悔太多,
学到的远比失去的多,我相信下一次会做得更好。

公司关闭后,我就面壁反省,补习基础,准备为几年之后“东山再起”养精蓄锐。1999年1月,有一个民营企业家G先生向我请教一个问题:“我 给一个年轻人投资了100万元,建立一家从事环保信息应用开发的软件公司。他曾许诺一年内创利润上千万元,可是才过去5个月,他就把100万元用完了,什 么也没挣到。我实在不明白是怎么回事,请你帮我分析分析。”这位G先生年龄有我的2.5倍,曾在西北当过几十年的技术兵,性格豪爽。他投资的那个年轻人叫 Y(以下称Y 经理),自称有英国的管理学文凭,能对公司的市场、技术、管理一把抓。G先生喜欢说“钱我没问题”,于是想也不想就投了100万元,并且给Y经理40%的 股份。
G先生请Y经理到家里座谈。我那时突然狡猾起来,自称是G先生的远房亲戚,在浙大读半导体物理,特羡慕那些做软件的同龄人,渴望听听Y经理的高见。Y经理 果然信口开河,滔滔不绝,连绵不断,如黄河泛滥,一发而不可收拾。我激动地想去参观他的公司和产品,并表示要抛弃物理专业,立马转向软件专业。
Y经理得意而笑:“对于IT行业你就不懂了,我们经营的是一种理念而不是产品,这是国外最先进的思想。你可以来参观我的公司,但你看不到具体的东西,只能用心去领会。”
这屁话比曹元朗的诗还臭(《围城》)。我搞软件只有8年功夫,说我不懂IT行业并不过分。可我读了10年大学都没听到过如此“先进”的思想。如果这是英国管理学教育的成果,我认为自己已经发现了这个曾经是“日不落帝国”的衰败的真正原因,有必要找英国首相切磋一番。
我对G先生说:“Y经理根本不懂技术,为人极其浮夸。应马上关闭公司,以绝后患。那100万元你也亏得起,就买个教训吧。”
G先生说:“钱我没问题,那100万元就算我在澳门赌博输掉了。”
1999年5月,G先生又来找我请教另一个问题。他说:“小林啊,你上次说得很有道理,我接受了教训。”
我说:“那是好事,不论年龄大小,知错就改总是好孩子嘛。”
他叹了一口气:“最近几个月,Y经理又花了我100万元。”
我当时差点给噎死,气凶凶地训G先生:“我早跟你讲过,Y经理不是好东西,叫你关闭公司你不听,你老说钱没问题,亏你200万元活该。”
老先生象犯了错误的小孩子:“Y经理每一次向我要钱时,都拍拍胸脯保证下个月就有利润,所以我一而再、再而三地掏钱给他,希望能救活软件公司。现在该怎么办?”
一个有20名职员的软件公司,程序员只有三四个,连“十羊九牧”都不如。200万元的财务报表中,有100多万元用于吃喝玩乐和行贿。这种公 司完全无药可救。台湾作家李敖曾说过:“当你没法扶一个人上马时,也许应该拉他下马”。从5月份到8月份,我行侠仗义,替G先生清理软件公司,根除Y经理 这些败类。
可是难哪,因为G先生投资的公司根本不把G先生放在眼里,又岂能让我插手。就在我想方设法卡住Y经理的脖子时,Y经理总能从G先生那里挖出钱。G先生就象被吸血鬼附身,却仍存幻想:“如果吸血鬼能治好我的病,就让它再吸些血吧。”
Y经理又和一个来自深圳的骗子H想了注意,教唆G先生再投资100万元新建一个“指纹”公司,说利润将比开发环保信息更加可观(估计要用亿来度量)。就在他们准备签合同之际,我偶尔路过,发现异常,便强行阻止。
G先生是个好人,但太顽固。好几次我气极想撒手不管,但又不忍心好人被坏人欺负。我曾请求G先生:“我求您别再说钱没有问题,您的私人财产会被人骗光。请让我把这漏洞堵住吧,好让我安心地回学校做完博士学位论文。”
到8月份,我和G先生的两个儿子,伙同“黑社会”的朋友,强行把那个软件公司搬回G先生的工厂中,辞退所有员工。现在那个软件公司被别人接管,仍然半死不活,好在每月亏损不过几万元,G先生承受得起,我就不再去碰G先生的伤疤。
我以前从未玩过与人勾心斗角的游戏,此三个月的经历让我疲惫不堪。那个软件公司的员工曾透露,Y经理的英国文凭大约是在上海或杭州某个大专培 训班里混来的。方鸿渐买美国克莱顿大学博士文凭尚知羞耻(《围城》),而Y经理却趾高气扬。害得我平白无故为英国教育界担心,回想起英国鬼子曾打劫过中 国,倍感耻辱。
G先生是正人君子,不防小人,实在不是现代的商人。我和他成了忘年交。G先生第一次见到我时问我工资几何,我答曰:“300元,够买几本书。”G先生甚为 着急:“这样的条件怎么能生活?你就搬到我家来住吧,我家条件好,你可以安心地学习,将来可为国家多作贡献。”后来他几次相邀,我就看在国家的份上住入他 家,一直住到博士毕业。
自从读中学以来,我第一次享受食来张口,不用洗衣服的奢侈。唯一的麻烦是我得向很多朋友解释:“我不是被别人养起来了,是为了国家的利益,不得已才这么做的。G先生是男的不是女的,并且没有待出嫁的女儿。”

我在读博士学位的三年半里,经历有点奇特。我遗憾的是“真才实学”没有长进多少,并且没有了在西电那样的纯真友情。略为欣慰的是我做了几件有意义的事情。

我很想讲一讲自己参加希望工程的经历与感受。
1998年暑假,浙江省云和县梅源中学的老师们带着希望班几名优秀学生来到浙江大学,其中有受我资助的何晓丽同学。我才知道初中学生一个学期的学杂费就要 600元。何晓丽哭诉下学期不能再上学,其它的学生处境相似。我以前资助的2000元是5个人3年平均分派的,根本不起作用。
那时侯,公司倒闭使我债务累累,并且自信心遭受十年来最大的打击。我在入不敷出、心事重重的情况下,没有推卸义务,而是“变本加厉”的去尽这 个义务。我在西电的好朋友史江一替我“接管”了一个中学生。有一个小姐追求我,我乘机给她一个活生生的“见面礼”。1999年7月份,我把饭卡送给了一个 大学生,自己成了无产阶级。从1997年11月起到我博士毕业期间,我直接或间接地为7个贫困学生捐助了约1万元。我有了几点感受:
(1)对人的帮助莫过于给予希望。
(2)人在任何时候都能够帮助比自己更困难的人,哪怕自己处于困境。
(3)帮助是要负责任的,一定要设法做成有意义的结果。不负责任的帮助就是“施舍”。“施舍”缺乏诚意,不配称为“帮助”。不少人曾对我说:“你是做大事的人,不要在小事上浪费精力,更不要为了别人而害了自己。”
很多人总以为自己将来是伟大人物而不愿做小事,从而到死也没做成什么有价值的事。也有很多人希望自己成功后再去帮助别人,无论他最终成功还是 失败,一辈子也没有帮助过人。还有很多人略有权势或略有名气后,便觉得自己吃喝玩乐、放屁、上厕所都是重要的事,在他们最能够帮助人的时候却以“太忙” “没空”为理由不去做好事。
我也在忙碌、在奋斗,也渴望成为伟大人物,但我希望让有意义的小事充实一生。

我还要讲另一件我常干的小事。
很多受过高等教育的人保留了随地扔垃圾的“风俗习惯”,这恶习就象脚气那样虽然不致人于死地,但能遗臭万年。即便象浙江大学这等典雅的地方, 你都经常可以看见草坪、校门口的废纸、果皮和塑料袋等,垃圾就如同天使脸上的一砣狗屎那样鲜艳,人们竟然无动于衷。我记不请自己多少次当众、当道捡垃圾, 可是几年来我都没有在大学里发现第二个做这种事的人。我很想对所有的教授、博士、硕士、学士们讲句话:“救人并不只是医生干的事,保护环境也不只是清洁工 干的事。只要你多花几秒钟,弯几次腰,就能让环境更加清洁,让心灵更加清洁。我们不必个个道貌岸然,但至少应该做到‘读书明理’。”那些正在追我和将要追 我的小姐们,你多捡一次垃圾就多一份希望,你丢一次垃圾就不再有希望。
我这样喋喋不休地讲“希望工程”和“捡垃圾”,并不是在沽名钓誉,也不是在布道,只是希望我这些“金玉良言”能触动更多的自以为自己是高素质的人们。

在浙大的三年半里,我没有对感情“播种”,所以也没有收获,但有一次“艳遇”。在关闭公司的那天晚上,人去楼空,我象严监生断气前那样盯着尚 未熄灭的灯。这时某大学的一位四年级女生来找我。一年前她曾作为实习记者采访过我,谈得很投机。我知道她是聪明好学的学生,曾大言不惭地教导过她几次。我 开公司的一年里几乎没与她来往过,想不到当我成了光杆司令时她还能“兔死狐悲”地来看望我,着实让我感动。
我不无自嘲地对她说:“你不用安慰我了,这次失败我还能挺得住。”
她说:“我不是来安慰你的。我一直盼望你的公司倒闭,等了整整一年。在你去北京之前,我有话跟你说。”
我心下一凉,搞不清什么地方得罪她了,让她如此记恨我。大概是我得意之日教导她时言语过重,伤了她的自尊心。好在我是知错就改的人,当下惭愧地向她道歉。
她不理会我,说:“你开公司时光环重重,我根本无法靠近你。即便那时我成了你的好朋友,你也不会把我放在眼里。我暗恋你一年了,一直都没跟你 讲。我早知道你会失败的,失败时你就剩下一个人,你才会知道我是真心爱你的,而不是冲着其它来的。你是个优秀的理科学生,我是个优秀的文科学生,门当户 对,珠帘壁合。请你不要觉得女的追男的很荒唐,我是认真的,请你给我一次机会。”
我虽然评不上情场高手,好歹也在爱河里游过泳,呛过水。想不到仓促之下,被一女子说得脸红耳赤,无法掩盖窘相。
我一直认为男人应该勤劳一辈子,好让柔弱的女子舒舒服服地在大树下乘凉。而学习、工作出色的女子只能做朋友,不能做夫人。
她从小习诗弄文,读大学时蜚声校园。我见到她第一面时就把她归类为事业上的朋友,所以才会正儿八经地与她交谈并教导她。我在西电的两个女朋友 就属于读书不太好但比较有魅力的女生,我从来也没有指导过她们学习。如果我喜欢一个女孩子并希望她成为我的女朋友,我早就去追求她了,岂能轮到她追我。
她见我彷徨不安,便滔滔不绝地例举爱我的“证据”。我开公司一年来发生的事她了如指掌,就象在我的房间里放了窃听器,在我的朋友中安插了间 谍。她甚至趁着实习机会跑到团中央去查阅我的老底,有些“光辉记录”我过去的伙伴都未必知道。她思念我时,写了很多诗,留了很多泪……
我早知道有些人不编程序、不做实验就能写出论文,难道男女之间不接触也能滋生感情?
第一回合我就被她挑翻在地,我莫名其妙地成了“负心郎”,无地自容地把她送走。我以为这是文科女生的风格,就当作一个趣事不放在心上。
我从北大方正“劳改”回来不久后,她提着一篮鲜花来找我,并对我说了她的梦想:在寒冷的冬天,大地铺满积雪,四野人鸟绝迹。我孤独求败地深居 在冷冰冰的小木屋里。在一个狂风呼啸的黄昏,她一手拎着亲手做的饭菜(我想应该有土豆和辣椒),一手拎着一捆木柴,敲开了那扇紧闭的门和心房。终于木屋四 壁生辉……
我曾对第一个朋友最好的赞美是:“黄蓉很象你。”
我曾对第二个朋友最深情的话是:“将来咱们老了,我回黄岩当物理老师,你当语文老师。”
相比之下,我的确不及她浪漫。此后她再找过我几次,当我意识到她动真格的时候,她已不能自拔。爱情是很怪的东西,并不是两个好人在一起就能碰出火花。与其让她长痛,还不如让她狠痛一次。
我对她说:“我们真的不能在一起。”
她问为什么?
我说:“不为什么,我没有心跳的感觉。”
她说十年之后再找我。
我知道她会奋发图强,因为她会一直想着“为什么”,期望让自己有个满意的答案。 这条路8年前我已经走过了。后来她读硕士时我曾再见过她,她在文学上已经有了长足的进步。
她说将会送给我她的第一本著作,书中开头的几个故事是关于我和她。
我说看了她的书后一定会写一篇读后感给她。
她仍然提醒我不要忘记十年后的相约。

我在浙大有一个值得怀念的人,她是管宿舍楼的大妈。在1999年1月至5月,我在博士生宿舍静心修炼内功,大妈就象我的“”。晚上九点钟时, 她就会烧些东西给我吃。我和大妈非亲非故,同学们都不明白大妈为什么待我好。我想那是因为我没把自己当成“博士”来看,而是当成“人”来看。
5月份后,我看在国家的份上搬到一个千万富翁家里去住,大妈也调到“熊猫馆”当掌门人。我一般隔几个月去看望大妈一次,中秋节我就和她在一起。朋友们知道我和大妈有这层关系,就纷纷托大妈物色女朋友。
大妈果然称职,她就象特务那样审视大楼里的女生。可大妈毕竟是大妈,她采用的“标准”是几十年前的版本,无法与现今的兼容。她盯住了不该盯的,却漏掉了不该漏的,至今都未“推销”成功一个。
这件事让我又明白了关于软件的一个道理:光有完善的数据库还不够,还应该提供很好的搜索引擎。

我相信生活、科学、艺术中的很多道理是相通的,于是就不嫌人笑,写下了十年来的故事,交最后一次作业。
大学十年给我留下了很多美好的回忆,现在可以打上漂亮的句号了。尽管我即将告别大学,但我会终生学习。也许我成不了天才,但还有机会成为天才的爸爸。
我想大声呼喊出那种可以用双手把握未来的自豪。
我要对年轻的朋友们说两句肺腑之言:
一、主动去创造环境,否则你无法设计人生。
二、生活和工作要充满激情,否则你无法体会到淋漓尽致的欢乐与痛苦。
如果我碰到上帝,只会对他说一句话:“你看厕所去吧。”

2000年7月份,我从浙江大学博士毕业后到上海贝尔有限公司工作。从2000年8月至2001年底,大约一年半时间,我在网络应用事业部从事软件工程与 CMM的研究与推广工作。从2002年初至今,我调到公司总部从事企业研发管理的研究。我在上海贝尔没有发财,没有当官,那么工作近两年来我都在做些什么 呢?
我在心平气和、踏踏实实地做学问。
我读本科的专业是半导体物理,硕士专业是集成电路,博士专业是计算机图形学。十年之内我换了三个专业,哪一个专业都没有学精通。我觉得自己在软件工程方面有些悟性,可是没有当成专业来系统地学习。所以博士毕业时,除了有点虚名外,我的确没有什么过人的才能。
如今大学里的博士、教授中“水货很多”,我不幸是其中之一。象我这样的好苗子沦落为“水货”,是中国大学学术腐败、堕落的恶果。
在公司里,很多员工恭谨地叫我“林博士”,甚至还有年轻人特意来看看我这个“好榜样”。虽然我也爱慕虚荣,可是良心未泯,彼时我那有博士的真才实学,多么羞耻啊。

刚到公司时,我有两类工作可选择:一是开发产品,二是研究并解决企业存在的软件工程问题。
我在开发产品方面比绝大部分应届毕业生和员工们有经验,当项目经理可谓熟能生巧。软件工程则是我的研究兴趣。前者可能会有更高的经济收入,后者能提高自己的学问。当时我的想法很简单:趁着自己还年轻,赶紧好好做学问,弥补读博士期间浪费的三年青春,让自己有真才实学。
在企业里做学问与高校里很不一样。如今学校里的学者们越来越浮躁,聪明才智大多建立在“纸上谈兵”之上,做学问变成了造文章。而企业特别讲究“务实”,所有的工作围绕一个目标:努力让企业活下去并且活得更好。
我在公司里没有象在学校里那么“兴风作浪”,日子过得很简单,不停地调研、写规范和培训。就象少林寺藏经阁里的修练者。上海贝尔提供了一流的 软件工程研究与实践环境(不是现成的,是争取来的,这就是我信奉的“创造环境”)。在这种环境下,只要人不笨,认真工作,谁都能成为软件工程专家。
在博士毕业前,我写了一本薄薄的书叫《软件工程思想》。这本书与《大学十年》一样在网上流传,我曾经自鸣得意。最近我要出版一些研究成果,便重新阅读了那本《软件工程思想》。发现此书真的是彻底地“纸上谈兵”,不仅对企业毫无用处,并且会误导读者。
我真是悲喜交加,悲的是和我同类的一大批“假博士”长期干些“自欺欺人”的研究工作,浪费生命并且浪费国家财产。喜的是我终于跳出了虚假学术的火炕。我不敢说现在自己的水平有多高,但至少能够拿出一些对企业有价值的东西来。
我在公司是一名自由自在的软件工程专家,公司待我不薄。如果不给自己一些事业上的压力,人很容易在安逸中堕落。我的目标是创作出可以与 Rational公司RUP相媲美的软件过程规范,并且开发出物美价廉的适合于中国IT企业的项目管理软件。基于大量实践的基础上,我和合作者研制了一套 “软件过程改进解决方案”(Software Process Improvement Solution, SPIS)。SPIS的主要组成部分:有基于CMMI 3级的软件过程改进方法与规范,称之为精简并行过程(Simplified Parallel Process, SPP)。一系列培训教材,包括软件工程、项目管理、高质量编程等。基于Web的项目管理工具,包括项目计划、项目监控、质量管理、配置管理、需求管理等 功能,命名为Future。
以我们研究小组的实力本来是可以顺利完成SPIS的。但遗憾的是,SPIS不是公司产品发展战略范畴之内的东西,不能作为正式项目开发,我的组员们都被分配了其它的任务。我只能在公司之外组织一些朋友共同开发SPIS。虽然困难很大,但是工作很有意义,很鼓舞人。
我依然相信“创造性的事业要靠激情来推动”。最近我又重新修订了以前写的《高质量C++/C编程指南》一书,增加了不少精彩章节,更名为《高 质量程序设计指南——C++/C语言》,2002年5月底会在电子工业出版社出版。希望在今后的一年内,我能结识不少志同道合的朋友,共同把事业做好。

 

(全文完)

关于清除QQ空间人气精灵V3.5生成的isignup.dll和isignup.sys病毒文件

“QQ空间人气精灵”是TT86开发的一款免费刷QQ空间人气的软件.
本来是件很好的事,3.4版我就一直用它,可不幸的是更新的v3.5版却捆绑了恶意的盗号木马!
运行QQ空间人气精灵后,卡巴斯基(Kaspersky)提示:

被感染: 木马程序 Trojan-Dropper.Win32.Agent.wf
C:\Documents and Settings\Administrator\桌面\v3.5\QQ空间人气精灵.exe 350 KB
被感染: 木马程序 Trojan-PSW.Win32.Hangame.dz
c:\program files\internet explorer\connection wizard\isignup.dll 40.3 KB
被感染: 木马程序 Trojan-PSW.Win32.Hangame.ea
C:\Program Files\Internet Explorer\Connection Wizard\isignup.sys 54.3 KB

我在此重点只是告诉大家是为什么感染的该病毒,
至于清除方法,安装卡巴斯基(Kaspersky)的用户不用手动清除,杀毒软件会在提示几次后自动重启,重启后的文件已经不被系统再调用,可以直接删除病毒文件isignup.dll和isignup.sys,或者再扫描一遍
C:\Program Files\Internet Explorer\Connection Wizard 文件夹.
如果你不是卡巴斯基(Kaspersky)用户,建议先恢复注册表的EXE文件关联

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks]
“{B8A170A8-7AD3-4678-B2FE-F2D7381CC1B5}”
[HKEY_CLASSES_ROOT\CLSID\{B8A170A8-7AD3-4678-B2FE-F2D7381CC1B5}]
[HKEY_CURRENT_USER\Software\Microsoft\qqjdd]

重启系统,然后手动删除病毒文件isignup.dll和isignup.sys.
更详细的说明可以搜索 Google 或 Baidu !!