现在的位置: 首页 > 综合 > 正文

我的回忆和有趣的故事 by李维(台湾)

2013年09月01日 ⁄ 综合 ⁄ 共 28578字 ⁄ 字号 评论关闭

我的回忆和有趣的故事 by李维(台湾)

--李维的回忆
我的回忆和有趣的故事 by李维(台湾)  方圆 荐 

前言(代序):
我的小文《DELPHI探索》写作进度很难控制,其间隔的时间可能比较长, 为了在这段间隔的时间让大家看一
些关于Borland,关于Delphi的一些幕后故事,故事可读性很强。我想,凡是喜欢Borland,喜欢Delphi的朋友
都想了解Borlnad公司和它的Delphi究竟是怎么产生的。

下面文章由李维(台湾)先生撰写,我把原来的繁体字改成了简体字,希望让大家看得更舒服点。

文章出处:台湾“深度历险”BBS论坛

《我的回忆和有趣的故事》
       
       李维(台湾)

声明以下的这篇文章内容是我个人的回忆以及看法,没有任何特别的偏见,许多的事情是根据我的记忆以
及从许多人的诉说中得知的,也许内容不是百分之百的正确,不过我想这些内容有一定的可信度到是可以保证
的。当然有一些事情确定的发生时间和顺序不一定都和我的记忆一致,不过我想大部份应该是相去不远的。当
然各位如果知道确定的事件而我的记忆有误,那么我将非常欢迎您纠正我,我希望这些故事的经历能够一直陪
我走下去,谢谢。

一直想写一篇我个人在过去10多年来工作中经历的一些事情,以及看着一些我认为是伟大的工程师在这些
日子中对于资讯界的贡献。如果你和我的年龄差不多,那么你可能会对于这些内容很有兴趣,因为它们说明了
当时许多软体的兴起和没落的过程以及原因。虽然这些事情已经距离我们很遥远了,但是我相信许多人仍然对
于背后的故事有兴趣。如果你没有经历过那段美好的回忆,那么就把这些内容当成是一个有趣的故事来看吧。
但是我想更重要的是让我们一起认识一些伟大的人物,我对于其中的许多人都非常的佩服,也非常的羡慕。

我常常在想,如果我也有他们的环境,我是不是也能够和他们一样这么有成就呢?这些人对于以往都有重
要的贡献,在未来也将仍然有重要的影响,因为他们都有一身不凡的技术。对于许多重要的人我都尽量的收集
了他们的照片,让各位也能够看看这些优秀的工程师和杰出的人物。当然,如果各位也能够从这些内容中学习
到失败的原因以及成功的经验,那么这篇文章就更有价值了。

和Borland 的缘由

记得我在大学时第一个在PC上使用的软体便是SideKick,至今我仍然无法忘记这个让我津津乐道的软体,
而Borland在当时也就是以SideKick成为全球知名的软体公司。不过Borland 第一个奠立创业基业的软体却是
我大二使用来交作业的Turbo Pascal. 而Turbo Pascal也是第一个我听到关于Borland 的有趣的故事。

当年Philippe Kahn (Borland 的创使人)和Anders Hejlsberg到美国创业时,便由Anders以组合语言撰
写了Turbo Pascal的编译器,而Philippe则包办了Turbo Pascal其他的部份。在这两位人兄开发完Turbo
Pascal之后,穷得快连登广告的钱都没有了。但是Philippe为了在Byte杂志(还记得这个着名的杂志吗?)刊
登Turbo Pascal的广告,因此和Anders商量了一个方法,那就是一天他们约了Byte杂志的人到当时Borland 的
办公室讨论刊登广告的事情。

当Byte的人到了Borland 之后,Philippe,Anders和公司的助理小姐故意忙着接电话,接受Turbo Pascal
的订单,并且告诉Byte杂志的人等一下。过了一阵子之后Philippe才进入房间向Byte的人道歉,说他们的 
Turbo Pascal受到市场的热烈欢迎,订单源源不断的到来,因此可能不需要在Byte杂志刊登广告了,接着
Philippe向Byte的人展示Turbo Pascal这个产品。由于在当时的机器中Turbo Pascal能够在少少的RAM 中常驻
执行,又提供闪电般的编译速度,立刻让Byte杂志的人震惊在当场,凭着专业知识和丰富的经验,Byte的人也
立刻知道这将是一个革命性的软体,因此马上希望Philip能够在Byte杂志刊登Turbo Pascal的广告,并且愿意
以半价刊登。当然,Philip也立刻的答应了,于是一个革命性的软体Turbo Pascal终于在Byte杂志刊登出来了,
售价49.99 美元的Turbo Pascal立刻为Borland带来了大量的财富,Turbo Pascal也立刻的成为PC上除了基本的
Basic 之外最畅销的开发工具,也正式揭开了Borland 影响PC开发工具10几年的序幕。

在Turbo Pascal之后, Borland 接着推出了SideKick这套软体,SideKick可以说是随后着名的记忆体常驻
软体(TSR )的始祖,也是让Borland 跨出开发工具界,让几乎所有PC使用者认识Borlan d的关键软体。当然
SideKick也很快的成为了全球的畅销软体,继续的把Borland 往顶尖的软体公司上推。

而Turbo Pascal也成了我大二,大三撰写作业的最爱,几乎所有的作业都是使用Turbo Pascal 完成的,
当然其时Horowise的Data Structure这门课也是使用Turbo Pascal过关的,因此从那个时候开始我便非常喜欢
Borland 这家公司,慢慢的也开始对Borland 有了特别的感情。

大二时Microsoft 也推出了Microsoft Pascal,但是它和Turbo Pascal的确是有一段差距,我使用了一次
之后便把它丢到垃圾桶。稍后 Borland 也推出了 TurboBasic ,我记得这个编译器非常的棒,编译速度就和
Turbo Pascal一样,是一个非常有前途的产品。但是我不知道为什么它只有1.0 ,之后便和Microsoft Pascal
一样消失了。我听说Microsoft 和 Borland 互相交换条件,Microsoft 不进入Pascal的市场,而Borland则退
出Basic 的市场。至于是不是真的我就不得而知了。

在大二初次的接触到C 语言,第一本阅读的书便是王兴隆先生写的C 语言,也从此开始和C 语言结下了渊
源。平生第一个使用的C 编译器便是Lattice C ,不知道还有没有人记得。我还记得那个时候使用2 个5又1/4
磁片抽换以便编译 C 程式的情景。稍后 Borland 终于推出了风行天下的 Turbo C 编译器,当然,从此之后
Turbo C 便成了不离身的工具,而Borland 也藉由Turbo C 这第三项畅销产品迈向了世界前10名的项尖软体公
司。

当完2 年的兵之后,我在中研院首次使用了C++ 语言,第一个使用的C++ 编译器则是 Zortech C/C++,这
家公司稍后被Symantec收购成为Symantec C/C++的核心,这个故事稍后再说。后来 Borland 也推出了 Turbo
C/C++ 1.0 这第一个C/C++编译器,但是在我和Zortech C/C++ 比较之后,还是觉得 Zortech C/C++ 比较好,
因此就继续使用Zortech C/C++。一直到Borland 的Turbo C/C++ 2.0 编译器推出之后,才逐渐成为 C/C++ 语
言的王者,而我也像以往一样把Zortech C/C++ 换成了Turbo C/C++。

在1991年到Georgia Institute Of Technology 念硕士时,终于使用自己的零用钱美金49.99 购买了生平
第一套的正版软体Turbo C/C++ 4.5 ,随后又购买了Borland Pascal. 在毕业前的一个Quarter ,Microsoft
推出了Microsoft C/C++ 6.0 以及MFC 1.0 ,由于是第一个C/C++ 的Framework ,因此也花了一些钱购买了一
套以便了解MFC。但是在收到之后却很失望,因为 Microsoft C/C++ 6.0 仍然没有图形整合发展环境,还是在
DOS 下的整合发展环境,而且MFC 1.0 以我的眼光来看又不好用,而且Microsoft C/C++ 6.0 的C/C++ 最佳化
编译器在其时是一个笑话,不但产生的程式码效率不好,甚至会产生错误的程式码,许多杂志也称Microsoft
C/C++ 6.0 是一个平庸的(Mediocre)产品。因此就把它丢在一边。在Microsoft C/C++ 6.0 不久之后,Bor-
land 终于推了Borland C/C++ 3.0.而这套软体也开启了Borland 雄霸C/C++ 编译器常达5 ,6 年之久的序幕。

