上週,C#、Delphi 之父 Anders Hejlsberg 親臨帝都,就 TypeScript 作了一場技術分享,並與衆多開發者就此進行了技術探討。Anders Hejlsberg 加入微軟的 19 年裏,一直致力於 C# 和 .NET 的研發工做。同時,做爲 TypeScript 的核心開發者和該開源項目的重要領導人物,他此次來帝都,主要也是爲 TypeScript 佈道。如下是講座主要內容。git
(Anders)你們下午好!首先我介紹一下這是我第一次到中國來,在這兒逗留的這一天令我很是高興,並且此前我也是很是激動的。今天在這會給你們介紹一下我一直在作的事情,包括你們都在談論的 TypeScript 以及相關的 Open Source 的通常性的工做。程序員
我作軟件開發工具已經有 35 年的時間了,並且編寫了不一樣語言的編程。之前都是專有的源,是封閉式的,如今我看到它有更新的變化,有一些新的方法論。github
首先咱們來看一下相關的背景。RedMonk 在上個季度剛剛發出的報告,JavaScript 在 GitHub 和 StackOverflow 被說起的次數排名都很靠前,和之前比有顯著的上升。我以爲這裏面有一些比較重要的緣由。首先,JavaScript 是真正跨平臺的語言。之前的語言,如 Java,其實如今都不算是(跨平臺語言)了。另外,JavaScript 的性能近年來有 10~100 倍的飛速提高,它一個語言就能夠在全部的層面上編程,這個是很是不同的地方。好比這兩年的 Node.js,還有移動端 ReactNative、NativeScript 等等,均可以用它來編寫。在不一樣層面使用同一個語言開發,避免了學習不少新的東西。編程
其次,如今 JavaScript 已經被 ECMAScript 標準化了。今年已經出到第六版的標準,看起來很是雄心勃勃,由於他們的目的是爲了解決 JavaScript 的一些遺留問題,並且另外添加一些新的模塊、class 等等。如今第六版的標準我以爲有不少東西是很是有意思的,像 Mondule、Class、Arrow Function 等,JavaScript 的核心實際就是這樣的。首先它是動態的,是兩個家族系列(Dynamic 和 Static),對動態的界定是它不須要編譯,直接打印就能夠了,靜態的是要求你靜態地進行編譯。咱們能夠分別來看一下動態和靜態之間都各有什麼優勢?優勢你們都知道就是它很是簡化,可讓你直接上手工做,並且能夠互動不須要編程,並且很是容易。靜態的這塊更可能是強調修正一些錯誤,強調性能升級還有更好的工具。實際上現實來說是說動態的和靜態的都各有所長,並且咱們二者都須要有。segmentfault
大概是 5 年前咱們的客戶包括本身內部的團隊就跟咱們說,他們在寫大的 JavaScript 代碼時會遇到一些問題,因此咱們想,怎麼作才能增強 JavaScript 代碼,讓其強的更強,同時不破壞和損壞既有的價值。這就致使了咱們如今所說的 TypeScript 的出現——實際上它是 JavaScript 的超級集合,把二者(動態的、靜態的)最好的東西都集合在一塊兒。這樣實際上帶來了兩個好處,一個是咱們在這上面添加了靜態的,這樣就有更加好的工具,還有一個好處在於你能夠如今獲取將來纔有的一些相關的屬性,能夠在任何瀏覽器、任何的託管主機和操做系統中使用,並且它整個都是開源的,這纔是跨平臺的。(ECMAScript6 實際上在 5 年以後有了很是大的、多的 browser 部署才行)後端
……瀏覽器
以上是 Anders Hejlsberg 關於 TypeScript 基本的介紹。接下來是圓桌對話,是進一步的深刻了解。圓桌對話由 SegmentFault CTO 祁寧、LeanCloud CEO 江宏以及雲適配 CTO 馬鐸共同參與。網絡
江宏:你們好,我是 LeanCloud 的江宏。LeanCloud 是移動應用的後端雲服務。我是很小的時候學編程時就開始使用 Anders 創造的 Turbo Pascal,直到後來的 Delphi。今天很高興有機會跟大師一塊兒交流。剛纔 Anders 介紹了 TypeScript,那麼我就以一個這方面的問題開場吧。TypeScript 在 JavaScript 之上加了 class,而據我所知,不少 JavaScript 程序員,包括一些很優秀的程序員,都對在 JavaScript 裏模擬 class 有強烈的反感。除了宗教緣由之外,你以爲從技術上看 class 和 prototype 有優劣之分嗎?異步
Anders Hejlsberg:你的這個問題很是好,JavaScript 沒有 class,因此有一些習慣於 class 的開發者認爲不大好用,而加上 class 也是由於有一部分的開發者是要用這樣的東西。從 TypeScript 的 compiler 來說,JavaScript 原有的 function、closure、prototype 都不受影響。對我來講,我認爲它是中性的,你能夠用這個也能夠用那個,有兩種方法來開發。編程語言
馬鐸:我瞭解 Anders Hejlsberg 先生的技術有十來年,他在開發界裏面名氣很大,可談論的問題是很是多,但如今咱們把問題回到 TypeScript 上,我想到一個問題,TypeScript 這種語言這麼靈活,那麼我想提的問題是,在靈活與規範化之間,TypeScript 是如何作好平衡的,這是否是 TypeScript 設計之初作的主要的考慮?
Anders Hejlsberg:TypeScript 做爲一個語言來說,技術上是很是有意思的。它有一個 GridView (77:21) Type 或者是 (77:22) Type 這樣的東西能夠用,若是這樣用的話就能夠查。若是不寫類型的時候,實際上就至關於 JavaScript,問題是你怎麼來寫類型,傳統上來說編程的語言就是兩個,一個是靜態、一個是動態的,或者是 DodeType,全部的都是用靜態類型來寫的,因此你能夠選用哪種形式的類型。
祁寧:TypeScript 和 ECMAScript 的關係會是怎樣的?若是之後 ECMAScript 支持了愈來愈多的 TypeScript 裏的新特性,咱們還須要 TypeScript 嗎?
Anders Hejlsberg:我想就這個問題說兩件事,首先是對於剛纔提到的 ECMAScript6 的標準化,咱們是很是致力於這個工做的,它就是微軟的,咱們也不是但願要把這個語言變成一個徹底不一樣的東西。另外,它實際上有一些核心的東西,一個是 TypeScript 從靜態類型提供了一個更好的工具,同時在編碼的時候咱們把它叫作 Downlevel,我以爲多是更簡化的意思。另外 ECMAScript6 標準化的時候是在不斷地演變的,但我並不認爲這個標準化有靜態類型的系統,以後 6 還會有新版本,而如今的 browser 是不會支持它的。
祁寧:咱們知道微軟在開源社區中一直頗受微辭,它也有一些頗受詬病的傳統,那麼如今的微軟真的走向開放了嗎?
Anders Hejlsberg:有關你提的問題應該更多地看一下咱們的行動,大家有本身的評判。若是看一下咱們所謂工做的流程還有整個的開源社區對這個工做的深度的介入,還有包括 Google 已經在寫 Angular 2,並且是在 TypeScript 上寫的,這些是事實勝於雄辯的。咱們微軟也是在變的過程當中,在這個過程當中咱們也學習了不少的東西。
江宏:程序設計語言在過去幾十年裏經歷了一個演化過程。GUI 和桌面程序催生了面向對象的語言,多核處理器和對平行計算的需求讓函數式語言再次流行起來,同時也讓 Erlang、Go 等一些新的語言出現。您認爲下一個新的語言是什麼樣的,讓它出現的動機會是什麼?
Anders Hejlsberg:有關這點其實很難說將來會出現什麼新的語言的類型,但我能夠說一下哪些事情或者是因素影響了如今的工做,好比說咱們說的函數式的語言,這個對不少其餘的東西來說都是很是可以帶來靈感的源泉。由於函數式語言有了 C# 裏的不少特性,固然微軟也有本身的函數式語言 F#。另外移動應用還有云等等都影響了如今的不少工做,他們要求系統之間能夠進行網絡通信,可以容忍延遲,因此有了異步的編程。ECMAScript6 的標準以後會是 7,但編程的模型也是會繼續向前演進的,但是編程語言的演進是很是緩慢的,由於它不是基於硬件的演變,而更可能是涉及到人方面的因素。咱們也知道在過去的 30 多年裏,人大腦的尺寸沒有發生太多的變化,所以編程語言方面它的演進是很是慢的。
馬鐸:我這有兩個小問題想請教一下,第一是關於 TypeScript 的開源以及微軟開源的事情,但這個問題其實能夠不用問了,由於我也是一個 TypeScript 的使用者,關於開源這塊其實已經有答案了。第二個問題是 TypeScript 如今發展的一種情況,我想聽聽 Anders Hejlsberg 先生在全球範圍內以及在中國的 TypeScript 發展的情況是否是跟你所想象的同樣,是好仍是很差?
Anders Hejlsberg:有關這個問題我認爲 TypeScript 在過去一年半的時間裏是經歷了很是很是快速的或者是不少輪的增加,如今咱們看到了 Angular 2 還有 Google 也加入了,自從他們加入了以來又有了更大的增加。另外,從每月有關這個下載的相關應用來說,也是超過了 5000 萬。再有,看到社區也是很是很是熱鬧的,由於他們如今在 GitHub 上工做了一年半的時間了,這裏面有不少相關的問題,這說明在過去的一年半時間裏確定是有不少相關的問題和使用。咱們看到了它的發展。TypeScript 在不少會議上或者是用戶集團會議上都是有不少使用的。
祁寧:咱們知道這是您第一次來中國,您對中國的開發者印象如何?您能從您本身的經歷中爲這些年輕人提出建議嗎?
Anders Hejlsberg:首先,我以爲這是我第一次來中國,這個經歷令我很是激動。另外和當地開發者社區有一些互動,另外咱們看到了整個的開發者社區熱情也是很是大的,因此這些對咱們來講都是很是震撼的,另外咱們也在微軟本地的研究看了相關的項目,我發現也是特別棒的,不少東西很是務實、很是有用、很是有意思,其中不少東西我都想把它放在咱們最終的產品裏。
再有,其實我很難給你們一些相關的建議,對我來講編程的工做應該是你們都富有熱情的來作的,由於我在上學的時候就開始接觸這個工做,當時我的電腦都沒有,什麼東西都得從頭學起,但我就是想學,誰也不能阻止我,並非說我但願獲得更高的薪酬,我徹底是憑熱情。我很是幸運個人愛好和工做是結合在一塊兒的,但不是人人都像我這麼幸運,最重要的是你要找到你的熱情所在,而這個又能帶給你快樂,這就是帶來更好的工做成就,若是你面臨一個選擇,一方面是工做能多給你錢,另外一方面是你很熱愛的,這樣的話才能工做得很是帶勁,你也可以成長,同時也能學到很是多的東西。
江宏:您在微軟多半是有某些管理職責的,無論是對人仍是對項目,請問您是怎麼平衡對於技術工做的熱情和本身的其餘職責的?我相信不少技術人都會有這個問題。好比我以前在 Google 工做的時候不少工程師遇到這個問題。後來創業,不少技術出身的創業者也遇到這個問題。
Anders Hejlsberg:這個問題相對來講比較好回答,我是自主選擇作技術方面的工做,實際上我無論人,也沒有人向我彙報,但在技術方面我負的責任是很是大的。由於對個人工做描述是我必需要創做出在全球開發者社區都很是有影響的產品,因此我是無論人的,我更願意從事我很是擅長的技術方面的工做而不是管理人,這是個人專長所在,也是個人熱情所在。
江宏:您在職業生涯裏經歷了很多編程語言和工具的生命週期。好比我之前用您主導開發的 Delphi。從技術上說 Delphi 是一個很是好的開發桌面應用的語言和開發環境,可是如今不多有人用了,彷佛 Delphi 的發展沒有達到應有的高度。若是那個時候有比較多的開源社區參與,您認爲事情會不同嗎?您以爲決定一個語言的生死和是否能流行的主要因素有哪些?
Anders Hejlsberg:這個我也是很難說的,由於當時尚未開源,如今有了開源我認爲它的影響對編程語言來說是很是很是大的,並且若是沒有開源將沒有任何的編程語言是受歡迎的,由於開發者如今已經對私有的封閉式的東西是不敢興趣的,並且我認爲語言的設計 90% 的編程語言都是同樣的,那 10% 是新的東西,新的東西發展是很是很是緩慢的,由於它和硬件如何發展都沒有關係,它是和人腦和數學的發展是有關係的,因此是很是緩慢的。另外我不認爲有任何的編程語言是完美無瑕的,我常常跟別人這麼說,你給我看一個完美無瑕的編程語言,我立刻給你展現一個根本沒有用戶的編程語言。一旦編程語言有了用戶,它的代碼就要考慮向後的兼容性。不少技術都有不少糟糕的地方,而這個正是它們成功的表象。
以上爲圓桌對話主要內容,圓桌結束後,Anders Hejlsberg 還與在場的開發者就編程方面的問題進行了交流。對於本次帝都之行,他表示很是感謝中國如此多的開發者可以支持 TypeScript,也但願在以後愈來愈多的開發者能參與到 TypeScript 的工做中來。
查看 GitHub 該項目:Microsoft/TypeScript