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