Something Pretty Right

Visual Basic 的历史与传承 作者:Ryan Lucas Visual Basic 如何成为世界上最主流的编程环境,它如何突然失宠,以及为何它的影响力仍在塑造软件开发的未来。

1988年的春天

1988年春天,Alan Cooper 坐在位于华盛顿州雷德蒙德的 Microsoft 总部一间大型会议室的电脑前,耐心等待 Bill Gates 的到来。

当时,Cooper 的主要业务是编写桌面应用程序软件,然后卖给出版商。“我是最早意识到你可以零售软件而无需销售电脑的公司之一,”他回忆说。但在过去的一个月里,Cooper 一直在疯狂地编写代码,为这次 Microsoft 演示做准备,为 Tripod 添加最后一刻的功能,这是一个用于 Windows 操作系统的 shell 构建工具,他一直在将其作为一个副项目进行开发。

在1985年末或1986年初,一位朋友带 Cooper 参加了 Microsoft 在硅谷举行的年度技术会议。在舞台上的是 Steve Ballmer,他正在展示 Windows 的第一个版本。 Cooper 印象深刻,不是因为图形多任务处理系统——他自己也写过类似的东西——而是因为 Microsoft 的动态链接库,即 DLL。在 Windows 中,操作系统的许多功能由 DLL 提供,这是一种新的共享库概念,其中的代码和数据可以同时被多个程序使用。

“简直就像有个霓虹灯招牌写着:‘市场机会’。这真的让我很感兴趣。所以我开始说,‘好吧,我要构建一个 shell。’”

“有些事情我做不到,因为我无法访问操作系统的深层内部。而且我想要一些东西,比如进程间通信、动态重定位,以及 [...] 可以运行和退出的模块的动态加载,而无需关闭操作系统。所以我就回家,把我的图形前端和多任务调度器放在抽屉里,开始在 Windows 中构建软件,”Cooper 解释说。

在 Cooper 看来,Windows 有一个主要的缺点。shell——操作系统的图形界面,你可以在这里启动程序并查找文件——非常简陋,缺乏重叠的窗口和视觉上的润色。与近两年前发布的 Apple Macintosh GUI 相比,这显然是 Microsoft 没有投入太多精力的一个方面。“它是一个叫做 MSDOS.exe 的程序,很明显是有人在一个周末写出来的,”Cooper 观察到。“[Microsoft] 简直就像有个霓虹灯招牌写着:‘市场机会’。这真的让我很感兴趣。所以我开始说,‘好吧,我要构建一个 shell。’”

Windows 1.0 的 16 位 shell 在 MS-DOS 之上运行的截图。

Windows 1.0 的 16 位 shell 在 MS-DOS 之上运行

一个从命令行运行的程序,叫做 MS-DOS Executive (相当于今天的 Explorer 或 Finder)。 Windows 自带了一些内置程序——比如记事本、计算器和时钟——可以通过点击 .exe 文件或相关文件(比如 .doc)来启动到非重叠的应用程序窗口中。

视频播放器

Microsoft Windows 盒子的图片,上面有一个播放按钮图标。 00:00 / 00:00 Ken Doe 在发布 30 年后,给出了 Windows 1.0 shell 的详细十分钟演示。

一个(并非那么)简单的 shell 构建工具

“我开始编写一些可以作为 Windows shell 的小程序,”Cooper 回忆说。“但那实际上是一个很难的问题!你知道,Windows 的 shell 应该是什么样的?这是一个为很多人服务的操作系统。”

直到 1987 年末,Cooper 的一个 Microsoft 朋友带他参加了与 Bank of America 的 IT 经理的一次销售会议,他才找到了解决这个问题的方案。这位经理解释说,他需要 Windows 能够被银行的所有员工使用:高度技术化的系统管理员、半技术化的分析师,甚至是不熟悉电脑的用户,比如银行柜员。Cooper 回忆起灵光一闪的时刻:

在那一瞬间,我领悟到了 shell 设计问题的解决方案:它应该是一个 shell 构建工具——一种工具,每个用户都可以构建完全适合他们独特的应用程序和培训需求的 shell。不是我告诉用户理想的 shell 应该是什么样的,而是他们可以设计自己个性化的理想 shell。