Borland C/C++ 3.0 推出之后由于拥有第一个在Window下的稳定的图形整合发展环境,而且它产生的最佳
化程式码也是 Microsoft C/C++ 6.0 望尘莫及的,因此很快的几乎所有的 C/C++ 程式师转而使用 Borland
C/C++ 3.0.因此在那个时候有一个现象,那就是几乎所有的公用程式或是Shareware都是使用Borland C/C++开
发的,许多硬体厂商的驱动程式也是使用Borland C/C++ 3.0 来撰写的。

1992年我取得Georgia Institute Of Technology 的硕士学位之后最想进入的公司便是Borland 和Micro-
soft,不过最后我还是决定回台湾工作。在此时Borland也进入了最巅峰的时期,因为Borland 推出了Borland
C/C++ 3.1。

Borland 在 Borland C/C++ 3.0 获得空前的胜利之后,并没有松懈下来,因为 Borland 知道Borland
C/C++ 3.0还缺了一个最重要的胜利因子,那就是如同Microsoft 的 MFC 一样的 C/C++ 的 Framework ,因为
Borland 也看出了Framework 将会是未来 C/C++ 产品中最重要的一环科技。不过 Borland 此时面临了一个重
要的十字路口,那就是到底要自己开发一个和 MFC 抗衡的 Framework,还是要如何做。 因为如果要自己开发
Framework,那么势必要花上一些时间,但是 Borland想趁 Borland C/C++ 3.0 如虹的气势再下一城,以便彻
底击溃Microsoft C/C++。 因此最后 Borland 决定向一家叫 White Water 的公司购买一套由这家公司开发的
一个 Framework,这套 Framework 便是后来鼎鼎大名的 OWL 的源流。而 Borland 也因为向 White Water 购
买了这套Framework,因而也引进了一个日后非常重要的人物,那就是后来负责开发Delphi的一员大将 - Zack
Urlocker。

在Borland 购买下White Water 的C++ Framework 之后,便更命为OWL(Object Window Library),并
且很快的推出了以OWL 1.0 为核心的Borland C/C++ 3.1。由于OWL比当时的MFC 1.0 封装的更为完整和好用,
再加入Resource Workshop 视觉化能力,以及Borland C/C++ 3.1 自己最强劲的编译器和整合发展环境,因
此立刻的风靡了全世界,其受欢迎的程度更是远远的超过了它的前一版本Borland C/C++ 3.0。

由于Borland C/C++ 3.1 的畅销,立刻让Borland 在C/C++ 市场一举击溃了 Microsoft C/C++ ,市场占
有率超过了50% ,是全球第一的C/C++ 产品,也把Borland推上了最高峰,成为全世界第三大的软体公司。

很快的,我所工作的开发小组也立刻的以 Borland C/C++ 3.1 来开发系统,Borland C/C++ 3.1 也是我
使用过Borland 最稳定的C/C++ 版本之一。也由于那个时候一天到晚都使用C/C++工作,因此就有了一些小心
得。稍后我整理了一些东西便投稿到刚出刊不久的RUN !PC,也许是运气不错,RUN !PC 很快的也登出了我
的文章。就是这篇文章登出之后,台湾的Borland 注意到了我,开始和我连络,并且从此展开了和Borland 的
互动。而Borland C/C++ 3.1 也是第一套Borland 免费送我的软体,当然代价就是希望我多写一些Borland产
品的文章。

接着Borland 又计划推出 Windows 版的 Borland Pascal,不过在 Borland 开发Borland Pascal For Win-
dows时,当时(现在也还是)最具盛名的Charles Petzold (我的第一本Windows 程式设计的书就是这位仁兄
写的,相信许多人也是看他的书一路学来的)就说除了 C/C++ 之外,Borland不可能做出能够在 Windows下执
行的Borland Pascal,不过很明显的,即使是 Windows API 的大师 Charles 也错了。Borland 不但做出来了,
而且Borland Pascal For Windows 还非常的畅销,当然Borland Pascal For Windows也是后来Delphi的根基。

当时的Borland 可说是不可一世,不但产品大卖,而且日进斗金。Borland在 Scotts Valley 豪华的总部
也是在那个时候由 Philippe Kahn 大手笔的花了一亿多美金搭建的 (想想10年前的60多亿台币可以盖什么样
的房子?)。不过也许是 Borland 太成功了,因此也开始让 Philippe Kahn 渐渐的养成了好大喜功,目中无
人的态度,也种下了Borland 开始走向衰退的因子。

来自:yankk ,时间:01-6-18 2 :47:00, ID :570808不过在 Borland 最强盛的时期,当然也就是
Microsoft 最想痛宰Borland 的时候,在这个时候发生了一个着名的事件和一个着名的虚拟人物。话说由于当
时Microsoft 的开发工具一直打不过Borland 的产品,因此在Microsoft 的开发工具刊物上便出现了一个作者
不断的以文章嘲笑Borland ,这个作者的笔名是 Buck Forland。 后来由于这位作者的文章内容以及他的笔名
引起了当时Borland的不满以及大量Borland使用者的强烈抗议,因此稍后这位作者就突然的消失不见了。因此
有许多人就推测这个作者应该是 Microsoft 的工程师,由于一直无法打败Borland 的产品,脑羞成怒,因此才
会以这个笔名来发泄。 如果各位看倌到现在还摸不着头为什么这个笔名会引起轩然大波,那么请你试着把Buck
Foland 这两个英文字的第一个字母一对调就知道为什么了。现在各位是否会心一笑了?

在Borland C/C++ 3.1 大获成功之后,Borland 却开始松懈了下去,并且开始走下坡。当然这有许多的原
因,我所知其中最重要的原因有数项:

■Philippe Kahn 和当时Borland C/C++ 的产品经理闹翻了。这位 BorlandC/C++ 的产品经理的名字是Eu-
gene Wang ,他是一位非常聪明的中国人。他一手把Borland C/C++ 带到了世界第一的地位,并且在Borland
C/C++ 3.1 成功之后有了更伟大的想法,那就是 Eugene Wang想在下一个Borland C/C++ 版本中完整的以OWL封
装所有的 Windows API ,因为OWL 1。0 虽然比MFC 1。0 来得优秀,但是OWL 的隐忧就是OWL 尚未完整的封装
所有Windows 的API。此外Eugene还计划以OWL 为核心,开发一个类似今日Borland C/C++ Builder 的以视觉化
元件为开发方式的开发工具。请各位想一想,如果在当时Borland 能够开发出这种 C/C++ 开发工具,那么将会
是一个多么可怕的产品,稍后Microsoft 的 Visual C/C++ 1.0 只是能够在整合发展环境中自动产生 MFC 的程
式码就立刻的轰动了 C/C++ 市场,造成了大量程式师转入 Microsoft 的阵营。即使是目前的 Borland C/C++
Builder使用的Framework 仍然是以Object Pascal 以核心的元件Framework ,而不是纯粹的C/C++ 程式码。如
果当时 Eugene Wang能够做出他心中的下一版Borland C/C++,那么我想到现在Borland C/C++ 可能还是市场中
第一的 C/C++ 开发工具。不过很不幸的是,Eugene Wang 稍后和 Philippe Kahn 发生了争执,Eugene Wang一
气之下离开了Borland。而 Philippe Kahn 则认为 Borland C/C++ 的地位已不可动摇,因此也没有想立刻的做
下一版的Borland C/C++。这样一拖竟然浪费将近2 年的时间。

