M
mypine
Unregistered / Unconfirmed
GUEST, unregistred user!
我的回忆和有趣的故事-C/C++圣战篇[长篇]----李维
一挥间宝兰灰飞烟灭,刹那间微软如日中天。
世事如朝之白露,谁与争?
李维与宝兰的故事
声明
以下的这篇文章内容是我个人的回忆以及看法,没有任何特别的偏见,许多的事情是根
据我的记忆以及从许多人的诉说中得知的,也许内容不是百分之百的正确,不过我想这
些内容有一定的可信度到是可以保证的。当然有一些事情确定的发生时间和顺序不一定
都和我的记忆一致,不过我想大部份应该是相去不远的。当然各位如果知道确定的事件
而我的记忆有误,那么我将非常欢迎您纠正我,我希望这些故事的经历能够一直陪我走
下去,谢谢。
一直想写一篇我个人在过去10多年来工作中经历的一些事情,以及看着一些我认为是伟
大的工程师在这些日子中对于信息界的贡献。如果你和我的年龄差不多,那么你可能会
对于这些内容很有兴趣,因为它们说明了当时许多软件的兴起和没落的过程以及原因。
虽然这些事情已经距离我们很遥远了,但是我相信许多人仍然对于背后的故事有兴趣。
如果你没有经历过那段美好的回忆,那么就把这些内容当成是一个有趣的故事来看吧。
但是我想更重要的是让我们一起认识一些伟大的人物,我对于其中的许多人都非常的佩
服,也非常的羡慕。我常常在想,如果我也有他们的环境,我是不是也能够和他们一样
这么有成就呢?这些人对于以往都有重要的贡献,在未来也将仍然有重要的影响,因为他
们都有一身不凡的技术。对于许多重要的人我都尽量的收集了他们的照片,让各位也能
够看看这些优秀的工程师和杰出娜宋铩.斎唬?绻?魑灰材轨驈倪@些内容中学习到失败
的原因以及成功的经验,那么这篇文章就更有价值了。
和Borland的缘由
记得我在大学时第一个在PC上使用的软件便是SideKick,至今我仍然无法忘记这个让我
津津乐道的软件,而Borland在当时也就是以SideKick成为全球知名的软件公司。不过B
orland第一个奠立创业基业的软件却是我大二使用来交作业的Turbo Pascal。而Turbo
Pascal也是第一个我听到关于Borland的有趣的故事
当年Philippe Kahn (Borland的创使人)和Anders Hejlsberg到美国创业时,便由Ander
s以汇编语言撰写了Turbo Pascal的编译器,而Philippe则包办了Turbo Pascal其它的部
份。在这两位人兄开发完Turbo Pascal之后,穷得快连登广告的钱都没有了。但是Phil
ippe为了在Byte杂志(还记得这个著名的杂志吗?)刊登Turbo Pascal的广告,因此和And
ers商量了一个方法,那就是一天他们约了Byte杂志的人到当时Borland的办公室讨论刊
登广告的事情。
当Byte的人到了Borland之后,Philippe,Anders和公司的助理小姐故意忙着接电话,接
受Turbo Pascal的订单,并且告诉Byte杂志的人等一下。过了一阵子之后Philippe才进
入房间向Byte的人道歉,说他们的Turbo Pascal受到市场的热烈欢迎,订单源源不断的
到来,因此可能不需要在Byte杂志刊登广告了,接着Philippe向Byte的人展示Turbo Pa
scal这个产品。由于在当时的机器中Turbo Pascal能够在少少的RAM中常驻执行,又提供
闪电般的编译速度,立刻让Byte杂志的人震惊在当场,凭着专业知识和丰富的经验,By
te的人也立刻知道这将是一个革命性的软件,因此马上希望Philip能够在Byte杂志刊登
Turbo Pascal的广告,并且愿意以半价刊登。当然,Philip也立刻的答应了,于是一个
革命性的软件Turbo Pascal终于在Byte杂志刊登出来了,售价49.99美元的Turbo Pasca
l立刻为Borland带来了大量的财富,Turbo Pascal也立刻的成为PC上除了基本的Basic之
外最畅销的开发工具,也正式揭开了Borland影响PC开发工具10几年的序幕。
在Turbo Pascal之后,Borland接着推出了SideKick这套软件,SideKick可以说是随后著
名的内存常驻软件(TSR)的始祖,也是让Borland跨出开发工具界,让几乎所有PC使用者
认识Borland的关键软件。当然SideKick也很快的成为了全球的畅销软件,继续的把Bor
land往顶尖的软件公司上推。
而Turbo Pascal也成了我大二,大三撰写作业的最爱,几乎所有的作业都是使用Turbo
Pascal完成的,当然其时Horowise的Data Structure这门课也是使用Turbo Pascal过关
的,因此从那个时候开始我便非常喜欢Borland这家公司,慢慢的也开始对Borland有了
特别的感情。
大二时Microsoft也推出了Microsoft Pascal,但是它和Turbo Pascal的确是有一段差距
,我使用了一次之后便把它丢到垃圾桶。稍后Borland也推出了Turbo Basic,我记得这
个编译器非常的棒,编译速度就和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便成了不离身的工具,而Borlan
d也藉由Turbo C这第三项畅销产品迈向了世界前10名的项尖软件公司。
当完2年的兵之后,我在中研院首次使用了C++语言,第一个使用的C++编译器则是Zorte
ch 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念硕士时,终于使用自己的零用钱美金4
9.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不久之后,Borland终于推了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的硕士学位之后最想进入的公司便是B
orland和Microsoft,不过最后我还是决定回台湾工作。在此时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此时面临了一个重要的十字路口,那就是到底要自己开发一个和M
FC抗衡的Framework,还是要如何做。因为如果要自己开发Framework,那么势必要花上
一些时间,但是Borland想趁Borland C/C++ 3.0如虹的气势再下一城,以便彻底击溃Mi
crosoft C/C++。因此最后Borland决定向一家叫White Water的公司购买一套由这家公司
开发的一个Framework,这套Framework便是后来鼎鼎大名的OWL的源流。而Borland也因
为向White Water购买了这套Framework,因而也引进了一个日后非常重要的人物,那就
是后来负责开发Delphi的一员大将 - Zack Urlocker。
C/C++的光荣战役
在Borland购买下White Water的C++ Framework之后,便更命为OWL(Object Window Lib
rary),并且很快的推出了以OWL 1.0为核心的Borland C/C++ 3.1。由于OWL比当时的MF
C 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 Pas
cal For Windows 时,当时(现在也还是)最具盛名的Charles Petzold(我的第一本Wind
ows 程序设计的书就是这位仁兄写的,相信许多人也是看他的书一路学来的)就说除了C
/C++之外,Borland不可能做出能够在 Windows 下执行的Borland Pascal,不过很明显
的,即使是Windows API的大师Charles也错了。Borland不但做出来了,而且Borland P
ascal For Windows 还非常的畅销,当然Borland Pascal For Windows 也是后来Delph
i的根基。
当时的Borland可说是不可一世,不但产品大卖,而且日进斗金。Borland在Scotts Val
ley豪华的总部也是在那个时候由Philippe Kahn大手笔的花了一亿多美金搭建的(想想1
0年前的60多亿台币可以盖什么样的房子?)。不过也许是Borland太成功了,因此也开始
让Philippe Kahn渐渐的养成了好大喜功,目中无人的态度,也种下了Borland开始走向
衰退的因子。
Borland 位于美国加州 Scotts Valley 总部
不过在Borland最强盛的时期,当然也就是Microsoft最想痛宰Borland的时候,在这个时
候发生了一个著名的事件和一个著名的虚拟人物。话说由于当时Microsoft的开发工具一
直打不过Borland的产品,因此在Microsoft的开发工具刊物上便出现了一个作者不断的
以文章嘲笑Borland,这个作者的笔名是Buck Forland。后来由于这位作者的文章内容以
及他的笔名引起了当时Borland的不满以及大量Borland使用者的强烈抗议,因此稍后这
位作者就突然的消失不见了。因此有许多人就推测这个作者应该是Microsoft的工程师,
由于一直无法打败Borland的产品,脑羞成怒,因此才会以这个笔名来发泄。如果各位看
倌到现在还摸不着头为什么这个笔名会引起轩然大波,那么请你试着把Buck Foland这两
个英文字的第一个字母一对调就知道为什么了。现在各位是否会心一笑了?
Philippe Kahn-Borland的创始人
在Borland C/C++ 3.1大获成功之后,Borland却开始松懈了下去,并且开始走下坡。当
然这有许多的原因,我所知其中最重要的原因有数项 :
■Philippe Kahn和当时Borland C/C++的产品经理闹翻了。这位Borland C/C++的产品经
理的名字是Eugene Wang,他是一位非常聪明的中国人。他一手把Borland C/C++ 带到了
世界第一的地位,并且在Borland C/C++ 3.1成功之后有了更伟大的想法,那就是 Euge
ne Wang 想在下一个Borland C/C++版本中完整的以OWL封装所有的Windows API,因为O
WL 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使用的Framewor
k仍然是以Object Pascal以核心的组件Framework,而不是纯粹的C/C++程序代码。如果
当时 Eugene Wang 能够做出他心中的下一版Borland C/C++,那么我想到现在Borland
C/C++可能还是市场中第一的C/C++开发工具。不过很不幸的是,Eugene Wang 稍后和Ph
ilippe 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++开发工具,从此可见E
ugene Wang的功力。不过Symantec C/C++稍后也不敌Microsoft Visual C/C++,这个故
事的原因在稍后四大C/C++编译器之争的段落中再详细的说明。
我最后听说Eugene Wang跑去做生意了,并且在前几年写了一本教导科技人员如何面试的
书籍。我,一直很痛心Borland失去了这么一位优秀的人材,我常想如果当初Eugene Wan
g没有离开Borland,那么历史就可能不是现在的这样了,Sign!!!
■Philippe Kahn大手笔的花了一亿多美金买下了Ashton-Tate公司和dBase。在当时许多
人都批评Philippe Kahn做了不值得的事情,因为Ashton-Tate不值这么多钱。但是由于
当时Borland多的是钱,因此Philippe Kahn也不多意。不过这并不是Borland走向逐渐走
向衰败的主因,而是在Borland买下了dBase之后,并没有立刻积极的发展dBase For Wi
ndows,反而把dBase丢在一旁。这个原因便是当时Borland的另外一个和数据库有关的产
品Paradox卖得也很好,因此Philippe Kahn并不急着打算开发dBase For Windows。不过
Philippe Kahn忘记了一件事情,那就是当时在市场大量人口的dBase程序员需要一个好
的Window版dBase,但是Philippe Kahn购买了dBase却不提供Windows 版的解决方案。因
此当稍后Microsoft以极小的代价买下Fox这家公司,并且在数年之后推出FoxPro For W
indow,吸引了大量原先的dBase程序员以及Paradox的程序员之后,Philippe Kahn才警
觉事情不对而充充忙忙的开发dBase For Windows。但是当dBase For Windows 推出之后
,Microsoft早已推出了两个FoxPro For Windows 的版本,而占据了大部份的市场,dB
ase For Windows其势已不可为了。
■Microsoft开始向Borland挖角。由于Microsoft在许多的开发工具战役中一直被Borla
nd打得灰头土脸。更何况Borland C/C++ 3.1几乎抢占了大部份的市场,因此Microsoft
开始准备好好的对付Borland。但是由于其时Borland在编译器的技术领域领先了Micros
oft数年之久,Microsoft无法在短时间之内赶上Borland,因此Microsoft决定使用最有
效的方法立刻追上Borland技术,蔷褪侵苯油诮恰R虼松葬酠icrosoft的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)参加国际Conferen
ce时,还和他打了一声招呼。后来Philippe Kahn离开了Borland,另外创立了StarFish
这家公司,稍后StarFish也被Motorola并购。虽然Borland由于Philippe Kahn一些错误
的决策而逐渐的从巅峰开始下降,但是Philippe Kahn也不愧为一个人物。因为Philipp
e Kahn能够和Bill Gates一直周旋数年之久,而同一时期的许多公司,例如Lotus都一一
的被Microsoft所击败,因此Philippe Kahn还有一套的。此外Philippe Kahn也是唯一一
个拥有工程师特性的Borland CEO,Philippe Kahn仍然重视技术产品和技术人员。但是
Borland随后的CEO几乎都是Marketing,Finance或是Sales出身的人,这真让我怀念以往
以产品和技术为优先的CEO了。
看完了上面这段今人伤心的历史之后,再让我们看看当Borland在受到Microsoft Visua
l C/C++的强大冲击之后,如果思索反击之道。在这段期间也出现了令我敬佩的第一个B
orland技术工程师,Carl Quinn。
Carl Quinn在Microsoft Visual C/C++ 1.0推出之后,立刻奉命开发一个能够和MFC相抗
衡的全新OWL,而Carl Quinn也是数年后JBuilder的JBCL Framework的灵魂开发人物。C
arl Quinn不但负责开发OWL,也为Borland在组件Framework的技术领域立下了重要的贡
献。由于Carl Quinn的投入,因此开启了OWL大战MFC,Borland C/C++缠斗Visual C/C+
+数年精彩好戏的序幕。
Carl Quinn到现在我还记得和敬佩的人物,让我再一次的向他致敬,并且介绍他让大家
认识。
Carl Quinn-我第一个佩服的Borland工程师
Borland C/C++的反击
火线全开
Borland除了在开发工具市场和Microsoft热战之外,其时和Microsoft ,Lotus鼎足而立
的Borland看到Microsoft和Lotus正在电子表格工具以及文书处理工具大战之暇,不思好
好的集中资源开发新的开发工具和数据库工具(下一节会详说),也不甘寂莫的投入了大
量的资源进入这个惨烈的市场。也许是当是Borland太有钱了,或是Philippe Kahn脑袋
有问题,居然决定进入这个Borland陌生的市场,更何况在Borland投入时Lotus已现败象
,市场已经慢慢的被Microsoft所一步一步的掌握了。
Borland进入Office市场的第一个产品便是著名的Quattro Pro这个电子表格,虽然Quat
tro Pro是一个不错的产品,而且当时由Borland C/C++编译器所开发的Quattro Pro在执
行效率上几乎是最好的,但是Borland没有想到使用电子表格的使用者是一般的办公室人
员,这些人注重的是方便性和功能性,而不是最重视执行速度,这和开发人员是不一样
的。Borland以开发者的心态来开发电子表格工具基本上是走错了方向。因此我记得在那
段时间中,杂志评比Microsoft的Excel,Lotus的1-2-3和Borland的Quattro Pro时,在
功能方面领先的都是Excel和Lotus,在执行效率方面领先的则是Excel和Quattro Pro5
搅嗽嗫惚頍钌鸬奈雌?-2-3甚至比不上Quattro Pro,因此Lotus败走电子表格市场已是不
可避免的结果了。
不过Borland虽然赢了1-2-3,但是和Excel仍然有一大段的距离,Microsoft一统电子表
格江山之势已不可摇,因此最后Borland在损失了大量的资源之后,Quattro Pro只能卖
给Novell。
除了Quattro Pro之外,Borland也投入了很多的资源秘密的开发一个代号称为Spring的
文书处理程序准备和Microsoft的Word以及WordPerfect竞争,这可能是许多人不知道的
。但是这个产品最后仍然无法问市而胎死腹中,在文书处理市场方面Borland不但浪费了
时间,更虚掷了大量的资源。Philippe Kahn在Office产品方面消耗了Borland大量的金
钱和时间,却落得铩羽而归,更连累了开发工具市场以及最有可能成功的数据库产品市
场。
另外一个和Borland无关的故事是关于Excel如何兴起的。话说当Lotus 1-2-3最盛的时期
,Microsoft一直计觊觎这个市场,但是苦于无法开发一个能够和1-2-3相竞争的产品。
有一次Lotus 1-2-3举办了一个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的市场,后来又
从HP取得了真正的RDBMS-InterBase,可以说是全世界数据库实力最雄厚的厂商。
当时的Oracle和Borland比起来,简直是小巫见大巫,而Sybase更不知道在那里。如果当
时Borland能够好好的掌握这个机会,并且极力发展数据库产品的话,那么现在Borland
就算不是世界第一的软件公司,也将是世界第二的软件厂商。
可惜Philippe Kahn并没有看到这个在年代80未到90年代成长最快速的产品。说句笑话的
是,如果当时Philippe Kahn的死对头Bill Gates早一点对Philippe Kahn说出Informat
ion At Your Finger-Tip』的话,那么Borland就可能是现在的Oracle了。
说到数据库市场就不得不对Microsoft的眼光佩服,也可以看到Microsoft行销能力的强
悍。当Microsoft以FoxPro For Window强占了开发者的数据库市场之后,又看到了一般
使用者也需要使用简易好用的数据库管理工具。因此发展出了Access。但是当时在这种
市场中,Paradox占有开发者的数据库大部份的江山,而一般使用者的数据库管理工具市
场则由Lotus的Approach拔得先机。Microsoft为了扳回劣势,我还记得在当时Visual B
asic 3的软件包中Microsoft附了一张优待卷,只要800新台币就可以买一套Access。这
简直就是流血大拍卖,目标很明显,就是当时在市场中卖1万多元的Lotus Approach。果
然,Microsoft此招怀觯珹pproach便在市场被Access打得落花流水,很快的便失去了市
场,也很快的退出了市场。从此一般使用者的数据库管理工具市场便逐渐由Access所取
代。
但是Borland并没有警觉到Access会继续的往开发者市场进功,因此仍然没有加紧在Par
adox产品上开发,Borland总觉得以Paradox在市场的地位是无法轻易憾动的,而且Acce
ss的目标市场也不是Paradox的市场。但是Borland忘记了Microsoft非常散擅长模仿,因
此在随后的Access版本中,Microsoft不断的为Access加入可程序设计的功能,因此也逐
渐的吸引了一些Paradox入门使用者的市场,再加入FoxPro For Window又持续的强功开
发者数据库市场,Paradox终于在背腹受敌之下也逐渐的败下阵来。虽然在未期Philipp
e Kahn已经对Paradox投下重兵,希望能够挽回Paradox的劣势,奈何时不我予,Parado
x在奋斗了Paradox 6和Paradox 7的2个版本之后,终究难逃失败的命运。
当时我看到Microsoft如何打击竞争对手时,我就和朋友开玩笑的说。Microsoft有天下
无敌的3绝招,那就是『打不过你就模仿你(这让我想起电影秘密客(Mimic) ),再打不过
就和你比流血,看谁流得久(这让我想起吸血鬼),最后如果再不行的话,那就挖光你的
人(这让我想起电影 Other People's Money)』。Lotus就在Microsoft的前2个绝招下到
地不起,而Borland还算是功力深厚的了,连中了3绝招,虽然不像Lotus和许多其它公司
一样从此Bye-Bye,但也是受伤极重的了。
ODBC和IDAPI之争
当Microsoft在逐渐的击败他的竞争对手,并且拥有了大部份PC数据库市场之后,便慢慢
的了解到掌握标准的重要性。此外Microsoft为了统一各应用程序之间不同资料的存取,
因此开始制定存取资料的统一标准-ODBC。
Microsoft更大的目的是为了准备和瞄准下一场的大战,那就是PC上的RDBMS产品。
当然,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的竞争,还是以IDAP
I 1.0的规格实作资料存取引擎,这就是我们现在使用的BDE/IDAPI和SQL Links的前身。
当时IDAPI 1.0的功能规格比ODBC 1.0好得多了,我记得Delphi 1.0使用的BDE/IDAPI和
SQL Links驱动程序也比当时慢得像乌龟的ODBC快上太多了。只可惜在IBM和Novell推出
之后,其它的小厂也是一轰而散。因此Borland只能靠自己独自和Microsoft对抗。Borl
and能够以少量的资源一直对抗到Delphi 3的BDE/IDAPI才逐渐的被ODBC追过,也算是非
战之罪了。怪也只能怪Borland意志不坚的盟友。
当然由于IBM和Novell的行事做风是如此,在稍后许多能够和Microsoft一较长短的C会也
因为如此而消逝,最后自食恶果,逐渐失去了PC的软件市场,再也无力和Microsoft抗衡
了。
现在呢Borland似乎记取了当时的错误, 正努力的在Linux上定义标准资料存取接口dbEx
press, 我希望也祝福Borland能够成功.
当Visual C++ 1.0在C/C++开发工具市场获得了空前成果的之后,Borland才从
Borland C/C++ 3.1的胜利梦中惊醒,思考如何面对Visual C++的猛烈功势。事实
上当时的Borland如果脑袋清醒一点,好好看清当时C/C++开发工具的市场,那么
Borland应该会发现虽然Visual C++经过2年多的整军经武,实力已经大不前。不过
Borland C/C++ 3.1仍然在许多方面可以和Visual C++一争长短的。例如其时
Visual C++的最佳化编译器仍然落后Borland C/C++ 3.1一些,第2点是MFC仍然没
有完整的封装Window API,而且MFC是以较低阶的方式封装Window API,并不是很
对象导向,也不是很容易使用。事实上以我的观点来看,我认为就是因为MFC不好
用,因此Visual C++才需要在整合发展环境中提供以可视化方式产生MFC程序代码
的功能,第3是Visual C++当时并没有很好的封装数据结构的Container Class,而
Borland C/C++却有非常好用的BIDS类别库。第4,也是最重要的,Borland
C/C++ 3.1仍然拥有绝大的市场,而且几乎所有的外围公用程序,Shareware等都是
使用Borland C/C++ 3.1开发的。因此如果Borland不要急,好好的开发下一代的
C/C++开发工具,即使Microsoft Visual C++能够掠夺一些市场占有率,但是如果
下一代的Borland C/C++能够像Borland C/C++ 3.0一样立刻拉开和Visual C/C++的
距离,那么Borland在C/C++市场仍将拥有王者的地位。
可惜的是,也许Philippe Kahn在和Microsoft的FoxPro For Window一役中被吓到
了,因此急于在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决定全新发展整合发展环境,第2是把OWL完全重写,第3是大幅修改
最佳化编译器,第4是整合当时棘手的VBX,Borland居然让16位和32位的程序能够
同时使用16位,丑陋的VBX。
上面所说的每一项都是大工程,Borland早应该在Borland C/C++ 3.1之后便开始做
这些工作,现在要在短短的一年多的时间内重新开发一个这么复杂的C/C++开发工
具,几乎是不可能的工作。但是在Philippe Kahn的要求之下,这些Borland的工程
师还是硬着头皮做了出来。
不过我必须很沉痛的说,当时我在Beta测试Borland C/C++ 4.0时便和台湾
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/++ 4.0,这个肩负和Visual C++ 1.0对抗的C/C++开发工具。
在Borland C/C++ 4.0 当时所有重要的计算机杂志?,例如Byte,PC Magazine,Dr. B
ob等等,都有4.0页的广告。这个广告的内容是以一个巨大的猫头鹰为主,再搭配蓝色
底色系的Borland C/C++ 4.0为主,选用巨大的猫头鹰当然是因为OWL的原因,只可惜我现
在
找不到那幅广告了。
痛失江山的Borland C/C++ 4.0
当时Borland使用了如下的广告用词 :
『Visual Is Only A Facial Facade』
来讽刺Visual C/C++只提供了产生MFC程序代码的基本精灵,而Borland除了也提供
相对应的AppExpert精灵能够提供类似的功能以产生使用者选择的OWL程序代码之外
,Borland C/C++ 4.0的整合发展环境还提供了可视化的3面版窗口,能够让程序员
完整的掌握整个项目的情形。
例如在下图中便是当初令人眼睛为之一亮的AppExpert:
还记得Borland提供的AppExpert吗?
下图则是当时Borland C/C++的注册商标,3面版窗口开发环境。看到下图又令我想
起当初使用C/C++写程序的日子,下方程式码面版清楚的显示了我在1995年于鼎新
工作时写的智能型Window排程系统,时间过得是真快啊。
令人怀念的Borland C/C++ 4.0整合发展环境,三面版窗口
当时Borland C/C++ 4.0的3面版整合发展环境真是开创了一个新的局面,因为这个
整合发展环境允许程序员知道每一个应用程序定义的窗口讯息,并且能够立刻的显
示在下方的程序代码窗口中,的确是非常的方便,也比当时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推出一段时间之后,市场的反应就急速的冷却下来,
因为各种负面的批评不断涌现,这主要的原因当然是因为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 2.
0做了从基本架构的改变,这是为了解决当初OWL 1.x使用了不标准的C/C++编译器
技术的问题,但是这造成了原本Borland C/C++程序员极大的困扰,因为升级不易
。对于新的C/C++使用者来说又因为Borland C/C++ 4.0本身不稳定的因素而却步,
因此造成了OWL 2.0叫好不叫座的下场,真是可惜了 OWL小组的努力。
我记得当时我的项目有使用FarPoint的SpreadSheet VBX组件,由于一直无法顺利
的在Borland C/C++ 4.0中使用,并且会造成应用程序的当掉,最后追踪执行程序
代码却发现应该是Borland C/C++ 4.0的问题,因此最后只好在咒骂中放弃使用4.
0,而回到Borland C/C++ 3.1。我当时想,对于我这个长期使用Borland产品的人
都无法忍受4.0的品质,其它的程序员又怎能使用这个产品。我想这就是为什么后
来4.0全面溃败的原因,因为Borland推出了根本不堪用的产品。
在我于Borland工作的时间,有一次在新加坡和现在Borland开发者关系部门的副总
裁David Intersimone谈起这一段往事,David也很感慨这一段往事,David直呼『
We screwed it up!』,『It's a mess』。David并且说当时整个Borland C/C++开
发小组都很混乱,和以往Borland C/C++ 3.0/3.1的开发小组比起来实在是差太多
了,除了因为一些重要的人物相继离开Borland,而且Microsoft也挖走一大票人之
外,Philippe Kahn的直接介入,造成人事不和也有很大的原因。
David I.说『We Screwed it up!』 ,『It's a mess』
在Borland C/C++ 4.0快速失利之后,Borland也体认到问题的严重性,因此立刻的
着手开发Borland 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在3个主要的应用市场接连败退,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++吧。它的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推出第一个C/C++开发工
具。在1993年左右吧,Symantec C/C++在Eugene Wang的掌舵之下推出了第一个
Symantec C/C++版本,立刻便获得了市场的好评。自此之后Symantec C/C++军心大
振,不断的继续改善,也逐渐的获得了不小的C/C++市场,隐然成为可以对抗
Borland C/C++,Visual C/C++的另一山头。当时Symantec C/C++是以最华丽,先
进的整合发展环境获得市场的高度认同,在C/C++编译器最佳化方面的表现也不会
输给其它的编译器。
当时我在RUN!PC上写C/C++的文章,因此Symantec C/C++也有和我连络,并且送给
我一套最高档的Symantec C/C++,希望我除了为Borland写C/C++的文章之外,也能
够为Symantec C/C++写一些东西,我想这就是做为写技术文章的一个好处之一,那
就是可以拿到许多最Hot的开发工具。我还记得在当时安装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』的总监,例如当时由Matt Pietrek撰写的Windows Internals也是轰动一
时的巨著。而PharLap公司是当时出版DOS Extender软件最成功的软件公司。
谈到Matt Pietrek,熟悉Window Programming的人应该很少有不知这位大师级人物
的。Matt长期在Microsoft System Journal撰写Under The Hood专栏,专门写一些
深入系统的程序设计技术,在数年前便和Andrew Schulman,David Maxey成为
Widow System Programming的三大巨头之一。Matt也是著名的Window除错工具
SoftIce,BoundsChecker的主要研发工程师。Matt本身也是从Borland出道的,当
Matt初至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市场占稳了脚步之后,由于Window已经逐渐成为市场的主流
,DOS势必将被逐渐淘汰出局,因此Watcom C/C++要继续的生存下去,也一定要推
出Window平台的C/C++开发工具。大约也是在1993,1994年左右Watcom终于推出第
一个Window的开发工具。
不过当时Watcom C/C++在Window推出的C/C++开发工具实在是平凡不已,其整合发
展环境和另外三个对手比较起来简直像是远古的产品,一点特色都没有,不过
Watcom C/C++仍然是以它的最佳化编译器做为号召。因此在当时发生了一个非常有
趣的现象,那就是许多软件公司会同时买Borland C/C++,或是Visual C/C++,
Symantec C/C++之一,再搭配一套Watcom C/C++。在开发应用系统时使用其它三套
开发工具之一,最后要出货时再使用Watcom C/C++来编译以产生最佳的程序代码。
在Watcom C/C++推出了Window平台的开发工具之后,仍然吸引了一群使用者,虽然
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++逐渐的站稳了脚步之后,四大编译器决战的时刻
也逐渐逼近了。在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,那么Symantec和Watcom并没有
如此雄厚的资源,也无法在短时间之内完成。因此Symantec和Watcom必须下一个决
定到底是要使用MFC或是OWL做为它们的开发工具C/C++ Framework。
在1993年初Symantec和Watcom分别和Microsoft签约License MFC做为它们的开发工
具的C/C++ Framework。至此大势以定,在C/C++ Framework的市场已经形成三家夹
击一家的形式。当时许多人便预估Borland将成为输家,因为市场已经成为一面倒
,MFC看起来已经是胜券在握了。在当时于Borland的内部也展开了激烈的辩论,讨
论是否也要License 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,那么还需要修改编译器来编译MFC
。
对于这一点我认为Borland还是做了一个正确的决定,因为如果当时Borland也
License MFC,那么不但在气势上便输了一截,而且当MFC的发展是完全掌握在
Microsoft的手里,那么就等于脖子是掐在别人的手里,动弹不得了。可惜的是
Symantec和Watcom并没有看清这一点,以为有了和Microsoft一样的Framework,就
可以在其它地方和Microsoft以及Borland一决雌雄,Symantec和Watcom却没有想就
是这一点决定让后来的决战一败涂地,终究完全推出PC的C/C++开发工具市场。
时序到了1994年未,C/C++开发工具的四大天王决战的日子终于愈来愈近了。
OLE的搅局
不知道是时运不济或是Microsoft的刻意如此,在1994年Borland C/C++和Visual
C/C++决战的前夕,Microsoft推出了OLE(Object Linking And Embedding)技术。
OLE是Microsoft为了对抗Apple的文件技术以及IBM OS2的Workplace和文件技术应
运而生的。OLE可以让Window平台的文件能够内嵌在不同的应用程序中并且能够让
文件在应用程序中被即地编辑(In-Place Editing)。说实在的,Microsoft的OLE和
Apple以及IBM的技术比较起来实在是差多了,OLE在稍后也被证明是失败的技术,
不过不管是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虽然是License MFC,但是在其
时它们License的是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的OWL 2.5中支持OLE。当时Borland推出的解决方案便是OCF(Object
Component Framework)。
Borland当初在设计OCF时有几个重大的目标。这些目标包括了: 一、如何能够使得
OLE琐碎 、复杂的接口能够单纯化;
第二、如何能够使得OLE在窗口环境下写程序
的思考方式 一致化--即使用「事件驱动」的方法。第三、如何能够在微软占尽天
时、地利(未必人和) 的情况下使得Borland的产品具备OLE的功能。第四、如何能
够让大多数C++的程序员都能够享受OLE的功能而不局限于OWL的程序员。由于上述
的设计目标, 而造就了典雅而具有弹 性的OCF。由于OCF本身是一完整而独立的
Framework, 因此它可适用于各种应用程序发展Framework。
不晓得各位使用过Borland C/C++的朋友们是否还依稀记得下图OCF的架构图之一,
以及下面的OCF范例程序代码,这些可是我把1994年写的文章挖出来之后找到的,
真是令我感慨,也回想起了当时的情景,也让各位回忆一下OWL和OCF。对于不熟悉
OWL和OCF的朋友,也可以从下图和程序代码中观察一下当时的技术以及设计的概念
。
基本上我现在看这些图形架构,会发现它们并没有落后现在太多,可见当时设计
者的功力(Carl Quinn Again)。
//
// Insert an OLE object into the view
//
void TOleWindow::CmEditInsertObject()
{
001 PRECONDITION(OcView);
002 TOcInitInfo initInfo(OcView);
003 if (OcApp->Browse(initInfo)) {
004 TRect rect;
005 GetInsertPosition(rect);
006 SetSelection(new TOcPart(*GetOcDoc(), initInfo, rect));
007 OcView->Rename();
008 InvalidatePart(invView);
}
}
程序1 OWL的TOleWindow支持OLE插入对象之成员函数
//
// Handle left do
uble-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
}
}
程序2 OWL的TOleWindow支持左键双击之成员函数
虽然Borland及时的在OWL 2.5中加入了OLE的支持,无奈Microsoft随后又在OLE中
加入了许多其它的功能,因此让OCF并无法完整的支持OLE所有的功能,B无法不断的延后
Borrland C/C++的推出,因此在1994年未,Borland终于推出了决战
的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的则是以红色为色系,仿佛两大
军团终将决战似的。
C/C++四大天王决战一役的Borland主将-Borland C/++ 4.5
不过这次的战役不光是Borland的蓝军和Microsoft的红军相对抗,在Symantec的华
丽军团经过了经军经武,Watcom的白色劲旅枕戈待旦,而且都从Microsoft
License了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居然比它们的
版本高出了一个版本(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++新
版本真的并没有比4.5好。虽然4.5也有OCF,但是在市场上只有Borland和Novell,
WordPerfect选择使用OCF,在和Microsoft的Visual C/C++经过将近一年的缠斗之
后,其它大部份的厂商都选择了Microsoft的MFC 2.x版,真是形势比人强。基本上
OCF的架构真的是个好东西,只是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的市场逐渐式微,而Window平台的开发工
具又大败而归,两头落空。不久之后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的挑起的浏
览器大战。
对于Borland而言,在C/C++最后一役之后,基本上我认为开发工具的圣战已然结束
,Borland也正式开始走下坡。更严重的是我认为自此之后Borland不但丧失了
C/C++的江山,也失去了对于C/C++开发工具的创意,这是我感觉最遗憾的地方,到
现在为止我仍然认为Borland尚未重拾当初在Borland C/C++ 3.0/3.1时代独领
C/C++创意风骚的精神。也许,也许,要看看C/C++ For Kylix或是C++ Builder 6
是否能够重新找回这个失去已久的精神,不要再让我失望了。
雄霸数年的C/C++的世界冠军-Borland C/C++ 3.1-永远的怀念
永不成气候的C/C++开发工具-IBM Visual C/C++
IBM在C/C++开发工具扮演的角色一直令人啼笑皆非,因为在C/C++编译器战争最激
烈的时刻,IBM这个全球信息大厂却一直是缺席的。一直到了1995之后,C/C++编译
器市场大势已定之后才慢慢的加入战局,推出VisualAge C++ 3.0,企图进攻此市
场。但是此时市场早已由Microsoft的Visual C/C++称雄。IBM的VisualAge虽然以
创新的可视化设计家能够定义对象之间的关系,但是在其它方面却乏善可陈,整个
整合发展环境也缓慢如蜗牛,需要非常高文件的硬件配备才能够顺利的执行,和
Visual C/C++以及Borland C/C++等工具比较起来就像是恐龙一般,因此几乎没有
在市场上引起任何的反应。
在IBM推出VisualAge 3.0并没有在PC的C/C++开发工具市场获得任何的明显成果之
后,IBM又再次的集中了许多的资源,开发下一代3.5的版本,希望能够在此市场占
有一定的比率。我知道IBM在VisualAge投注了大量的资源,因为从Beta版开始台湾
的IBM便有人和我接触,希望我也在RUN!PC上为VisualAge 3.5写一些文章。因此在
1996年的6月我写了一篇C/C++编译器的比较文章,下面的资料便是数年前当时还在
Beta版的VisualAge 3.5和其它编译器的比较:
从上面的数据中可以看到其实VisualAge 3.5的表现还不错,只是对于当时还在使
用AMD DX4-100/32M RAM机器的我来说,实在是跑不太动VisualAge 3.5。后来台湾
IBM负责VisualAge的产品经理请我吃饭,在此饭局中这位李经理同时请了贺元(后
来为资迅人的总裁),薛晓岚(后来为资迅人的副总裁)以及其它两位作者,希望大
家在计算机杂志中继续的为VisualAge 3.5写写东西,一起Promote此产品。在这个
饭局中我是第一次和贺元,薛晓岚见面,当时贺元在中文PC Magazine有一技术专
栏。记得当时我向这位李经理提起我的机器几乎无法跑VisualAge 3.5,他还立刻
一口答应愿意借我一台当时IBM最高檔的PC,同时每写一篇VisualAge的文章,除了
RUN!PC原本的稿费之外,IBM会再付一字2.5元的稿费。乖乖,IBM真是大手笔,我
算算当时我的产能,写一篇文章就能够赚2到3万,又有免费的最高档机器可用,真
是太好康了。不过后来我还是觉得IBM在此市场可能不会深耕,在不愿意违背自己
写作习惯和得罪Borland的顾虑下,最后还是没有答应。现在想想当时真是太笨了
,放着好赚的稿费不赚,嘻。
IBM的C/C++开发工具之所以在市场无法成功是一是因为并不了解在此竞争激烈的市
场中使用者到底要什么。另外一个原因则因为IBM并不以PC上的开发工具软件为重
要的事业,即使无法竞争对于IBM来说也没有什么影响,不像Borland这可是生命之
争。因此IBM只是兴起玩玩,随即放下。所以我觉得在PC平台使用IBM的工具是很危
险的,因为IBM可能随时会放弃此市场。例如不知道现在VisualAge C/C++到底如何
,是不是还在3.5或是4.0版,已经数年没有任何的维护和改善了。
稍后IBM为了想在OS2和Window平台上推出能够和Microsoft相抗衡的Basic工具,因
此秘密的研发了一个Object Basic。我也曾看过这个工具,但是Object Basic跑起
来慢得跟乌龟一样.后来不知道是不是一直无法改善这个问题,因此IBM从没有推
出此产品,现在IBM似乎只对Java有兴趣,VisualAge For Java还算发展的不错,
希望不会有一天IBM对VisualAge For Java的态度会和VisuaAge For C/C++以及
Object Basic一样才好.
快速殒落的潜力之星-Sybase的C/C++ RAD工具Optima++
在1996年吧,Sybase并购了Watcom之后,终于推出了石破天惊的C/C++开发工具,
Optima++。Optima++是当结合了Watcom的最佳化编译器以及类似Delphi的组件拖曳
开发环境的第一个RAD C/C++开发工具,更棒的是Optima++的组件架构(类似
Delphi的VCL)完全是以纯正的C/C++程序代码撰写的。这可不得了,因为这代表
Optima++是一个融合了Visual C/C++和Delphi两大王者开发工具为一身的超级赛亚
人工具。
在我知道这个工具,并且取得实际的使用之后,令我极为震惊。因为这个工具对于
我这个使用了C/C++ 5,6年的人来说,是比Delphi还具有吸引力。因此在当年我立
刻的在RUN!PC上介绍了此不可置信的工具。果然,Optima++很快在开始风卷市场,
虽然没有立刻的占据很大的市场量,但是已经造成了一股气势,开始为Visual
C/C++和Delphi带来了压力。
我记得当时台湾Sybase办的产品发表会也吸引了数百人与会,不可一世。在我的
RUN!PC文章出版之后,台湾的Sybase立刻和我连络。由当时的余协理和我见面,也
是希望我继续为Optima++写文章,台湾Sybase也提供额外一字加2元稿费的待遇。
但是我告诉余协理,Optima++ 1.0虽然很棒,但是仍然有一些臭虫,而且和中文环
境相冲突,无法处理中文,需要立刻的解决问题才能够在台湾的市场成功。她答应
我立刻的向总公司反应。我也老实的告诉她在问题没有解决之前我无法写一些不确
实的东西。后来台湾Borland的总经理方先生也找我去询问有关Optima++的事情,
我告诉他Optima++是好东西,但是中文有问题。如果中文问题能够解决,那么将对
Borland的产品有很大的影响,当时我还不知道Borland由于Optima++的影响,已经
开始准备发展C++ Builder。
在1996年底左右吧,Optima++ 1.5终于进入Beta的阶段,但是在我拿到Beta版时仍
然非常的失望,因为中文的问题仍然没有解决。后来台湾Sybase又找我去,这次和
我见面的是台湾Sybase总经理郭俊男先生,以及Sybase的新加坡技术总裁,不过我
忘记这位先生的名字了。我们见了面之后,我立刻的把Optima++ 1.5中文的问题以
及许多的臭虫告诉他们,希望他们能够解决,如此Optima++ 1.5才能够在中文市场
成功。可是出乎意我意料的是,他们似乎并不急着这些问题,反而询问我是否有意
愿为Sybase工作,做PowerBuilder的产品经理。
也许是因为我为Delphi写了太多的东西,让PowerBuilder受了很大的影响,因此他
们希望我到Sybase工作,以打击Delphi并且Promote PowerBuilder。当时他们提出
的待遇条件实在是非常,非常的诱人,比我当时的薪水高出一倍左右(我当时在资
策会工作)。不过由于我对PowerBuilder实在没有什么兴趣,因此我告诉他们如果
是做Optima++的产品经理,那么我将会考虑并且接受。
没有想到Sybase的新加坡技术总裁告诉我Optima++在1.5推出之后就可能会停止,
因为Sybase要把资源移去为当时愈来愈红的Java研发一个新的Java RAD开发工具,
那就是后来的PowerJ。于是他问我如果不愿意做PowerBuilder的产品经理,那么是
不是愿意做PowerJ的产品经理?由于当时我已经知道Borland开始了Open
JBuilder的研发,而我对Open JBuilder的兴趣远大于PowerJ,因此并没有答应
Sybase。果然,在Optima++ 1.5推出之后,不但中文的问题没有解决,Sybase也没
有继续的对Optima++研发下去。
一个如此有潜力的产品就这样消失了,真是令人遗憾,Optima++应该有很好的机会
可以成功的,我相信如果当时Sybase知道C++ Builder后来的成果,可能就不会放
弃Optima++了。而C/C++的RAD工具一直要到后来的C++ Builder来完成这个梦,又
是Borland成功的进入这个工具市场。
C/C++的开发工具之争到此算是告一段落了,虽然后来Borland继续推出了
Borland C/C++ 5.0但是品质仍然不够好,市场反应也不佳,后来Borland终于在
Borland C/C++ 5.02之后宣布停止此条产品线的开发,Borland C/C++的光荣历史
也就从此打止,真是令人不胜感叹,而Visual C/C++从此在C/C++开发工具市场中
再也没有对手。不过没有竞争的市场的确会让人松懈的,后来的Visual C/C++进步
的幅度愈来愈小,MFC也数年没有什么大进步,不像当时和Borland C/C++竞争时每
一个版本都有大幅的改善。看来寡占的市场的确是不好的。
一挥间宝兰灰飞烟灭,刹那间微软如日中天。
世事如朝之白露,谁与争?
李维与宝兰的故事
声明
以下的这篇文章内容是我个人的回忆以及看法,没有任何特别的偏见,许多的事情是根
据我的记忆以及从许多人的诉说中得知的,也许内容不是百分之百的正确,不过我想这
些内容有一定的可信度到是可以保证的。当然有一些事情确定的发生时间和顺序不一定
都和我的记忆一致,不过我想大部份应该是相去不远的。当然各位如果知道确定的事件
而我的记忆有误,那么我将非常欢迎您纠正我,我希望这些故事的经历能够一直陪我走
下去,谢谢。
一直想写一篇我个人在过去10多年来工作中经历的一些事情,以及看着一些我认为是伟
大的工程师在这些日子中对于信息界的贡献。如果你和我的年龄差不多,那么你可能会
对于这些内容很有兴趣,因为它们说明了当时许多软件的兴起和没落的过程以及原因。
虽然这些事情已经距离我们很遥远了,但是我相信许多人仍然对于背后的故事有兴趣。
如果你没有经历过那段美好的回忆,那么就把这些内容当成是一个有趣的故事来看吧。
但是我想更重要的是让我们一起认识一些伟大的人物,我对于其中的许多人都非常的佩
服,也非常的羡慕。我常常在想,如果我也有他们的环境,我是不是也能够和他们一样
这么有成就呢?这些人对于以往都有重要的贡献,在未来也将仍然有重要的影响,因为他
们都有一身不凡的技术。对于许多重要的人我都尽量的收集了他们的照片,让各位也能
够看看这些优秀的工程师和杰出娜宋铩.斎唬?绻?魑灰材轨驈倪@些内容中学习到失败
的原因以及成功的经验,那么这篇文章就更有价值了。
和Borland的缘由
记得我在大学时第一个在PC上使用的软件便是SideKick,至今我仍然无法忘记这个让我
津津乐道的软件,而Borland在当时也就是以SideKick成为全球知名的软件公司。不过B
orland第一个奠立创业基业的软件却是我大二使用来交作业的Turbo Pascal。而Turbo
Pascal也是第一个我听到关于Borland的有趣的故事
当年Philippe Kahn (Borland的创使人)和Anders Hejlsberg到美国创业时,便由Ander
s以汇编语言撰写了Turbo Pascal的编译器,而Philippe则包办了Turbo Pascal其它的部
份。在这两位人兄开发完Turbo Pascal之后,穷得快连登广告的钱都没有了。但是Phil
ippe为了在Byte杂志(还记得这个著名的杂志吗?)刊登Turbo Pascal的广告,因此和And
ers商量了一个方法,那就是一天他们约了Byte杂志的人到当时Borland的办公室讨论刊
登广告的事情。
当Byte的人到了Borland之后,Philippe,Anders和公司的助理小姐故意忙着接电话,接
受Turbo Pascal的订单,并且告诉Byte杂志的人等一下。过了一阵子之后Philippe才进
入房间向Byte的人道歉,说他们的Turbo Pascal受到市场的热烈欢迎,订单源源不断的
到来,因此可能不需要在Byte杂志刊登广告了,接着Philippe向Byte的人展示Turbo Pa
scal这个产品。由于在当时的机器中Turbo Pascal能够在少少的RAM中常驻执行,又提供
闪电般的编译速度,立刻让Byte杂志的人震惊在当场,凭着专业知识和丰富的经验,By
te的人也立刻知道这将是一个革命性的软件,因此马上希望Philip能够在Byte杂志刊登
Turbo Pascal的广告,并且愿意以半价刊登。当然,Philip也立刻的答应了,于是一个
革命性的软件Turbo Pascal终于在Byte杂志刊登出来了,售价49.99美元的Turbo Pasca
l立刻为Borland带来了大量的财富,Turbo Pascal也立刻的成为PC上除了基本的Basic之
外最畅销的开发工具,也正式揭开了Borland影响PC开发工具10几年的序幕。
在Turbo Pascal之后,Borland接着推出了SideKick这套软件,SideKick可以说是随后著
名的内存常驻软件(TSR)的始祖,也是让Borland跨出开发工具界,让几乎所有PC使用者
认识Borland的关键软件。当然SideKick也很快的成为了全球的畅销软件,继续的把Bor
land往顶尖的软件公司上推。
而Turbo Pascal也成了我大二,大三撰写作业的最爱,几乎所有的作业都是使用Turbo
Pascal完成的,当然其时Horowise的Data Structure这门课也是使用Turbo Pascal过关
的,因此从那个时候开始我便非常喜欢Borland这家公司,慢慢的也开始对Borland有了
特别的感情。
大二时Microsoft也推出了Microsoft Pascal,但是它和Turbo Pascal的确是有一段差距
,我使用了一次之后便把它丢到垃圾桶。稍后Borland也推出了Turbo Basic,我记得这
个编译器非常的棒,编译速度就和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便成了不离身的工具,而Borlan
d也藉由Turbo C这第三项畅销产品迈向了世界前10名的项尖软件公司。
当完2年的兵之后,我在中研院首次使用了C++语言,第一个使用的C++编译器则是Zorte
ch 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念硕士时,终于使用自己的零用钱美金4
9.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不久之后,Borland终于推了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的硕士学位之后最想进入的公司便是B
orland和Microsoft,不过最后我还是决定回台湾工作。在此时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此时面临了一个重要的十字路口,那就是到底要自己开发一个和M
FC抗衡的Framework,还是要如何做。因为如果要自己开发Framework,那么势必要花上
一些时间,但是Borland想趁Borland C/C++ 3.0如虹的气势再下一城,以便彻底击溃Mi
crosoft C/C++。因此最后Borland决定向一家叫White Water的公司购买一套由这家公司
开发的一个Framework,这套Framework便是后来鼎鼎大名的OWL的源流。而Borland也因
为向White Water购买了这套Framework,因而也引进了一个日后非常重要的人物,那就
是后来负责开发Delphi的一员大将 - Zack Urlocker。
C/C++的光荣战役
在Borland购买下White Water的C++ Framework之后,便更命为OWL(Object Window Lib
rary),并且很快的推出了以OWL 1.0为核心的Borland C/C++ 3.1。由于OWL比当时的MF
C 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 Pas
cal For Windows 时,当时(现在也还是)最具盛名的Charles Petzold(我的第一本Wind
ows 程序设计的书就是这位仁兄写的,相信许多人也是看他的书一路学来的)就说除了C
/C++之外,Borland不可能做出能够在 Windows 下执行的Borland Pascal,不过很明显
的,即使是Windows API的大师Charles也错了。Borland不但做出来了,而且Borland P
ascal For Windows 还非常的畅销,当然Borland Pascal For Windows 也是后来Delph
i的根基。
当时的Borland可说是不可一世,不但产品大卖,而且日进斗金。Borland在Scotts Val
ley豪华的总部也是在那个时候由Philippe Kahn大手笔的花了一亿多美金搭建的(想想1
0年前的60多亿台币可以盖什么样的房子?)。不过也许是Borland太成功了,因此也开始
让Philippe Kahn渐渐的养成了好大喜功,目中无人的态度,也种下了Borland开始走向
衰退的因子。
Borland 位于美国加州 Scotts Valley 总部
不过在Borland最强盛的时期,当然也就是Microsoft最想痛宰Borland的时候,在这个时
候发生了一个著名的事件和一个著名的虚拟人物。话说由于当时Microsoft的开发工具一
直打不过Borland的产品,因此在Microsoft的开发工具刊物上便出现了一个作者不断的
以文章嘲笑Borland,这个作者的笔名是Buck Forland。后来由于这位作者的文章内容以
及他的笔名引起了当时Borland的不满以及大量Borland使用者的强烈抗议,因此稍后这
位作者就突然的消失不见了。因此有许多人就推测这个作者应该是Microsoft的工程师,
由于一直无法打败Borland的产品,脑羞成怒,因此才会以这个笔名来发泄。如果各位看
倌到现在还摸不着头为什么这个笔名会引起轩然大波,那么请你试着把Buck Foland这两
个英文字的第一个字母一对调就知道为什么了。现在各位是否会心一笑了?
Philippe Kahn-Borland的创始人
在Borland C/C++ 3.1大获成功之后,Borland却开始松懈了下去,并且开始走下坡。当
然这有许多的原因,我所知其中最重要的原因有数项 :
■Philippe Kahn和当时Borland C/C++的产品经理闹翻了。这位Borland C/C++的产品经
理的名字是Eugene Wang,他是一位非常聪明的中国人。他一手把Borland C/C++ 带到了
世界第一的地位,并且在Borland C/C++ 3.1成功之后有了更伟大的想法,那就是 Euge
ne Wang 想在下一个Borland C/C++版本中完整的以OWL封装所有的Windows API,因为O
WL 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使用的Framewor
k仍然是以Object Pascal以核心的组件Framework,而不是纯粹的C/C++程序代码。如果
当时 Eugene Wang 能够做出他心中的下一版Borland C/C++,那么我想到现在Borland
C/C++可能还是市场中第一的C/C++开发工具。不过很不幸的是,Eugene Wang 稍后和Ph
ilippe 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++开发工具,从此可见E
ugene Wang的功力。不过Symantec C/C++稍后也不敌Microsoft Visual C/C++,这个故
事的原因在稍后四大C/C++编译器之争的段落中再详细的说明。
我最后听说Eugene Wang跑去做生意了,并且在前几年写了一本教导科技人员如何面试的
书籍。我,一直很痛心Borland失去了这么一位优秀的人材,我常想如果当初Eugene Wan
g没有离开Borland,那么历史就可能不是现在的这样了,Sign!!!
■Philippe Kahn大手笔的花了一亿多美金买下了Ashton-Tate公司和dBase。在当时许多
人都批评Philippe Kahn做了不值得的事情,因为Ashton-Tate不值这么多钱。但是由于
当时Borland多的是钱,因此Philippe Kahn也不多意。不过这并不是Borland走向逐渐走
向衰败的主因,而是在Borland买下了dBase之后,并没有立刻积极的发展dBase For Wi
ndows,反而把dBase丢在一旁。这个原因便是当时Borland的另外一个和数据库有关的产
品Paradox卖得也很好,因此Philippe Kahn并不急着打算开发dBase For Windows。不过
Philippe Kahn忘记了一件事情,那就是当时在市场大量人口的dBase程序员需要一个好
的Window版dBase,但是Philippe Kahn购买了dBase却不提供Windows 版的解决方案。因
此当稍后Microsoft以极小的代价买下Fox这家公司,并且在数年之后推出FoxPro For W
indow,吸引了大量原先的dBase程序员以及Paradox的程序员之后,Philippe Kahn才警
觉事情不对而充充忙忙的开发dBase For Windows。但是当dBase For Windows 推出之后
,Microsoft早已推出了两个FoxPro For Windows 的版本,而占据了大部份的市场,dB
ase For Windows其势已不可为了。
■Microsoft开始向Borland挖角。由于Microsoft在许多的开发工具战役中一直被Borla
nd打得灰头土脸。更何况Borland C/C++ 3.1几乎抢占了大部份的市场,因此Microsoft
开始准备好好的对付Borland。但是由于其时Borland在编译器的技术领域领先了Micros
oft数年之久,Microsoft无法在短时间之内赶上Borland,因此Microsoft决定使用最有
效的方法立刻追上Borland技术,蔷褪侵苯油诮恰R虼松葬酠icrosoft的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)参加国际Conferen
ce时,还和他打了一声招呼。后来Philippe Kahn离开了Borland,另外创立了StarFish
这家公司,稍后StarFish也被Motorola并购。虽然Borland由于Philippe Kahn一些错误
的决策而逐渐的从巅峰开始下降,但是Philippe Kahn也不愧为一个人物。因为Philipp
e Kahn能够和Bill Gates一直周旋数年之久,而同一时期的许多公司,例如Lotus都一一
的被Microsoft所击败,因此Philippe Kahn还有一套的。此外Philippe Kahn也是唯一一
个拥有工程师特性的Borland CEO,Philippe Kahn仍然重视技术产品和技术人员。但是
Borland随后的CEO几乎都是Marketing,Finance或是Sales出身的人,这真让我怀念以往
以产品和技术为优先的CEO了。
看完了上面这段今人伤心的历史之后,再让我们看看当Borland在受到Microsoft Visua
l C/C++的强大冲击之后,如果思索反击之道。在这段期间也出现了令我敬佩的第一个B
orland技术工程师,Carl Quinn。
Carl Quinn在Microsoft Visual C/C++ 1.0推出之后,立刻奉命开发一个能够和MFC相抗
衡的全新OWL,而Carl Quinn也是数年后JBuilder的JBCL Framework的灵魂开发人物。C
arl Quinn不但负责开发OWL,也为Borland在组件Framework的技术领域立下了重要的贡
献。由于Carl Quinn的投入,因此开启了OWL大战MFC,Borland C/C++缠斗Visual C/C+
+数年精彩好戏的序幕。
Carl Quinn到现在我还记得和敬佩的人物,让我再一次的向他致敬,并且介绍他让大家
认识。
Carl Quinn-我第一个佩服的Borland工程师
Borland C/C++的反击
火线全开
Borland除了在开发工具市场和Microsoft热战之外,其时和Microsoft ,Lotus鼎足而立
的Borland看到Microsoft和Lotus正在电子表格工具以及文书处理工具大战之暇,不思好
好的集中资源开发新的开发工具和数据库工具(下一节会详说),也不甘寂莫的投入了大
量的资源进入这个惨烈的市场。也许是当是Borland太有钱了,或是Philippe Kahn脑袋
有问题,居然决定进入这个Borland陌生的市场,更何况在Borland投入时Lotus已现败象
,市场已经慢慢的被Microsoft所一步一步的掌握了。
Borland进入Office市场的第一个产品便是著名的Quattro Pro这个电子表格,虽然Quat
tro Pro是一个不错的产品,而且当时由Borland C/C++编译器所开发的Quattro Pro在执
行效率上几乎是最好的,但是Borland没有想到使用电子表格的使用者是一般的办公室人
员,这些人注重的是方便性和功能性,而不是最重视执行速度,这和开发人员是不一样
的。Borland以开发者的心态来开发电子表格工具基本上是走错了方向。因此我记得在那
段时间中,杂志评比Microsoft的Excel,Lotus的1-2-3和Borland的Quattro Pro时,在
功能方面领先的都是Excel和Lotus,在执行效率方面领先的则是Excel和Quattro Pro5
搅嗽嗫惚頍钌鸬奈雌?-2-3甚至比不上Quattro Pro,因此Lotus败走电子表格市场已是不
可避免的结果了。
不过Borland虽然赢了1-2-3,但是和Excel仍然有一大段的距离,Microsoft一统电子表
格江山之势已不可摇,因此最后Borland在损失了大量的资源之后,Quattro Pro只能卖
给Novell。
除了Quattro Pro之外,Borland也投入了很多的资源秘密的开发一个代号称为Spring的
文书处理程序准备和Microsoft的Word以及WordPerfect竞争,这可能是许多人不知道的
。但是这个产品最后仍然无法问市而胎死腹中,在文书处理市场方面Borland不但浪费了
时间,更虚掷了大量的资源。Philippe Kahn在Office产品方面消耗了Borland大量的金
钱和时间,却落得铩羽而归,更连累了开发工具市场以及最有可能成功的数据库产品市
场。
另外一个和Borland无关的故事是关于Excel如何兴起的。话说当Lotus 1-2-3最盛的时期
,Microsoft一直计觊觎这个市场,但是苦于无法开发一个能够和1-2-3相竞争的产品。
有一次Lotus 1-2-3举办了一个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的市场,后来又
从HP取得了真正的RDBMS-InterBase,可以说是全世界数据库实力最雄厚的厂商。
当时的Oracle和Borland比起来,简直是小巫见大巫,而Sybase更不知道在那里。如果当
时Borland能够好好的掌握这个机会,并且极力发展数据库产品的话,那么现在Borland
就算不是世界第一的软件公司,也将是世界第二的软件厂商。
可惜Philippe Kahn并没有看到这个在年代80未到90年代成长最快速的产品。说句笑话的
是,如果当时Philippe Kahn的死对头Bill Gates早一点对Philippe Kahn说出Informat
ion At Your Finger-Tip』的话,那么Borland就可能是现在的Oracle了。
说到数据库市场就不得不对Microsoft的眼光佩服,也可以看到Microsoft行销能力的强
悍。当Microsoft以FoxPro For Window强占了开发者的数据库市场之后,又看到了一般
使用者也需要使用简易好用的数据库管理工具。因此发展出了Access。但是当时在这种
市场中,Paradox占有开发者的数据库大部份的江山,而一般使用者的数据库管理工具市
场则由Lotus的Approach拔得先机。Microsoft为了扳回劣势,我还记得在当时Visual B
asic 3的软件包中Microsoft附了一张优待卷,只要800新台币就可以买一套Access。这
简直就是流血大拍卖,目标很明显,就是当时在市场中卖1万多元的Lotus Approach。果
然,Microsoft此招怀觯珹pproach便在市场被Access打得落花流水,很快的便失去了市
场,也很快的退出了市场。从此一般使用者的数据库管理工具市场便逐渐由Access所取
代。
但是Borland并没有警觉到Access会继续的往开发者市场进功,因此仍然没有加紧在Par
adox产品上开发,Borland总觉得以Paradox在市场的地位是无法轻易憾动的,而且Acce
ss的目标市场也不是Paradox的市场。但是Borland忘记了Microsoft非常散擅长模仿,因
此在随后的Access版本中,Microsoft不断的为Access加入可程序设计的功能,因此也逐
渐的吸引了一些Paradox入门使用者的市场,再加入FoxPro For Window又持续的强功开
发者数据库市场,Paradox终于在背腹受敌之下也逐渐的败下阵来。虽然在未期Philipp
e Kahn已经对Paradox投下重兵,希望能够挽回Paradox的劣势,奈何时不我予,Parado
x在奋斗了Paradox 6和Paradox 7的2个版本之后,终究难逃失败的命运。
当时我看到Microsoft如何打击竞争对手时,我就和朋友开玩笑的说。Microsoft有天下
无敌的3绝招,那就是『打不过你就模仿你(这让我想起电影秘密客(Mimic) ),再打不过
就和你比流血,看谁流得久(这让我想起吸血鬼),最后如果再不行的话,那就挖光你的
人(这让我想起电影 Other People's Money)』。Lotus就在Microsoft的前2个绝招下到
地不起,而Borland还算是功力深厚的了,连中了3绝招,虽然不像Lotus和许多其它公司
一样从此Bye-Bye,但也是受伤极重的了。
ODBC和IDAPI之争
当Microsoft在逐渐的击败他的竞争对手,并且拥有了大部份PC数据库市场之后,便慢慢
的了解到掌握标准的重要性。此外Microsoft为了统一各应用程序之间不同资料的存取,
因此开始制定存取资料的统一标准-ODBC。
Microsoft更大的目的是为了准备和瞄准下一场的大战,那就是PC上的RDBMS产品。
当然,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的竞争,还是以IDAP
I 1.0的规格实作资料存取引擎,这就是我们现在使用的BDE/IDAPI和SQL Links的前身。
当时IDAPI 1.0的功能规格比ODBC 1.0好得多了,我记得Delphi 1.0使用的BDE/IDAPI和
SQL Links驱动程序也比当时慢得像乌龟的ODBC快上太多了。只可惜在IBM和Novell推出
之后,其它的小厂也是一轰而散。因此Borland只能靠自己独自和Microsoft对抗。Borl
and能够以少量的资源一直对抗到Delphi 3的BDE/IDAPI才逐渐的被ODBC追过,也算是非
战之罪了。怪也只能怪Borland意志不坚的盟友。
当然由于IBM和Novell的行事做风是如此,在稍后许多能够和Microsoft一较长短的C会也
因为如此而消逝,最后自食恶果,逐渐失去了PC的软件市场,再也无力和Microsoft抗衡
了。
现在呢Borland似乎记取了当时的错误, 正努力的在Linux上定义标准资料存取接口dbEx
press, 我希望也祝福Borland能够成功.
当Visual C++ 1.0在C/C++开发工具市场获得了空前成果的之后,Borland才从
Borland C/C++ 3.1的胜利梦中惊醒,思考如何面对Visual C++的猛烈功势。事实
上当时的Borland如果脑袋清醒一点,好好看清当时C/C++开发工具的市场,那么
Borland应该会发现虽然Visual C++经过2年多的整军经武,实力已经大不前。不过
Borland C/C++ 3.1仍然在许多方面可以和Visual C++一争长短的。例如其时
Visual C++的最佳化编译器仍然落后Borland C/C++ 3.1一些,第2点是MFC仍然没
有完整的封装Window API,而且MFC是以较低阶的方式封装Window API,并不是很
对象导向,也不是很容易使用。事实上以我的观点来看,我认为就是因为MFC不好
用,因此Visual C++才需要在整合发展环境中提供以可视化方式产生MFC程序代码
的功能,第3是Visual C++当时并没有很好的封装数据结构的Container Class,而
Borland C/C++却有非常好用的BIDS类别库。第4,也是最重要的,Borland
C/C++ 3.1仍然拥有绝大的市场,而且几乎所有的外围公用程序,Shareware等都是
使用Borland C/C++ 3.1开发的。因此如果Borland不要急,好好的开发下一代的
C/C++开发工具,即使Microsoft Visual C++能够掠夺一些市场占有率,但是如果
下一代的Borland C/C++能够像Borland C/C++ 3.0一样立刻拉开和Visual C/C++的
距离,那么Borland在C/C++市场仍将拥有王者的地位。
可惜的是,也许Philippe Kahn在和Microsoft的FoxPro For Window一役中被吓到
了,因此急于在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决定全新发展整合发展环境,第2是把OWL完全重写,第3是大幅修改
最佳化编译器,第4是整合当时棘手的VBX,Borland居然让16位和32位的程序能够
同时使用16位,丑陋的VBX。
上面所说的每一项都是大工程,Borland早应该在Borland C/C++ 3.1之后便开始做
这些工作,现在要在短短的一年多的时间内重新开发一个这么复杂的C/C++开发工
具,几乎是不可能的工作。但是在Philippe Kahn的要求之下,这些Borland的工程
师还是硬着头皮做了出来。
不过我必须很沉痛的说,当时我在Beta测试Borland C/C++ 4.0时便和台湾
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/++ 4.0,这个肩负和Visual C++ 1.0对抗的C/C++开发工具。
在Borland C/C++ 4.0 当时所有重要的计算机杂志?,例如Byte,PC Magazine,Dr. B
ob等等,都有4.0页的广告。这个广告的内容是以一个巨大的猫头鹰为主,再搭配蓝色
底色系的Borland C/C++ 4.0为主,选用巨大的猫头鹰当然是因为OWL的原因,只可惜我现
在
找不到那幅广告了。
痛失江山的Borland C/C++ 4.0
当时Borland使用了如下的广告用词 :
『Visual Is Only A Facial Facade』
来讽刺Visual C/C++只提供了产生MFC程序代码的基本精灵,而Borland除了也提供
相对应的AppExpert精灵能够提供类似的功能以产生使用者选择的OWL程序代码之外
,Borland C/C++ 4.0的整合发展环境还提供了可视化的3面版窗口,能够让程序员
完整的掌握整个项目的情形。
例如在下图中便是当初令人眼睛为之一亮的AppExpert:
还记得Borland提供的AppExpert吗?
下图则是当时Borland C/C++的注册商标,3面版窗口开发环境。看到下图又令我想
起当初使用C/C++写程序的日子,下方程式码面版清楚的显示了我在1995年于鼎新
工作时写的智能型Window排程系统,时间过得是真快啊。
令人怀念的Borland C/C++ 4.0整合发展环境,三面版窗口
当时Borland C/C++ 4.0的3面版整合发展环境真是开创了一个新的局面,因为这个
整合发展环境允许程序员知道每一个应用程序定义的窗口讯息,并且能够立刻的显
示在下方的程序代码窗口中,的确是非常的方便,也比当时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推出一段时间之后,市场的反应就急速的冷却下来,
因为各种负面的批评不断涌现,这主要的原因当然是因为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 2.
0做了从基本架构的改变,这是为了解决当初OWL 1.x使用了不标准的C/C++编译器
技术的问题,但是这造成了原本Borland C/C++程序员极大的困扰,因为升级不易
。对于新的C/C++使用者来说又因为Borland C/C++ 4.0本身不稳定的因素而却步,
因此造成了OWL 2.0叫好不叫座的下场,真是可惜了 OWL小组的努力。
我记得当时我的项目有使用FarPoint的SpreadSheet VBX组件,由于一直无法顺利
的在Borland C/C++ 4.0中使用,并且会造成应用程序的当掉,最后追踪执行程序
代码却发现应该是Borland C/C++ 4.0的问题,因此最后只好在咒骂中放弃使用4.
0,而回到Borland C/C++ 3.1。我当时想,对于我这个长期使用Borland产品的人
都无法忍受4.0的品质,其它的程序员又怎能使用这个产品。我想这就是为什么后
来4.0全面溃败的原因,因为Borland推出了根本不堪用的产品。
在我于Borland工作的时间,有一次在新加坡和现在Borland开发者关系部门的副总
裁David Intersimone谈起这一段往事,David也很感慨这一段往事,David直呼『
We screwed it up!』,『It's a mess』。David并且说当时整个Borland C/C++开
发小组都很混乱,和以往Borland C/C++ 3.0/3.1的开发小组比起来实在是差太多
了,除了因为一些重要的人物相继离开Borland,而且Microsoft也挖走一大票人之
外,Philippe Kahn的直接介入,造成人事不和也有很大的原因。
David I.说『We Screwed it up!』 ,『It's a mess』
在Borland C/C++ 4.0快速失利之后,Borland也体认到问题的严重性,因此立刻的
着手开发Borland 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在3个主要的应用市场接连败退,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++吧。它的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推出第一个C/C++开发工
具。在1993年左右吧,Symantec C/C++在Eugene Wang的掌舵之下推出了第一个
Symantec C/C++版本,立刻便获得了市场的好评。自此之后Symantec C/C++军心大
振,不断的继续改善,也逐渐的获得了不小的C/C++市场,隐然成为可以对抗
Borland C/C++,Visual C/C++的另一山头。当时Symantec C/C++是以最华丽,先
进的整合发展环境获得市场的高度认同,在C/C++编译器最佳化方面的表现也不会
输给其它的编译器。
当时我在RUN!PC上写C/C++的文章,因此Symantec C/C++也有和我连络,并且送给
我一套最高档的Symantec C/C++,希望我除了为Borland写C/C++的文章之外,也能
够为Symantec C/C++写一些东西,我想这就是做为写技术文章的一个好处之一,那
就是可以拿到许多最Hot的开发工具。我还记得在当时安装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』的总监,例如当时由Matt Pietrek撰写的Windows Internals也是轰动一
时的巨著。而PharLap公司是当时出版DOS Extender软件最成功的软件公司。
谈到Matt Pietrek,熟悉Window Programming的人应该很少有不知这位大师级人物
的。Matt长期在Microsoft System Journal撰写Under The Hood专栏,专门写一些
深入系统的程序设计技术,在数年前便和Andrew Schulman,David Maxey成为
Widow System Programming的三大巨头之一。Matt也是著名的Window除错工具
SoftIce,BoundsChecker的主要研发工程师。Matt本身也是从Borland出道的,当
Matt初至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市场占稳了脚步之后,由于Window已经逐渐成为市场的主流
,DOS势必将被逐渐淘汰出局,因此Watcom C/C++要继续的生存下去,也一定要推
出Window平台的C/C++开发工具。大约也是在1993,1994年左右Watcom终于推出第
一个Window的开发工具。
不过当时Watcom C/C++在Window推出的C/C++开发工具实在是平凡不已,其整合发
展环境和另外三个对手比较起来简直像是远古的产品,一点特色都没有,不过
Watcom C/C++仍然是以它的最佳化编译器做为号召。因此在当时发生了一个非常有
趣的现象,那就是许多软件公司会同时买Borland C/C++,或是Visual C/C++,
Symantec C/C++之一,再搭配一套Watcom C/C++。在开发应用系统时使用其它三套
开发工具之一,最后要出货时再使用Watcom C/C++来编译以产生最佳的程序代码。
在Watcom C/C++推出了Window平台的开发工具之后,仍然吸引了一群使用者,虽然
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++逐渐的站稳了脚步之后,四大编译器决战的时刻
也逐渐逼近了。在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,那么Symantec和Watcom并没有
如此雄厚的资源,也无法在短时间之内完成。因此Symantec和Watcom必须下一个决
定到底是要使用MFC或是OWL做为它们的开发工具C/C++ Framework。
在1993年初Symantec和Watcom分别和Microsoft签约License MFC做为它们的开发工
具的C/C++ Framework。至此大势以定,在C/C++ Framework的市场已经形成三家夹
击一家的形式。当时许多人便预估Borland将成为输家,因为市场已经成为一面倒
,MFC看起来已经是胜券在握了。在当时于Borland的内部也展开了激烈的辩论,讨
论是否也要License 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,那么还需要修改编译器来编译MFC
。
对于这一点我认为Borland还是做了一个正确的决定,因为如果当时Borland也
License MFC,那么不但在气势上便输了一截,而且当MFC的发展是完全掌握在
Microsoft的手里,那么就等于脖子是掐在别人的手里,动弹不得了。可惜的是
Symantec和Watcom并没有看清这一点,以为有了和Microsoft一样的Framework,就
可以在其它地方和Microsoft以及Borland一决雌雄,Symantec和Watcom却没有想就
是这一点决定让后来的决战一败涂地,终究完全推出PC的C/C++开发工具市场。
时序到了1994年未,C/C++开发工具的四大天王决战的日子终于愈来愈近了。
OLE的搅局
不知道是时运不济或是Microsoft的刻意如此,在1994年Borland C/C++和Visual
C/C++决战的前夕,Microsoft推出了OLE(Object Linking And Embedding)技术。
OLE是Microsoft为了对抗Apple的文件技术以及IBM OS2的Workplace和文件技术应
运而生的。OLE可以让Window平台的文件能够内嵌在不同的应用程序中并且能够让
文件在应用程序中被即地编辑(In-Place Editing)。说实在的,Microsoft的OLE和
Apple以及IBM的技术比较起来实在是差多了,OLE在稍后也被证明是失败的技术,
不过不管是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虽然是License MFC,但是在其
时它们License的是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的OWL 2.5中支持OLE。当时Borland推出的解决方案便是OCF(Object
Component Framework)。
Borland当初在设计OCF时有几个重大的目标。这些目标包括了: 一、如何能够使得
OLE琐碎 、复杂的接口能够单纯化;
第二、如何能够使得OLE在窗口环境下写程序
的思考方式 一致化--即使用「事件驱动」的方法。第三、如何能够在微软占尽天
时、地利(未必人和) 的情况下使得Borland的产品具备OLE的功能。第四、如何能
够让大多数C++的程序员都能够享受OLE的功能而不局限于OWL的程序员。由于上述
的设计目标, 而造就了典雅而具有弹 性的OCF。由于OCF本身是一完整而独立的
Framework, 因此它可适用于各种应用程序发展Framework。
不晓得各位使用过Borland C/C++的朋友们是否还依稀记得下图OCF的架构图之一,
以及下面的OCF范例程序代码,这些可是我把1994年写的文章挖出来之后找到的,
真是令我感慨,也回想起了当时的情景,也让各位回忆一下OWL和OCF。对于不熟悉
OWL和OCF的朋友,也可以从下图和程序代码中观察一下当时的技术以及设计的概念
。
基本上我现在看这些图形架构,会发现它们并没有落后现在太多,可见当时设计
者的功力(Carl Quinn Again)。
//
// Insert an OLE object into the view
//
void TOleWindow::CmEditInsertObject()
{
001 PRECONDITION(OcView);
002 TOcInitInfo initInfo(OcView);
003 if (OcApp->Browse(initInfo)) {
004 TRect rect;
005 GetInsertPosition(rect);
006 SetSelection(new TOcPart(*GetOcDoc(), initInfo, rect));
007 OcView->Rename();
008 InvalidatePart(invView);
}
}
程序1 OWL的TOleWindow支持OLE插入对象之成员函数
//
// Handle left do
uble-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
}
}
程序2 OWL的TOleWindow支持左键双击之成员函数
虽然Borland及时的在OWL 2.5中加入了OLE的支持,无奈Microsoft随后又在OLE中
加入了许多其它的功能,因此让OCF并无法完整的支持OLE所有的功能,B无法不断的延后
Borrland C/C++的推出,因此在1994年未,Borland终于推出了决战
的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的则是以红色为色系,仿佛两大
军团终将决战似的。
C/C++四大天王决战一役的Borland主将-Borland C/++ 4.5
不过这次的战役不光是Borland的蓝军和Microsoft的红军相对抗,在Symantec的华
丽军团经过了经军经武,Watcom的白色劲旅枕戈待旦,而且都从Microsoft
License了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居然比它们的
版本高出了一个版本(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++新
版本真的并没有比4.5好。虽然4.5也有OCF,但是在市场上只有Borland和Novell,
WordPerfect选择使用OCF,在和Microsoft的Visual C/C++经过将近一年的缠斗之
后,其它大部份的厂商都选择了Microsoft的MFC 2.x版,真是形势比人强。基本上
OCF的架构真的是个好东西,只是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的市场逐渐式微,而Window平台的开发工
具又大败而归,两头落空。不久之后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的挑起的浏
览器大战。
对于Borland而言,在C/C++最后一役之后,基本上我认为开发工具的圣战已然结束
,Borland也正式开始走下坡。更严重的是我认为自此之后Borland不但丧失了
C/C++的江山,也失去了对于C/C++开发工具的创意,这是我感觉最遗憾的地方,到
现在为止我仍然认为Borland尚未重拾当初在Borland C/C++ 3.0/3.1时代独领
C/C++创意风骚的精神。也许,也许,要看看C/C++ For Kylix或是C++ Builder 6
是否能够重新找回这个失去已久的精神,不要再让我失望了。
雄霸数年的C/C++的世界冠军-Borland C/C++ 3.1-永远的怀念
永不成气候的C/C++开发工具-IBM Visual C/C++
IBM在C/C++开发工具扮演的角色一直令人啼笑皆非,因为在C/C++编译器战争最激
烈的时刻,IBM这个全球信息大厂却一直是缺席的。一直到了1995之后,C/C++编译
器市场大势已定之后才慢慢的加入战局,推出VisualAge C++ 3.0,企图进攻此市
场。但是此时市场早已由Microsoft的Visual C/C++称雄。IBM的VisualAge虽然以
创新的可视化设计家能够定义对象之间的关系,但是在其它方面却乏善可陈,整个
整合发展环境也缓慢如蜗牛,需要非常高文件的硬件配备才能够顺利的执行,和
Visual C/C++以及Borland C/C++等工具比较起来就像是恐龙一般,因此几乎没有
在市场上引起任何的反应。
在IBM推出VisualAge 3.0并没有在PC的C/C++开发工具市场获得任何的明显成果之
后,IBM又再次的集中了许多的资源,开发下一代3.5的版本,希望能够在此市场占
有一定的比率。我知道IBM在VisualAge投注了大量的资源,因为从Beta版开始台湾
的IBM便有人和我接触,希望我也在RUN!PC上为VisualAge 3.5写一些文章。因此在
1996年的6月我写了一篇C/C++编译器的比较文章,下面的资料便是数年前当时还在
Beta版的VisualAge 3.5和其它编译器的比较:
从上面的数据中可以看到其实VisualAge 3.5的表现还不错,只是对于当时还在使
用AMD DX4-100/32M RAM机器的我来说,实在是跑不太动VisualAge 3.5。后来台湾
IBM负责VisualAge的产品经理请我吃饭,在此饭局中这位李经理同时请了贺元(后
来为资迅人的总裁),薛晓岚(后来为资迅人的副总裁)以及其它两位作者,希望大
家在计算机杂志中继续的为VisualAge 3.5写写东西,一起Promote此产品。在这个
饭局中我是第一次和贺元,薛晓岚见面,当时贺元在中文PC Magazine有一技术专
栏。记得当时我向这位李经理提起我的机器几乎无法跑VisualAge 3.5,他还立刻
一口答应愿意借我一台当时IBM最高檔的PC,同时每写一篇VisualAge的文章,除了
RUN!PC原本的稿费之外,IBM会再付一字2.5元的稿费。乖乖,IBM真是大手笔,我
算算当时我的产能,写一篇文章就能够赚2到3万,又有免费的最高档机器可用,真
是太好康了。不过后来我还是觉得IBM在此市场可能不会深耕,在不愿意违背自己
写作习惯和得罪Borland的顾虑下,最后还是没有答应。现在想想当时真是太笨了
,放着好赚的稿费不赚,嘻。
IBM的C/C++开发工具之所以在市场无法成功是一是因为并不了解在此竞争激烈的市
场中使用者到底要什么。另外一个原因则因为IBM并不以PC上的开发工具软件为重
要的事业,即使无法竞争对于IBM来说也没有什么影响,不像Borland这可是生命之
争。因此IBM只是兴起玩玩,随即放下。所以我觉得在PC平台使用IBM的工具是很危
险的,因为IBM可能随时会放弃此市场。例如不知道现在VisualAge C/C++到底如何
,是不是还在3.5或是4.0版,已经数年没有任何的维护和改善了。
稍后IBM为了想在OS2和Window平台上推出能够和Microsoft相抗衡的Basic工具,因
此秘密的研发了一个Object Basic。我也曾看过这个工具,但是Object Basic跑起
来慢得跟乌龟一样.后来不知道是不是一直无法改善这个问题,因此IBM从没有推
出此产品,现在IBM似乎只对Java有兴趣,VisualAge For Java还算发展的不错,
希望不会有一天IBM对VisualAge For Java的态度会和VisuaAge For C/C++以及
Object Basic一样才好.
快速殒落的潜力之星-Sybase的C/C++ RAD工具Optima++
在1996年吧,Sybase并购了Watcom之后,终于推出了石破天惊的C/C++开发工具,
Optima++。Optima++是当结合了Watcom的最佳化编译器以及类似Delphi的组件拖曳
开发环境的第一个RAD C/C++开发工具,更棒的是Optima++的组件架构(类似
Delphi的VCL)完全是以纯正的C/C++程序代码撰写的。这可不得了,因为这代表
Optima++是一个融合了Visual C/C++和Delphi两大王者开发工具为一身的超级赛亚
人工具。
在我知道这个工具,并且取得实际的使用之后,令我极为震惊。因为这个工具对于
我这个使用了C/C++ 5,6年的人来说,是比Delphi还具有吸引力。因此在当年我立
刻的在RUN!PC上介绍了此不可置信的工具。果然,Optima++很快在开始风卷市场,
虽然没有立刻的占据很大的市场量,但是已经造成了一股气势,开始为Visual
C/C++和Delphi带来了压力。
我记得当时台湾Sybase办的产品发表会也吸引了数百人与会,不可一世。在我的
RUN!PC文章出版之后,台湾的Sybase立刻和我连络。由当时的余协理和我见面,也
是希望我继续为Optima++写文章,台湾Sybase也提供额外一字加2元稿费的待遇。
但是我告诉余协理,Optima++ 1.0虽然很棒,但是仍然有一些臭虫,而且和中文环
境相冲突,无法处理中文,需要立刻的解决问题才能够在台湾的市场成功。她答应
我立刻的向总公司反应。我也老实的告诉她在问题没有解决之前我无法写一些不确
实的东西。后来台湾Borland的总经理方先生也找我去询问有关Optima++的事情,
我告诉他Optima++是好东西,但是中文有问题。如果中文问题能够解决,那么将对
Borland的产品有很大的影响,当时我还不知道Borland由于Optima++的影响,已经
开始准备发展C++ Builder。
在1996年底左右吧,Optima++ 1.5终于进入Beta的阶段,但是在我拿到Beta版时仍
然非常的失望,因为中文的问题仍然没有解决。后来台湾Sybase又找我去,这次和
我见面的是台湾Sybase总经理郭俊男先生,以及Sybase的新加坡技术总裁,不过我
忘记这位先生的名字了。我们见了面之后,我立刻的把Optima++ 1.5中文的问题以
及许多的臭虫告诉他们,希望他们能够解决,如此Optima++ 1.5才能够在中文市场
成功。可是出乎意我意料的是,他们似乎并不急着这些问题,反而询问我是否有意
愿为Sybase工作,做PowerBuilder的产品经理。
也许是因为我为Delphi写了太多的东西,让PowerBuilder受了很大的影响,因此他
们希望我到Sybase工作,以打击Delphi并且Promote PowerBuilder。当时他们提出
的待遇条件实在是非常,非常的诱人,比我当时的薪水高出一倍左右(我当时在资
策会工作)。不过由于我对PowerBuilder实在没有什么兴趣,因此我告诉他们如果
是做Optima++的产品经理,那么我将会考虑并且接受。
没有想到Sybase的新加坡技术总裁告诉我Optima++在1.5推出之后就可能会停止,
因为Sybase要把资源移去为当时愈来愈红的Java研发一个新的Java RAD开发工具,
那就是后来的PowerJ。于是他问我如果不愿意做PowerBuilder的产品经理,那么是
不是愿意做PowerJ的产品经理?由于当时我已经知道Borland开始了Open
JBuilder的研发,而我对Open JBuilder的兴趣远大于PowerJ,因此并没有答应
Sybase。果然,在Optima++ 1.5推出之后,不但中文的问题没有解决,Sybase也没
有继续的对Optima++研发下去。
一个如此有潜力的产品就这样消失了,真是令人遗憾,Optima++应该有很好的机会
可以成功的,我相信如果当时Sybase知道C++ Builder后来的成果,可能就不会放
弃Optima++了。而C/C++的RAD工具一直要到后来的C++ Builder来完成这个梦,又
是Borland成功的进入这个工具市场。
C/C++的开发工具之争到此算是告一段落了,虽然后来Borland继续推出了
Borland C/C++ 5.0但是品质仍然不够好,市场反应也不佳,后来Borland终于在
Borland C/C++ 5.02之后宣布停止此条产品线的开发,Borland C/C++的光荣历史
也就从此打止,真是令人不胜感叹,而Visual C/C++从此在C/C++开发工具市场中
再也没有对手。不过没有竞争的市场的确会让人松懈的,后来的Visual C/C++进步
的幅度愈来愈小,MFC也数年没有什么大进步,不像当时和Borland C/C++竞争时每
一个版本都有大幅的改善。看来寡占的市场的确是不好的。