Cooper 开始认真地研究这个新想法。他的原型有一个控件面板,比如按钮和列表框,用户可以将其拖放到屏幕上,填充“表单”。其中一些控件是为常见的 shell 功能预配置的,比如一个自动显示目录内容的列表框。 Michael Geary 是 Cooper 最终雇佣来帮助 Tripod 开发的程序员之一,他描述了这些元素的命名:

“它们最初不叫 ‘控件’。Alan 本来打算叫它们 ‘waldos’,以 遥控机械臂 命名。我不明白这个名字是什么意思,所以我叫它们 ‘gizmos’。Microsoft 一定觉得这个名字太轻浮了,所以他们把它们改名为 ‘控件’。”

“gizmos” 将是 Tripod 具有突破性的一个重要原因:重要的不是最终的 shell 可以做什么,而是之前在 PC 上从未得到良好实现的交互细节。Cooper 从头开始构建了拖放协议和精灵动画系统。

Tripod 还使用了一种事件驱动模型:当用户执行一个动作,比如点击一个按钮,它会触发特定的代码来执行。为了将一个 gizmo 触发的事件连接到在另一个 gizmo 上执行的动作,用户会在 gizmo 之间拖出一个箭头。Geary 记得这是编程短语 “触发一个事件” 的起源:

我一直在寻找一个名称,用来表示一个 gizmo 向另一个 gizmo 发送消息。我知道 SQL 有 ‘触发器’,而 Windows 有 SendMessage,但我不喜欢这些名字。 有一天晚上我感到很沮丧,开始向屏幕发射橡皮筋来帮助我思考。那是我当时的一个习惯,用来改变我的思维方式。在坚韧的玻璃 CRT 上可能比在现代平面屏幕上更实用!在发射了几根橡皮筋后,我仍然卡住了。所以我点燃了一根 doobie,看看是否有帮助。当我 flick 我的打火机并看着火焰时,一切都融合在一起了。发射一根橡皮筋。点燃一根 doobie。触发一个事件!

“这让他大吃一惊,他从来没有见过这样的东西......有一次他转向他的随从,问道 ‘我们为什么不能做这样的东西?’”

“我们为什么不能做这样的东西?”

一旦 Cooper 有了一个可用的原型,他就把它卖给了硅谷周围的出版商。他交谈的每个人都告诉他同样的事情:把它展示给 Microsoft,我们不想参与与他们竞争。

Cooper 多年前在 Microsoft 的早期就见过 Bill Gates,但他们几乎没有快速拨号。Cooper 在 Microsoft 的朋友设法安排了与 Gabe Newell 的会面,当时 Newell 是一位在 Windows 工作的中间层管理人员。(Newell 后来成为视频游戏公司 Valve 的联合创始人兼 CEO。)

当他们终于见面时,Newell 在 Cooper 演示开始五分钟后突然阻止了他:“Bill 必须看看这个。” 他把 Cooper 送回家,并安排他一个月后回到雷德蒙德直接与 Gates 会面。Cooper 花了时间疯狂地将更多功能编码到 Tripod 中。

一个月后(回到 1988 年的春天),Cooper 坐在那间大型 Microsoft 会议室里,但这次与 Gates 和一群十几个 Microsoft 员工一起。Cooper 运行了演示。

“这让他大吃一惊,他从来没有见过这样的东西,”Cooper 回忆起 Gates 的反应,“有一次他转向他的随从,问道 ‘我们为什么不能做这样的东西?’”

当一位 Microsoft 员工指出该工具没有解决的一些问题时,Gates 本人跳出来为 Tripod 辩护。

“在那一刻,我知道有些事情要发生了,”Cooper 说。

有些事情确实发生了,尽管不完全是他所期望的。他不可能知道,坐在那间会议室里,他的项目最终会变成 Visual Basic,一个视觉编程环境,它将统治十年,并成为无数用户进入应用程序编程的门户。他只知道他创造了一些很酷的东西,一些以前没有人做过的东西——即使是 Microsoft 的那些牛人也没有。

从 Tripod 到 Ruby

