1
緣起
“我們?yōu)槭裁礇]有這樣的東西?!” -- Bill Gates
1988年春天,Alan Copper坐在微軟的大會議室中,給Bill Gates和微軟的十幾名員工做了一次著名的演示。
這是個叫做Tripod的開發(fā)工具,控制面板上面是一些按鈕,列表框之類的東西,它采用事件驅動的方式,即當用戶執(zhí)行某個操作(如單擊按鈕)時,系統(tǒng)會觸發(fā)特定代碼執(zhí)行執(zhí)行。
很明顯,這種開發(fā)方式把Bill Gates強烈地震撼了。
Bill Gates想到了自家剛剛發(fā)布的Windows操作系統(tǒng):
GUI界面雖然對用戶很友好,但是對程序員來說,在上面編程痛苦不堪,必須需要使用原始的 Win32 API。
這意味著使用C語言編寫 WndProc()函數,在里邊用丑陋無比的switch case 語句來處理各種Windows消息。
LRESULT CALLBACK WndProc(HWND hwnd,
UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
即使想創(chuàng)建一個簡單的窗口,沒有幾百行代碼也是不行的。
編程模型乏味又枯燥,簡直不是人干的活兒。
相比之下,Alan Copper的Tripod可以把各種組件拖拽到表單設計器,然后對事件添加處理代碼就可以了,又簡單又直觀。
這絕對是以后Windows開發(fā)的未來。
“我們?yōu)槭裁礇]有做這樣的東西?!” Bill Gates扭頭對著他的隨從問道。
Bill Gates買下了Tripod,并且讓項目組對Tripod進行改造,用自己喜歡的Basic作為新工具的內置編程語言。
最終,Visual Basic問世了。
Visual Basic的一大特點就是:有限的功能集使得學習曲線要短得多。
學習VB vs 學習 C++,就像學習開車vs 學習開飛機。
成為一名優(yōu)秀的 Visual Basic 6 程序員比成為一名優(yōu)秀的 C++ 程序員花費的時間要少得多。
2
發(fā)展
Visual Basic的出現也是恰逢其時。
八九十年代,個人電腦市場正在迅猛發(fā)展,瘋狂地吞噬原來大型機和小型機的領地。
生活在那里的數百萬COBOL程序員非常緊張,也想轉型到PC開發(fā)上來,但是C/C++陡峭的學習曲線和非常低級的Win32 API成為最大的攔路虎。
正當他們無所適從的時候,提供了更簡單抽象層的Visual Basic出現了,在組件化的編程模型下,你只需要把“控件”拖放到表單時,設置好屬性,編寫好事件處理代碼,一個Windows應用程序就開發(fā)出來了。
從此,大型機COBOL程序員高興地擁抱了Windows平臺。
一些編程新手也被Visual Basic吸引,他們了解到函數如何工作,對象如何工作,迅速地開發(fā)出應用程序,第一次感受到了編程的樂趣和力量。
而Alan Copper當初的一個設計決策讓Visual Basic一飛沖天。
在Visual Basic中,每一個控件(文本框,按鈕,下拉框等)都是一個單獨的,可以動態(tài)加載的DLL,也就是說,任何人都可以開發(fā)屬于自己的控件,然后加載到Visual Basic當中。
這和后來Eclipse,IDEA,VS Code的插件思想非常類似,只是VB比他們早了一個時代。
無數軟件開發(fā)廠商開始開發(fā)這種自定義控件(VBX),日歷選擇器,圖標,條碼掃描,報表...... 海量的VBX迅速發(fā)展成一個第三方的市場。
Visual Basic不斷地推出新版本,不但支持快速開發(fā)桌面的GUI應用,還可以通過ADO等手段訪問數據庫,從而開發(fā)C/S架構程序。
到了1998年,Visual Basic 6.0發(fā)布時達到了巔峰,有三分之二的Windows商業(yè)應用是Visual Basic開發(fā)的,Visual Basic 在全球擁有350萬開發(fā)人員,是C++程序員數量的十倍以上。
能和VB一戰(zhàn)的,恐怕也只有Delphi了。
Alan Cooper和微軟簽署了嚴格的保密協(xié)議,在四年的時間內,一直保守秘密,不對外界透露他在做什么。
直到Visual Basic 發(fā)布以后,他的朋友Mitchell Waite 打電話問他,在VB那個about box中的Copper是不是你?此時Alan Copper才承認是他干的。
Mitchell Waite請Alan Cooper吃了一頓飯,親耳聽到了完整的故事,不由地感慨:這使你成為VB之父!
1994年,由于對可視化編程的杰出貢獻,Visual Basic 之父Alan Cooper獲得了微軟第一個Windows先鋒獎。
3
衰落
Visual Basic在桌面開發(fā)中輝煌了10年,直到它撞上了互聯網的大潮。
Sun公司的Java異軍突起,獨領風騷,讓微軟感受到了巨大的壓力。
在開發(fā)了不成功的Visual J++,被Sun控訴說破壞了Write once ,run anywhere 之后,微軟決定另起爐灶,開始做.NET。
Visual Studio的所有產品都搖身一變,加上了.NET后綴,Visual Basic也不例外,成了VB.NET。
VB.NET徹底改變了最初的產品精神,變成了更復雜,功能更全的編程語言,開始和C#一起共享很多復雜的概念,線程、繼承、多態(tài),學習曲線陡然升高。
但是在.NET平臺上,C#才是親兒子,是微軟的戰(zhàn)略產品,既然底層的概念都類似,為什么不選C#呢?
在一篇微軟的博客中,.NET 講師 David Platt痛斥微軟產品犯的錯誤:
幾乎所有的VB6程序員都對VB6很滿意,這是一輛非常不錯的汽車,他們很愿意成為汽車的司機,至于VB6中缺乏運算符重載,多態(tài),他們并不在乎。 但是,微軟團隊聽到了3%的司機的意見,這幫人想成為戰(zhàn)斗機飛行員,他們參加各種會議,寫各種文章,在論壇上發(fā)帖,希望給汽車增加響尾蛇導彈,安裝加力燃燒器,HUD顯示屏,反導設施...... 微軟最終做到了,這就是VB.NET。
更糟糕的是,微軟發(fā)布的遷移工具是不可靠的,代碼從VB遷移到VB.NET非常困難,很多時候,用戶需要手工重寫。
這徹底打破了開發(fā)人員對VB的信任,VB程序員開始搖擺,要么從VB.NET從頭開始,要么轉向PHP,Python,JavaScript,大多數人選擇了后者。
Visual Basic 6.0成了最后一個經典的VB版本,一些程序員依然堅守,2008年4月,微軟宣布停止支持VB 6 IDE,但是直到今天,Windows依然支持運行VB6開發(fā)出來的程序,可見這里有一個龐大的、遺留VB6程序的部落,不容忽視。
4
反思
2006年,一個18歲的程序員在郵件列表中問了這么一個問題:編程的下一件大事是什么?
沒想到,著名的 Linus Torvalds 竟然回復了:
“幫助簡化所有日常苦差事的工具, 例如我個人認為Visual Basic在編程方面比面向對象做得更多,但人們嘲笑VB是一種糟糕的語言,雖然VB不是一門偉大的語言,但是VB中的簡單易用的數據庫接口比面向對象要重要得多......”
轉眼間,Visual Basic已經誕生30多年了,但是編程并沒有變得比九十年代簡單,相反變得更復雜了,還專門分離出了前端來處理UI相關的問題,還有層出不窮的框架,讓人難受的、復雜的CSS,瀏覽器兼容問題...... 這些苦差事和30年前用拖拽的方式建立界面有天壤之別。
我們現在其實缺少像Visual Basic這樣的隱藏復雜性的工具,它功能有限但是足夠,學習曲線短,可以快速上手,迅速開發(fā)出應用出來。
下一個時代的Visual Basic會在哪兒呢?
參考資料:
http://www.ojodepez-fanzine.net/network/qbdl/history_of_visual_basic.html
https://web.archive.org/web/20170309062139/https://www.cooper.com/alan/father_of_vb.html
https://learn.microsoft.com/en-us/archive/msdn-magazine/2012/june/don-t-get-me-started-the-silent-majority-why-visual-basic-6-still-thrives
https://retool.com/visual-basic/#cover
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.