微软刚刚将其 Windows 系统对 Visual Basic 6 程序的完全兼容支持延长到了 Windows 8 的整个产品周期. Visual Basic 6 最早发售于 1998 年, 所以现在来看 VB6 程序将至少被支持 24 年. 相比之下 .NET Framework 1.1 (2002 年发行) 则仅仅被支持了 7 年, 到了 Windows 7 (2009) 便被微软抛弃了. 我的一个学生曾经开玩笑说过 Visual Basic 6 就像 Windows 环境中“杀不死的小强”. 实际上这个比喻不无道理 - 蟑螂生存的秘诀在于它的简单, 它们所做的所有事情就是在自己占据的角落里坚持活下去, 除此之外什么都没有. 同样, Visual Basic 6 也满足了开发者为它预设的市场的所有需求——允许经验不多的程序员快速开发简单的程序. Visual Basic 从未被当作一种提供给专业程序员开发复杂程序的语言.
Visual Basic 6 实现其价值的方式是将 Windows 的各种复杂之处简化, 因此简单的工作对于 VB 来说非常容易完成. 不过另一方面, 相对复杂的工作比如使用线程则基本是不可能的. 对我来说有一个经验规则很有用:VB 中, 用了十分钟实现不了的功能对我来说肯定是没法实现的. 此外 VB 成功的另一个关键之处是由于其提供的功能较少, 所以所需的学习时间和学习难度也较低. 举个例子说, 就是学习开巴士需要的时间显然比学习怎么开战斗机少, 而成为一个优秀的 Visual Basic 程序员需要的时间也显然比成为一个优秀的 C++ 程序员少; 而当时 Visual Basic 6 面对的主要同类对手就是 C++。
不过到了 Visual Basic .NET 时代微软显然没有意识到这些. 当 VB .NET 成为一个所谓“全功能语言”的时候, 微软的开发者为它加上了 C# 所拥有的所有高级和复杂的功能 —— 线程, 多态继承, 等等. 也因此 VB .NET 变成了一个和 C# 要求相同的技能, 相同的学习过程和给人完全相同体验的编程语言. 当然这并不完全是微软的判断失误: 微软员工其实做了他们认为 Visual Basic 开发者们要求他们做的事情, 满足了 VB6 用户的要求.
但对于 Visual Basic 来说, 用“沉默的大多数”来描述大部分开发者非常合适. 几乎所有的 Visual Basic 6 用户都对现在的产品非常满意——沿用我们前面所使用的比喻, 他们很愿意只做公交司机: 每天五点下班回家, 不用加班到半夜; 周末在家和家人在一起而不用回到办公室; 晚上和配偶在一起, 而不是坐在办公室里带着充满血丝的眼睛连夜编程, 早上吃着昨天剩下的冷饭. 他们并不在意 Visual Basic 6 既没有提供运算符重载也不提供完整的面向对象模型, 所以他们没有抱怨什么.
而微软听到的声音则来自 3% 愿意成为战斗机驾驶员的 Visual Basic 6 公交司机——他们在闲暇时间参加业内会议, 在网上论坛中提问, 给各种关于 VB 的文章写自己的回复. 而也是这些人不能满足只在幻想中发射导弹击毁刚刚别了他们巴士的轿车——他们真的去向微软要求新的巴士必须带着和战斗机一样的加力燃烧室, 两边挂着格斗导弹, 车尾带上干扰弹发射器, 驾驶座还要有平视显示器. 因为他们是 Visual Basic 开发者中喊话声音最大的一群, 所以微软照做了.
于是到最后, 将 Visual Basic .NET 交给熟悉了 Visual Basic 6 的大部分程序员就如同人施放魔法将一只宠物狗仅仅在生理上变成了丛林狼, 然后便对着它大喊“去林子里抓只羊回来!”适应了宠物狗生活的狼显然会这么想“哈? 您没事儿吧? 我哪儿也不去就在这儿带着等你给我开罐头.”于是 Visual Basic 6 程序员依然如故.
当然 Visual Basic 6 也并非完美无缺. 最好的例子可能就是 On Error Resume Next 了——在工作的时候某一步执行出问题了, 所以我们继续按原计划该干什么干什么然后看看结果什么样? 想想都知道这明显不合理. 然而我们仍然应该记住由技能较低 (所以便宜) 的开发人员对功能有限 (便宜) 的程序进行快速 (便宜) 开发能解决很大一部分实际生产中遇到的问题, 而 Visual Basic 6 是这种情景中一种优秀的工具.
Visual Basic 6 解决的问题并不会凭空消失, 所以到微软提供一种可以替代 VB6 的工具前, Windows 系统中的小强还是会继续顽强的生存下去. 我愿意赌五块钱, 就算到了 Windows 9 还是 Windows 10, 微软也还是必须提供 Visual Basic 兼容.