--李维的回忆我的回忆和有趣的故事 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无法顺利地在BorlandC/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的问题,因此最后只好在咒骂中放弃使用BorlandC/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 flagp->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负责VisualAge的产品经理请我吃饭,在此饭局中这位李经理同时请了贺元(后来成为资迅人的总裁)、薛晓岚(后来成为资迅人的副总裁)以及其他两位作者,希望大家在计算机杂志中继续为VisualAge C/C++3.5写写东西,一起Promote此产品。在这个饭局中我是第一次和贺元、薛晓岚见面,当时贺元在中文PC Magazine有一技术专栏。记得当我向这位李经理提起我的机器几乎无法跑得动VisualAge C/C++3.5时,他还立刻一口答应借我一台当时IBM最高档的PC。同时每写一篇VisualAge C/C++3.5的文章,除了《RUN!PC》原本的稿费之外,IBM会再付一字2.5元的稿费。乖乖,IBM真是大手笔。我算算当时我的产能,写一篇文章就能够赚2到3万,又有免费的最高档机器可用,真是太好了。不过后来我还是觉得IBM在此市场可能不会深耕。在不愿意违背自己写作习惯和得罪Borland的顾虑下,最后还是没有答应。现在想想当时真是太笨了,放着好赚的稿费不赚,嘻。
IBM的C/C++开发工具之所以在市场无法成功,是因为IBM并不了解在此竞争激烈的市场中使用者到底要什么。另外一个原因则是IBM并不以PC上的开发工具软件为重要的事业。即使无法竞争和获利,对于IBM来说也没有什么影响,因为IBM主要是靠硬件和大型软件为主,不像Borland这可是生命之争。因此IBM只是兴起玩玩,随即放下。所以我觉得在PC平台使用IBM的工具是很危险的,因为IBM随时都可能会放弃这个市场。不知道现在VisualAge C/C++到底下场如何?是不是还在3.5或是4.0版?IBM已经数年没有任何的维护和改善了。
快速殒落的潜力之星: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》6上发表之后,台湾的Sybase立刻和我联络,由当时的余协理和我见面,也是希望我继续为Optima++写文章,台湾Sybase也提供额外一字加2元稿费的待遇。但是我告诉余协理,Optima++1.0虽然很棒,但是仍然有一些臭虫,而且和中文环境相冲突,无法处理中文,需要立刻解决这个问题才能够在台湾的市场成功。她答应我立刻向总公司反应。我也老实地告诉她,在问题没有解决之前,我无法写一些不确实的东西。后来台湾Borland的总经理方先生也找我去询问有关Optima++的事情,我告诉他Optima++是好东西,但是中文有问题。如果中文问题能够解决,那么将对Borland和Microsoft的产品有很大的影响,当时我还不知道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++一个如此有潜力的产品就这样消失了,真是令人遗憾。Optima++应该有很好的机会可以成功的。我相信,如果当时Sybase知道C++Builder后来的成果,可能就不会放弃Optima++了,而C/C++的RAD工具一直要到后来的C++Builder来完成这个梦。
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++竞争时每一个版本都有大幅的改善。看来寡占的市场的确是不好的。
-------------------------------------------------------------------------------- --作者:小枣粽子--发布时间:2004-8-23 23:02:00
--第三章传奇的开始--Delphi
"是惊世之作的Delphi让Borland重新站了起来,没有当初的Delphi,就没有今日的Borland!"
"是Turbo Pascal诞生了Borland,但却是Object Pascal给予了Borland重生的机会!"
创造传奇故事的主角--Delphi
没有人会知道在两年后Borland C/C++会遭遇到这么大的失败,也没有人会预料到Borland又会再次因为Pascal而东山再起。Borland奋斗史精彩的地方就在于每当似乎要不支倒地之际,Borland的R&D人员就会创造出一个明星级的产品来拯救Borland。在其他和Microsoft对抗的软件公司纷纷消失的时候,Borland却一次又一次地站了起来。"打不死的勇者"这句话贴切地形容了Borland的韧性。Borland靠Pascal起家,通过C/C++绽放光芒,进而达到了巅峰的状态,随后又再次靠着Pascal浴火重生。Borland这个从C/C++跌倒,再通过明星工具Delphi重回战场的过程可以说是惊心动魄,其中更牵涉到了Borland两位创始人Philippe Kahn以及Anders Hejlsberg相继离开Borland的密闻,也激活了Borland逐渐转型的历史轮轴。对于Borland来说,这段发展史可以算是非常关键的里程碑,更重要的是,Delphi的崛起也在软件工具业界产生了巨大的影响。Delphi不但激活了Windows平台上RAD战争的序幕,开启了Windows平台主从架构的改变,同时也对组件技术做出了巨大的贡献。直到现在,Delphi创造的组件技术仍然深深地影响了JavaBeans以及.NET的组件思想和技术,这在稍后的内文中读者可以逐渐地了解。而故事的起源便在1993年左右……
Delphi的发展起源
当Borland以Turbo Pascal获得了成功,并且令Charles Petzold等人跌破眼镜之后,到了1992/1993年的Borland Pascal 7.x,Borland似乎已经把传统的Pascal开发工具发展到了极限,再往下还能做什么呢?Borland Pascal在销售了数百万套之后,程序语言的焦点已经从Pascal转移到了C/C++,Borland Pascal无法继续快速成长,进而转入了递减的状况,Borland必须做些新的东西才能够延续这条产品线。
当时Borland Pascal产品的Architect,即Anders Hejlsberg,眼看Microsoft VisualBasic的成功,觉得当时Visual Basic是比较初级的开发工具,是一个学习Windows程序设计的好工具,但是尚无开发真正应用系统的能力。因此,Anders和Borland Pascal的小组决定展开一个规模前所未有的项目计划,这个开发工具项目在一开始便设定了数个目标,希望能够达成并且超越Visual Basic。这些初始的目标是:
●延续Borland Pascal的传统,提供一个快速编译的开发环境■Borland/Turbo Pascal的高明之处便是由Anders使用汇编语言撰写的Pascal编译器不但编译快速,而且能够产出极为有效率的机器码。当时的Visual Basic只是解译器(Interpreter),无法产生真正的执行机器码,因此在这一方面Borland决定要远远地超过VB,但是Borland的挑战是要开发出一个编译速度能够媲美解译器速度的新一代编译器。
■Anders另外一个重要的决定便是改善Borland Pascal程序语言,让这个新的开发工具程序语言具备面向对象的功能。这在当时是非常重要的决定,因为不但需要大幅修改编译器,也正式将Borland Pascal超越Pascal之父对Pascal定义的结构,让Pascal拥有现代语言最新的功能。虽然这个决定有很大的因素是因为Borland决定通过面向对象的方式建立新一代的Framework和组件架构,因此需要程序语言方面的支持。不过,这在当时整个信息界对于面向对象技术还很陌生的阶段,的确是一个很大胆的决策。这个程序语言的决策虽然可以吸引专业人士的激赏,不过也可能会让许多程序员无法跨越这个障碍。后来的发展也证明了这一点。
●建立一个新的Windows Framework组件架构■当时VB使用的组件是VBX。不过VBX架构非常的复杂,只能使用在16位的环境,并且在可视化拖曳设计方面又不是很方便。因此Borland希望在OWL之后建立一个全新的Framework,这个Framework能够让程序员快速开发Windows应用程序,并且完整地封装Windows操作系统中的对象。此外,Borland也希望定义一个标准的组件架构,让使用这个开发工具的程序员能够通过Framework和组件架构来开发各种组件,包括可视化和非可视化组件。这个Framework就是后来的VCL(Visual Component Library)。在这方面,Borland做得非常成功。如果各位读者有VBX的经验,就会知道当时,Microsoft定义的VBX规格简直是一团混乱,根本像是拼凑出来的东西。在当时开发VBX组件痛苦不堪,后来Microsoft也彻底放弃了VBX。
●拖曳、可视化的开发环境■Borland的想法是开发一个全新的集成开发环境,在这个开发环境中程序员可以使用可视化的方法拖曳Framework的组件来设计图形界面,再在其中的编辑器中使用面向对象程序语言来撰写应用程序。
这个开发工具项目的名称就是:Delphi!
Delphi的核心成员
在Delphi决定开工之后,Philippe Kahn还不放心动用太多的资源来开发这个产品,因为当时Borland正集中所有的资源,希望能够打赢C/C++开发工具一役。因此Philippe Kahn一开始只答应拨给Anders四个开发人员,先进行产品雏型的开发工作。因此,Delphi在当时被笑称为像Apple计算机一样,是在地下室开发的。
当时加入Delphi开发小组的当然就包含了Anders,第二人是Chuck Jazdzewski。其中Anders负责撰写新的Object Pascal编译器以及核心程序,而Chuck则负责设计Delphi使用的组件Framework,即VCL。在经过了6个月的初始雏型阶段之后,当Anders把开发的结果呈现给Philippe Kahn看时,Philippe立刻被它所吸引。因为当时在Borland内部也希望为Borland C/C++开发一个类似这样能够以可视化拖曳方式开发应用系统的C/C++开发工具。没有想到在短短不到一年的时间内,Anders已经从基本的构想开发出了雏型产品。于是Philippe马上批准了这个产品的开发计划,并且投入研发资源。许多后来举足轻重的人才便是从开发Delphi项目培养出来的。当时在这个项目中,各个重要的部分分别由下面的重要人员负责:
●Anders Hejlsberg:编译器,Object Pascal程序语言,产品架构
●Chuck Jazdzewski:Framework,组件架构设计/实现
●Allen Bauer:集成开发环境的开发工具,Open Tools API
●Danny Thorpe:RTL (Run-Time Library)
●Zack Urlocker:产品开发方向,产品规划
有兴趣的读者可以打开下面的链接,这篇文章是由Danny Thorpe(现在是Borland .NET的Architect)撰写的,详细地说明了Delphi这个名称的由来以及开发的缘由。
http://community.borland.com/article/0,1410,20396,00.html
而批准Delphi的开发,则是Philippe Kahn在因为Borland营运不佳而辞去Borland CEO之前做出的最重要而且正确的决策。没有Philippe Kahn的同意,便不会有两三年后浴火重生的Borland。
大规模的开发行动和Philippe Kahn的下台
在Borland如火如荼地进行C/C++最后决战的同时,Delphi也在快速的开发之中。1994下半年,Delphi 1.0几乎已经开发完毕,最后剩下的工作就是Beta测试的阶段。同年,Borland决定为Delphi展开一项从未进行的尝试计划,因为Borland对于Delphi信心满满。这个计划就是为Delphi进行前所未有的大规模测试,以确保Delphi的品质,避免重蹈Borland C/C++发生的覆辙。Borland为Delphi发出了成千上万的测试版本,邀请了广大的程序员为Delphi进行长期的测试。这可是空前绝后的,因为自Delphi 1.0之后Borland再也没有任何的产品能够拥有这种气魄和规模。我记得在1994年底左右,收到了来自当时Borland台湾产品经理张书良先生寄来的神秘圣诞节礼物。当时打开包裹一看,是六七片磁盘,没有任何的文件和说明。张书良先生请我安装看看这个"东西",并且请提供一点意见。
在安装了这些"磁盘"之后,映入眼帘的是一个陌生的软件。"这是什么啊?"这是我当时的第一个想法。后来玩玩此软件,发现乖乖不得了。不但大部分的Windows对象都可以拉拉就产生程序代码,更绝的是编译应用程序的速度比使用Borland C/C++的编译器快了数十倍,而且产生的是一个体积不大的原生EXE文件,执行速度更是媲美C/C++的程序代码。这让我这个惯用C/C++的程序员当场傻眼。
"这怎么可能?"在我发出呓语般的声音之后,旁边的同事也觉得怪怪的,于是一个一个地跑到我的计算机旁,看看我到底在做什么?其中当然包括了《Delphi学习手册》的作者、也是笔者的好友李增坤先生。在大家玩了之后,每个人都急着拷贝我的Delphi Beta版以便回家继续玩。后来李增坤先生更是玩得出神入化,还能够让Delphi连接到当时相当封闭的Informix数据库(因为他们的开发小组是使用Informix的),真是厉害。他是我所知的第一个Delphi好手。
"这绝对是一个Super Star!",当时我这样对张书良先生说。"真的?那么你可不可以在杂志上帮Borland写一些介绍它的文章?"张书良先生对我这么说。就是因为这段对话,让我开始和Delphi结下了不解之缘。至于我开始写Delphi书籍的缘由也是无心插柳造成的。在台湾Borland准备力推Delphi 1.0之际,张书良先生准备亲自下海,也亲自出面找到了旗标出版社合作出书,以推广Delphi。后来由于张先生工作太忙,因此又找了我和李增坤先生帮忙。本来的约定是我和李增坤先生只负责一小部分,其他的部分都由张先生完成。没有想到,签约之后张书良先生完全没有时间投入,因此只好由我和李增坤先生完成《Delphi 1.0学习手册》。由于我和李增坤先生以前没有写书的经验,投入撰写书籍的时间也不多,因此《Delphi 1.0学习手册》是台湾所有有关Delphi 1.0书籍中最晚出的一本书,远远超过当时我们规划的时程。好在当时Delphi 1.0的气势简直如星火燎原般的炙手可热,因此这本书还是卖得不错的。
1995年对于Borland来说是悲喜交加的一年。1995年1月11日,Philippe Kahn正式因为经营不善而辞去Borland CEO的职位,不过Philippe Kahn仍然是Borland董事会的成员之一。接任的Gary Wetsel的任务是大幅删减Borland的员工数,开始进行瘦身计划。因为当时Borland的员工数是为营收500M美金的Borland所打造的,但是在1995年Borland的营收已经下滑为不及200M美金的公司,而且一直在亏损之中,当时许多业界人土都认为Borland已经撑不过1995年。不过1995年2月14日的情人节似乎一夜之间改变了Borland的命运。
一炮而红的Delphi 1.0
1995年2月14日,是Borland永远会记得的日子,因为这一天是Delphi正式诞生的日子,也是Borland扭转命运的转折点。由于Delphi先前大规模的Beta测试计划已经在全球吸引了极大的兴趣和好评,信息业界也知道了Borland正准备推出一个跨时代的新开发工具产品。当然,更重要的是全信息界也都在静观,这个产品是否真的好到能够拯救Borland免于破产或是被并购的命运。决定生与死的日子终于在这一天揭晓。
1995年2月14日,也就是Borland在全球发表Delphi 1.0当天,我在Scott Valley会见了当时的Delphi主舵手,产品经理Lance Devin先生。Lance是一位非常亲切、有活力的人。Delphi在他的主掌之下,立刻在全球吸引了所有的焦点,当时媒体甚至称Delphi l.0是VBK(Visual Basic Killer)。
Delphi 1.0发表之后,立刻造成了全球的狂卖。由于Borland并没有预料到Delphi的反应会如此的好,因此一时造成了Delphi的全球大缺货。Borland从Borland C/C++3.1之后已经很久没有享受过这么美好的滋味了。
在台湾,由于早已预料到Delphi将会是一个成功的产品,因此,台湾几乎和美国同一时间发表了Delphi 1.0。而且台湾Borland不惜血本,直接从美国空运了少数的Delphi,而台湾能够取得的Delphi的数量也只是从美国抢破头才拿到的少量货。台湾Borland是在信义路的震旦行2楼会议室发布Delphi的。当天整个会议室几乎被塞爆了,因为有太多急于想一睹Delphi庐山真面目的软件人员。我还清楚地记得在发布会结束之后,会议室的门口排满了抢购Delphi的人潮。很快,所有的Delphi都被抢光了。记得当时李匡正先生没有抢到Delphi 1.0,一直到2个多礼拜之后才取得。而我呢?很幸运的是在Delphi 1.0发表之前,张书良先生就已经送了一套正式的Delphi 1.0 Client/Server版让我玩。当然我也迫不及待地把Delphi介绍给我当时的老板,希望我们的软件包能够赶快使用Delphi来写Windows的版本,但是我的老板还是坚持使用Visual Basic来写。后来我就离开这家公司,找寻愿意使用Delphi开发的软件公司。
当时Delphi在台湾书市造成的旋风真可用"洛阳纸贵"来形容,任何和Delphi 1.0有关的书籍都立刻大卖,看得每一个出版社都眼红不已。我也还记得当时第一本Delphi 1.0的书是由波全出版社推出的。根据台湾最有名的天珑书局老板彭先生说,最热门的时候一天几乎可卖500本的数量。我想这一本Delphi书籍应该是台湾有史以来销量最好的Delphi书了,估计当时这本波全的书有数万本的销量。更夸张的是后来我居然在天珑书局看到由2本影印的合集Delphi书籍,由塑料套包起来,要价是"1500"块台币,居然也很快卖完,真是令人不可思议。这即使不是绝后,也绝对是空前的。
Delphi 1.0的成功也许早在信心满满的Anders的预料之中,看看下面在Delphi 1.0中秘密内藏的Easter Egg中,Anders笑得如此的灿烂似乎就已经预见了Delphi光明的未来。
Delphi 1.0有多成功呢?根据非正式的统计,Delphi 1.0当时在全球狂卖了50多万套,这实在是一个惊人的数字。读者如果没有什么概念的话,那么我可以举一些例子来比较一下。Borland最成功的Borland/Turbo C/C++系列卖到了3.1最巅峰的时候,全球的销量才超过100多万套,这可是累积了数年、数个版本后才达到的套数。而Delphi一个版本就到达了C/C++几乎一半的销量,从这就可以知道当时Delphi有多成功了。
Delphi 1.0的大卖,立刻拯救了财务困难的Borland。Delphi的收入不但让Borland立刻再投入更多的资源到Delphi开发小组,以准备下一个版本的开发,也让当时Borland内部的Latte(就是后来的JBuilder)小组获得了更多的研发资源,成就了数年后JBuilder再次接棒;把Borland推向另一个高峰。
再见了,Borland创始人,Philippe Kahn
1995下半年,Borland发生了一件重大的事情,那就是Philippe Kahn正式被逐出他一手创建的Borland。这真是令人震惊又难过的事情,相信许多关心Borland的读者都知道这件事情。但是为什么Philippe Kahn会被踢出Borland董事会、又离开Borland呢?这可是一个秘密。
事情都是从Philippe Kahn辞下Borland的CEO后开始发生的。在Philippe Kahn被逼下CEO之后,他觉得Borland的一些开发方向他并不是很认同,因此在外面又开了一家新的公司StarFish,从Borland买走了SideKick、DashBoard等产品,并且开始研发移动和无线等方面的软件。
1995年Java兴起之后,Philippe Kahn觉得Java很有前途,并且希望结合Java以及移动和无线软件技术。其时Borland内部也在开始研发Java的产品,包含了代号是Latte的Java开发工具以及Java的JIT编译器等技术。而Borland没有预料到,由于Java的萌萌芽竟会造成Philippe Kahn和Anders的离开以及Borland Visual dBase小组的解体。
话说在Borland于Java方面逐渐有了成果之后,Philippe Kahn的StarFish公司也开始步上轨道。1995年,Philippe Kahn眼看Borland内部Java的人才素质精良,于是就开始想挖一些好手到自己的StarFish公司。在Philippe Kahn的挖角动作愈来愈大之后,Borland的董事会终于无法忍受Philippe Kahn这种挖Borland墙角的做法。于是,Borland的董事会成员一致投票决定,将Philippe Kahn逐出Borland的董事会和Borland。这对于Philippe Kahn是一个极为重大的打击,Philippe Kahn被迫离开了他一手创办和心爱的Borland。即使后来Philippe Kahn的StarFish经营得不错,以致后来由Motorola以数千万美金并购了StarFish,让Philippe Kahn大大地赚了一笔,但是他仍然无法释怀,也永远无法忘记Borland给他的成功、光荣、骄傲和屈辱。虽然Philippe Kahn一直想像苹果计算机的Steve Jobs一样有朝一日能够重返Borland,但是,很显然Philippe Kahn没有Steve Jobs那样的运气,Philippe Kahn一直无法完成这个愿望。
Anders的计划以及Zack的想法
在Delphi 1.0大获成功、如日中天之后,雄心勃勃的Anders立刻开始了下一版Delphi的开发计划。此时Delphi研发小组的资源更多,因此可以做更多的东西。不过,在1995年Delphi 1.0推出之后,信息业界有了几项重要的改变,那就是随着Microsoft Windows 95的成功,企业使用Windows平台开发应用系统已经成为既定的趋势,再加上当时数据库市场的快速发展,因此许多企业开始在Windows平台寻找Client/Server的解决方案。正由于这些需求快速而大量的兴起,造成了当时PowerBuilder和Gupta这两个主从架构开发工具的盛行。当时,PowerBuilder是Window平台下占有率超过50%的主从架构开发工具,而Gupta则拥有超过30%的市场。这真是可怕,因为光是两个工具就占据了80%多的市场。由于当时主从架构几乎由这两个工具所寡占,因此,PowerBuilder和Gupta的价格相当昂贵,我记得当时一套PowerBuilder要价40几万新台币,而Gupta也要30几万,真是令人无法相信。
在Microsoft方面,由于Delphi 1.0的成功,给了VB相当大的压力。因此Microsoft在Delphi 1.0推出之后立刻也推出VB 4.0正面迎战。VB 4.0强调的重点是VB应用程序也可以编译成可执行文件,不过,由于VB 4.0的编译器品质尚不成熟,编译出来的效果并不好。再加上它的臭虫非常多,因此VB4.0算是一个相当不成功的产品。正由于这些因素,在当时也传出了VB双数版本品质不如奇数版好的传闻。不过,在当时由于PowerBuilder和Gupta的获利非常丰富,而Microsoft也看到了主从架构将会是未来数年重要的信息架构,因此VB 4.0开始,Microsoft也开始逐渐为VB加入更多开发数据库以及主从架构的能力,并且搭配Microsoft的ODBC规格向主从架构市场进攻。
Anders在Delphi 1.0成功之后,曾经接受媒体的访问,叙述他心中的Delphi 2.0想做的功能。当时Anders就说他希望为Delphi加入Garbage Collection的功能,因为Object Pascal在建立对象方面是使用Heap-Based的方式,因此为了减少Delphi程序员可能发生的错误并简化Delphi程序代码的撰写,他希望加入Garbage Collection。现在的Microsoft的.NET就内建了Garbage Collection的功能,而这个想法在7年前便已经存在于Anders的脑中了。
除了Garbage Collection之外,Anders也想为Delphi加入更多Stack-Based的能力(是巧合吗?.NET的IL也是Stack-Based的语言),并且持续地改善Delphi的编译器,加入更多的编译器最佳化功能,让Delphi的程序代码执行速度能够超越C/C++。
从Anders的想法中,读者应该可以感觉到Anders想做的都是属于比较语言、系统和低阶方面、影响层面较大的功能。但是,由于信息市场是逐渐走向主从架构,因此Zack Urlocker等人则希望Delphi 2.0能够在主从架构方面进行大幅的强化,再搭配Borland力倡的BDE/IDAPI技术,以便和PowerBuilder/Gupta等竞争,进入获利较为丰富的工具市场,这是第一次Anders和Zack意见分歧的时间点。
后来Delphi研发小组达成了共识,那就是下一个版本的Delphi将由Anders在编译器方面主导,为Delphi开发一个真正的32位编译器,而且具备最佳化的功能(因为Delphi 1.0是16位的开发工具)。但是Delphi 2.0也将大幅加入主从架构的功能,并且通过BDE/IDAPI提供连接各种RDBMS的驱动程序,再由Chuck改善VCL架构,提供更为强劲的数据感知组件能力,让Delphi 2.0正式具备和PowerBuilder/Gupta竞争的本钱。这也埋下了日后PowerBuilder/Gupta这两个工具备受VB和Delphi强大的压力、终至快速衰退的命运。
由于Delphi 2.0开始确定走向主从架构和具备开发大型系统能力的方向,因此Anders没有多余的资源可以实现他的理想,再加上和Zack在产品发展方面日渐出现歧见,这些都是间接造成日后Anders离开Borland的因素。
Delphi 2.0,进入32位世界的开发工具
在Anders完成了Delphi 32位的编译器而且BDE/IDAPI小组也实现更多连接RDBMS的驱动程序之后,Delphi 2.0便已经准备好出征了。Delphi 2.0在推出之后果然也非常成功,Anders亲手打造的32位编译器不但编译速度奇快,编译出的应用程序品质更是无话可说。在当时,Delphi 2.0产生的执行程序代码屡获专业媒体和实验室的评比大奖,尤其在整数运算方面,更是比VC++执行得还好。在一般应用程序方面,也和VC++的程序代码不相上下。整体来说,只有在浮点数方面落后VC++。这也是后来Borland编译器小组和Anders激活Borland下一代编译器项目的原因之一,目的是为C++Builder和Delphi开发一个共享的后端最佳化编译器。不过很可惜的是,Anders稍后离开了Borland,没有参与完成这个最佳化编译器,否则Borland的编译器应该会比现在更具威力。
Delphi 2.0如同Delphi l.0一样大获成功,因为当时许多想在Windows NT下开发纯32位应用系统的程序员都愿意使用Delphi 2.0,更不用说一些企业的开发者,在不愿意忍受PowerBuilder/Gupta等使用脚本语言执行应用程序的缓慢情形下,许多PowerBuilder/Gupta使用者都转而使用Borland的Delphi,这是Borland继当初Borland C/C++3.1之后再次打入企业市场。Delphi 2.0和Delphi 1.0的总销量也超过了一百万套。在全球的市场中,Delphi在欧洲、亚洲和中南美洲都非常的成功,反而在北美的市场表现平平。由于Delphi表现得非常抢眼,给予了VB和PowerBuilder巨大的压力,因此Microsoft和Sybase在Delphi 2.0推出之后,也纷纷地准备推出VB 5.0和PowerBuilder 6.0,正式揭开了RAD工具最后的生死战。
在Delphi 2.0顺利推出之后,很不幸的是Lance也离开了Borland。接手Delphi产品经理的是Ben Riga。要怎么说这位加拿大的仁兄呢?Ben Riga也是很亲切的人,但是我当时向他建议的许多Delphi发展方向,这位仁兄都没有反映在Delphi的产品中。
例如我在3.0时便强烈建议Delphi应该在Web方面投入更多的努力,在Delphi中实现类似当时IntraBuilder的能力,提供可视化的方式开发Web应用系统,也就是像现今的Developer Express的ExpressWeb Objects组件组,或是IntraWeb组件组。如果在当时的Delphi 3或是Delphi 4便能够有这种组件组,那么Delphi的Web能力将是No.1,更不用说对于Delphi的销量会有多大的帮助。可惜笔者人微言轻,Ben并没有把这个重要的功能放人Delphi的产品开发规格中。一直到现在,Delphi 6/7才认真地考虑这个需要,虽然时间已经晚了,但是如果真的做得好的话,也比没有好。
RAD殊死战
在Delphi和VB相继进入主从架构的世界之后,便和PowerBuilder有了更激烈的竞争。在Delphi 2.0出版之后,PowerBuilder面临了更大的挑战。因为VB在易于使用和Microsoft的努力之下仍然呈现成长的趋势,但是PowerBuilder在许多场合却是直接和Delphi竞争。在Delphi 2.0推出之后,Borland也很快查觉到许多Delphi的使用者是从PowerBuilder转来的,于是当时Borland内部便拟定了置换PowerBuilder计划,希望能够持续从PowerBuilder手中抢得更多的市场占有率。
Delphi 2.0的纯32位编译器以及执行速度一直是许多人喜欢的,这也对PowerBuilder带来了压力,因为许多PowerBuilder的使用者,特别是软件公司对于PowerBuilder使用的语言PowerScript执行缓慢而不悦,但是却喜欢PowerBuilder的DataWindow。因此在当时Sybase便宣告将为PowerBuilder开发一个编译器,以增加PowerBuilder应用程序的执行速度。不过Sybase并没有在Delphi 2.0之后的PowerBuilder 5.0实现出来,一直要到PowerBuilder 6.0才推出PowerBuilder编译器,不过问题仍然多多。
当时我曾经仔细地观察台湾参加Delphi发布会的使用者以及参加PowerBuilder的使用者,发现了一个很有趣的现象,那就是一开始参加Delphi(1.0/2.0)的使用者几乎都是工程师,很少有DB Center的信息人员或是信息经理。而去PowerBuilder的使用者则甚少工程师,大部分都是穿着体面的DB Center的信息人员或是信息经理。不过这个情形在Delphi 2.0之后逐渐改变,因为当Delphi慢慢地被企业接受成为开发工具之后,也有愈来愈多的信息主管人员出现在Delphi的发布会中。
下图是我早在1999年便绘制的资料,从这个Slide中读者可以发现Delphi、VB和PowerBuilder的竞争是一个版本对应一个版本的。每当竞争对手推新的版本之后,另外的竞争对手都会立刻推出相对应的竞争版本。但是在Delphi 2.0之后,PowerBuilder便开始逐渐无法同步跟上Delphi和VB的竞争脚步,差距也愈拉愈大。
基本上Delphi、VB和PowerBuilder的竞争在Delphi 2.0时期是最为激烈的,在Delphi 3.0和VB 5.0之后大势已定。PowerBuilder已经定位成数据库开发工具,无法像Delphi和VB一样成为Windows平台中通用的开发工具。因此PowerBuilder的使用者群组便逐渐缩减到DB Center或是信息室的使用者。这个现象当时在台湾非常的明显,因为大多数的软件开发厂商、软件包厂商或是项目厂商逐渐地舍弃PowerBuilder,不是选择使用VB就是选择使用Delphi。在Delphi 3.0之后,Windows平台的主从架构开发工具市场已经是VB第1,Delphi第2,而PowerBuilder退到第3,并且和Delphi/VB的差距愈来愈大。经过了3年的激斗,传统主从架构开发工具PowerBuilder和Gupta仍然不是Microsoft和Borland的对手,即使PowerBuilder曾经拥有超过世界50%的占有率。当初Sybase也没有预料到在并购了PowerBuilder之后,这么快就损失了大片的江山。不过比起Oracle和Informix来说,Sybase下的本钱还是比较划算的,因为同时竞争的Oracle Developer 2000早已只能送给Oracle数据库的使用者。而Informix的主从架构开发工具Neon更是凄惨,在出了一个版本之后,由于体积庞大,执行缓慢,又臭虫成堆,还没上场竞争,就被丢人垃圾桶了。这对当时所有投入大量资源开发主从架构开发工具的软件厂商来说,都是受伤不轻,当然除了Borland和Microsoft之外。
PowerBuilder和Gupta数年辛辛苦苦建立起来的主从架构王国,只经过短短的1、2年就被VB和Delphi所鲸吞蚕食是有许多原因的。PowerBuilder和Gupta着重在高价、专有的主从架构市场,却不知主从架构已经逐渐成为一般信息架构应用主流,大量的程序员需要的是价格合理、功能齐全的开发工具。PowerBuilder和Gupta价格的奇高和功能的缺失,在VB和Delphi加强主从架构的功能之后便逐渐地浮现出来。此外PowerBuilder和Gupta当初风行的一个重要因素是提供了连接到各种RDBMS的驱动程序,以提供开发数据库和主从架构应用系统的能力。但是当VB和Delphi都分别提供了ODBC和BDE/IDAPI技术连接更多的数据库服务器之后,PowerBuilder和Gupta的优势也就不再了。另外一个关键性的因素是PowerBuilder和Gupta一直无法成为大众化的开发工具。除了DB Center和企业之外,PowerBuilder和Gupta无法被大量的ISV、商业软件包厂商、一般工程师、甚至是学生使用来开发各种不同的应用系统。因此PowerBuilder和Gupta只能在特定的软件族群中使用,限制了可能成长的潜力市场。
最后我认为最重要的原因是Sybase和Gupta在面对Microsoft和Borland这两个非常精于实现开发工具的厂商时过于轻心,反应的速度太过于缓慢,以致PowerBuilder和Gupta除了在数据库和主从架构功能之外,其他的功能都太过阳春。特别是在Java逐渐兴起之后,PowerBuilder和Gupta最后跨平台的诉求也在瞬间瓦解,因此失去市场也是不可挽回的命运了。
Borland C++Builder的诞生
在Delphi l.0/2.0大获成功并且对Borland产生了巨大的收益之后,来自Borland C/C++使用者的需求,即要求Borland也推出一个C/C++版本的呼声也愈来愈强烈,到了Borland无法忽视的地步。不过这对Borland来说,却是一个相当伤脑筋的事,因为Delphi是用Object Pascal写的,如何转成C/C++?如果要开发C/C++版的Delphi,那么Borland C/C++的产品线要如何处理?因此这也在Borland内部起了极大的争议,这又是另外一个故事了。不过不可否认的是,Delphi 1.0/2.0的成功正是促成了Borland C++Builder面世的主要动力。
争执的开始
Delphi 2.0的再次重大成功仿佛为Delphi研发小组注入了一支巨大的强心剂。Delphi研发小组迫不及待地要开发Delphi3.0,以便趁胜追击,进一步的拉近和VB的距离,并且再次给予PowerBuilder/Gupta重击,以便从PowerBuilder/Gupta取得更多的市场。在Delphi 2.0推出之后,根据当时Gartner Group的调查,主从架构开发工具的第一名仍然是PowerBuilder,第二名是VB,而第三名则是Delphi。Gupta的市场占有率快速地下滑,已经无法进入前三名的占有率了。不久之后Gupta改名为Centura,希望力挽狂澜,但是仍然无法改变市场的现实,并且逐渐淡出主从架构的开发工具市场。这对于VB和Delphi来说都是重大的胜利,因为VB和Delphi在短短的一两年之内就几乎瓦解了PowerBuilder/Gupta在主从架构市场数年经营的优势。虽然PowerBuilder还暂时维持第一的占有率,但是已经从50%几萎缩到了40%,而且还在不断的下滑之中。PowerBuilder在VB和Delphi的强烈进攻下岌岌可危,产品价格也在快速地滑落之中。
不过在Delphi 3.0的功能会议中,Anders和Zack却再次发生了强烈的争执,因为这两个Delphi的灵魂人物对于Delphi 3.0的走向出现了不同的看法。其时由于Microsoft的COM/DCOM等技术逐渐成熟和受到愈来愈多的使用,因此Anders希望Delphi 3能够充分地支持开发COM/DCOM的技术,并且提供比VB更方便、比VC更强大的能力。为了实现这个想法,Anders力邀Alain Lino Tadros加入Delphi的研发小组。为什么Anders会找上Alain呢?这是因为Alain曾在1996年BorCon的研讨会上以惊人的技术写了5000多行的程序代码,把VCL组件直接变成COM对象。Anders在BorCon上知道之后,立刻有一个想法,那就是如何能够延伸Alian的技术,如果通过一种方法便能够把所有或是大部分的VCL组件变成COM对象以及COM Container的话,那将是多奇妙的事情。如此一来Delphi的研发小组也不需要为实现COM/DCOM的功能而大费周折了。而Anders的这个想法也促成了后来Delphi 3中IVCLComObject接口和技术的诞生,直接把VCL转换为COM对象的神奇功能。
除了邀请Alian之外,Anders也计划直接修改Delphi的编译器,让编译器能够直接处理COM的参考计数值(Reference Count),免除Delphi程序员的麻烦,并且提供有效的执行码。如果依照当时Anders的想法并且把Delphi 3依此实现出来的话,那么Delphi将会是一个比Microsoft工具更好的COM开发工具。
不过Zack却不认为Delphi 3应该把这么多的资源花在支持COM/DCOM上。虽然Zack同意Delphi 3必须对COM/DCOM有好的支持,但是他认为Delphi 3应该在Delphi 2的主从架构获得了胜利之后,继续往更高阶的方向努力,那就是分布式架构,以便把Delphi塑造成能够开发大型企业的开发工具,把Delphi打入获利丰富的企业市场。因此Zack和当时Borland开发工具部门的负责人Paul Gross激活了所谓的Golden Gate计划,希望提供Delphi强大的中介引擎功能,因此Borland并购了出版Entera中间件的公司,让Delphi能够通过Entera连接到后端大型的系统,希望大型企业能够使用Delphi开发客户端的应用程序。
由于Golden Gate计划得到了Borland高层的支持,因此Delphi 3的发展方向很快便朝向分布式技术前进。虽然COM/DCOM的支持也在产品的计划之中,但是并无法做到像Anders所想要的境界。由于Anders的理想无法被接受,因此在Delphi 3的发展中后期阶段,Anders并没有介入太多Delphi 3的开发工作。
在Delphi 3正式发表之际,Delphi的研发小组很巧妙地平衡了COM/DCOM和分布式技术的功能,也让Delphi 3成为Windows平台中第一个提供分布式开发的开发工具。而Delphi 3当时使用的Marketing Slogan以及产品诉求的重点也是"Component Foundry",意谓Delphi 3可以轻易地建立VCL组件以及COM/DCOM/ActiveX组件。
Delphi 3推出之后,Delphi应该算是到达了巅峰的状态,销售数字也非常的亮丽,已经超过了Borland C/C++3.1的销量,而Borland也有了稳定的收入。但是人无远忧必有近虑,后来发生的数件大事几乎让Delphi重演当初Borland C/C++4.0的历史覆辙。
不知道读者看到这里有什么想法?我认为COM/DCOM和分布式技术都是重要的,后来的事实也证明分布式技术是Delphi的强项之一,而应用系统架构也逐渐走向分布式多层。不过没有像Anders的想法把Delphi塑造成无敌的COM/DCOM组件开发工具相信也是许多人的遗憾。
在Anders逐渐不介入Delphi 3的开发之后,随后发生的两件关键的事情便注定了Anders Hejlsberg继Philippe Kahn离开Borland的命运。
天才的损失和新英雄的接棒
在Anders和Zack对于Delphi的走向逐渐出现了歧见之后,Anders便没有再主导Delphi 3.0的开发,反之Zack在Delphi开发小组中的角色却日益重要,后来几乎是Delphi 3和Delphi 4的主要领导人。为什么Delphi的Architect Anders会慢慢地淡出Delphi的核心呢?这和Philippe Kahn离开Borland也有重要的关系。
英雄落难
Philippe Kahn和Anders共同创造了传奇的Borland,两人之间有着浓厚的感情。在Borland工作时,对于Anders任何的想法和计划,Philippe Kahn都是不遗余力地支持。也正是这个重要的支持力量,才有随后极为成功的Borland Pascal以及Delphi的问世。
但是在Philippe Kahn离开Borland之后,Anders再也没有了这股来自最亲密战友的强力支援。1997年,Borland新的CEO Delbert Yocam在掌握了大权之后,Borland整个公司开始走向第二个重要的转变,Delbert对于Borland产品的开发和趋势也有了不同于Philippe Kahn的看法。当Java在1996年逐渐快速发展之后,睿智的Anders也看到了Java成功的未来。因此在Anders不再积极参与Delphi 2/3的开发工作之后,他非常希望能够主导Borland Java开发工具的开发,期望能够像当初的Delphi 1.0一样,为Borland再次开发出全世界一级的Java开发工具。
不过,由于当时Delphi是Borland最重要的收入来源,高层仍然希望Anders继续在Delphi产品线上投入全力,因此当时的Borland CEO Delbert Yocam并没有批准Anders的请求。Borland的下一个重要的开发工具JBuilder,当时的产品开发名称为Latte,仍然交由其他小组负责。依据我的推想,由于当时Anders对于Java已经有许多的想法,因此才会有后来的VJ++以及C#,这些产品和程序语言的许多特性想必已经在Anders的脑中存在了一段时间了。
Delbert没有允许Anders带领Latte开发小组,但Anders仍然没有放弃他的新计划。也许是Anders注定和Borland的缘分已经到了尽头,这个时候正好Microsoft展开了有史以来对Borland最大的挖角行动。在Anders无法在Borland取得满意的支持之后,Microsoft提供的优厚条件顿时对Anders产生了致命的吸引力,从而造成了Borland无法挽回的遗憾。
虽然Anders没有显赫的学历,无法获得Turning Awards(即图灵奖,信息科学界最高荣誉的奖项,等同于诺贝尔奖)。但是我认为Anders的实力和贡献绝不输于任何一位Turning Awards的得奖人。Anders是最好的信息实践型人物,在2001年,他终于获得了信息界最具权威的信息刊物Dr. Dobbs/' Journal颁发的Excellent Programming Awards,以表彰Anders为信息界做出的卓越贡献。我想Anders应该是许多本身没有高学历或不是计算机信息科系出身的优秀程序员最好的效仿对象。
Anders Hejlsberg这位不世出的软件天才,是目前全世界最顶尖的软件技术人员之一。论实现技术,Anders可能是目前的第一高手,因为他精通程序语言、编译器技术、开发工具、Framework以及系统架构。我虽然知道许多软件界重要的人物和好手,但是尚不知有任何人能像Anders一样在这么多领域都能成为大家。下面是笔者整理出Anders Hejlsberg到目前为止重要的功绩、贡献以及获颁的重要大奖:
" 和Philippe Kahn共同创办Borland
" 开发出Turbo Pascal,当时首创的In-Memory Compiler震惊了全世界
" 开发出全世界最畅销的Pascal产品,Turbo Pascal(这是许多信息人员学习Pascal和Data Structure使用的经典产品)以及Borland Pascal。Turbo/Borland Pascal合计销售超过了数百万套。Dr. N. Wirth(Pascal语言的创始人员)也应该向Anders致敬,表达Anders对于Pascal语言的贡献
" Anders使用汇编语言撰写编译器,其功力无人能出其右。创造出了全世界速度最快、品质也是一流的Pascal编译器。在Anders离开了Borland之后,几乎没有人能够修改Anders的编译器
" 开发出影响深远的Delphi这个伟大的RAD工具
" 开发出VJ++语言
" Microsoft .NET的Architect
" Microsoft颁授Microsoft Distinguish Engineer大奖
" 发明C#这个又将造成重大影响的语言
" 获颁2001年Dr. Dobbs/' Journal的Excellence In Programming大奖
一个人一生能够做出几件让全世界都津津乐道的事业呢?Anders却成就了无数PC界伟大的功绩,并且在程序语言、编译器、开发工具以及Framework方面都有重要的贡献。PC软件界因为有了Anders而精彩、丰富了许多,也创造了许多令人惊叹的故事。更棒的是Anders现在仍然在继续贡献他惊人的天分,就让我们拭目以待,看看Anders还能创造什么功迹吧。不过,不管以后如何,相信Anders应该是大部分软件人员希望学习的目标。Anders的功力也是大部分软件人员一生企望能够达到的境界。
在2002年Borland Developers/' Conference中,Anders Hejlsberg是排名第一的Keynote Speaker,尚在Java的创始人James Gosling之前。根据现场同时聆听这两场Keynote Speech的听众报道,Anders的Keynote Speech是非常精彩的,而James的Keynote Speech则相对的枯燥,许多人因此而提前离席。而且Anders在开始进行Keynote Speech之时,便获得了现场所有听众起立鼓掌致敬,看来,在大多数Borland开发工具使用者的心中,Anders Hejlsberg是永远的巨星。 -------------------------------------------------------------------------------- --作者:小枣粽子--发布时间:2004-8-23 23:03:00
--Microsoft的挖角和Anders的离开
Anders在不介入Delphi的开发、并且无法主导Borland Java开发工具开发的情况下充满了挫折感。没有了Philippe Kahn的强力支援,Anders虽然是Borland最顶尖的技术人才,却也无法对抗Borland管理阶层的力量。当然这也是从Philippe Kahn离开了Borland之后、Bodand开始转型有关,这在稍后Borland的转变一文中,我会作详细的说明。
虽然Anders在Borland遇到了挫折,但是对于Microsoft来说这却是千载难逢的好机会,在此时Microsoft展开了大规模的挖角行动,而且是明目张胆地进行,正是由于Microsoft如此大胆的行动,因此也造成了不久之后Borland对于Microsoft的法律控诉。
这次的挖角行动中,Microsoft同时锁定了数个Borland最杰出或是重要的人物,当然Anders是名列第一的挖角对象。时值1996年,Microsoft终于展开了行动,使用的方式是最直接的攻击。Microsoft直接派遣加长型的大轿车到Borland大门口找Anders吃饭,第一次Microsoft开出了年薪百万美元以上的条件。不过在Borland知道了这件事情之后,也很快进行了加码的动作,因此Anders并没有对Microsoft进行响应。Microsoft在苦等无应、按捺不住之下,很快就再次用大轿车找Anders。这次Microsoft提出了两百万美元以上的条件,希望Anders能够首肯。对于这次的喊价,Borland可有点为难了,因为两百万美元不是笔小数目,这已经比当时Borland许多副总裁的年薪还高。此外,如果Borland答应也加到两百万以上,那么是不是Chuck也要如此加码?其他的Delphi R&D小组要如何调整?这些都是非常棘手的问题。
不过Borland很快找到了解决的方案,那就是允许Anders从每一套卖出的Delphi版本中抽取一定数量的版权费。如此一来Delphi卖得愈好,Anders便能取得愈多的回馈。不过就我的了解,Anders注重的并不是金钱上的问题,因为在Borland创立的初期,由于Turbo Pascal的编译器都是Anders撰写的,因此当时Anders也是卖一套Turbo Pascal就可以抽取版税的。依照Turbo/Borland Pascal全世界销售数百万套来算,Anders早就是富翁了。薪水多一点,少一点并无所谓,Anders心中想的是自由发展的空间。在Borland提出了Delphi的随版抽税,再加上Microsoft并不知道Anders真正想要的东西,因此Anders仍然没有响应Microsoft提出的优厚条件。
不过,Anders实在是太重要的人物,而且Microsoft在面对Java与日俱增的威胁下,非常渴望能够有像Anders这样的人才带领Microsoft开发下一代的开发工具,这当然也是由于Microsoft以前向Borland挖来的人都做出了不小的贡献所致。Microsoft食髓知味,当然希望能够得到Borland的镇山之宝。在Anders两次不为所动之后,Microsoft决定祭出最后的王牌,由Bill Gates亲自找Anders吃饭,进行最终的挖角行动。
不管读者喜不喜欢Bill Gates,不可否认的是Bill也是一个天才。自古英雄惜英雄,在Anders和Bill相谈甚欢的情形下,Microsoft开出了年薪三百万以上、数万股的Microsoft股票这个超高的条件,再以当时Microsoft高贵的股价来计算,真是一笔庞大的数字,也许对于搞软件技术的人来说,这已经是不可能的天文数字了。不过这些条件并不是打动Anders的主要原因,Bill最后提出的条件是"答应给Anders一个小组和极多的资源,让Anders尽情地发挥"。这个条件可说是打到了Anders的心底,因为Anders正渴望有人能够支持他完成新的计划和想法。我想,在软件产业中大概也只有Microsoft能够拥有这种雄厚的资源可以挖角任何人吧。
在Bill Gates提了这样的条件之后,Borland再也没有本钱能够和Microsoft进行比价了,只好眼睁睁地看着Anders离开Borland前往Microsoft再开创下一个人生的高峰。在Anders到了Microsoft之后,Bill Gates果然重用Anders,也立刻让Anders负责激活Microsoft的下一拨开发工具计划,当然这个计划也是Microsoft对抗SUN/Java的整体计划之一。Anders到了Microsoft之后立刻展现了实力,让Microsoft的编译器技术又精进不少,最明显的例子就是Microsoft后期的Java Virtual Machine是PC上执行效率最好的,而且在2、3年后,VJ++编译出来的虚拟机械码的执行效率不但比任何的Java开发工具还快,在某些方面甚至比原生的Windows开发工具,例如Delphi、VB、甚至是VC++还有效率。这真是令人震撼,当然Anders为VJ++打下的基础现在也展现在NET的C#编译器以及.NET的JIT(Just In Time)编译器之上,.NET的JIT在许多程序代码最佳化方面比Delphi还先进。因此在2、3年前当VJ++即将推出之际,在Borland内部也引起了非常大的骚动,并且严阵以待,当然这又是另外一个故事了。
对于Anders来说,到了Microsoft之后不久又再次登上了生涯的另一个巅峰。因为当初Anders在Borland之时,就有如孙子兵法中叙述的"藏于九地之下",虽然是不世出的天才,但是仅为少数的人所知,即使是使用Borland产品的人在当时可能也不知道Anders这号人物。因为Anders和Borland的作风很像,都是行事低调,不到最后绝不随意出手。但是Anders被挖角到Microsoft之后,由于Microsoft的企业文化向来是前进、积极的侵略性方式,因此Anders也就转变为"动于九天之上",负责Microsoft开发工具大军的核心大将,不但广为人知,成为许多软件人员效法的对象,而且屡获大奖。他不但获得了信息软件业界的推崇,最后也终于获得了信息学术界的认可,可说是实至名归。
Anders的离开对于Borland来说是一个很大的损失,不过对于Delphi R&D小组来说却是有好有坏,因为Delphi开发小组虽然失去了最重要的支柱,但是也给Danny Thorpe一个快速崛起的机会,在1年后,Danny果然立刻成为了Delphi/C++Builder/Kylix中最杰出的人物之一(另外一个当然就是Anders的老搭挡Chuck Jazdzewski了),Danny也是我认为目前在Borland RAD(注)部门中功力最厉害的人物。在稍后的内文中我会对Danny进行比较详细的说明。
注:Borland RAD部门是指Borland的Rapid Application Development部门,RAD负责的产品包含了C++Builder、Delphi、Kylix以及未来的.NET以及Mobile的新产品。
巅峰之作和最后的胜利者
在Zack于Delphi 3开发的后期和Paul Gross逐渐取得了主控权之后,Delphi的发展方向也偏向了Zack希望的Multi-Tier的技术以及由Paul Gross稍后主导的Borland Golden Gate计划。1997年,Delphi还是像Delphi 1/2一样以强劲的生命力,以一年一个大版本的速度准时推出了。当时Delphi 3也称为Delphi 97。Delphi 97和Delphi l/2一样有一个最重要的战略目标以及主要的革新技术,那就是Multi-Tier和COM/DCOM的支持。因此,当时97推出之际使用的行销术语是"Component Foundry",意指Delphi 97能够开发任何的软件组件(事实上是指VCL、COM/DCOM以及ActiveX组件),而且使用组件来开发Multi-Tier的应用系统。
Delphi 97无论是在品质、功能或是市场和销售上都是非常成功的。也许是为了证明即使是没有了Anders,Borland的Delphi R&D小组仍然有实力开发出优秀的Delphi产品,因此Delphi 3一推出的品质就在高水平的地步,后来Delphi 97销售的结果也证明了它没有令人失望,Delphi 3的推出让Delphi一举突破了150万套的销售大关,也几乎成为Borland有史以来最畅销的单一系列开发工具,我也认为Delphi 3是Delphi所有版本中最好的一个。
不过,Delphi 97在即将推出之时也令一些人感到忧虑,因为在当时几乎没有任何开发工具强调Multi-Tier的开发,大多数的开发工具仍然着重在Client/Server的功能。Delphi 97将许多新功能集中在Multi-Tier的开发的确是一个不小的冒险,因为在当时Multi-Tier的观念还非常的新颖,许多人对于Multi-Tier是什么?能够用来开发什么?为什么要使用Multi-Tier等等问题都不是很清楚。更重要的是,在那个时候Multi-Tier的基础工程都尚未完全准备好,使用者要如何使用Multi-Tier技术来开发应用系统、甚至是学习Multi-Tier的技术呢?
我所谓的"Multi-Tier的基础工程都尚未完全准备好",是指在那个时候Microsoft的DCOM技术都还没有推出。那么,Borland该如何在Windows平台上提供Multi-Tier应用系统需要的分布式技术呢?说到这里,我们也不得不佩服当时Borland这些Delphi R&D小组的眼光,他们几乎已经精确地看到了未来的软件计算世界将会由网络和分布式技术主导,因此,即使是在操作系统平台尚未准备好的情形下,Borland也决定快速向前出发。
另外一个驱使Delphi 97走向Multi-Tier的重要原因便是当时Borland已经准备走向组件技术的领域,准备在中间件(Middle-Tier Software)中成为一个关键的软件开发厂商,这就是Paul Gross和Zack Urlocker激活的Golden Gate Strategy。而Paul Gross也就是由于Golden Gate计划扬名立万、进而成为当时Borland整个研发部门的副总裁(Vice President),后来又成为Microsoft下一个挖角的对象。
为了配合Golden Gate计划并且成为分布式技术的领导厂商,Borland由Paul Gross主导并购了Boston一家有名的顾问公司,这家顾问公司拥有一个颇为知名的中间件"Entera"。Entera是一个以RPC(Remote Procedure Call)通信协议为骨干的中间件,Borland希望通过Entera快速进入中间件的市场。由于Entera的客户端能够执行在Windows的操作系统中,因此,Entera在Windows平台上拥有基础的分布式技术支持能力,这刚好提供了Delphi 97需要的技术,所以Delphi的R&D小组立刻使用VCL封装了Entcra的底层API,提供了一个称为OleEnterpriseConnection的VCL组件,让Delphi 97能够和以RPC为基础的中间件连接。
因此在Delphi 97中Borland提供了三种分布式连接组件,分别是使用DCOM技术的DCOMConnection、使用TCP/IP技术的SocketConnection以及OleEnterpriseConnection。在那个时候最成熟的技术应该是OleEnterpriseConnection,而使用DCOM技术的DCOMConnection在Microsoft本身DCOM尚不成熟的背景之下,表现得并不好。至于SocketConnection,我认为Borland一直没有很认真地地实现SocketConnection,因此最好只可以用来作为学习的对象,尚未到达可以真正应用的水准。不过稍后随着时间和技术的进步,OleEnterpriseConnection逐渐没落,而DCOMConnection则反而因为Microsoft的DCOM的慢慢改善而成为比较实际的应用对象。当然,这些又属于Delphi 4的开发故事了。
虽然Delphi 97采取了比较冒险的做法,但是由于其品质良好,又支持COM/VCL组件的开发,因此也很快征服了Delphi使用者的心而大获成功。当时许多Delphi的使用者仍然是以开发Client/Server应用系统为主,不过由于Delphi 97好用的COM技术以及应用Web的WebBroker技术,再加上Multi-Tier的功能,都让使用者大呼过瘾,把Delphi作为学习这些先进技术的好工具,因此Delphi 97在当时到达了巅峰的地步。而Delphi/VB和PowerBuilder/Gupta缠斗的情形也逐渐明朗。Delphi/VB的销售量和市场占有率已经远超过PowerBuilder/Gupta 了,PowerBuilder/Gupta也注定将从通用开发工具以及主从架构开发工具市场中让出绝大的市场份额。
其时PowerBuilder仍然不肯服输,并且坚称PowerBuilder在总收入方面仍然是第一。这是因为PowerBuilder在当时仍然非常的昂贵,比Delphi/VB至少贵了两三倍以上。但是在不断地快速流失市场的情况下PowerBuilder的售价很快就出现了大幅的下降,至此Delphi和VB终于获得了全面的胜利;Client/Server开发工具的战争已止,但是接下又上演了另一出精彩的Java开发工具大战。
危机的开始
在Delphi 3再次获得了胜利之后,Delphi 4决战的目标已经从Delphi、VB、PowerBuilder和Gupta混战的形势转变为和VB对战的局势。原本Delphi有继续进击的机会,因为在当时Delphi 3的功能的确强劲,而且许多功能都领先业界至少半年以上的时间,不过可惜的是,在1996年Borland担任CEO的Delbert Yocam先生正好在这个时候开始了改造Borland的计划,几乎造成了对Delphi不可挽回的错误,这要从Zack Urlocker被Delbert Yocam拔擢成Borland Marketing的副总裁开始说起。
1996年11月,Borland邀请了Del Yocam入主Borland成为新的CEO,希望通过Delbert Yocam在管理方面丰富的经验改善Borland长久以来在公司管理方面的积弱不振。Delbert Yocam原本是Apple计算机公司的副总裁,应该是拥有丰富的管理经验,不过不知道Delbert是不是在大型计算机公司呆惯了,因此花钱花得特别凶。Delbert在一进入Borland之后立刻花了大钱更换总裁办公室里所有的家俱和装潢,其后到各地出差时又要求头等舱以及总统套房,花钱像流水一样。当时我便对这位新的CEO没有什么好印象。
Delbert在进入Borland之后一直想改造Borland。在Delphi 3大获成功之后,Delbert便把重点集中在Delphi的身上。Delbert认为Delphi非常成功,是Borland的摇钱树,因此一直想从这个产品线获得更多的收入。好大喜功的Delbert觉得Delphi的根基已经很稳固,因此可以更快速地从Delphi身上取得资源。这让Delbert在1998年下了一个严重的错误决策,几乎折损了Delphi的大好基业。
Borland和Microsoft的法律大战
在Microsoft不断地挖角,甚至把Anders也挖走之后,Borland已经到了"士可忍,孰不可忍"的地步。Microsoft挖角的动作愈来愈像是恶意挖角,似乎是想把Borland搞垮。Borland无法忍受的是Microsoft不但在操作系统和开发工具上进行不公平的竞争,现在甚至进行人事上的不公平竞争。Microsoft不思在产品上和Borland一决雌雄,反而进行挖墙角的破坏,Borland实在是忍无可忍了。
1997年5月,Delbert Yocam终于向美国法院提出了对于Microsoft的控告。当时Borland提出的控诉理由是"Microsoft对于Borland进行Brain Drain"的行动。Microsoft在30个月内从Borland挖角了34名Borland关键的开发者,而且每一名被挖角的人到了Microsoft之后都担任和在Borland类似的角色,这摆明了就是要利用这些人在Borland的知识快速地帮助Microsoft提升和Borland的差距,并且了解Borland内部的产品和技术的开发状况。这种不公平的竞争应该是没有任何一家公司能够容忍的。
在Borland正式提出了诉讼之后,具备侵略性企业文化的Microsoft当然就立刻反击,和Borland对簿公堂。Borland和Microsoft从开发工具战场一直斗争到法律战场,互不相让的情形让许多看客大呼过瘾。Borland对于Microsoft来说似乎就是打不倒的勇者,不管情势再艰辛,仍然能对抗到底,因为Borland知道,对于Microsoft一旦让步,以后就永远没有机会了。当时,业界许多人都已经预测Borland迟早会采取行动,但是没有想到这么快就勇敢地响应。Borland当时的行动引起了许多信息业界的尊敬和支持。
这场官司的进行很快就有了初步的迹象,所有的证据都对Microsoft不利。Microsoft一看情势不对,又不想让Borland真的消失,以避免吃上在开发工具市场垄断的官司,所以立刻表达愿意和Borland在庭外和解。正是由于这个原因,才有后来1999年时Microsoft对于Borland的投资,Microsoft这项投资正是这次庭外和解的条件之一。不过Delbert的运气并不好,虽然Microsoft愿意和Borland进行庭外和解,但真正和解的动作以及Microsoft对于Borland的赔偿事项却是发生在Delbert之后的Borland下一任CEO,即Dale Fuller身上,Delbert种下的稻穗却是由Dale Fuller来收割。
接二连三的错误决策
1998年,Delbert Yocam再次展现了好大喜功的本性,在没有充分地讨论以及共识之下,Delbert Yocam决定把公司名称从众所周知的Borland改为Inprise。Delbert决定如此做有数个原因:
" 由于Paul Gross和Zack Uplocker的Golden Gate计划让Borland进入中间件市场,因为Borland在企业市场以往没有很强的知名度,许多人认为Borland只是开发工具厂商,因此Delbert为了解决这个问题决为Borland取一个新的名称
" 使用Inprise的意思是指Borland可以Integrating The Enterprise。为提供企业整体解决方案的软件公司
" 基本上Delbert Yocam在进入Borland之后已经开始改变Borland,悄悄地进行第二次Borland改造的行动。这就是以行销为主的Borland,有别于以往Philippe Kahn所领导的以产品/技术为主的Borland。为了代表Delbert的决心并且重新出发,Delbert认为公司该使用一个新的名称
1998年4月,在Delbert的主导之下,Borland花费了数百万美元之后终于改名成为Inprise公司。不过Delbert原本是想在更改公司名称之后可以重新出发,但是没有想到,在Borland改名为Inprise之后,各种负面的效果却接踵而来。
首先,传统的Borland使用者都强烈反对Inprise这个名称,这些Borland使用者都喜欢原来的Borland。第二个问题,是许多新的使用者都听过Borland,但是在改名之后这些新的使用者找不到Borland,以为Borland已经不见了,又从未听过Inprise这家公司。第三,则是竞争对手刻意放出的讯息,故意散布Borland已经被一家叫做Inprise的公司并购了,因此希望原先的Bor]and用户能够放弃使用Borland的产品。
Delbert万万没有想到,在花了大钱更改公司名称之后,Inprise(Borland)却开始得疲于奔命地应付各种不利的后果。结果是赔了夫人又折兵,不但浪费了资源却无法在企业市场闯出名号,又折损了Borland的金字招牌。
另外一个有问题的决策是把Zack Urlocker拔擢成Borland行销部门的副总裁。由于Zack在Delphi 3出色的表现,以及和Paul Gross激活的Golden Gate Strategy让Delbert心动,并且Delbert认为通过Golden Gate Strategy可以让Borland打入企业市场,因此Delbert对Paul Gross和Zack Urlocker都印象深刻。不久之后,Delbert分别提拔了Paul Gross为Borland开发工具部门的副总裁、Zack Urlocker为行销部门的副总裁。
本质上Zack是一个非常好的开发者,对于产品也有很敏锐的感触,应该是非常理想的产品线管理人物,Borland应该让Zack好好地呆在R&D部门,为Borland的产品线运筹帷幄,好好地开发Borland以后的产品。只可惜的是"水往低处流,人往高处走",副总裁的位置放在面前,Zack当然想升官发财(谁不是呢?)。不过Zack并没有想到自己的优缺点。他固然是出色的开发人员和产品开发人员,但是对于行销却是门外汉。在Zack做了行销副总裁之后,Borland的R&D小组不但失去了一员大将,更糟糕的是Zack似乎也开始向Delbert学习,慢慢有了好大喜功的做事方式。
首先,Zack扩充Borland行销人员到达了100多人的数目。可是,当时全世界Borland的员工才将近1000多人,行销的人员居然超过九分之一的比重,实在是太夸张了。不过,这么多人的部门在当时仍然没有做出什么好的行销工作,仍然被Borland的使用者抱怨。我还记得当时我曾向行销部门要求所有开发工具的市场竞争资料,结果行销部门只说没有这种资料,当时我还很生气,这么庞大的部门居然连这么基本的竞争信息都没有。事实上,当时Delbert Yocam同意让Zack的行销部门招聘这么多人,除了是因为Zack很红之外,和Delbert想改善以往Borland做得很烂的Marketing工作也有很大的关系。Delbert认为Zack在产品线方面表现得很出色,因此也希望通过Zack的能力来进行Delbert对于Borland行销方面的改善工作。
可惜的是Zack上任之后表现得不如预期,大家对于Zack的表现也是贬多于褒。很快,Zack就失去了以往在R&D小组时的自信满满,开始逐渐消沉,最后终于离开了Inprise(Borland)。Zack从因为Borland C/C++3.0时的OWL framework快速窜起,在Delphi 3时达到生涯的高峰,一直到以行销副总裁之尊黯然离开Borland,真是令人感慨。如果Zack能够清楚了解自己的优缺点,不要去接行销的工作,而继续在R&D部门发展,也许他会有更好的成果。从Zack的奋斗过程,我认为程序员也许应该想想自己未来的发展方向,好的技术人员一定是好的管理或是行销人才吗?
一开始我知道Zack Urlocker这号人物,是在数年前我还在Georgia Institute of Technology念书时从那时著名的"Windows Tech Journal (WTJ)"得知的。当时Zack在WTJ上一直有Object Pascal的专栏,写的内容都非常好,深深地吸引了我。因此当时每个月初都开车大约半小时到最近的计算机商店购买当期的WTJ,目的就是为了阅读Zack的文章,在那个时候我就认为这个家伙真是厉害。
据我所知,Zack在1999年离开了Borland之后,加入了Active Software以及数个其他的软件公司,大都是担任行销方面的高阶主管。Zack在其后的数个职位上表现得不错,不晓得是不是因为在Borland时缴了大量学费而学习到的知识。不过不管如何,我仍然认为Zack Urlocker是一位值得尊敬的人物,因为他至少在一生中开发了2个重要而且成功的产品"Borland C/C++和Delphi",本身的技术水准也很高。相信Zack也将永远记得Borland C/C++和Delphi,这两个产品是Zack一生的成就和骄傲。再见了Zack Urlocker,相信许多的Borland C/C++和Delphi的使用者都会记得你的。
自巅峰而下--Delphi 4
中国人一直不喜欢"4"这个数字,认为它不吉利。难道说"4"对于Borland来说也是一个挥之不去的噩梦吗?当初的Borland C/C++4.0对Borland来说是永难忘怀的噩梦,到了Delphi 4,难道Borland又要重蹈覆辙吗?
时值1998年,是下一个Delphi版本应该要推出的年份,也是Delbert Yocam进入Borland当CEO的第2年。对于美国企业的CEO来说,第2年是CEO向董事会显示经营绩效以及缴出成绩单的时候了。Delbert为了能够缴出靓丽的成绩单,因此在1998年决定必须拉高Borland的营收,以冲高Borland的股票价格。但是,当时的Borland才刚进入组件和中间件的市场,尚未在企业市场占稳脚跟,因此Delbert决定在Borland的开发工具产品线中动脑筋。Delbert做的决定就是强迫规定从1998年起,在每一个Quarter(也就是每3个月),每一个Borland产品开发部门都必须推出一个新产品,让Borland每一个Quarter都有新产品可以销售,以便增加Borland的营收。
不过,DelbeN这个决定却相当的糟糕,这让Borland每一个产品部门的主管都面临了强大的压力,因为即使是产品还没有准备好推出,但是时间一到,不管产品品质如何,都一定要出货。Delbert这个错误的决定让1998年又成为Borland的噩梦年。
Delphi 1、2和3的时间间隔都是1年多一点,展现了Delphi强劲的生命力。依照原本的计划,Delphi 4也应该是在1998年推出的。但是1998年Borland在内部开始研发数项新的科技和产品,加上Microsoft不断的挖角行动,都让Delphi 4的研发工作受到了延迟。依照当时Delphi 4的研发时程,Delphi 4最早应该在1998年的第4季才能够推出。但是很不幸的是,为了达成Delbert Yocam的要求,Delphi 4在1998年的第三季就必须出货。在接近1998年的第3季之时,虽然Delphi的R&D小组仍然无法完成Delphi 4,并且极力抗拒出货,无奈在CEO强大的压力下,Delphi 4仍然必须在第3季准时出货。
从我个人的角度来看,当时Delphi 4的产品品质应该只到Beta 2的阶段,离真正能出货尚有一段不小的距离。Delbert强迫Delphi 4推出,不但打击了Delphi R&D小组的土气,如此乱搞产品线,以外行领导内行的结果只是让Delphi砸坏了自己的招牌。不过站在Delbert的角度则又不一样了,因为对Delbert来说,如果在1998还无法冲高Borland的营收,那么Delbert肯定是要下台的,因此Delbert只有孤注一掷了。
1998年的第3季,Delphi 4果然被强迫推出了。虽然Delphi 4的新功能仍然亮眼,但是品质不稳的恶名也很快地出现在使用者的抱怨之中。随后,使用者的不满愈来愈强烈,Borland面对四面八方的反弹不得不快速地做出响应,立刻开始着手Delphi 4 Patch的开发,以期快速修正Delphi 4的臭虫。依我的看法,Delphi 4一直要到Patch 2才应该是当初Delphi 4出货时的品质。由于Delphi 4的反应不佳,因此未能再次把Delphi的销售量拉上新高,Delphi原本锐不可当的气势也为之一挫。对于Borland来说,Delphi 4的销售并没有增加太多的收入,Delbert打的如意算盘当然也落空了。Delphi 4的失败也严重地影响了C++Builder的品质和销售,Delbert恶搞产品的开发之后不但又让Borland开始赔钱,终于也自尝恶果,在1999年被Borland的董事会开除。不过。无论如何,Delbert的决策已经对产品造成了巨大的伤害。
虽然Delphi 4的诞生过程充满了困难,命运也很坎坷,不若它的兄弟般好命。但是Delphi 4却意外地向全世界揭露了Delphi另外一个Architect的庐山真面目,那就是Chuck Jazdzewski。在Delphi 4中,使用者只要开启About对话盒,并且按下"Alt+chuck",那么就可以看到下图的画面。这个简短的画面是Delphi R&D成员之一偷偷使用V8录下来并且放入Delphi 4中的,这也是第一次Chuck露脸于全世界。Chuck事先并不知情,而在以往的Delphi 1/2/3中放的人物图片则一直是Anders。这些隐藏的有趣图片以及Delphi R&D开发小组的名单在Delphi中称为"Eastern Eggs"。
直到1999年,在费城举行Borland Conference时,我才真正有机会见到Chuck,并且和Chuck当面讨论一些事情。Delphi 4的失利让Delphi从巅峰的态势往下沉沦,要等到Danny Thorpe继Zack之后掌握Delphi的研发大权后才能再次向前挺进。
Delbert最后的挣扎
由于Delbert错误的决策先后让Delphi 4和C++Builder 4失利,Borland每季又开始亏损了。显然,Delbert自己也心知肚明,如果再没有任何建树的话,他很快就要下台了。为了做最后的挣扎,Delbert决定和其他公司合作。1998年正是Java快速兴起的年份,SUN在JavaWorkshop失利之后,便一直想找一个好的Java开发工具。而当时Borland发表了JBuilder 2,虽然JBuilder还不是Java市场上最受欢迎的Java开发工具,但是JBuilder是最快速成长以及最受好评的Java开发工具。SUN看到了JBuilder的潜力,因此对于JBuilder拥有强烈的兴趣。
SUN显示了对JBuilder的兴趣,无疑给了Delbert Yocam打了一针强心剂,几乎在绝望中的Delbert似乎看到了一丝曙光。Delbert很快便和SUN接触,看看SUN能够提出什么条件。Delbert的如意算盘是让SUN花大钱并购Borland,如此一来,JBuilder不就自然成了SUN的产品了吗?由于在那个时候Borland的股价已经跌到了3到4美金之间,而SUN的股价却高高在上,大概是在80多美金。因此,如果Delbert能够促成合并,那么Delbert Yocam便可以大捞一票,甚至在并购之后,Delbert还有可能成为SUN的副总裁,继续位居要津。
不过世事不能尽如入意。SUN只对JBuilder有胃口,对Borland其他的产品却没有多大的兴趣,因为Delphi/C++Builder等都不属于Java系列的产品。而且Delbert Yocam又狮子大开口,希望SUN以每股20几美元的代价收购Borland的股票,当场吓得SUN退避三舍,这件事情后来也就不了了之了。当然,Delbert Yocam很不甘心,因为促不成这宗合并案子,再加上Borland被Delbert搞得乌烟瘴气,下台的命运也就不可避免了。
也许是"天将降大任于斯人也,必先苦其心志,空乏其身"吧,Borland在Philippe Kahn离开之后,历经了数任CEO,但是一直没有找到真正好的CEO,能够适当地带领Borland走向光明。不过Delbert Yocam似乎是黎明前的黑暗,在Delbert不名誉地离开Borland之后,Borland也即将看到未来之光。
Danny的接棒和决心
Delphi 4的仓促推出果然在市场上反应很差,销量上也一落千丈。原本寄望能够再次获得好成绩让Delphi的总销售量再次冲上新高,并且为Borland带来更多的营收。但这一切都很快地幻灭了,品质不好的产品仍然得面对市场严厉的考验。在Delphi 4遭受了前所未有的失败、接着C++Builder 4也铩羽而归之后,Borland又开始走下坡路了。Borland好不容易通过Delphi带来的希望却在错误的决策下被牺牲了。在1999年4月Delbert终于被Borland的董事会扫地出门,结束了在Borland的日子。我认为,Delbert在Borland将近3年的时间里,对Bodand造成了许多的伤害,其好大喜功的管理方式对Borland的产品线更几乎造成了无法弥补的伤害,是我所认为的最糟糕的Borland CEO。更离谱的是在Borland的董事会开除Delbert后,他居然还以合约未满为由,要求Borland支付额外的谴散费,大捞了一票,真是人心不古,工作做得如此差却还有脸提这种要求,在最后一刻仍然压榨Borland。
在Delphi 4的伤害造成之后,Delphi R&D小组要面对的是如何收拾残局,并且想办法解决造成的问题。在这个时候Chuck由于把精力放在Borland另外秘密的产品和技术的研发上,因此无法花太多的时间在Delphi 5的研发上。此时,在Delphi上一向表现良好的Danny Thorpe便逐渐挑起了Delphi的重负大任。
Danny在Delphi 2之后便有大将之风,开始负责Delphi最低阶的编译器以及RTL(Run-Time Library)的工作。Danny是美国San Diego大学毕业的,主修就是编译器技术。在Delphi 4之后,Danny几乎成了RAD部门主要的Architect,负责了RAD大部分产品的研发工作,甚至又成为Microsoft再次挖角的对象。
对于Danny来说,如何重塑Delphi 5让Delphi从失利中重新站起、找回昔日的光荣便是一个非常重要的工作。在Delbert Yocam于1999年离开Borland之后不久,现任的Borland CEO Dale Fuller先生便被Borland邀请加入成为Borland的代理CEO,希望能够通过Dale Fuller的经验挽救沉沦中的Borland。在Dale入主Borland之后,首先展开的工作除了整顿Delbert在位时形成的庞大无用的行销部门之外,在产品线方面则是看好Linux的未来,要求Borland的RAD部门必须开发出Linux下的RAD工具。
在Danny接掌了Delphi主要的开发责任之后,又和Chuck一起再次形成中坚的RAD精英份子。Chuck主要负责新技术和新构想的实验作品,而Danny则是负责困难的编译技术以及RTL。由于Turbo/Borland Pascal以及Delphi的最佳化编译器都是Anders Hejlsberg撰写的,因此当Anders离开Borland之后几乎没有人能够维护编译器程序代码。Anders都是使用汇编语言(Assembly)撰写复杂的编译器程序代码,而且其品质是如此之好,不但连Chuck Jazdzewski都赞不绝口,更麻烦的是当时Borland几乎没有工程师敢随便更动这些程序代码。
因此在Anders Hejlsberg于Delphi 2离开了Borland之后,Borland立刻采取了数项行动希望能够解决这个"烫手山芋"。Borland决定的第一件事情是从Delphi的编译器抽离大部分最佳化的工作。因为要在Anders的程序代码再继续加入最佳化程序代码是Borland当时没有把握的事情。另外,由于当时Borland已经决定开发C++Builder,而C++Builder也需要一个最佳化的编译器,因此,Borland认为如果能够提供一个共同的后端最佳化编译器,那么Delphi和C++Builder不仅都可以使用,还能够解决没有人敢修改Delphi编译器