Microsoft Visual C/C++ 1。0在Borland C/C++ 3.1 2 年之后推出,并且立刻获得市场好评。不但在编译
器方面能够和Borland C/C++ 3.1 相抗衡,在整合发展环境方面更大幅领先了Borland C/C++ 3.1,还能够自动
产生MFC 的程式码,再也不是昔日的吴下阿蒙。直到此时 Philippe Kahn 才从梦中惊醒而急于开发下一代的
Borland C/C++ 4.0 ,但是为时已晚,C/C++ 的开发工具市场从此就开始逐渐的被Microsoft 蚕食了。

Eugene Wang 在离开 Borland 之后,立刻的被 Symantec 所网罗,稍后Eugene Wang也在非常短的时间
之内为Symantec开发出了着名的Symantec C/C++。 Symantec C/C++ 在当时被所有的技术刊物评比为拥有最
棒的整合发展环境和最有创意的C/C++ 开发工具,从此可见Eugene Wang 的功力。不过 Symantec C/C++ 稍
后也不敌 Microsoft Visual C/C++,这个故事的原因在稍后四大C/C++ 编译器之争的段落中再详细的说明。

我最后听说 Eugene Wang 跑去做生意了,并且在前几年写了一本教导科技人员如何面试的书籍。我,一
直很痛心Borland 失去了这么一位优秀的人材,我常想如果当初 Eugene Wang 没有离开Borland ,那么历史就
可能不是现在的这样了,Sign!!!

■Philippe Kahn 大手笔的花了一亿多美金买下了 Ashton-Tate 公司和dBase。在当时许多人都批评Phi-
lippe Kahn 做了不值得的事情,因为 Ashton-Tate 不值这么多钱。但是由于当时 Borland 多的是钱,因此
Philippe Kahn也不多意。不过这并不是Borland 走向逐渐走向衰败的主因,而是在 Borland 买下了dBase 之
后,并没有立刻积极的发展dBase For Windows ,反而把dBase 丢在一旁。这个原因便是当时Borland 的另外
一个和资料库有关的产品Paradox 卖得也很好,因此Philippe Kahn 并不急着打算开发 dBase For Windows。
不过Philippe Kahn 忘记了一件事情,那就是当时在市场大量人口的dBase 程式师需要一个好的 Window 版
dBase ,但是Philippe Kahn 购买了dBase 却不提供Windows 版的解决方案。

因此当稍后Microsoft 以极小的代价买下Fox 这家公司,并且在数年之后推出 FoxPro For Window,吸引
了大量原先的dBase 程式师以及Paradox 的程式师之后,Philippe Kahn 才警觉事情不对而充充忙忙的开发
dBase For Windows。但是当dBase For Windows 推出之后,Microsoft 早已推出了两个FoxPro For Windows的
版本,而占据了大部份的市场,dBase For Windows 其势已不可为了。

■Microsoft 开始向Borland 挖角。由于Microsoft 在许多的开发工具战役中一直被 Borland 打得灰头土
脸。更何况Borland C/C++ 3.1 几乎抢占了大部份的市场,因此Microsoft 开始准备好好的对付Borland。但是
由于其时Borland 在编译器的技术领域领先了Microsoft 数年之久,Microsoft无法在短时间之内赶上Borland,
因此 Microsoft 决定使用最有效的方法立刻追上 Borland 技术,那就是直接挖角。因此稍后Microsoft 的
Visual C/C++小组有60 %的成员是从Borland挖来的,这个举动不但立刻的让Borland 流失了大量的优秀技术人
才,也在数年之后造成了Borland 控告 Microsoft 的导火线。不知道各位看到这里有什么感觉,或是没有感觉。
不过我总是觉得 Microsoft使用了不好的手段来竞争,并不是光明正大的击败Borland,而是使用了不公平的竞
争手段。

Philippe Kahn 在这段时间不但让 Borland C/C++ 被 Microsoft Visual C/C++ 反败为胜,也痛失了几
乎所有dBase 的市场,更浪费了大量的金钱,和流失了大量的优秀人员。在这些重要的原因之下, Borland
已经不可避免的开始走下坡了。

我最后一次看到Philippe Kahn 时是在1994年未于亚特兰大(Atlanta )参加国际Conference时,还和他
打了一声招呼。后来Philippe Kahn 离开了Borland,另外创立了StarFish这家公司,稍后StarFish也被Moto-
rola并购。虽然Borland由于Philippe Kahn 一些错误的决策而逐渐的从巅峰开始下降,但是Philippe Kahn也
不愧为一个人物。因为Philippe Kahn 能够和Bill Gates一直周旋数年之久,而同一时期的许多公司,例如
Lotus 都一一的被 Microsoft所击败,因此 Philippe Kahn 还有一套的。此外 Philippe Kahn 也是唯一一个
拥有工程师特性的 Borland CEO ,Philippe Kahn 仍然重视技术产品和技术人员。但是Borland 随后的CEO几
乎都是Marketing ,Finance 或是Sales出身的人,这真让我怀念以往以产品和技术为优先的CEO 了。

看完了上面这段今人伤心的历史之后,再让我们看看当Borland 在受到Microsoft Visual C/C++的强大冲
击之后,如果思索反击之道。在这段期间也出现了令我敬佩的第一个Borland 技术工程师,Carl Quinn。

Carl Quinn在Microsoft Visual C/C++ 1。0推出之后,立刻奉命开发一个能够和MFC 相抗衡的全新OWL,
而CarlQuinn也是数年后JBuilder的JBCL Framework的灵魂开发人物。Carl Quinn 不但负责开发OWL ,也为
Borland 在元件Framework 的技术领域立下了重要的贡献。由于 Carl Quinn 的投入,因此开启了 OWL 大战
MFC,Borland C/C++缠斗Visual C/C++数年精彩好戏的序幕。

Carl Quinn 到现在我还记得和敬佩的人物,让我再一次的向他致敬,并且介绍他让大家认识。

Carl Quinn ---- 我第一个佩服的Borland 工程师

--------------------------------------------------------------------------------
 
--作者:小枣粽子
--发布时间:2004-8-23 22:56:00

--
火线全开

Borland在开发工具市场和Microsoft激战之时,Microsoft和Lotus也正在电子表格工
具以及文字处理工具市场进行大战。这时Borland不思好好地集中资源开发新的开发
工具和数据库工具(稍后本书会详细说明Borland在数据库市场的战役),也不甘寂寞
地投入了大量的资源进入这个惨烈的市场。也许是当时Borland太有钱了,或者是
Philippe Kahn的脑袋出了问题,居然决定进入这个Borland陌生的市场,更何况在
Borland投入时Lotus已现败象,Office市场已经慢慢地被Microsoft所一步一步地掌
握了。

Borland进入Office市场的第一个产品是著名的Quattro Pro电子表格。虽然Quattro
Pro是一个相当不错的产品,而且当时,由Borland C/C++编译器所开发的Quattro
Pro在执行效率上几乎是最好的,但是Borland没有想到使用电子表格的使用者是一般
的办公室人员,这些人注重的是方便性和功能性,而不是执行速度,这和开发人员是
不一样的。Borland以开发者的心态来开发电子表格工具基本上是走错了方向。因此
我记得在那段时间中,杂志评比Microsoft的Excel、Lotus的1-2-3和Borland的
Quattro Pro时,在功能方面领先的都是Excel和Lotus,在执行效率方面领先的则是
Excel和Quattro Pro。到了电子表格热战的末期,1-2-3甚至比不上Quattro Pro,因
此Lotus败走电子表格市场已是不可避免的结果了。

不过Borland虽然赢了1-2-3,但是和Excel仍然有一大段的距离,Microsoft一统电子
表格江山之势已不可动摇,因此最后Borland在损失了大量的资源之后,Quattro Pro
只能卖给Novell。

除了Quattro Pro之外,Borland也投入了很多的资源秘密地开发一个代号为Spring的
文字处理程序(Word Processor)准备和Microsoft的Word以及WordPerfect竞争,这可
能是许多人不知道的。但是这个产品最后仍然无法问市而胎死腹中,在文字处理市场
Borland不但浪费了时间,更虚掷了大量的资源。

Philippe Kahn在Office产品方面消耗了Borland大量的金钱和时间,却落得铩羽而归,
更连累了开发工具市场以及最有可能成功的数据库产品市场。