Gates 想要 Tripod。双方在接下来的几个月里敲定了一项协议。Cooper 将完成该项目并确保它通过 Microsoft 严格的正式 QA 流程,届时它将被捆绑到即将推出的 Windows 3.0 中。

有了合同在手,Cooper 写了一份详细的规范,并聘请了一个程序员团队——Frank Raab、Michael Geary、Gary Kratkin 和 Mark Merker。 Cooper 决定立即扔掉构成 Tripod 的 25,000 行混乱的原型 C 代码,并从头开始重写,因为他觉得它已经无可救药地充满了时间紧迫的 hacks,只需用更清晰的设计重写它就会更容易。 Microsoft 的 DOS 和 Windows 业务部门总经理 Russell Werner 并不高兴。

“当 Russ 发现我已经丢弃了 [代码] 时,他吓坏了,”Cooper 回忆说。

“他开始对我大喊大叫,说我会错过我们的截止日期,我会破坏整个项目,并且我会推迟整个 Windows 3.0 产品的发布。在向他展示了既成事实之后,他几乎无能为力,只能预测失败。” 该团队投入了重写工作——现在代号为 “Ruby”,以区别于原型版本。

Microsoft Ruby 团队的像素化照片。

1989 年春天的 Ruby 团队

从左到右: Frank Raab、Mike Geary、Alan Cooper、Gary Kratkin 和 Mark Merker。

一个主要的改变是将 gizmo 面板架构设计为动态加载(使用 Windows 的新 DLL 概念),并提供一个 API,供第三方开发人员创建和分发他们自己的 gizmos。Cooper 描述了这个设计决策:

我设想了一个产品,第三方供应商可以编写他们自己的 gizmo DLL,用户可以在现场将它们添加到产品中,而无需重新编译。我们定义了一个接口,Ruby 将通过查询消息来询问附近的 executable 文件。如果该文件响应得当,Ruby 知道它是一个配合的 gizmo,并继续请求它的图标以显示在工具面板中。

在开始工作 18 个月后,在 1990 年初,Cooper 的团队按时将黄金母盘交给了 Microsoft。但事实证明,Windows 3.0 无论如何都会迟到八个月——并且根本不包括 Ruby。

一本印有 “Cooper Software Development, Inc 自豪地推出:RUBY!” 字样的手册的照片,上面有一个穿着西装的快乐男人张开双臂的图像。

在开始工作 18 个月后

在 1990 年初,Cooper 的团队按时将黄金母盘交给了 Microsoft。但事实证明,Windows 3.0 无论如何都会迟到八个月——并且根本不包括 Ruby。

从 Ruby 到 Thunder

官方说法是,Ruby 没有作为默认 Windows 3.0 shell 包含在内,因为它在 keystroke-for keystroke, pixel-for-pixel 方面,与 OS/2 shell 不完全相同。然而,更有可能的原因是,Ruby 是 Microsoft 内部政治斗争的牺牲品。很少有人记得,Microsoft 当时正在同时开发 Windows,并与 IBM 联合开发 OS/2 操作系统。团队之间的紧张关系——OS/2 最初被认为是更具战略意义的产品,而 Windows 是 underdog——随着 Ruby 成为代理战而爆发。Cooper 怀疑,根本问题是职业嫉妒,因为 Windows 团队的一些工程师在 1988 年的演示中在场,当时 Gates 对 Tripod 非常热情。“他让所有那些家伙都恨我,”Cooper 认为,“因为我真的让他们相形见绌。”

无论原因是什么,Ruby 在交付后不到一年就在 Microsoft 内部被孤立了。沮丧的 Cooper 飞往雷德蒙德,与 Bill Gates 会面,并提出回购该软件。“我说,‘我会自己发布它,作为 Windows 的 shell 构建工具’。”

Gates 拒绝了。

Cooper 没有筹码,而且据 Cooper 说,Gates 认为他可以将 Ruby 保留下来并做点什么。

事实证明,他确实做了。Gates 热爱 BASIC——Microsoft 赖以建立的编程语言——并且认为,随着图形用户界面开始定义桌面计算,BASIC 需要一个视觉组件。或许受到 Apple 的 HyperCard 的启发,他提出了一个想法,即将 Ruby 的视觉编程前端与 BASIC 替换其小型自定义内部语言相结合,从而有效地为开发人员创建一个可视化的编程语言。

