對話 Eclipse 之父、《設計模式》作者 Erich Gamma

2016 年 6 月 1 日,北京香格里拉飯店,微軟中國開發者峯會上,我見到了 VS Code 的負責人,當時的微軟傑出工程師 Erich Gamma,那個時候,他更負盛名其實還是因爲 Eclipse 和《設計模式》,他非常地 Nice,隨身帶了很多 VS Code 的貼紙,給我分享了很多,並眉飛色舞地演示着說可以貼在腦門上。如今 4 年過去了,每每回憶起這段採訪時,總會不由陷入思考,有些話當時沒有充分理解,而後卻意味悠長。在此分享對話全文。

微軟在開源領域的一些舉措和看法

Erich Gamma: 開源的發展速度非常驚人,尤其是微軟。五年前談到開源的時候,整個 Windows 沒有什麼開源的東西。這五年來我們發生了很大的變化,現在微軟內部也有了很多流程與方法,能夠讓我們的工程團隊去使用開源。

五年前,我們的律師一聽到開源,第一反應就說“NO”,但現在律師也在幫助我們更好地往開源上做努力了。我們知道開源領域有很多爭議,特別是 License 的部分,有些“License”也許存在一些灰色地帶。然而在微軟,我們的工程部門和法律部門都在幫助我們更加合規地做開源項目,比如 GPL。現在,在他們的幫助下,我們能夠清楚地瞭解哪些東西是我們能夠用的。

雖然是開源,但事實上對微軟對我們所提供的開源元件是負責任的。微軟對開源技術的應用橫跨多個不同的產品線。我們內部對整個開源的元件都做了詳細的記錄,來幫助開發者和產品團隊,讓他們避免陷入到一些 License 問題裏。我們很多開源的元件都有數據庫去記錄它用在哪個產品裏,能夠實現正向和反向的追蹤。比如有的開源的元件造成一些問題,我們可以很清楚地對相關產品進行迅速準確的修正。

大家都非常清楚開源能夠帶來的利益,但是要從閉源走向開源,其實背後必須花費相當大的投入才能做到剛剛所說的完整性。雖然我們付出了很多的努力,但微軟開源之後,確實得到了來自業界和社區的認可。

微軟愛開源,不只是說我們今天用了很多開源的東西,事實上我們也做了非常多的貢獻。就像是給和拿的關係,這也是一個很重要變化。我們不僅有完整的流程去使用現在的開源技術,也有完善的過程把我們開源的東西開放出來給別人使用。

另一個值得慶幸的是,透過開源這樣一個合作機制,比如我們把東西放在 GitHub 上,可能跟另一個公司在產品研發上進行更爲密切的合作。公司之間因爲開源的分享、給和拿的機制,合作關係更爲緊密。我們的工程團隊也幫助某些公司去做黑客鬆,幫助他們運用微軟的開源技術進行改進和創新。(例如:微軟全球開發平臺事業部,協助網易公司,採用開源的.NET CODE 平臺,進行新一代的手遊產品開發,獲得更好的效能與更低的開發成本)

  • NET Core 的跨平臺特性讓.NET 框架得以運行於 Linux 系統環境中,因此可以在跨平臺開發場景中,實現前後端的開發一致性,提升開發效率。

  • 網易遊戲最新推出的移動遊戲《絕代雙驕 OL》在開發過程中即得到了.NET Core 的支持。這款遊戲採用了同樣是.NET 基金會成員的 Unity 引擎開發,並通過.NET Core 框架實現了在網易 Linux 服務器平臺上的順暢運行。以前,用 C#語言開發的遊戲要在 Linux 服務器上運行,需要大量的轉換工作來實現前後端的對接。而現在,.NET Core 直接實現了前後端的一致性開發,從而將人員和時間減少了 30%,而且其單服務器支持 1 萬人同時在線遊戲的性能,也很好地滿足了遊戲運行的需求。

所以當整個走向開源之後,我們的生意可以持續不斷地得到夥伴和客戶的支持,我們能夠持續跟蹤,這是我們持續改進的很重要的基礎。這是從我的觀點出發,微軟從閉源走向開源的過程中,我們付出的努力,我們得到的收穫,以及我們自己也覺得很棒的合作模式。