另外一个和Borland无关的故事是关于Microsoft Excel是如何兴起的。话说当Lotus
1-2-3最盛的时期,Microsoft一直在觊觎这个市场,但是苦于无法开发出一个能够
和1-2-3相竞争的产品。有一次Lotus举办了一个Lotus 1-2-3的技术研讨会,由当时
Lotus 1-2-3的首席工程师主讲。Microsoft知道了这个技术研讨会之后,立刻派出了
最好的程序设计师,现场询问Lotus是如何开发1-2-3的,并且趁机询问这位首席工程
师如何克服1-2-3在许多技术方面的难点,而这些困难处正是Microsoft的工程师无法
克服的。

当时,在现场中的Lotus首席工程师虽然知道这些人是Microsoft派来的,而且询问的
问题正是1-2-3许多关键的技术点。但是这位首席工程师凭借着多年的开发经验,认
为Microsoft不可能在短期之内追上1-2-3,因此就没有多作保留地回答了许多重要的
问题。没有想Microsoft的这些程序员也是非常聪明的人才,一经指点之后,立刻畅
然全通,在短短的1、2个版本之后不但马上追上了1-2-3,许多功能方面更是青出于
蓝,1-2-3便逐渐失去优势了。我想这位1-2-3的首席工程师一定很后悔当时回答了关
键的技术问题吧。

结论:千万不要小看Microsoft,他们是非常精于模仿的。也永远不要小看你的竞争
对手。

数据库市场的失误

Borland全盛的时期,事实上也是开发数据库产品最好的机会。因为在当时Borland手
握DOS最畅销的Paradox,并购了Ashton-Tate而拥有世界大部分dbase的市场,又取得
了Ashton-Tate从HP购买的真正关系数据库(RDBMS)--InterBase,可以说是当时全世
界数据库工具实力最雄厚的厂商。

当时的Oracle和Borland比起来,简直是小巫见大巫,而Sybase更不知道在哪里。如
果Borland能够好好地掌握这个机会,极力开发数据库产品,那么现在Borland就算不
是世界第一的软件公司,也将是世界第二的软件厂商。可惜Philippe Kahn并没有看
到这个从80年代末到90年代成长最快速的产品市场。说句笑话,如果当时Philippe
Kahn的死对头Bill Gates早一点说出"Information At Your Finger-Tip"这句话,点
醒Philippe Kahn数据库市场的重要性,那么Borland就可能是现在的Oracle了。

说到数据库市场,就不得不对Microsoft的眼光佩服,也不得不佩服Microsoft行销能
力的强悍。当Microsoft以FoxBASE For Windows强占了Windows开发者的数据库工具
市场之后,又了解到一般计算机使用者也需要使用简易好用的数据库管理工具,因此
开发出了更简易的Access。但是当时在类似的市场中,Borland的Paradox占有开发者
数据库大部分的江山,而一般使用者的数据库管理工具市场则由Lotus的Approach博
得先机。

Microsoft为了进入由Lotus Approach主宰的市场,采取了很多方法。我还记得在当
时Visual Basic 3的软件包中Microsoft附了一张优惠卷,只要800新台币就可以买一
套Access。这简直就是流血大拍卖。不过它的目标很明显,就是击败当时卖1万多元
的Lotus Approach。果然,Microsoft此招一出,Approach便被Access打得落花流水,
很快失去了市场,也很快地退出了市场。从此一般使用者的数据库管理工具市场便由
Access所独占。

但是Borland并没有警觉到Access会继续往开发者市场进攻,因此仍然没有加紧在
Paradox产品上的开发。Borland总觉得Paradox的市场地位是无法轻易撼动的,而且
Access的目标市场也不是Paradox的市场。

但是Borland忘记了Microsoft非常擅长模仿。在随后的Access版本中,Microsoft不
断地加入可程序设计的功能,因此也逐渐地吸引了一些Paradox入门使用者的市场。
再加上FoxPro For Windows又持续地强攻开发者数据库市场,Paradox终于在腹背受
敌之下逐渐败下阵来。虽然在末期Philippe Kahn对Paradox投下重兵,希望能够挽回
劣势。奈何时不我予,Paradox在奋斗了Paradox 6和Paradox 7的2个版本之后,终究
难逃失败的命运。