在 1989 年的 Byte 文章中 庆祝 BASIC 的 25 岁生日,Gates 暗示了他已经指示团队去做的事情:

毕竟,设计表单的最佳方式是绘制表单,而不是编写代码来重现它。使用鼠标和预黎明图形图像调色板,你应该能够在屏幕上交互地组合线条、框和按钮,以设计程序的表单。这种交互式的对象设计也应该让你能够附加或组合你的作品在程序中。

Microsoft 的业务语言组负责将 Gates 的愿景变为现实。这并没有受到热烈的欢迎。该小组已经捉襟见肘,负责维护 Microsoft 的 QuickBASIC IDE、BASIC 编译器,并开发一种新的语言引擎(称为 Embedded Basic),以便包含在代号为 Omega 的关系数据库产品中(该产品最终将成为 Microsoft Access)。

Microsoft 业务语言组的成员在团队活动中的照片。有些人拿着写有 “Thunder”、“BASIC” 和 “Silver” 的标志。

1990 年的 Microsoft 业务语言组

(图片来源:Scott Ferguson)

为了安抚 Gates,该部门安排了一个年轻的、首次担任负责人的团队负责该项目,其中包括被任命为 Visual Basic 的开发负责人和架构师的 Scott Ferguson。为了缓解过渡,这个新手团队严重依赖 Cooper 团队的 Michael Geary。

“虽然在项目结束时我们是 Windows UI 开发复杂性的专家,但在开始时我们只有基本的技能。[我们有 Michael] 让我们熟悉 Ruby 的内部结构,并教给我们 ‘weirding way’ 的强制 Windows USER API 使事情发生,这是大多数 Windows 开发人员从未关心或经历过的事情,但却被 VB 推到了崩溃的边缘,”Ferguson 回忆说。

Microsoft Visual Basic 1.0 发布后 Visual Basic 团队的照片。它包括几个成员的名字:John Fine、Adam Rauch、Rick Olson、Scott Ferguson、Chris Fraley、Nancy Barnes、Brian Overland、Nevet Basket 以及 Mr. 和 Mrs. Filler。

Microsoft Visual Basic 1.0 发布后 Visual Basic 团队的负责人

据 Ferguson 称,摄影师认为他需要更多的人来平衡构图,所以他带来了他的两个助手来充当 “filler”。

(图片来源:Scott Ferguson)

最初计划为一个快速的 6 个月项目,但将 Ruby 的 shell 构建工具转换为一个成熟的编程环境的复杂性导致了 18 个月艰苦的开发。

第一个突破性的变化是切除 Ruby 的 “gizmo 之间的箭头” 图,用于在控件之间传递消息。

该团队考虑过简单地用 BASIC 替换粗糙的字符串语言,但虽然可视化图形可能适用于 shell 构建工具的更简单需求,但它无法扩展为通用编程语言。他们最终决定借用 Omega 的 Embedded Basic 代码编辑器和事件模型,Ferguson 回忆说这个过程 “大致相当于伸入猴子的脑袋,只取出与视觉相关的糊状部分”。

该团队最终确定了由三个元素组成的 Thunder 的最终架构:Embedded Basic 语言引擎、一个表单引擎(基于 Cooper 团队的 Ruby 代码)和一个 shell——UI 代码,这些代码是从 Omega 项目移植过来的,并且是从头开始编写的。

当项目准备好发布时,Ruby 的代码几乎没有剩下。Ferguson 回忆说,有人问他 Ruby 是否占产品代码的 15% 以上,这是包括 Cooper 团队署名的合同标准:

鉴于表单引擎大约占产品的三分之一,而 Ruby 剩余的可识别部分肯定不到其中的一半,我可能会说 ‘不’。但我表示四舍五入似乎是公平的,因为如果没有 Ruby 被强加给我们,VB 很可能根本不会发生。

Visual Basic 1.0 界面的截图,包括一个正在创建计算器的编程编辑器,它结合了代码和可视化编辑工具。

