孫悟空,.NET和Web爭霸

語言: CN / TW / HK

小李飛刀李尋歡的孫子叫李壞,世間絕頂高手。但在一個夜晚,他痴痴地看著一把飛刀像一道美妙的月光插進自己的左胸。—-《飛刀又見飛刀》

有個叫FireMonkey的東東實現過類似方舟的理念,而且Win/Mac/iOS/Android統統支援。 這個可以翻譯成“孫悟空”的玩意兒,正是現在Delphi的一部分。

從Windows 11看,微軟除了支援傳統的Win32、.NET程式外,還支援Web程式PWA和安卓App 。再看最新發布的Windows365,整個作業系統都可以作為SaaS在瀏覽器裡跑。

各種平臺的邊界開始變得模糊,硬體架構的鴻溝逐漸被各種編譯器翻譯器填平。

本文按慣例扯亂一點,順便續寫一下《程式設計師之神》( 連結 ),即Anders Hejlsberg以外的那些諸神故事。閱讀下去的前提,是知道Anders是誰,那個程式碼飛刀例不虛發的神。“孫悟空”的事兒,我們在文章後面再聊。

一、Delphi從崛起到衰落

很多人說Anders離開是Borland衰落的原因,但這絕對是誇大了。重量級的Delphi3研發,Anders並未主要參與。Anders在Delphi釋出一年後的1996年就去微軟了,Delphi由其最重要的戰友Chuck Jazdzewski領導到2004年,所以Chuck應該算第一功臣。

從1995年以後的七八年時間,Delphi一直給微軟Visual Studio強大的壓力。張小龍也在那期間用Delphi開發Foxmail一戰揚名,後來他用Web技術做了郵箱、微信、還有小程式和諸神匯合,我們暫且不表。有個小八卦的是,據說“Fox”是致敬令狐沖。

微軟Windows的新版本總是給Borland沉重打擊。如同OLE導致Borland C++敗北,.NET使得Delphi跟不上腳步,畢竟Borland沒有那麼多資源做複雜的升級。

尤其在那時,Java的重要性已經明顯超過了Windows原生程式開發,Delphi在Borland內部逐漸失寵。

二、Blake、Chuck和Danny(BCD)

上世紀末,Borland集中火力在JBuilder上,立Java奇才Blake Stone為CTO,據說這導致了Chuck離職去微軟。Danny Thorpe接管了Delphi任總架構師。

Danny本身是個勵志故事。他加入Borland時只是個助理測試員而且做了5年測試,但很幸運他是給Anders和Chuck做測試。

這告訴我們崗位不重要,和誰在一起更重要。

喜歡自己燒瓷碗的Danny說自己在Delphi 5的時候才開始去看編譯器,傳說那時沒人敢動Anders的程式碼。而Chuck的早期主要工作是VCL元件,“元件”正是Delphi震動天下的殺器,也引發了後來Java、C#等後來開發工具的模仿。

三、從JBuilder到VS Code

得益於Blake Stone的勇氣,JBuilder相當於是用Java重寫的Delphi,這使Java程式更純正相容。在微軟Visual J++提前出局的情況下,Borland JBuilder不負所望擊敗了幾乎所有對手,包括IBM VisualAge for Java。

在2001年IBM接受了失敗,把VisualAge for Java轉給開源的Eclipse。一位遠在瑞士的軟體工程神級人物Erich Gamma加入了Eclipse團隊,隨後翻盤戰勝了JBuilder。

聰明的微軟挖走了Blake Stone,無心戀戰的Borland隨後賣掉了IDE產品線。

遠在捷克的IntelliJ趁機靠著專注於不斷優化IDEA等產品走出商業IDE的成功之路。IntelliJ(現在叫JetBrains)是三個俄羅斯程式設計師在網際網路泡沫破滅時建立的。厲害的是,這幾位創始人一直拒絕外部投資和上市,這使他們避免了Borland的覆轍。

財大氣粗的微軟再從IBM把Erich Gamma挖走(湊齊了ABCDE五顆龍珠?),而且許諾Erich仍在瑞士工作而且自建團隊。Erich則再次完成了自我顛覆,用Web技術(Electron)為基礎打造出另一神作VS Code。

我們以前提到過貝索斯允許Chris Pinkham在南非工作做出AWS EC2,Anders遠在丹麥給Philippe Kahn工作,加上張小龍保持和Pony Ma的距離。這些故事告訴我們:如果你真心牛,可以勇敢要求老闆讓你夏天在麗江、冬天在三亞工作。

四、Web再聚首

VS Code的設計思想完全和Visual Studio不同,Web技術驅動是其核心,我們也能看到Web技術成為開發工具大神們再次碰撞的競技場。

Chuck和Danny加入微軟後在Windows Live團隊合作過,但微軟社交產品並不成功,兩人後來又離開了。