当时在看到Microsoft如何打击竞争对手时,我就和朋友开玩笑说,Microsoft有天下
无敌的三大绝招,那就是"打不过你就模仿你(这让我想起电影秘密客)。再打不过就
和你比流血,看谁流得久(这让我想起吸血鬼)。最后如果再不行的话,那就挖光你的
人(这让我想起电影Other People/'s Money)"。Lotus就在Microsoft的前两个绝招下
倒地不起,而Borland还算是功力深厚,连中三大绝招,虽然不像Lotus和许多其他公
司一样从此Bye-Bye,但也是受伤极重的了。

ODBC和IDAPI之争

当Microsoft逐渐地击败竞争对手、并且拥有了大部分PC数据库市场之后,便慢慢地
了解到掌握标准的重要性。此外,Microsoft为了统一各应用程序之间不同数据的存
取,开始制定存取数据的统一标准--ODBC。Microsoft更大的目的是为了准备和瞄准
下一场的大战,那就是PC上的关系数据库产品的市场。

当然,Microsoft要一统数据存取的江山,除了Borland不会同意之外,其时一心想从
Microsoft扳回一城的IBM也不同意。而Novell更是害怕,因为Novell怕Microsoft成
功之后,Netware会消失得更快。于是IBM、Novell和Borland以及一些其他的小厂便
聚集在一起,决定也制定一套存取数据的标准接口来和Microsoft对抗,这个制定的
数据存取标准便是IDAPI。这正式揭开了ODBC和IDAPI竞争的序幕。

不过IBM、Novell和Borland的结合很快就被证明是失败的,因为就像稍后说明的一样,
IBM在PC软件上的开发一直是三心二意,反反复复。因此当IDAPI 1.0的规格出来之后,
IBM这位老兄又失去了和Microsoft对抗的兴趣,于是退出了IDAPI联盟。至于Novell
就更不用说了。Novell对于和Microsoft竞争一向是"说说可以,真打不行",一定要
找到一群厂商才敢和Microsoft对抗。Novell眼看IBM退出之后,也马上不战而降,很
快地就也退出IDAPI联盟,这个现象和稍后Novell对于和Borland秘密合作的
Appware/AppBuilder计划如出一辙,都是虎头蛇尾,草草收场。

在两个大同盟临阵脱逃之后,Philippe Kahn仍然不畏惧Microsoft的竞争,还是以
IDAPI 1.0的规格实现数据存取引擎,这就是我们现在使用的BDE/IDAPI和SQL Links的
前身。当时IDAPI 1.0的功能规格比ODBC 1.0好得多了。我记得Delphi 1.0使用的
BDE/IDAPI和SQL Links驱动程序也比当时慢得像乌龟的ODBC快得太多了。只可惜在
IBM和Novell退出之后,其他的小厂也是一哄而散。因此Borland只能靠自己独自和
Microsoft对抗。Borland能够以少量的资源一直对抗到Delphi 3的BDE/IDAPI才逐渐
地被ODBC追过,也算是非战之罪了,怪就只能怪Borland意志不坚的盟友们。

当然,由于IBM和Novell的行事作风如此,所以在稍后许多能够和Microsoft一较长短
的机会也因为如此而消逝,最后自食恶果,逐渐失去了PC的软件市场,再也无力和
Microsoft抗衡了。

 

--------------------------------------------------------------------------------
 
--作者:小枣粽子
--发布时间:2004-8-23 22:57:00

--
第二章C/C++的圣战

"在惨烈的、大规模的C/C++战役中,注定只有最强者才能生存下来!"

Borland C/C++的反击

当Visual C++1.0在C/C++开发工具市场获得空前的成功之后,Borland才从Borland
C/C++3.1的胜利梦中惊醒,思考如何面对Visual C++的猛烈攻势。事实上,Borland
如果脑袋清醒一点,好好看清当时C/C++开发工具的市场,那么Borland应该会发现虽
然Visual C++经过两年多的整军经武,实力已经大胜以前。但是,Borland C/C++3.
1在许多方面仍然是可以和Visual C++一争长短的。首先,当时Visual C++的最佳化
编译器仍然落后Borland C/C++3.1;第二,MFC仍然没有完整地封装Windows API,而
且MFC是以较低阶的方式封装Windows API的,面向对象做得并不好,也不是很容易使
用。事实上以我的观点来看,正是因为MFC不好用,所以Visual C++才需要在集成开
发环境中提供以可视化方式产生MFC程序代码的功能。第三是Visual C++当时并没有
很好的封装数据结构的Container Class,而Borland C/C++却有非常好用的BIDS类别
库。第四,也是最重要的,Borland C/C++3.1仍然拥有绝大多数的市场,而且几乎所
有的外围公用程序,Shareware等都是使用Borland C/C++3.1开发的。因此,如果Borland
不着急,好好地开发下一代的C/C++开发工具,即使Microsoft VisualC++能够掠
夺一些市场占有率,但是如果下一代的Borland C/C++能够像Borland C/C++3.0一样
立刻拉开和Visual C/C++的距离,那么Borland在C/C++市场仍将拥有王者的地位。

可惜的是,也许是Philippe Kahn在和Microsoft的FoxPro For Windows一役中被吓着
了,因此急于在Visual C/C++1.0之后立刻推出新的Borland C/C++以扳回颜面。但是
Philippe Kahn忘了,在这段时间之内Borland失去了许多的人才,Eugene Wang也离
开了。更重要的是在过去近3年的时间内,Borland几乎没有持续地开发下一代的
Borland C/C++,短时间内怎么能够仓促地推出新产品呢?

可是Philippe Kahn管不了这么多了。他急忙找来了Carl Quinn等人后便要求立刻开
发出下一代的Borland C/C++,于是Borland C/C++4.0就在这鸭子赶上架的情况下匆
忙地开发了。Borland在开发Borland C/C++4.0时犯了许多的大忌。首先在这么短的
时间内Borland决定全新升级集成开发环境;第二是把OWL完全重写;第三是大幅修改
最佳化编译器;第四是整合当时棘手的VBX,Borland居然让16位和32位的Windows程
序同时使用16位的、丑陋的VBX。

上面所说的每一项都是大工程。Borland早应该在Borland C/C++3.1之后便开始进行
这些工作,现在要在短短的一年多时间内重新开发这么复杂的一个C/C++开发工具,
几乎是不可能的。但是在Philippe Kahn的强力要求下,这些Borland的工程师还是硬
着头皮做了出来。

不过我必须很沉痛地说,当时在Borland C/C++4.0 Beta测试时,我便和台湾Borland
的人说,如果Borland仓促推出Borland C/C++4.0的话,那么不但不会对Visual C++
产生任何的影响,反而是自杀的行为。因为臭虫实在太多了,整个集成开发环境的反
应也很缓慢,它的最佳化编译器更是笑话,错误百出,真像当时恶名昭彰的Microsoft
C 4.0一样。我还开玩笑地说,是不是因为Microsoft从Borland挖了大量的Borland
C/C++人才,因此好胜的Philippe Kahn也还以颜色,从Microsoft反挖Microsoft C
的人,却不幸地挖到了Microsoft C 4.0的人。

但是,显然Borland并没有听到我或其他Beta测试人的心声。在Visual C++1.0推出后
的1年多、推出Borland C/C++3.1之后的第4年,Borland终于推出了新一代的Borland
C/C++ 4.0,这个肩负和Visual C++1.0对抗的新一代C/C++开发工具。

在Borland C/C++4.0刚推出之际,Borland确实为4.0做了极大的造势,我记得在当时
所有重要的计算机杂志中,例如Byte、PC Magazine、Dr. Dobb/'s等,都有4.0整页的
广告。这个广告的内容是以一个巨大的猫头鹰为主,再搭配蓝色底系的Borland
C/C++4.0,选用巨大的猫头鹰当然是因为OWL的原因,只可惜我现在找不到那幅广告
的画面了。

当时Borland C/C++4.0使用了如下的广告用词:

Visual Is Only A Facial Facade

来讽刺Visual C/C++只提供了产生MFC程序代码的基本精灵,而Borland除了提供相对
应的AppExpert精灵(能够提供类似的功能,以产生使用者选择的OWL程序代码)之外,
Borland C/C++4.0的集成开发环境还提供了可视化的三面版窗口,能够让程序员完整
地掌握整个项目的情形。

下图便是当初令人眼睛为之一亮的AppExpert:

下图则是当时Borland C/C++的注册商标,三面版窗口开发环境。看到此图又令我想
起当初使用C/C++撰写程序的日子,下方程序页面清楚地显示了我1995年在鼎新工作
时写的智能型Windows排程系统,时间过得真快啊。

当时Borland C/C++4.0的三面版集成开发环境真正开创了一个新的局面,因为这个集
成开发环境允许程序员知道每一个应用程序定义的窗口信息,并且能够立刻把它显示
在下方的程序代码窗口中,的确是非常的方便,也比当时Visual C/C++的集成开发环
境来得先进。再加上Borland较为先进的编译器技术和架构更好的C/C++ Framework-
OWL,照理说Borland C/C++4.0应该会获得极大的胜利,可为什么最后会以失败收场
呢?

没错,在Borland C/C++4.0刚推出之际,订单的确如雪片般飞来,销售情形非常好。
这毕竟是Borland在久违了数年之后的大作,许多Borland的用户都迫不及待地升级,
当初我也是拼命地要求台湾Borland第一个给我Borland C/C++4.0。但是在推出一段
时间之后,市场的反应就急速地冷却下来,因为各种负面的批评不断涌现。这主要的
原因当然是因为Borland C/C++4.0的品质实在不好,就像前面我在Beta测试时说的,
由于Borland太急于推出4.0,因此并没有在最后阶段修正许多的臭虫,又没有经过最
后系统微调的工作,同时又过于大胆地加入太多先进的技术,造成了整个产品的不稳
定,而犯下了大错。下面几点应该是造成当初Borland C/C++4.0惨遭滑铁卢的主要原
因:

集成开发环境方面:臭虫太多,容易当掉而且反应速度缓慢

编译器方面:最佳化玩得过火,产生错误的编译程序代码

OWL方面:采用全新的多重继承架构,虽然是正确的做法,却和Borland C/C++3.1
中的OWL不兼容,造成许多程序员无法升级C/C++项目

VBX方面:大胆的采用在16/32位都能使用VBX的技术,造成一些VBX无法顺利地在Borland
C/C++4.0中使用

我想其中最可惜的就是OWL了。OWL 2.0在各方面都有一流的表现,实在是MFC强劲的
竞争对手,获得了各方一致的肯定和称赞。无奈的是,由于OWL 2.0做了基本架构的
改变,这虽然是为了解决当初OWL l.x使用了不标准的C/C++编译器技术的问题,但是
这造成了原来Borland C/C++3.x程序员极大的困扰,因为升级不易。对于新的C/C++
使用者来说,又因为Borland C/C++4.0本身不稳定的因素而却步,因此造成了OWL
2.0叫好不叫座的下场,真是可惜了OWL小组的努力。

还记得当时我的项目使用了FarPoint的SpreadSheet VBX组件,由于一直无法顺利地
在Borland C/C++4.0中使用,并且会造成应用程序的当机,最后追踪执行程序代码却
发现应该是Borland C/C++4.0的问题,因此最后只好在咒骂中放弃使用Borland
C/C++4.0,而回到Borland C/C++3.1。当时想,对于我这个长期使用Borland产品的人
都无法忍受4.0的品质,其他的程序员又怎能使用这个产品呢?我想这就是为什么后来
4.0全面溃败的原因,因为Borland推出了根本不堪使用的产品。

我在Borland工作时,有一次在新加坡和现任Borland开发者关系部门副总裁的David
Intersimone谈起这一段往事,David也很感慨,他直呼"We screwed it up!(我们把
事情搞砸了)","It/'s a mess(那实在是一团混乱)"。David还说当时整个Borland
C/C++开发小组都很混乱,和以往Borland C/C++3.0/3.1的开发小组比起来实在是差
太多了。除了因为一些重要的人物相继离开Borland以及Microsoft也挖走一大票人之
外,与Philippe Kahn的直接介入,造成人事不和也有很大的原因。

