微軟剛剛將其 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 兼容.