Visual Basic 1.0

Visual Basic 1.0 将 Cooper 的 Ruby 中的组件工具面板和表单引擎与 Microsoft 的 Embedded Basic 引擎和 Windows shell 代码相结合。

唉,最终的产品让 Cooper 感到震惊——当他听到这件事时,他讨厌 BASIC。当 Visual Basic 1.0 在 1991 年发布时——仅仅在 Windows 3.0 之后的一年——Cooper 飞到雷德蒙德,坐在活动的第一排,对 Microsoft 对他的宝贝所做的事情感到沮丧。

幸运的是,市场并没有分享 Cooper 的观点。Visual Basic 立即受到了欢迎。

一台 CRT 显示器的图片,上面有 Visual Basic 1.0。前面是一本名为 “Microsoft Visual Basic” 的手册。

立即受到欢迎

PC Magazine 在 1991 年 12 月刊中授予 Visual Basic 1.0 技术卓越奖。

视频播放器

Bill Gates 举着手讲话的照片。上面有一个播放按钮。 00:00 / 00:00 Bill Gates 在发布会上演示 Visual Basic 1.0。

相当正确的事情

Visual Basic 在一个神奇的过渡时刻突然出现。微型计算机正式在商业世界中占据主导地位——而且企业需要软件才能在它们上面运行。Windows 3.0 取得了巨大的成功,第一年就卖出了 400 万份,最终让 IBM 兼容 PC 的用户拥有了一个可以与 Apple Macintosh 相媲美的图形界面。

然而,对于成千上万的工作现在受到威胁的大型机程序员来说,这种转变提出了一个专业的难题。

“1990 年编写 Windows 程序的流行方法是原始的 Win32 API。这意味着 ‘C’ 语言 WndProc(),巨大的 switch case 语句来处理 WM_PAINT 消息。基本上,所有在厚厚的 Charles Petzold 书中教授的内容。这是一种非常繁琐和复杂的编程类型。它对企业 ‘企业应用程序’ 类型的编程不友好,”一位 Hacker News 评论员补充说。

一本名为 “Programming Windows: Second edition” 的书的照片。

Charles Petzold 的 1990 年代编程 Windows 3.0

对于任何与 Windows API 作斗争的开发人员来说,1000 多页的 Petzold 书籍都是先决条件。

(图片来源:Foone Turing)

而且,当然,对于 “数百万正在恐惧地看着微型计算机入侵的大型机 COBOL 程序员” 来说,Cooper 回忆说,“Visual Basic 基本上成为了他们的安全网。” Visual Basic 提供了一个更简单的抽象层,而不是 C/C++ 和低级 Win32 API 的陡峭学习曲线。

为了设计他们的 UI,开发人员可以将组件拖放到 WYSIWYG 画布上。为了向 UI 元素添加行为,他们可以简单地选择它并从下拉列表中选择一个点击事件处理程序。大型机程序员突然有能力快速上手编写 Windows 应用程序。

“多年来,你知道,人们会走到我面前说:‘你拯救了我的职业生涯’,”Cooper 说。对于 Geary 来说,经常遇到程序员的这种情绪 “是我们所有在 VB 工作的人最令人满意的事情之一。”

大型机老手并不是唯一被 Visual Basic 的可访问性所吸引的人。对于许多第一次使用计算机的年轻人来说,Visual Basic 是他们第一次接触到编程的力量和乐趣。“它让我开始了解函数是如何工作的,子程序是如何工作的,以及对象是如何工作的。但更重要的是,Visual Basic 让我感到兴奋和可能性,我可以让我家办公桌上的这个东西做我想做的几乎任何事情,”另一位 Hacker News 评论员回忆说。

视频播放器

两个穿着有领衬衫的男人在对着另一个穿着西装的男人说话,他们都在使用电脑。背景中有一台电脑,还有一个大标题写着 ‘Computer Chronicles’。 00:00 / 00:00 来自 Microsoft 的 Cornelius Willis 和 Jeff Beehler 在 1993 年的一集 “The Computer Chronicles” 中演示了 Visual Basic,该集专门讨论了可视化编程环境。