但是,開源並不是想做就能做到的。 對一般的企業我的建議是,你必須有一個完善的計劃——如何選擇哪些元件,針對每個元件的版本管理與集成測試,以及這些元件背後合規相關事宜。如果不能做到這些,那麼大規模採用開源是一個非常有風險的事情。

微軟都用了哪些開源的技術?

Erich Gamma: 在我自己所帶領的項目 Visual Studio Code 裏,就至少用了 1500 個開源的元件。這 1500 個元件裏 90%是非常小的元件,包括 Node, Modules….很容易讓我們的項目去使用。其中最大的元件是來自於谷歌的“Chromium Browser Support”的元件。谷歌是我們的競爭對手,但開源項目上最近又有很多合作。在開源項目裏競爭和合作是非常有趣的,看起來公司間的業務是競爭關係,但在技術層面因爲開源的關係,造成了這種合作的情形,也意味着在新的開源技術領域裏,我們都在用對方開源的東西,但是我們搭建出來的東西在生意層面上會相互競爭。

微軟爲什麼會從最初比較封閉的態度轉變爲現在對開源的積極擁抱?

Erich Gamma:其實開源對微軟並不是新鮮事物,只是方法和心態上發生了變化。過去我們只是自己寫,自己維護我們的產品,我們是貢獻者,這並不是新的事情。現在則是我們用人家的,也告訴大家來用我們的產品。開源對我來說就是一扇門,打開了就可以接觸到更多開發者。去年微軟是排第一的 Docker 技術領域的貢獻者。我們 Azure 的 SDK 也是開源的。(Azure SDK 的代碼已經公開在 GitHub https://github.com/Azure/azure-sdk-for-net)

是什麼吸引 Erich 加入了微軟?2011年加入微軟後第一次來到中國,這是不是意味着中國開發者市場在微軟的戰略上會有些不一樣的變化?

Erich Gamma: 我 2011 年加入的時候,是因爲微軟給了我一個很吸引人的挑戰:你能不能在瀏覽器裏構建集成開發環境(IDE in Browser)。這一點對我非常有挑戰,但是又很有吸引力。別的公司可能給我一個工作,但微軟給我的是一個挑戰,所以我決定加入。

講一個非常有趣的例子,來告訴您中國開發者市場對於微軟的重要性。我可以看到全球 Visual Studio Code 的下載人數,而且會定期查看它的變化。今年 2 月,Visual Studio Code 的成長趨勢莫名其妙地下降了很多。我當時很着急,也很納悶。但我的老闆潘正磊女士(微軟全球資深副總裁)則告訴我,“下降的原因不是你的產品做得不好,而是因爲中國新年,他們在休假”。這件事也顯示出了中國的開發者有多重要。我有跟很多來自中國的開發者交往,其中有一家中國的新創公司 Egret,跟我們合作很密切,他們在 Visual Studio Code 上開發從 Flash 轉換成 HTM5 的遊戲的開發工具、引擎,受到遊戲開發者很大的歡迎。(http://www.egret.com/en/index.html)

從開源後到現在,對開發者和微軟有了什麼樣的影響?

Erich Gamma: 我看到最大的貢獻來自於效率的提升。當我們把 .Net Core 開源之後,有一大堆社區上的人幫忙看我們的代碼,給出了很多改進意見。第二個就是說因爲我們把 .Net Code 的源代碼丟出來了,很多人會希望看看能不能讓它在別的平臺上跑,現在就在做這樣的事。我們可以看到在 Linux、IOS,還有很多平臺上,很多人在嘗試能不能讓.Net 跑起來。

現在 Visual Studio Code 的編輯器操作方式和以往編輯器的操作方式似乎完全不一樣,但是和 Linux 上的工具卻類似,這是爲什麼?

Erich Gamma: 在設計階段就有這樣的考慮,因爲 Visual Studio Code 給的不是過去用 Visual Studio 的這羣人,這羣人更多是在 Mac、Linux 上做開發的。而他們要的是一個非常輕量級的,能夠符合他們快速工作的東西,而不是 Visual Studio 這種比較重的比較完整的產品。我們是從給不同人羣去用的角度出發的。一些資深的程序員更多地做解決方案的開發,他的項目有完整的內容、各種不同的東西,但對年輕的開發者,他們更有熱情,但是做一些小的輕量級東西的開發,所以他們更喜歡這樣的概念。

很多開發者是用很多不同的工具的,可能用 Visual Studio 做比較大的解決方案,但是用 Visual Studio Code 去做像 File Base 這些項目開發。這個使用行爲就像是你打開筆記本,可以編輯一個文檔,而 Visual Studio Code 就是讓你拿來編輯代碼的文檔,是文檔級別的編輯器。但是 Visual Studio 更多的是一個解決方案級別的 IDE。Visual Studio 是 IDE,Visual Studio Code 是以代碼爲中心的編輯器。如果你真的要用筆記本(notepad)去做代碼編輯會很痛苦,因爲你不知道到底字有沒有拼錯,Visual Studio Code 會很智能地幫助你分析代碼是不是拼錯了,因爲它是專門針對代碼的一個編輯器。Visual Studio Code 是我正在負責的項目,能夠幫助開源的開發者去提高他們的生產力,除了在 Windows 上,在 Mac、iOS、Linux 上都可以使用。

Visual Studio Code 和 Visual Studio 是爲了不的目的而開發的。Visual Studio 適用於開發比較大的解決方案,Visual Studio Code 則用於比較輕量級的開發,它的 Intelligence Sense 會很智能地幫助你分析代碼是不是拼錯了,以及協助你提升編程的效率。就我個人認爲,對開發者如果沒有這個東西,會受不了。

作爲設計模式的作者之一,Visual Studio Code 用到了您的哪些程序設計思想。

Erich Gamma: 即使是 JavaScript 的開發,還是有一些設計模式是可以用到的。比如事件驅動的設計模式和異步編程模式,這兩個事實上在 JavaScript 還是可以用的很好的設計模式。TypeScript 就更棒了,因爲它是“強型別”的語言,所以 TypeScript 能夠被應用於更多的設計模式當中。

TypeScript 是可以獨立於 JavaScript 的使用還是支持 JavaScript。

Erich Gamma: 每一個 TypeScript 事實上都是 JaveScript 的程序。所以等於說 TypeScript 是基於 JavaScript 的基礎所開發出來的改進的語言(Super Set),所有的語法的規範都是符合 JavaScript,彼此兼容。TypeScript 可以說是 JavaScript 在類別運用上的改進版。JavaScript 相對比較簡單,因此,它不利於大型解決方案開發的用法。所以 TypeScript 主要是讓基於 JavaScript 的大型編程更有效地去處理和開發。

剛纔在會上也聽到 TypeScript 是比 JavaScript 更安全。

Erich Gamma:效能上是沒有差別的。TypeScript 其實會翻譯成 JavaScript 執行。JavaScript 並沒有這麼多的要求,本身就是去跑,結果怎麼樣再說,但是 TypeScript 會攔截更多的錯誤信息,會有更多機會讓你捕捉這些有問題的部分,從這個角度講它是比較安全的。當它在做 TypeScript 轉換成 JavaScript 翻譯階段之間,就已經在做安全性的錯誤的捕捉,JavaScript 怎麼跑,TypeScript 出來的東西就怎麼跑,所以效能是一樣的。

JavaScript 比如我要呼叫一個功能,即使我拼錯了,JavaScript 不會告訴我錯了,但 TypeScript 會告訴我你現在呼叫了一個幽靈,不存在的東西,會攔截錯誤,更有效地幫助你做更好的代碼編寫。如果一千行,兩個沒有差別,我可能會用 JavaScript,5000 行,5 萬行甚至 35 萬行的代碼,我就完全不會考慮要用 JavaScript。

相比 JavaScript,TypeScript 在國內開發者中有疑問的是,在具體開發實踐中我們從何考證它的確擁有更好的效能?包括開發效率、穩定性等?

Erich Gamma:執行階段兩個效能是一樣的,除了 TypeScript 本身捕捉,我很有信心我開發的 Visual Studio Code 能帶來更多的幫助。對我來講已經不是幾倍的問題,你用另外的方法就可能會失敗,用我的,代碼的質量就會更好,維護的成本更低。TypeScript 可以更敏捷,最大的差別是能夠讓你重構,而 JavaScript 基本上不可能做這些事,從重構的角度來講 TypeScript 是敏捷的編程語言。總之,這不只是開發效率的問題,是你能不能做的出來、是不是具備可維護性的問題。TypeScript 是大型項目的最佳選擇,而且更安全。使用 Visual Studio Code 來開發,可以獲得更好的開發效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章