微軟剛剛將其 Windows 系統(tǒng)對 Visual Basic 6 程序的完全兼容支持延長到了 Windows 8 的整個產(chǎn)品周期. Visual Basic 6 最早發(fā)售于 1998 年, 所以現(xiàn)在來看 VB6 程序?qū)⒅辽俦恢С?24 年. 相比之下 .NET Framework 1.1 (2002 年發(fā)行) 則僅僅被支持了 7 年, 到了 Windows 7 (2009) 便被微軟拋棄了. 我的一個學(xué)生曾經(jīng)開玩笑說過 Visual Basic 6 就像 Windows 環(huán)境中“殺不死的小強(qiáng)”. 實(shí)際上這個比喻不無道理 - 蟑螂生存的秘訣在于它的簡單, 它們所做的所有事情就是在自己占據(jù)的角落里堅(jiān)持活下去, 除此之外什么都沒有. 同樣, Visual Basic 6 也滿足了開發(fā)者為它預(yù)設(shè)的市場的所有需求——允許經(jīng)驗(yàn)不多的程序員快速開發(fā)簡單的程序. Visual Basic 從未被當(dāng)作一種提供給專業(yè)程序員開發(fā)復(fù)雜程序的語言.
Visual Basic 6 實(shí)現(xiàn)其價(jià)值的方式是將 Windows 的各種復(fù)雜之處簡化, 因此簡單的工作對于 VB 來說非常容易完成. 不過另一方面, 相對復(fù)雜的工作比如使用線程則基本是不可能的. 對我來說有一個經(jīng)驗(yàn)規(guī)則很有用:VB 中, 用了十分鐘實(shí)現(xiàn)不了的功能對我來說肯定是沒法實(shí)現(xiàn)的. 此外 VB 成功的另一個關(guān)鍵之處是由于其提供的功能較少, 所以所需的學(xué)習(xí)時(shí)間和學(xué)習(xí)難度也較低. 舉個例子說, 就是學(xué)習(xí)開巴士需要的時(shí)間顯然比學(xué)習(xí)怎么開戰(zhàn)斗機(jī)少, 而成為一個優(yōu)秀的 Visual Basic 程序員需要的時(shí)間也顯然比成為一個優(yōu)秀的 C++ 程序員少; 而當(dāng)時(shí) Visual Basic 6 面對的主要同類對手就是 C++.
不過到了 Visual Basic .NET 時(shí)代微軟顯然沒有意識到這些. 當(dāng) VB .NET 成為一個所謂“全功能語言”的時(shí)候, 微軟的開發(fā)者為它加上了 C# 所擁有的所有高級和復(fù)雜的功能 —— 線程, 多態(tài)繼承, 等等. 也因此 VB .NET 變成了一個和 C# 要求相同的技能, 相同的學(xué)習(xí)過程和給人完全相同體驗(yàn)的編程語言. 當(dāng)然這并不完全是微軟的判斷失誤: 微軟員工其實(shí)做了他們認(rèn)為 Visual Basic 開發(fā)者們要求他們做的事情, 滿足了 VB6 用戶的要求.
但對于 Visual Basic 來說, 用“沉默的大多數(shù)”來描述大部分開發(fā)者非常合適. 幾乎所有的 Visual Basic 6 用戶都對現(xiàn)在的產(chǎn)品非常滿意——沿用我們前面所使用的比喻, 他們很愿意只做公交司機(jī): 每天五點(diǎn)下班回家, 不用加班到半夜; 周末在家和家人在一起而不用回到辦公室; 晚上和配偶在一起, 而不是坐在辦公室里帶著充滿血絲的眼睛連夜編程, 早上吃著昨天剩下的冷飯. 他們并不在意 Visual Basic 6 既沒有提供運(yùn)算符重載也不提供完整的面向?qū)ο竽P? 所以他們沒有抱怨什么.
而微軟聽到的聲音則來自 3% 愿意成為戰(zhàn)斗機(jī)駕駛員的 Visual Basic 6 公交司機(jī)——他們在閑暇時(shí)間參加業(yè)內(nèi)會議, 在網(wǎng)上論壇中提問, 給各種關(guān)于 VB 的文章寫自己的回復(fù). 而也是這些人不能滿足只在幻想中發(fā)射導(dǎo)彈擊毀剛剛別了他們巴士的轎車——他們真的去向微軟要求新的巴士必須帶著和戰(zhàn)斗機(jī)一樣的加力燃燒室, 兩邊掛著格斗導(dǎo)彈, 車尾帶上干擾彈發(fā)射器, 駕駛座還要有平視顯示器. 因?yàn)樗麄兪?Visual Basic 開發(fā)者中喊話聲音最大的一群, 所以微軟照做了.
于是到最后, 將 Visual Basic .NET 交給熟悉了 Visual Basic 6 的大部分程序員就如同人施放魔法將一只寵物狗僅僅在生理上變成了叢林狼, 然后便對著它大喊“去林子里抓只羊回來!”適應(yīng)了寵物狗生活的狼顯然會這么想“哈? 您沒事兒吧? 我哪兒也不去就在這兒帶著等你給我開罐頭.”于是 Visual Basic 6 程序員依然如故.
當(dāng)然 Visual Basic 6 也并非完美無缺. 最好的例子可能就是 On Error Resume Next 了——在工作的時(shí)候某一步執(zhí)行出問題了, 所以我們繼續(xù)按原計(jì)劃該干什么干什么然后看看結(jié)果什么樣? 想想都知道這明顯不合理. 然而我們?nèi)匀粦?yīng)該記住由技能較低 (所以便宜) 的開發(fā)人員對功能有限 (便宜) 的程序進(jìn)行快速 (便宜) 開發(fā)能解決很大一部分實(shí)際生產(chǎn)中遇到的問題, 而 Visual Basic 6 是這種情景中一種優(yōu)秀的工具.
Visual Basic 6 解決的問題并不會憑空消失, 所以到微軟提供一種可以替代 VB6 的工具前, Windows 系統(tǒng)中的小強(qiáng)還是會繼續(xù)頑強(qiáng)的生存下去. 我愿意賭五塊錢, 就算到了 Windows 9 還是 Windows 10, 微軟也還是必須提供 Visual Basic 兼容.