Visual Basic 成功的另一个原因是最初由 Cooper 团队做出的设计决策的直接结果。与 Ruby 一样,Visual Basic 有一个控件调色板,您可以将控件拖放到表单上。这些控件中的每一个都实现为一个单独的、动态加载的 DLL 模块。Michael Geary 最初帮助 Microsoft 团队将此功能从 Ruby 移植到 Visual Basic,但完成它一直低于产品的剪切列表。Scott Ferguson 描述了该团队在交付压力下为保持该功能存活而做出的顽强努力:

该功能的成本主要来自所需的测试和文档工作。还需要努力招募和协调第三方来构建可以随新 VB 一起发布的自定义控件;加上开发资源来协助所有这些工作。有一次,营销部门甚至建议,如果我们不在圣诞节前发布,我们就最好根本不要发布该产品!幸运的是,[Bill Gates] 耐心的天才占了上风,他坚持要求我们增加时间表并推迟发布,以便允许自定义控件。再次,‘几乎完成’ 的想法影响了完成它的决定。并且作为一个副作用,一个全新的家庭手工业诞生了。

这个用于自定义控件的接口,称为 VBX,发展成为一个蓬勃发展的第三方市场。开发人员从各种公司购买附加的 VBX 小部件来增强他们的 UI——日历日期选择器、数据网格、图表、条形码扫描仪等等——而无需自己对控件进行编程。

