软件简单化 - 彭博社
bloomberg
在工程学校期间,埃里克·伯杰森学会了以艰难的方式编写计算机程序——一行一行地写。他会花费漫长的夜晚,费力地列出指令清单,用C语言编写,这是一种流行但相当棘手的计算机语言。一个简单的打字错误可能会让程序崩溃。而向一个运行顺畅、理解良好的程序中添加新功能?那可能需要几周或几个月才能搞定:即使是制作得最好的程序通常也如此复杂,以至于一个看似微不足道的更改可能会搞砸一切。“这真是太麻烦了,”他说。
当伯杰森在1988年进入谢尔森·利曼·哈顿公司时,编程并没有变得更容易。只是那里有更多的压力要求快速完成。他开始为股权套利者编写太阳微系统公司的工作站程序,发现那些系统几乎所有内容都需要不断更新——从交易和交易策略的细节到每个交易者希望其屏幕的定制“外观和感觉”。一行又一行地编写计算机代码,伯杰森遇到了他在学校时遇到的所有相同问题。更让他沮丧的是,他了解到在资本市场的走廊另一边,另一位年轻的软件高手亚历克斯·科恩正在编写许多相同的程序。难道没有更好的方法吗?
“乐高积木。”确实有。当伯杰森和科恩找到它时,他们知道对他们来说——以及有朝一日对全世界来说——编程将永远不同。事实上,在他们现在领导的软件初创公司Objective Technologies Inc.中,编程似乎显得相当幼稚:他们不再在复杂的C代码中打转——编写诸如printf ("%s/n", curr str)这样的晦涩语句——而是主要在他们的NeXT计算机工作站的屏幕上连接框,并填写空白。几分钟内,他们就能拥有工业级的程序,第一次运行就能正常工作,并且可以在不进行大手术的情况下进行修改。27岁的伯杰森说:“我给我母亲看,她说,‘你还是在玩乐高积木,就像你小时候一样!’”
他们所做的是面向对象编程。有些人说这只是最新的计算机流行词,就像十年前的人工智能一样。他们预测,像人工智能一样,面向对象编程不会产生一套独特的新产品,而将成为传统软件的一种附加技术。
但与承诺着迷人但遥不可及的“思考”计算机概念的人工智能不同,面向对象技术有着直接的、实用的回报。它已经在帮助计算机行业应对最棘手的挑战:使软件更易于创建、更简单易用,并且更加可靠。
这是一项艰巨的任务。尽管计算机硬件取得了巨大的进步,但软件在很大程度上仍然停滞不前。每两年左右,一代新的微处理器芯片问世,硬件性能翻倍,但软件并没有发生这样的突破。在大多数情况下,程序员仍然以痛苦缓慢的速度拼凑软件。因此,企业编程部门经常落后于一年或更长时间。而计算机制造商和软件供应商往往会错过几个月的软件交付日期。
大计划。底线是:由于缺乏软件,许多计算机硬件的进步未能得到利用。软件差距——每年都在加大——是计算机销售增长缓慢的一个原因。然而,面向对象编程“将使我们摆脱当前的困境,”博尔兰国际公司的总裁菲利普·卡恩说。
卡恩和面向对象技术的许多其他支持者预测,它将为软件带来微芯片为硬件所带来的变化。软件革命将建立在所谓的对象之上——简单、自包含、可靠的软件组件(盒子,第92页58)。像微处理器一样,面向对象技术有潜力彻底改变商业经济学——不仅仅是在300亿美元的打包软件行业。在硬件成为商品、软件成为关键竞争技术的时代,最善于利用面向对象软件的计算机制造商可能会主导计算机行业本身。
如果你对此有疑问,可以考虑IBM与苹果电脑公司之间的待定合作。这两家血腥竞争对手在去年夏天震惊了整个行业,宣布他们将共同合作。他们的计划仍然不明确,但一个关键目标将是创建一个面向对象编程的系统,以在下一个十年内设定标准——从而将行业控制权从微软公司手中夺回。
面向对象技术在微软董事长威廉·H·盖茨三世的计划中也占据重要地位。在他看来,每个图像、图表或地图片段都将作为对象存储在计算机中。盖茨表示,目标是“信息触手可及”——能够从无数电子来源中寻找、汇编和总结信息,而无需知道这些信息的来源。
希望引领又一次技术运动的史蒂夫·P·乔布斯,自从他创办NeXT公司以来,一直在追求面向对象技术。三年前推出的NeXT工作站配备了面向对象的编程语言和一个包含100个对象的库,这些对象处理诸如打印、在窗口中显示信息和处理电子邮件等常见任务。它已成为软件开发者的最爱。乔布斯表示,面向对象编程“是自麦金塔以来我们在行业中经历的第一次真正的技术变革。”
无限可重用。面向对象技术的关键突破在于能够从许多小的、预制的程序构建大型程序。这是可能的,因为对象完全改变了程序与数据之间的传统关系,这种关系在过去40年中一直是严格分开的。正如旧术语“数据处理”所暗示的,程序通常对数据进行操作——例如简单的数字列表或客户姓名。相比之下,一个对象将程序和数据封装在一个自包含的单元中,完全描述某个现实世界的实体。
想想苹果麦金塔如何处理一页信息。屏幕上的页面是一个基本对象。它包含数据——文字、数字和图表——以及让它像真实页面一样行为的程序。使用鼠标,你可以拾起它、移动它、归档它、复制它,甚至扔掉它。
这个简单的想法带来了巨大的好处。软件对象可以被构建来表示几乎任何东西——从抽象概念,如保险单,到具体事物或人,如杜克·艾灵顿,美国作曲家和音乐家,1899-1974。更重要的是,可以创建执行某些常见任务的对象——例如排序。一旦完善,这些对象是无限可重用的,因此程序员不必每次都重新发明轮子。布拉德·考克斯,创建了与NeXT机器一起使用的编程语言Objective C,预测对象技术将是信息时代的重大进步,就像伊莱·惠特尼在工业时代发明可互换的火枪部件一样。
但软件组件不仅仅是可互换的齿轮。因为它们由程序和数据构成,所以它们“知道”自己是什么以及如何行为。例如,一个名为Payday的对象可以自动检查一个名为Employee Roster的对象,注意任何辞职或退休,然后调用另一个名为Payroll的对象,并给它一个要打印的支票列表——这一切都无需人工干预。使用可重用的模块,而不是从头开始编写,使编程速度大大加快,并产生更可靠、更易于更新的成品软件。仅可重用性预计就会给企业的程序员生产力带来巨大的提升(框)因为最终,只有独特的新功能需要从头开始编写。修改程序也更容易。例如,当NeXT想要给其工作站添加发送传真功能时,它不必在每个程序中编写传真代码。它只是将传真编程添加到工作站的Print对象中。由于所有NeXT程序都使用该对象,因此它们都立即升级为通过传真进行通信。
对于普通计算机用户来说,物体意味着比今天最“用户友好”的机器更容易使用的个人电脑。事实上,当施乐公司的帕洛阿尔托研究中心(PARC)在1970年代开始研究面向对象的软件时,其目标之一,字面上来说,是设计一个如此简单的系统,以至于孩子都能使用。二十年后,基于对象的技术承诺使计算机变得足够简单,以便成年人也能使用。“如果我5岁的孩子能使用它,我就认为它很好,”发明了最流行的面向对象编程语言C++的AT&T贝尔实验室计算机科学家比亚尔内·斯特劳斯特鲁普说。
一个很好的例子是多媒体软件如何使个人电脑更易于操作,它赋予计算机操控视频和声音片段的能力。在一个名为Macromind Director的程序中,通过指向一个代表录像机的图标,您可以从计算机文件中检索静态图片甚至电影片段。录像机对象的工作方式与真实的录像机非常相似:选择您想要的图像的“录像带”,按下倒带或快进,找到,比如,兴登堡号灾难的片段。按下录制,将该片段复制到您的季度收益报告中。
如同生活。这种多媒体技巧只是面向对象编程的华丽表面。一个更有趣的可能性是软件能够比电子表格和数据库更好地模拟商业运作。商业人士“希望用更一般的、现实世界的术语来描述信息,并创建他们认为正在发生的事情的完整模拟,”前施乐PARC研究员、现任Parc-Place Systems(一个基于对象的软件制造商)总裁的阿黛尔·戈德堡说。
在贝格森和科恩离开三年后,谢尔森·利曼兄弟公司已经投资于对象技术,并正在构建模拟其业务的软件。它拥有代表客户的账户对象、管理各方协议的合同对象,以及描述股票、债券或期权属性的证券对象。一个账户可以签订合同以购买证券——就像生活中一样。“这更接近于实际发生的情况,”谢尔森副总裁弗兰克·菲利皮斯观察到。
一旦对象被构建和测试,克隆它们以用于新产品或服务就相对简单。现在,当利曼想要出售一种新类型的证券时,程序员只需告诉计算机这种新工具的特殊属性。然后,证券对象会自动生成一个程序,继承其所有通用特征,以及独特的新属性。“我们可以通过这种方式建模所有类型的证券,”菲利皮斯说。
结果是一个能够跟上业务变化的系统。例如,在优纳生命保险公司,以前每当州法规发生变化时,位于缅因州波特兰的保险公司的程序员们都不得不忙碌不已。但现在,使用对象后,他们可以在三分之一的时间内完成这样的更新——并创建出更易于非技术人员使用的软件,技术经理巴比·穆勒说。在某些情况下,“不是程序员,而是业务人员可以对软件进行更改,”她说。
另一个重大好处是:通过从预制对象构建程序,可以避免程序员通常用来将新功能补丁添加到旧系统中的“意大利面条”代码。这些小程序可以使软件维护——通常是运行计算机中心的最大成本——变成一场噩梦。布鲁克林联合煤气公司最近废弃了一个已有13年历史的客户信息系统,该系统在其主机上变得如此庞大和不灵活,以至于公司无法满足其100万客户的需求。与安达信咨询公司合作,它创建了一个基于对象的程序,体积缩小了40%,但功能更强大。公司预计它将持续20年——维护预算仅为旧系统的一小部分。
这样的成功故事吸引了更多的转变者。在国际数据公司(International Data Corp.)的一项最新调查中,70%的大型美国公司表示他们正在使用面向对象的编程或计划很快这样做。主要的动机是什么?钱。Shearson的Filippis声称他的团队已经将开发成本削减了30%。他估计如果每个部门共享一个中央对象库,公司还可以节省数百万。
很难想象一个单一的技术进步可以做到这一切——大幅提高程序员的生产力,创造更可靠的软件,并赋予计算机一种儿童般的简单性?当然,肯定有一些陷阱。确实有几个。
其中最棘手的:创建对象需要大量的仔细规划。软件设计师不仅必须弄清楚每个构建块应该做什么,还必须预见每个构建块如何与成千上万的其他对象协同工作。“让事情看起来简单和容易需要大量的工程,”贝尔实验室的Stroustrup警告道。
项目粉色(PROJECT PINK)。一个更大的障碍可能是标准。面向对象软件的巨大收益将在于有共同的方法在不同计算机之间传输对象。为此,超过160家计算机和软件制造商及客户已加入对象管理组(Object Management Group)。其目标是创建一个电子系统,以便在网络上分发软件对象,例如多媒体文档,而不管网络上使用的计算机类型。数字设备公司、太阳微系统公司和惠普公司目前正在合作开发该软件。与此同时,苹果-IBM阵营正在全力以赴创建一个设定标准的面向对象操作系统——运行计算机的基本程序。行业观察者表示,这一努力将基于苹果正在开发的面向对象系统Pink。它还将包括IBM通过收购Metaphor Computer Systems(由David E. Liddle领导的一个软件公司)获得的技术,Liddle也是Xerox PARC的校友。
与IBM-苹果联盟竞争的公司——太阳微系统公司、微软和NeXT——认为不需要构建全新的操作系统就能提供基于对象的软件的好处。“这不是一个很现实的场景,”盖茨说,他计划慢慢将基于对象的技术添加到微软的操作系统中。
‘臃肿软件。’利德尔认为,如果没有面向对象的操作系统,客户将无法实现新技术固有的效率。更糟糕的是,他们将被迫使用糟糕的应用程序——他称之为“臃肿软件”。这些是老旧的软件包,添加了数百个功能以使其“新”和“改进”——但几乎不可能掌握。他说,一个更好的主意是将新颖的功能制作成独立的对象,任何程序都可以轻松访问。这些公共对象甚至可能与IBM和苹果正在构建的操作系统一起提供。
最终,可能会出现一种全新的软件销售方式。在一个可互换的即插即用对象市场中,您可以单独购买组件并编译自己的定制软件。程序的块可能像硬件组件一样出售。“你可以走进一家无线电商店,购买一个执行特定功能的芯片或电路,”白水集团的创始人查克·达夫说,该公司制作编写面向对象软件的程序。“这需要在软件中发生。”
对象技术将多快席卷整个行业,谁也无法预测。当然,它在软件制造商和大型企业中越来越受欢迎,他们希望使编程变得更简单、更便宜。但它会像一些观察者预测的那样根本改变计算机业务吗?也许。“整个软件环境需要一次改头换面,”太阳公司的SunSoft子公司总裁爱德华·J·赞德指出。单靠对象技术可能无法解决缓慢增长的问题,但它看起来是为计算机行业增添更快乐面貌的一个好选择。
什么是对象?
软件对象是可以像现实世界中的事物一样行为的编程和数据块。例如,在苹果麦金塔电脑上,您可以使用称为文件夹和文件柜的电子对象来组织信息页面——就像您在物理世界中所做的那样。
但是对象可以应用于许多类型的程序。一个对象可以是商业表单、保险单——甚至是汽车轴。轴对象将包括描述其物理尺寸的数据——以及描述它如何与其他部分(如车轮和支柱)交互的编程。
人力资源部门的系统将有称为员工的对象,这些对象将包含有关每位员工的数据以及计算薪水增加和假期工资所需的编程,注册受益人的福利,以及进行工资扣除。因为对象具有“智能”——它们知道自己是什么以及能做什么和不能做什么——对象可以自动执行任务,例如拨打另一个计算机的电话,可能是在员工晋升时更新文件。
最大的优势是对象可以在不同的程序中重复使用。电子邮件程序中的对象可以将消息按字母顺序排列,也可以用于对发票进行字母排序。因此,程序可以从预制的、经过测试的构建块中构建,所需时间仅为从头开始构建的几分之一。程序可以通过简单地添加新对象来升级。