在Borland C/C++4.0快速失利之后,Borland也认识到问题的严重性,因此立刻着手
开发Borland C/C++4.0的Patch,当时是称为Service Pack。但是在稍后的4.01版
中并没有完全解决问题,一直到4.02才稍微解决一些严重的问题。无奈时不我予,拖
的时间太长,市场已经起了巨大的变化。

Borland C/C++4.0失败之后,立刻造成了严重的后果。首先是Borland C/C++的市场
大量而且快速地流失,使得Visual C/C++快速地成长。第二点是当初Borland C/C++
3.1在公用程序市场打下的江山也拱手让人,原本许多使用Borland C/C++3.0/3.1撰
写驱动程序的硬件厂商也开始转换到Visual C/C++。而更严重的是,由于4.0的品质
以及稍后OLE的关系,应用程序市场也开始大量地转为使用Visual C/C++来编写应用
程序。

此时,Borland在三个主要的应用市场接连败退,C/C++的江山注定将易主,其颓势已
不可挽回。

Borland C/C++、Visual C/C++、Watcom C/C++和Symantec C/C++的缠斗

自Borland C/C++4.0一役大败之后,Borland在C/C++市场上建筑的巨大堡垒似乎再也
不是牢不可破了。Visual C/C++固然在不断地接收Borland C/C++失去的市场,这时
在C/C++市场上也开始出现另外两个坚强的对手,那就是Symantec C/C++和Watcom
C/C++。

Symantec C/C++的发展史

Symantec C/C++和Watcom C/C++这两个对手的来头都不小。先说Symantec C/C++吧,
它的Think C/C++在Macintosh上便是非常有名的编译器,因此早在C/C++领域便有深
厚的基础。在Symantec并购了PC上第一个C/C++编译器Zortech C/C++之后,Symantec
进入PC的开发工具市场也是箭在弦上了,只可惜的是,其时Symantec还未找到一个在
PC上有丰富经验的开发工具领导者。

也许是上天注定要引起稍后的C/C++编译器大战吧,此时Borland C/C++3.1的幕后支
柱Eugene Wang刚好和Philippe Kahn闹翻,离开了Borland。Symantec眼见机不可失,
立刻重金招揽Eugene Wang到Symantec,为Symantec推出第一个Windows上的C/C++
开发工具。1993年左右,在Eugene Wang的掌舵之下,Symantec推出了第一个
Symantec C/C++版本,立刻便获得了市场的好评。自此之后Symantec C/C++军心大振,
不断地继续改善,也逐渐获得了不小的C/C++市场,俨然成为可以对抗Borland C/C++、
Visual C/C++的另一山头。当时Symantec C/C++是以最华丽、先进的集成开发环境获
得了市场的高度认同,在C/C++编译器最佳化方面的表现也不输给其他的编译器。

当时我正为《RUN!PC》撰写有关C/C++的文章,因此Symantec台湾分公司的人也和我
联络过,并且送给我一套最高档的Symantec C/C++版本,希望我除了为Borland写C/
C++的文章之外,也能够为Symantec C/C++写一些东西。我还记得,在当时安装
Symantec C/C++之后,我的确被它的集成开发环境吸引得说不出话来,因为实在是太
棒了。Borland C/C++和Visual C/C++的集成开发环境同Symantec C/C++的集成开发环
境比较起来,立刻变成索然无味、平淡无奇了。即使到现在,我仍然必须竖起大拇指对
Symantec C/C++的集成开发环境说声"赞"。我想Eugene Wang在这么短的时间内把
Symantec C/C++打造得如此之好,除了证明他的不凡功力之外,也有向Philippe Kahn
示威、证明Philippe Kahn让他离开Borland是错误决定的意思。我之所以如此说,是
因为其时Symantec C/C++最喜欢点名挑战的对象便是Borland C/C++。

就我的感觉而言,Symantec C/C++就像是一个技艺精良、又装备华丽的C/C++军团。

Watcom C/C++的发展史

非常有趣的是,Watcom C/C++走的路子和Symantec C/C++几乎是完全相反的。当时出
品Watcom C/C++编译器的是一家加拿大的小公司,不过这家公司却对最佳化编译器有
深入的研究。当时,Watcom C/C++是以在DOS下能够产生最好的最佳化程序代码闻名
于世的,许多写游戏和DOS Extender的厂商都指名要使用Watcom C/C++,因为不论是
Borland C/C++还是Visual C/C++,它们产生的最佳化程序代码都比Watcom C/C++的
最佳化程序代码差上一截。再加上当时最有名的DOS Extender厂商PharLap公司也是
使用Watcom C/C++,因此Watcom C/C++在专业的C/C++程序员以及系统程序员心中是
第一品牌的C/C++开发工具。

不知道还有多少读者记得PharLap这家公司,或是有没有读者记得Andrew Schulman这
位伟大的软件技术人员。当时Andrew Schulman的Undocumented Windows一书红遍了
半边天,也惹得Microsoft要告Andrew Schulman。而Andrew Schulman便是PharLap公
司的首席工程师,也是当时最著名的"The ANDREW SCHULMAN Programming Series"的
总监。而PharLap公司是当时出版DOS Extender软件最成功的软件公司。

当时由Matt Pietrek撰写的Windows Internals也是轰动一时的巨著。谈到Matt
Pietrek,熟悉Windows Programming的读者应该很少有不知这位大师级人物的。Matt
长期在Microsoft System Journal撰写Under The Hood专栏,专门写一些深入系统的
程序设计技术,在数年前便和Andrew Schulman、David Maxey成为Windows System
Programming的三大巨头之一。Matt也是著名的Windows除错工具SoftIce、
BoundsChecker的主要研发工程师。Matt本身是从Borland出道的,他初至Borland工作
时便是在Turbo Debugger小组中研发除错工具。当时Borland的Turbo Debugger是DOS
下最强的除错工具,即使是Microsoft也无法推出能够和Turbo Debugger抗衡的除错工
具。Matt在这个小组中吸收了大量的知识,并且快速成为这个领域的专家。后来Turbo
Debugger小组的部分成员被Microsoft挖走,让Microsoft掌握了Borland的核心除错技
术,以致后来也能够推出不错的除错工具。而Matt也出走到NuMega公司,成为开发
SoftIce、Bounds Checker的关键人物。

写到这里还是不禁要佩服Borland,因为当今许多名满天下的重量级软件工程师都是
由Borland培养出来的。

Watcom C/C++在DOS市场站稳了脚跟之后,由于Windows已经逐渐成为市场的主流,DOS
势必将被逐渐淘汰出局,因此,Watcom C/C++如果要继续生存下去,也就-定要推出
Windows平台的C/C++开发工具。大约是在1993、1994年左右,Watcom终于推出第一个
Windows下的C/C++开发工具。

不过,当时Watcom C/C++在Windows推出的C/C++开发工具实在是平淡无奇。其集成开
发环境和另外三个对手比较起来简直像是远古的产品,-点特色都没有。不过Watcom
C/C++仍然是以它的最佳化编译器作为号召。因此当时发生了一个非常有趣的现象,
那就是许多软件公司会同时买Borland C/C++,或是Visual C/C++,Symantec C/C++
之一,再搭配一套Watcom C/C++。在开发应用系统时使用其他三套开发工具之一,最
后要出货时再使用Watcom C/C++来编译以产生最佳的程序代码。

在Watcom C/C++推出了Windows平台的开发工具之后,也吸引了-群使用者。虽然Watcom
C/C++的市场比起其他的三家来说是最小的,但是总算撑起了一片天,成为四大C/C++
开发工具之一。稍后Watcom C/C++被Sybase并购,成为Sybase Optima++的前身。

对我的感觉而言,Watcom C/C++就像是一个穿着朴素、但是却拥有最佳训练的白色
C/C++军团。

关键的时刻--MFC Or Not

