聊聊VB的興衰史,以及普通人的編程手札(vb發(fā)展史)
圖片來源@視覺中國
文 | 腦極體
在廣大程序員的世界里,流傳著一個(gè)千古難題——什么才是最好的語言?
在這個(gè)“BCYY48”(編程語言)天團(tuán)里,C 、Java、Python、PHP……每個(gè)都有不少擁躉pick。而曾經(jīng)有“首富爸爸”和全球后援會撐腰的VisualBASIC語言,現(xiàn)在卻處在一個(gè)非常尷尬的位置。
很少有開發(fā)人員愿意承認(rèn),自己曾經(jīng)是VisualBasic的忠實(shí)粉絲,它被看做是玩具語言,更適合那些剛開始學(xué)習(xí)編程的人,更不可能出現(xiàn)在“全球最大同性交友網(wǎng)站”Github上。
但其實(shí)在野外,很多專業(yè)應(yīng)用程序都是用Visual Basic編寫的,它依然在為Access數(shù)據(jù)庫和古老的ASP網(wǎng)頁供電。比如可能是美國最大的醫(yī)療軟件開發(fā)商Epic Systems 仍然大量使用 VB 6.0,很多學(xué)校也在堅(jiān)持教授VB課程 。在一份TIOBE公布的2018年編程語言排行榜中,VB的流行指數(shù)高居TOP5。
當(dāng)然,這份榜單之于VB,更像是一種“回光返照”。
盡管有不少程序猿“口嫌體正直”地眷戀著VB,但它其實(shí)已經(jīng)回天乏術(shù),根本不可能在強(qiáng)手如林的新時(shí)代里硬核起來。
原因很簡單,學(xué)習(xí)編程已經(jīng)和學(xué)習(xí)英語一樣低齡化了,從幼兒園到大學(xué)培訓(xùn)班,首選總是Python這個(gè)距離人工智能最近的編程語言。失去了強(qiáng)大后援團(tuán)的VB,“退團(tuán)”幾乎不可避免。
而站在計(jì)算機(jī)語言的發(fā)展歷程上,回顧這位28歲、曾經(jīng)是世界上最受歡迎的語言所走過的“花路”,也格外有意思。
VB與它開啟的圖形視覺時(shí)代
“VB”只是一個(gè)膾炙人口的昵稱,實(shí)際上它名字叫Visual,本姓是“Basic”。
1964年,John Kemeny 和 Thomas Kurtz覺得編程太難了,需要回歸本源,所以把自己設(shè)計(jì)的編程語言叫做BASIC,后來成為計(jì)算技術(shù)發(fā)展歷史上應(yīng)用得最為廣泛的語言。而VB因?yàn)樵跉赓|(zhì)上和BASIC很相似(都很簡單易用),而被微軟相中收養(yǎng)了它。1981年,微軟 “親生閨女”Windows3.0“出道”的同時(shí),VB也一起露面了。
“Visual” 則恰如其分地反映了VB得天獨(dú)厚的動手能力,那就是開發(fā)圖形用戶界面。開發(fā)人員通過在窗口繪制按鈕來為程序創(chuàng)建按鈕,就像是在畫布上作畫一樣。要讓一個(gè)按鈕做一些事情,只需要在設(shè)計(jì)環(huán)境中雙擊它并編寫一些代碼就可以了。
聽起來似乎沒什么了不起?要理解VB的特別之處,恐怕還要從機(jī)器語言的發(fā)展說起。
我們都知道,計(jì)算機(jī)世界是由數(shù)字1和0組成的。CPU 只能執(zhí)行二進(jìn)制代碼,無論是一部電影、一首歌曲還是一張圖片,最終都是以 0/1 代碼來存儲的。但是,用0/1編寫機(jī)器語言很麻煩,即使專業(yè)人士也不好理解。
所以,很快出現(xiàn)了匯編語言,將枯燥抽象的二進(jìn)制數(shù)字指令轉(zhuǎn)化成英文單詞。
比如說,“add 1, 2;”,意思就是讓計(jì)算機(jī)完成1 和 2 相加的動作。再通過專門的軟件(編譯器),就可以將這些英文單詞轉(zhuǎn)化成 0/1 代碼并由計(jì)算機(jī)執(zhí)行。一代開發(fā)人員的集體記憶,就是在藍(lán)色的背景下敲打白色的代碼。
這時(shí)候,編程依然是一個(gè)與普通人有著“次元壁”的異世界。
而友好的VB代碼讓編程游戲發(fā)生了變化,將開發(fā)這件事進(jìn)化到了一個(gè)按鈕和點(diǎn)擊就能實(shí)現(xiàn)的“所見即所得”的圖形世界。
當(dāng)時(shí),VB有多火呢?這么說吧,對“證多不壓身”的大學(xué)生來說,計(jì)算機(jī)二級幾乎人手一個(gè),其中很多人都會選擇VB,哪怕是毫無基礎(chǔ)的文科生也能輕松理解并用它設(shè)計(jì)一些小玩意兒。
對于初學(xué)者來說,VB是一個(gè)非常友好的畫面,隨著能力不斷提升,VB逐漸發(fā)展成了一個(gè)對嚴(yán)肅的程序員來說足夠強(qiáng)大的工具。據(jù)統(tǒng)計(jì),在VB中編寫代碼的次數(shù)比C 語言多十倍。VB通過另一種非常流行的技術(shù)ASP(ActiveServerPages)進(jìn)入公司辦公室甚至網(wǎng)絡(luò)。
但是,隨著互聯(lián)網(wǎng)業(yè)務(wù)的發(fā)展,微軟下定決心要推廣Web服務(wù)功能,而這項(xiàng)功能受Java的影響比較大,所以微軟不得不在VB十歲的時(shí)候,領(lǐng)回來了一個(gè)新的“養(yǎng)女”。VB的粉絲們“一朝回到解放前”,必須和那些官方專業(yè)程序員一樣,從0開始編寫代碼。
2002年的時(shí)候,VB不得不主動“轉(zhuǎn)型”,引入了新的核心.NET Framework,并更名為Visual Basic .NET。在.NET世界中,VB代碼的每一行都可以轉(zhuǎn)換為等效的C代碼行,反之亦然。盡管做了如許改變,VB始終難逃過氣的命運(yùn)。
2008年4月,微軟正式宣布停止對經(jīng)典VB的支持。而國內(nèi),NOIP等信息奧賽在2005年就將BASIC語言移出可使用項(xiàng),少有專業(yè)編程人員會把VB寫進(jìn)簡歷。浙江省信息技術(shù)課程改革方案中,則將信息技術(shù)教材編程語言從 VB更換為Python。
有人也許會問,VB到底做錯(cuò)了什么你要拋棄他?其實(shí),這與諾基亞賣身微軟的故事如出一轍——“我們并沒有做錯(cuò)什么,但不知為什么,我們輸了?!?/p>
VB衰落的三步曲
從 1951 年至今,人們一共發(fā)明了200多種編程語言,并且還在不斷地革新。所以一門語言的興替,也許并不是什么太重要的事情。不過其中也有著不少參考意義。
龐加萊曾說,如果我們想要預(yù)見數(shù)學(xué)的將來,適當(dāng)?shù)耐緩绞茄芯窟@門科學(xué)的歷史和現(xiàn)狀。計(jì)算機(jī)語言亦然。
那么,與虎視眈眈的C/C 、Java、Python等相比,VB到底欠缺了什么呢?
首先,經(jīng)典VB的真正問題是它太成功了。
VB的學(xué)習(xí)曲線實(shí)在太平滑,即使不是一個(gè)訓(xùn)練有素的編碼員,也可以無障礙上手。正是因因此,也吸引來了大量的業(yè)余編碼者,粗心的新手、無聊的公司職員、暑期班學(xué)生等等,他們到處噴射面條式代碼(spaghetti code),寫出來的程序如同一碗意大利面一樣扭曲和糾結(jié),而VB并沒有辦法去改掉他們的壞習(xí)慣,只能眼看著開發(fā)生態(tài)越來越復(fù)雜和難以維護(hù)。
其次,其他語言也在進(jìn)化。
嚴(yán)肅的開發(fā)者們都知道.NET的關(guān)鍵部分是用C語言編寫的, C#等語言正在變得和VB一樣足夠簡單和安全,并在演示、書籍、課程和開發(fā)人員研討會上日益占據(jù)主流。市面上也擠滿了針對幼兒和初學(xué)者的圖形編程工具,比如Scratch。
既然VB.net和C具有相同的功能,使用相同的組件,并編譯成完全相同的形式,為什么不選擇C呢?突然之間, VB簡單易用的優(yōu)點(diǎn)就不再是什么特別的東西了。
(2018年美國熱門編程語言Top10)
所以,最終令VB走向末路的,還是開發(fā)生態(tài)的萎縮。
VB曾經(jīng)占據(jù)了中學(xué)生信息技術(shù)教科書很多年,但越來越多的開發(fā)者和高校,開始將入門課程改成了其他計(jì)算機(jī)語言。比如MIT和UC Berkeley的計(jì)算機(jī)系就將入門語言改成了Python。一些明星互聯(lián)網(wǎng)公司Youtube、Instagram、Reddit等等,核心業(yè)務(wù)也都是基于Python開發(fā)的。
示范效應(yīng)之下,大量其他行業(yè)的人,自然也會選擇用其他語言進(jìn)入編程世界。比如我們能遇到會Python的醫(yī)生,學(xué)過Scratch的孩子,或者是在開發(fā)社區(qū)輕松獲得開源代碼的新手開發(fā)者。雖然VB依然可以用來構(gòu)建應(yīng)用程序,但再探討它,就會與其他開發(fā)人員顯得格格不入。
繁榮了十幾年之后,門庭冷落鞍馬稀的VB,注定成為一個(gè)沒有激情和未來的遺留產(chǎn)品。
未來的編程語言會是什么樣?
回顧計(jì)算機(jī)語言的發(fā)展史會發(fā)現(xiàn), 70年代計(jì)算機(jī)被用來處理不同類型的事務(wù),于是出現(xiàn)了許多各有特色的語言,比如結(jié)構(gòu)化的Pascal,結(jié)合了高級語言與匯編語言特點(diǎn)的C,做邏輯學(xué)研究的Prolog……
計(jì)算機(jī)性能的提升,互聯(lián)網(wǎng)的興起,又催生了PHP、Java、JavaScript、VB、Python、HTML等的出現(xiàn)。后來,更高計(jì)算量的元編程、異構(gòu)編程也被支持了,C#、Swift等開始流行。到了人工智能時(shí)代,跨平臺、全能但不專精、擅長處理統(tǒng)計(jì)相關(guān)問題的Python又成了第一開發(fā)語言。
總體來看,一種編程語言的走紅,就像“流量偶像”也并不是各個(gè)業(yè)務(wù)能力都很強(qiáng)一樣,側(cè)重點(diǎn)各有不同,行業(yè)需求、學(xué)習(xí)曲線、運(yùn)行成本等多重因素決定了,程序猿們還要繼續(xù)為誰站C位而掐到頭禿。
當(dāng)然,這對普通大眾來說都不是事兒。我們關(guān)注的,是主流編程語言的更迭都帶來了哪些影響?有幾點(diǎn)是比較值得注意的:
1.低門檻的生產(chǎn)工具。過去,計(jì)算機(jī)教育一直強(qiáng)調(diào)的是“語言一通百通”“重要的是思想”“優(yōu)雅簡潔的代碼”等等,但隨著編程語言越來越簡單易用,成為一種低門檻的生產(chǎn)工具已經(jīng)是不可阻擋的潮流了。
在MOOC、Coursera、某某AI大學(xué)之類的培訓(xùn)網(wǎng)站上,遍布了用Python識別蘋果的農(nóng)民、用Python分析蝴蝶種類的生物學(xué)家、訓(xùn)練神經(jīng)網(wǎng)絡(luò)的中學(xué)生……防止大眾開發(fā)者的加入而重蹈VB面條式代碼的覆轍,可能需要現(xiàn)在就未雨綢繆。
2.圖形化編程與代碼編程的悖論。圖形化總是對新手最友好的入門方式,能極大地減輕代碼所帶來的挫敗感。筆者剛進(jìn)入大學(xué)時(shí),是從VB開始接觸了計(jì)算機(jī)編程語言,而后過渡到了C等更加抽象的代碼。兒童編程也是如此,有調(diào)查顯示,在使用Scratch(一種圖形編程)幾年后,學(xué)生們會更愿意去嘗試代碼編程。
但是,大眾眼中“真正的編程”——代碼編程正在日益低齡化,從程序員圈子到高考內(nèi)容再到幼兒園教材,Python已經(jīng)切切實(shí)實(shí)地實(shí)現(xiàn)了從娃娃抓起。對于這種填鴨式的流行趨勢,亞馬遜AWS主任科學(xué)家李沐就曾調(diào)侃道:我家娃一歲就開始讀paper,現(xiàn)在已經(jīng)可以熟練敲鍵盤寫mxnet代碼。一家keras4kindergartners的網(wǎng)站也在網(wǎng)站上打出了“如果你愛你的孩子,不要在他們沒學(xué)會反向傳播之前就把他們送進(jìn)小學(xué)”的嘲諷廣告。
數(shù)十年的發(fā)展已經(jīng)證明了,我們最需要的編程語言,始終是可以讓人毫不費(fèi)力地寫出第一版程序的語言,而不是看起來有多么炫酷和特別。
3.高并發(fā)改變了編程邏輯。傳統(tǒng)的編程思維,是在單個(gè)CPU上執(zhí)行多個(gè)邏輯任務(wù),如今的多核異構(gòu)計(jì)算則是一個(gè)邏輯上的任務(wù)放在多個(gè)計(jì)算單元上進(jìn)行。而且,代碼也變得越來越簡潔,比如用C語言需要1000行代碼的程序,Python可能只需要20行就能完成,性能大大提升。這一方面讓開發(fā)者擁有了更高的自由度,釋放自己的創(chuàng)造力;同時(shí),也對理解任務(wù)邏輯、合理分解任務(wù)的能力提出了更高的要求。
顯然,這世界并不存在什么“完美”和不朽的編程語言,如果非說有什么共性的話,那么只有“那些內(nèi)核最小、最干凈的編程語言才會存在于進(jìn)化的竹竿上?!逼渌麩o論學(xué)什么都有可能像鳳梨罐頭一樣過期。
現(xiàn)在回顧起來,VB的興衰正折射著Web時(shí)代的余暉,也代表了計(jì)算機(jī)科學(xué)在編程領(lǐng)域上的進(jìn)步。當(dāng)專業(yè)程序員手中的“屠龍寶刀”,普通人也可以“點(diǎn)擊就送”,數(shù)字時(shí)代才算真正揭開帷幕。
更多精彩內(nèi)容,關(guān)注鈦媒體微信號(ID:taimeiti),或者下載鈦媒體App