Chuck目前在Google工作,在轉到安卓前端做Jetpack Compose之前,Chuck參與的工作居然是和Anders的TypeScript配合打造Angular 2。

Angular反過來也促進了TypeScript的發展。

Angular的競爭對手是Facebook陣營的React和後來以中國陣營為主的Vue。加上VS Code,程式設計師的大神們再次聚首。

Vue的作者尤雨溪也出身Google。他是一個閃耀的例子,顯示了中國強大以後,在新一代衣食無憂的情況下,也會像歐洲那樣產生因愛好而在程式設計界封神的情況。

五、Borland為什麼失敗

Borland的ABCD四位大神都被微軟挖走,Delphi也最終被賣掉。

Danny在Quora上曾經回答Borland為什麼會失敗:他認為Borland的管理層想從百萬量級的程式設計師客戶轉到少數量高收入的企業級客戶,方向上出了問題。而Borland被董事會踢出局的傳奇創始人Philippe Kahn點了贊,Kahn認為Borland應該把目標放到億萬使用者的桌面應用上。

Kahn出身是逃到法國的猶太家庭,他到美國淘金時沒綠卡也沒工作(相當於半非法移民),就自己開了公司僱了自己。Kahn在瑞士ETH上大學時老師是Pascal語言的發明人Niklaus Wirth,這使他對Anders的Pascal編譯器慧眼識珠。

Kahn是最早採用高質量軟體定價很便宜策略的企業家,Borland的產品大都是迅速搶佔了市場。在Delphi誕生前,Borland曾在多個戰線和巨頭們開戰。

Borland的dBase資料庫直接挑戰微軟的Access和ForPro。Borland的Quattro Pro和Lotus 1-2-3的法律大戰直打到聯邦最高法院並罕見地4:4戰平,結果微軟的Excel漁翁得利。

作為曾經單挑比爾蓋茨的一代梟雄,Kahn此後仍執著於觸達終端使用者的應用而與Web漸行漸遠,乃至流於平庸。

六、孫悟空和Xamarin

Borland把Delphi等開發工具賣給Embarcadero以後,新主人在隨後十三年居然做到了一年一更新。

十年前的Delphi XE2中開始出現了FireMonkey(孫悟空),它實現原生程式碼的跨平臺,就是用一套Pascal程式碼編譯就可以在蘋果和安卓甚至Windows上跑。但每一個App都要內嵌一套FireMonkey runtime。

FireMonkey和方舟一樣證明了靜態編譯在技術上是可行的。但是FireMonkey是否能靈活對付不同的螢幕尺寸和各種相容性問題,甚至靜態編譯是否有意義,仍是充滿爭議的。方舟倒是有個FireMonkey無法具備的優勢,就是可以提前把runtime內建到鴻蒙裡,這樣啟動App速度能快很多。

微軟為了讓.NET可以侵入安卓、iOS包括Linux等,有個有點像FireMonkey的東西叫Xamarin。用這個東西不需要會Java,只要會C#也能編安卓App。Xamarin和FireMonkey或者方舟的區別在於,它更像個即時語言翻譯器。

Xamarin由Nat Friedman和一個墨西哥兄弟Miguel de Icaza搞的,之前叫Mono。這倆老兄也不是一般人,Nat Friedman目前是GitHub的CEO;Miguel是大名鼎鼎的GNOME的創始人之一,而在2014年Anders宣佈.NET Core開源時,Miguel就站在旁邊,並受任.NET基金會第一任董事。

(去年Delphi 25週年慶的時候,Delphi的幾位原創和現在Delphi的負責人有過一次網路歡聚。Chuck(左一)和Anders(右一)等幾位超過50歲還在寫程式碼的老人一起開心地回憶了激情燃燒的歲月。)

七、融合

天下大勢合久必分,分久必合。在多種語言多種平臺百花齊放後,Web技術逐漸眾神匯聚的地方,也給我們帶來更多的細分領域:PWA、AMP、SPA、WebAssembly...

尤其WebAssembly,由於實現速度在數量級上的提升,逐步侵入原本認為不可能的領域,讓瀏覽器成為一切的中心成為可能。

Web技術在手機App的使用也是現在的很多人爭論的話題。 Web技術天生是開放的,但原生App效能好,更重要是可以很流氓,更容易控制權限和流量。

現階段原生和Web App誰也殺不死誰,很多Web  App套上原生的殼,互相融合互相欺騙。

八、小結

在這篇文章裡,我們提到了丹麥人、瑞士人、法國人、南非人、墨西哥人、俄羅斯人、當然還有中國人 。對軟體史沒有興趣的朋友,估計對這些名字已經痛苦不堪。

碼農的生活有點像多神教:學不完的經書,拜不完的眾神。

Delphi像中了飛刀的李壞,他沒有死,但江湖裡再沒人提他的名字。