Visual Basic 在 1991 年的首次发布之后,又发布了五个主要版本(不包括一个命运不佳的 DOS 版本)。到 1998 年 Visual Basic 6.0 发布时,它的统治地位是绝对的:在 Windows PC 上进行的所有业务应用程序编程的三分之二都是用 Visual Basic 完成的。在其鼎盛时期,Visual Basic 在全球拥有近 350 万开发人员,是 C++ 程序员数量的十倍以上。

  1. ![显示 Visual Basic 1.0 起始界面的屏幕截图。左侧面板中有 16 个按钮。](https://retool.com/_next/static/media/Visual Basic 1.0 A.b006edc1.jpg) 1.0
  2. ![显示 Visual Basic 2.0 起始界面的屏幕截图。左侧面板中有 36 个按钮以及其他新控件。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 2.0 A.16ac91b9.jpg) 2.0
  3. ![显示 Visual Basic 3.0 起始界面的屏幕截图。左侧面板中有 38 个按钮。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 3.0 A.f6221543.jpg) 3.0
  4. ![显示 Visual Basic 4.0 起始界面的屏幕截图。左侧面板中有 26 个按钮。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 4.0 A.ce5a9038.jpg) 4.0
  5. ![显示 Visual Basic 5.0 起始界面的屏幕截图。左侧面板中有 21 个按钮。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 5.0 A.da6f4d5a.jpg) 5.0
  6. ![显示 Visual Basic 1.0 起始界面的屏幕截图。左侧面板中有 1 个按钮,但顶部有两排按钮。](https://retool.com/_next/static/media/Visual Basic 6.0 A.900d7963.jpg) 6.0

Visual Basic 1.0

Visual Basic 2.0

Visual Basic 3.0

Visual Basic 4.0

Visual Basic 5.0

Visual Basic 6.0

![显示 Visual Basic 1.0 起始界面的屏幕截图。左侧面板中有 16 个按钮。](https://retool.com/_next/static/media/Visual Basic 1.0 A.b006edc1.jpg) ![显示 Visual Basic 2.0 起始界面的屏幕截图。左侧面板中有 36 个按钮以及其他新控件。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 2.0 A.16ac91b9.jpg) ![显示 Visual Basic 3.0 起始界面的屏幕截图。左侧面板中有 38 个按钮。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 3.0 A.f6221543.jpg) ![显示 Visual Basic 4.0 起始界面的屏幕截图。左侧面板中有 26 个按钮。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 4.0 A.ce5a9038.jpg) ![显示 Visual Basic 5.0 起始界面的屏幕截图。左侧面板中有 21 个按钮。屏幕顶部也有一排按钮。](https://retool.com/_next/static/media/Visual Basic 5.0 A.da6f4d5a.jpg) ![显示 Visual Basic 1.0 起始界面的屏幕截图。左侧面板中有 1 个按钮,但顶部有两排按钮。](https://retool.com/_next/static/media/Visual Basic 6.0 A.900d7963.jpg) Cooper 最终开始欣赏 Visual Basic 的影响。“如果 Ruby 作为 shell 构建工具进入市场,会让数百万人更快乐,但 Visual Basic 让数亿人更快乐。我不是对的,或者说,我是足够正确的,有一些正确性。Bill Gates 也是如此,但我们两个人一起做了一些相当正确的事情。”

视频播放器

Alan Cooper 穿着西装微笑着讲话,同时他获得了奖励。Bill Gates 从侧面看着,也在微笑。上面叠加了一个播放按钮。 00:00 / 00:00 Bill Gates 向 Alan Cooper 颁发了 Windows Pioneer 奖,以表彰他对 Microsoft Windows 的贡献,因为他是 “Visual Basic 之父”。

Microsoft 的非受迫性失误

就在 Visual Basic 看起来势不可挡的时候,出现了一个痛苦的企业决策,这将导致无休止的猜测。

在 1990 年代后期,部分是为了应对 Sun 的 Java 的竞争威胁,Microsoft 将其重点转移到一个新的开发框架和一个名为 .NET 的通用语言运行时。Microsoft 大力推动开发人员采用 .NET,并且 Visual Basic 被进行了从头开始的重写,以将其从过程语言迁移到更适合新框架的面向对象的语言。Visual Basic 6.0 的继任者,名为 VB.NET 并在 2002 年发布,完全改变了产品的精神,并且最终成为了 Visual Basic 最初想法的丧钟。

虽然 Visual Basic 是具有大量抽象的开发人员的简单起点,但 VB.NET 是一种更复杂、功能齐全的编程语言。它与 Microsoft 的新 C# 语言共享许多复杂的概念,包括线程、继承和多态性。而且与 C# 一样,开发人员要精通它,就需要更高的学习曲线。

在 2012 年的一篇 Microsoft 博客文章中,.NET 讲师 David Platt 回忆说,Microsoft 在产品开发中犯了一个经典的错误——只听取他们最直言不讳的客户的意见:

几乎所有 Visual Basic 6 程序员都对 Visual Basic 6 所做的事情感到满意。他们很乐意成为公交车司机:下午 5 点(或者在一个非常好的日子里,下午 4:30)离开办公室,而不是工作到午夜;在周末和家人一起玩,而不是艰难地回到办公室。他们不哀叹 Visual Basic 6 中缺少运算符重载或多态性,所以他们没有说太多。 然而,Microsoft 听到的声音来自 3% 的 Visual Basic 6 公交车司机,他们积极地希望成为战斗机飞行员。这些人花时间参加会议,在 CompuServe 论坛上发布问题,回应文章。他们不满足于仅仅幻想向刚刚在交通中切断他们车尾的汽车发射响尾蛇导弹,他们要求 Microsoft 在他们的公共汽车上安装加力燃烧器,以及导弹、对抗措施和一个抬头显示器。Microsoft 做了。

更糟糕的是,从 “经典” Visual Basic 到 VB.NET 的传统应用程序没有可靠的迁移路径。虽然 Microsoft 发布了移植工具,但它们充其量是不可靠的,用户面临着手动、耗时、容易出错的重写。“[Microsoft] 让所有人的 VB6 代码完全搁浅,没有办法在最新版本的 Windows 上制作现代应用程序。很多时候你甚至无法让你的 VB6 应用程序安装在最新版本的 Windows 上,”一位 Slashdot 评论员回忆说。

Microsoft 已经打破了其 Visual Basic 开发人员大军的信任。面对从 VB.NET 从头开始或迁移到像 JavaScript 和 PHP 这样的新的 Web 原生语言的选择,大多数开发人员选择了后者——这是 Microsoft 犯下的一个残酷的非受迫性失误。(人们很容易忘记 Microsoft 在 2001 年在 Web 上拥有的领先地位:Internet Explorer 占据了 96% 的市场份额,而且 Visual Basic 应用程序甚至可以通过 ActiveX 控件嵌入到网页中。)

Evans Data 估计,从 2006 年春季到 2007 年冬季,整个 Visual Basic 系列的开发人员使用量下降了 35%。到 2008 年,Microsoft 正式结束了对 VB6 IDE 的支持。然而,它确实无限期地扩展了对 Windows 中 VB6 运行时的支持——这证明了他们的客户使用 Visual Basic 构建了大量关键的遗留业务应用程序。

“...Visual Basic 对编程的贡献比面向对象的语言更多...”

开发人员工具的遗产

2006 年,一位名叫 Jaroslaw Rzeszótko 的 18 岁博主和程序员通过电子邮件向一群著名的开发人员提出了一系列未经请求的问题。在他的问题中,有一个面向未来的请求:“编程中的下一个大事件是什么?” 他的大多数听众都拒绝了这个问题的基础或表示异议,但 Linux 内核的创建者 Linus Torvalds 上了钩。他预测了编程中渐进式改进的重要性,特别是 “帮助使所有日常繁琐工作更容易的工具”。

“例如,我个人认为 Visual Basic 对编程的贡献比面向对象的语言更多,”Torvalds 写道,“但人们嘲笑 VB 并说它是一种糟糕的语言,而且他们已经谈论面向对象语言几十年了。而且,Visual Basic 不是一种伟大的语言,但我认为 VB 中简单的 DB 接口从根本上来说比面向对象更重要,例如。”

事实证明,Torvalds 是对的:主要是工具、生态系统、集成和框架将定义不远的将来,而不是语言本身的设计。

巧合的是,Visual Basic 的消亡与 Web 作为业务应用程序的主导平台崛起完美地结合在一起。如果微型计算机加速了对业务软件的需求,那么互联网就将它绑在火箭上并将其发射到太空。IDC 预测,在 2019 年至 2023 年期间,将使用云原生方法开发超过 5 亿个应用程序,其中大多数针对特定行业的业务线用例。在五年内,这与之前 40 年中完全开发的应用程序数量相同。

满足全球对软件的需求并没有导致开发人员数量呈指数级增长。Hired 报告称,2021 年开发人员的就业需求翻了一番,但 Evans Data 预测,从 2019 年到 2024 年,全球开发人员总数仅增长 20%。在这种差距中,正如 Torvalds 所预测的那样,最大的杠杆是提高开发人员的效率。

20 年前,在 Windows 上部署应用程序意味着走动 3.5 英寸软盘或 CD-R 并在每台机器上手动运行安装程序(对于每次升级或错误修复都要重复此过程)。将软件部署到 Web 避免了 sneakernet,但需要开发人员购买昂贵的服务器,将它们物理地安装在托管数据中心中,并在硬件不可避免地出现故障时手动修复或更换硬件。

Jeff Bezos 曾将这些任务称为 “ 无差别的繁重工作”,所有这些先决条件、不相关的苦差事都站在程序员和在世界上实现想法之间。今天,由于像 Amazon Web Services 这样的抽象层的持续开发,开发人员可以立即从命令行将应用程序部署到边缘,而无需考虑物理位置、硬件、操作系统、运行时或服务器。

尽管如此,基础设施层的抽象可能已经超过了客户端的抽象:Alan Cooper 和 Scott Ferguson 的团队 30 年前引入的许多创新在现代开发中都找不到。开发人员曾经需要与神秘的 Win32 API 作斗争,现在他们必须弄清楚如何构建自定义 Select 组件来解决浏览器限制,或者努力将具有记录不完善的 API 的不同 SaaS 工具粘合在一起。也许这激发了对 Visual Basic 的许多怀旧之情——它传递了一种我们尚未重新点燃的轻松和魔力。

这不是因为缺乏尝试。Visual Basic 背后的思想一直非常顽固地持续存在。无论构建在电子表格、代码、节点、直接操作——或它们的某种组合之上——新颖的 创作 环境 for 编程 继续捕捉开发人员的想象力。自 sunsetting VB6 以来,甚至 Microsoft 本身也一直在追逐这个梦想,推出了像 LightSwitch、Expression Blend、Project Siena 和 PowerApps 这样的产品。

![Visual Studi