在Symantec C/C++和Watcom C/C++逐渐站稳了脚跟之后,C/C++四大编译器决战的时
刻也逐渐逼近了,一些其他出产C/C++工具的软件公司早已自动退出了这个在当时竞
争最为激烈的软件市场。在1994年末的决战之前,Symantec和Watcom同时面对了一个
非常严厉的考验,那就是C/C++ Framework的选择。

虽然Symantec和Watcom都以各自的特色占得了一定的市场,不过在当时对于一个C/C++
开发工具来说,最重要的功能之一就是C/C++ Framework。因此Symantec和Watcom
也都必须为使用者提供一套C/C++ Framework。不过这对于Symantec和Watcom来说都
是一个难以解决的问题,因为当时的C/C++ Framework已由Borland的OWL和Microsoft
的MFC所占领,虽然市场上也存在一些跨平台的C/C++ Framework,例如ZApp和Zinc等,
但是这些C/C++ Framework终究没有产生很大的影响。如果Symantec和Watcom要自
己发展新的C/C++ Framework,那他们还没有如此雄厚的资源,也无法在短时间之内
完成。因此Symantec和Watcom必须决定,到底是要使用Microsoft的MFC还是使用Borland
的OWL来作为他们开发工具的C/C++ Framework。

1993年初,Symantec和Watcom分别和Microsoft签约授权使用MFC作为他们的开发工具
的C/C++ Framework,至此大局已定,在C/C++ Framework的市场已经形成三家夹击一
家的形势。当时许多人便预测Borland会成为输家,因为市场已经成为一面倒的现象,
MFC看起来已经是胜券在握了。当时,Borland的内部也展开了激烈的辩论,讨论是
否也要授权使用MFC作为C/C++的Framework,停止继续开发OWL。不过,后来Borland
还是决定继续开发OWL,而不使用MFC,因为Borland的C/C++技术小组认为MFC不论是
在架构上或是设计上都比不上OWL。而且,由于当时Visual C/C++对于C/C++标准的支
持不如Borland C/C++,所以在MFC内部使用了大量的Macro以及不标准的语法,因此
如果Borland C/C++要使用MFC,那么还需要修改Borland的C/C++编译器来编译MFC。

对于这一点,我认为Borland是做了一个正确的决定。因为,如果当时Borland也授权
使用MFC,那么不但在气势上输了一截,而且,由于MFC的发展完全掌握在Microsoft
的手里,采用MFC就等于脖子被掐在别人的手里,动弹不得。可惜的是Symantec和Watcom
并没有看清这一点,以为有了和Microsoft一样的Framework,就可以在其他地方和
Microsoft以及Borland一决雌雄,Symantec和Watcom却没有想到,就是这一点决定让
自己在后来的决战中一败涂地,最终完全退出了PC的C/C++开发工具市场。

随着1994年末的到来,C/C++开发工具的四大天王决战的日子也终于愈来愈近了。
--------------------------------------------------------------------------------
 
--作者:小枣粽子
--发布时间:2004-8-23 23:01:00

--
OLE的搅局

不知道是时运不济,还是Microsoft刻意如此,在1994年Borland C/C++和Visual
C/C++决战的前夕,Microsoft推出了OLE(Object Linking And Embedding)技术。OLE
是Microsoft为了对抗Apple的文件技术以及IBM OS2的Workplace和文件技术应运而生
的。OLE可以让Windows平台的文件内嵌在不同的应用程序中,并且能够让文件在应用
程序中被即地编辑(In Place Editing)。说实在的,Microsoft的OLE和Apple以及IBM
的技术比较起来实在是差多了,在稍后也被证明是失败的技术。不过,Microsoft的OLE
和Apple/IBM的文件技术都是失败的技术,都没有造成巨大的成功。虽然这些文件技
术都没有成功,但是OLE却足以成为Borland、Symantec和Watcom失败的重要因素。

我记得当时OLE似乎成为了一个令人趋之若鹜的时髦功能。Word的文件能够内嵌在Excel
之中,而且使用者可以点选此Word文件,应用程序又立刻成为Word来编辑它,实在令
人觉得非常的神奇。不过,在其时所有的软件厂商中,只有Microsoft的应用程序有
如此的功能,其他的厂商例如Lotus、WordPerfect等都无法实现这种功能。

这明显地造成了不公平的竞争,因为OLE技术是由操作系统厂商Microsoft推出的,但
是却让它的应用程序部门同步拥有这种技术,而其他的软件厂商都无法获得第一手的
OLE技术来编写应用程序,这也是为什么当时其他的软件厂商如此火大的原因。

虽然后来其他的软件公司在取得了OLE的技术资料之后,也推出了具备OLE功能的应用
程序,但毕竟是慢了Microsoft许久,市场也流失了许多。不过,我觉得很奇怪的是,
在当时内建OLE功能的应用程序之中,几乎所有软件厂商推出的应用程序在激活数
个应用程序而且使用OLE之后,就非常容易死机,只有Microsoft的应用程序不太会发
生这种情形,因此许多人便认为Microsoft隐瞒了一些技术没有让其他的厂商知道。

由于OLE是如此的复杂,因此Borland无法立刻在OWL之中实现这种功能,于是就造成
厂市场上负面的影响。至于Symantec和Watcom虽然授权使用MFC,但是在其时它们授
权使用的是MFC 1.x的版本,Microsoft并没有把OLE实现在MFC 1.x中,而是实现在MFC
2.0之中。在MFC 2.0推出时,它最重要的功能就是Microsoft加入了20000多行支持
OLE的程序代码,但是MFC 2.0仅限于Visual C/C++使用,就是这关键的一点让其他三
家竞争厂商吃了大亏。

对于OLE这个关键技术的影响,Borland是深知在心的,因此计划在Borland C/C++
4.5的OWL2.5中支持OLE。当时Borland推出的对应解决方案便是OCF(Object Component
Framework)。

Borland当初在设计OCF时有几个重大的目标,这些目标包括:第一、如何使OLE琐碎、
复杂的接口单纯化。第二、如何使OLE在窗口环境下写程序的思考方式一致化--即
使用"事件驱动"的方式来开发。第三、如何在微软占尽天时、地利(但未必人和)的情
况下使Borland的产品具备OLE的功能。第四、如何让大多数C/C++的程序员都能够享
受OLE的功能而不局限于OWL。由于上述的设计目标,从而造就了典雅而具有弹性的
OCF。由于OCF本身是一完整而独立的Framework,因此它可适用于各种C/C++
Framework之中,包含了OWL、MFC以及ZApp/Zinc等Framework。

不知道各位使用过Borland C/C++的朋友们是否还依稀记得下图所示的OCF架构图之一,
以及下面的OCF范例程序代码?这些可是我把1994年写的文章挖出来之后找到的,
真是令我感慨,不禁回想起了当时的情景,在此也让各位回忆一下OWL和OCF。对于不
熟悉OWL和OCF的朋友,也可以从下图和程序代码中观察一下当时的技术以及设计的概
念。我现在看这些图形架构,会发现基本上它们并没有落后现在太多,可见当时设计
者的功力(当然又是Carl Quinn定义的佳作之一)。

程序1 OWL的TOleWindow支持OLE插入对象的成员函数

//
// Insert an OLE object into the view
//
void TOleWindow::CmEditInsertObject()
{
001PRECONDITION(OcView);
002TOcInitInfo initInfo(OcView);

003if (OcApp->Browse(initInfo)){
004TRect rect;
005GetInsertPosition(rect);
006SetSelection(new TOcPart(*GetOcDoc(), initInfo, rect));

007OcView->Rename();
008InvalidatePart(invView);
}
}

程序2 OWL的TOleWindow支持左键双击的成员函数

//
// Handle left double-click message
//
void TOleWindow::EvLButtonDblClk(uint modKeys, TPoint& point)
{
PRECONDITION(GetOcDoc() && GetOcView());
TOleClientDC dc(*this);
dc.DPtoLP(&point);

TOcPart* p = GetOcDoc()->GetParts().Locate(point);

if (modKeys & MK_CONTROL) {
if (p)
p->Open(true); //Ctrl key forces open editing
}
else {
SetSelection(p);

If (p && p == GetOcView()->GetActivePart()){ //resync the active flag
p->Activate(false);
}

GetOcView()->ActivatePart(p); //In-place activation
}

虽然Borland及时地在OWL2.5中加入了OLE的支持,无奈Microsoft随后又在OLE中加入
了许多其他的功能。因此让OCF还是无法完整地支持OLE所有的功能,Borland又无法
不延后Borland C/C++的推出,因此直到l994年末,Borland才终于推出了决战性的
Borland C/C++4.5版本。

C/C++开发工具的最后圣战

"虽然已经过去了许久,但是我仍然忘不了那场最惨烈的战役!"

在1994年末、1995初,Borland痛定思痛,终于清除了Borland C/C++4.0中所有的问
题,也开发出了自Borland C/C++3.1以来最稳定、最快速的Borland C/C++4.5,准备
和Microsoft决一死战。我记得当时许多有关Borland C/C++和Microsoft C/C++的书
籍都是使用十字军的封面。不同的是Borland C/C++的系列丛书都是以蓝色为色系,
而Microsoft的则是以红色为色系,仿佛两大军团终将决战似的。

不过,这次的战役不仅仅是Borland的蓝军和Microsoft的红军相对抗。在Symantec的
华丽军团经过了整军经武,Watcom的白色劲旅枕戈待旦,而且都从Microsoft授权使
用了MFC之后,蓝、红、花、白四大军团决战的日子终于来临。

首先,当Symantec和Watcom分别取得了MFC之后,Symantec便推出了C/C++ 7.x的版本,
和Watcom C/C++混战了起来。两个使用系出同门的C/C++ Framework产品战得不亦
乐乎,随后Borland C/C++ 4.5和Visual C/C++的新版本也加入了这场最重要的决战。
但是,让Symantec和Watcom C/C++大吃一惊的是Microsoft使用的MFC居然比他们使
用的MFC高出了一个版本(1.x对2.x),而且新版本的MFC包含了完整的OLE支持能力。
而Borland虽然也有OCF这张王牌,但是仍然不敌新版MFC中的OLE能力。

由于当时几乎所有的应用程序都需要支持OLE,但是却只有使用Visual C/C++最新的
版本才能够开发完整OLE能力的应用程序,所以不管OLE到底有没有用,反正先加入再
说。因此市场上的形势很快就发生了巨大的变化,因为OLE的原因,几乎大部分的应
用程序开发者都选择使用Visual C/C++,Symantec和Watcom军团很快就败下阵来。

至于Borland C/C++4.5,虽然它是一流的产品,如果没有OLE的因素,Visual C/C++
新版本真的并不比Borland C/C++4.5好:虽然4.5也有OCF,但是在市场上只有Borland
和Novell、WordPerfect选择使用OCF。在和Microsoft的Visual C/C++经过将近一年
的缠斗之后,其他大部分的厂商都选择了Microsoft的MFC 2.x版,真是形势比人强。
OCF的架构真是个好东西,但却无法完整地支持OLE,因为OLE的发展是掌握在Microsoft
手中的,因此虽然OCF的架构良好,终究在功能上不及对手。Microsoft结合操作系统、
开发工具和应用程序的手段真是无往而不胜。击败Lotus、Borland是如此,歼灭
Netscape亦是如此。

对于Symantec和Watcom来说,这场战役就如同"长平之战"秦军坑杀40多万赵军一样。
杀得Symantec和Watcom全军覆没,大败而归。至此Symantec弃守PC的C/C++开发工具
市场,转而开始研发Java开发工具,进而在稍后推出了著名的Visual Cafe。至于
Eugene Wang,则离开了Symantec,也离开了PC开发工具的领域。

而Watcom则更为凄惨。整个公司在DOS的市场逐渐式微,而Windows平台的开发工具又
大败而归,两头落空。不久之后,Watcom便被新兴而起的Sybase并购,从此在竞争激
烈的开发工具市场中消失了。

归纳Symantec和Watcom失败的原因,是因为C/C++的Framework MFC掌握在Microsoft
手中,在决战时刻Microsoft居然手握比Symantec和Watcom更新的MFC利器,而且在
Visual C/C++精进最佳化编译器技术并且改善集成开发环境之后,Symantec和Watcom
诉求的重点功能完全被Microsoft封死。因此在产品、技术、市场和气势上完全不如对
手的情形下,自然只能任人宰割了。

对于Borland,虽然没有像Symantec和Watcom那么溃不成军,但也再次败下阵来。虽
然平心而论Borland C/C++4.5的确是一个非常好的产品,无论在OWL、最佳化编译器、
集成开发环境方面都有一流的表现。和Borland C/C++4.0比较起来简直犹如脱胎换
骨一般,到现在Borland C/C++4.5仍然是我最喜欢的版本之一。但是无奈当初Borland
C/C++4.0给人挥之不去的负面印象,以及无法完整支持当时如火如荼的OLE技术,因
此还是在决战之中败了下来。好在蓝色的Borland大军毕竟是训练有素,虽然自此让
Microsoft占据了超过50%的市场,成为C/C++开发工具的老大,但是Borland仍然掌
握了超过30%的市场,稍做喘息,并且支撑Borland在各重要战役失败之后维持公司
的运作,等待Delphi的浴火重生,再重新出发。

经过这关键的一役之后,Microsoft终于清除了大部分的对手。对于Microsoft,程序
语言开发工具的战争已经结束,这个市场注定将被Microsoft占据大部分的市场。在
Microsoft手握操作系统、Office软件和开发工具三大获利市场之后,Microsoft也开
始将矛头对准下两个竞争目标:关系数据库以及主从架构开发工具。在Microsoft正
式进军这两个市场之后,当然也展开了连番的好戏,尤其是在主从架构开发工具方面
又开启了VB、PowerBuilder、Gupta/Centura和Delphi的惊天动地大会战。另外一个
意外开启的战争则是Microsoft在1995年和Netscape的浏览器大战。

在C/C++最后一役之后,我认为开发工具的圣战已然结束,Borland也正式开始走下
坡路。更严重的是我认为自此之后Borland不但丧失了C/C++的江山,也失去了对于
C/C++开发工具的创意,这是我感到最遗憾的地方,到现在为止我仍然认为Borland尚
未重拾当初在Borland C/C++3.0/3.1时代独领C/C++创意风骚的精神。也许,也许,
要看看C/C++ For Kylix或是C++Builder的后继产品是否能够重新找回这个失去已久
的精神,不再让大家失望了。

永不成气候的C/C++开发工具:IBM VisualAge C/C++

IBM在C/C++开发工具市场扮演的角色一直令人啼笑皆非,因为在C/C++编译器战争最
激烈的时刻,IBM这个全球信息大厂却一直是缺席的。一直到了1995年之后,C/C++编
译器市场大势已定后才慢慢地加入战局,推出VisualAge C/C++ 3.0,企图进攻此市
场。但是此时市场早已由Microsoft的Visual C/C++称雄。IBM的VisualAge虽然能够
以创新的可视化设计家定义对象之间的关系,但是在其他方面却乏善可陈,整个集成
开发环境也缓慢如蜗牛,需要非常高的硬件配置才能够顺利运行,和Visual C/C++以
及Borland C/C++等工具比较起来就像是恐龙一般,因此几乎没有在市场上引起任何
的反应。

在推出的VisualAge C/C++3.0并没有在PC的C/C++开发工具市场获得任何的明显成果
之后,IBM又再次集中许多资源,开发下一代3.5版本,希望能够在此市场占有一定的
比率。我知道IBM在VisualAge投注了大量的资源,因为从Beta版开始台湾的IBM便有
人和我接触,希望我也在《RUN!PC》上为VisualAge C/C++3.5写些文章。因此在1996
年的6月我写了一篇C/C++编译器的比较文章,下面的资料便是数年前当时还是Beta版
的VisualAge 3.5和其他编译器的比较结果(见下页)。

从图中的数据可以看到,其实VisualAge C/C++3.5的表现还不错,只是对于当时还在
使用AMD DX4-100/32M RAM机器的我来说,实在是跑不动。后来台湾IBM负

抱歉!评论已关闭.