博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SegmentFault 创始人祁宁对话 C# 之父 Anders Hejlsberg
阅读量:5950 次
发布时间:2019-06-19

本文共 5523 字,大约阅读时间需要 18 分钟。

导读

上周,,就 TypeScript 做了一场技术分享,并与众多开发者就此进行了技术探讨。Anders Hejlsberg 加入微软的 19 年里,一直致力于 C# 和 .NET 的研发工作。同时,作为 TypeScript 的核心开发者和该开源项目的重要领导人物,他这次来帝都,主要也是为 TypeScript 布道。以下是讲座主要内容。

图片描述

Anders Hejlsberg 简述 TypeScript

(Anders)大家下午好!首先我介绍一下这是我第一次到中国来,在这儿逗留的这一天令我非常高兴,而且此前我也是非常激动的。今天在这会给大家介绍一下我一直在做的事情,包括大家都在谈论的 TypeScript 以及相关的 Open Source 的一般性的工作。

我做软件开发工具已经有 35 年的时间了,而且编写了不同语言的编程。以前都是专有的源,是封闭式的,现在我看到它有更新的变化,有一些新的方法论。

首先我们来看一下相关的背景。RedMonk 在上个季度刚刚发出的报告,JavaScript 在 GitHub 和 StackOverflow 被提及的次数排名都很靠前,和以前比有显著的上升。我觉得这里面有一些比较重要的原因。首先,JavaScript 是真正跨平台的语言。以前的语言,如 Java,其实现在都不算是(跨平台语言)了。另外,JavaScript 的性能近年来有 10~100 倍的飞速提升,它一个语言就可以在所有的层面上编程,这个是非常不一样的地方。比如这两年的 Node.js,还有移动端 ReactNative、NativeScript 等等,都可以用它来编写。在不同层面使用同一个语言开发,避免了学习很多新的东西。

其次,现在 JavaScript 已经被 ECMAScript 标准化了。今年已经出到第六版的标准,看起来非常雄心勃勃,因为他们的目的是为了解决 JavaScript 的一些遗留问题,而且另外添加一些新的模块、class 等等。现在第六版的标准我觉得有很多东西是非常有意思的,像 Mondule、Class、Arrow Function 等,JavaScript 的核心实际就是这样的。首先它是动态的,是两个家族系列(Dynamic 和 Static),对动态的界定是它不需要编译,直接打印就可以了,静态的是要求你静态地进行编译。我们可以分别来看一下动态和静态之间都各有什么优点?优点大家都知道就是它非常简化,可以让你直接上手工作,而且可以互动不需要编程,而且非常容易。静态的这块更多是强调修正一些错误,强调性能升级还有更好的工具。实际上现实来讲是说动态的和静态的都各有所长,而且我们两者都需要有。

大概是 5 年前我们的客户包括自己内部的团队就跟我们说,他们在写大的 JavaScript 代码时会遇到一些问题,所以我们想,怎么做才能加强 JavaScript 代码,让其强的更强,同时不破坏和损坏既有的价值。这就导致了我们现在所说的 TypeScript 的出现——实际上它是 JavaScript 的超级集合,把两者(动态的、静态的)最好的东西都集合在一起。这样实际上带来了两个好处,一个是我们在这上面添加了静态的,这样就有更加好的工具,还有一个好处在于你可以现在获取未来才有的一些相关的属性,可以在任何浏览器、任何的托管主机和操作系统中使用,而且它整个都是开源的,这才是跨平台的。(ECMAScript6 实际上在 5 年之后有了非常大的、多的 browser 部署才行)

……

以上是 Anders Hejlsberg 关于 TypeScript 基本的介绍。接下来是圆桌对话,是进一步的深入了解。圆桌对话由 SegmentFault CTO 祁宁、LeanCloud CEO 江宏以及云适配 CTO 马铎共同参与。

圆桌对话:深入了解 TypeScript

江宏:大家好,我是 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 该项目:

活动现场照片

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

转载地址:http://dhsxx.baihongyu.com/

你可能感兴趣的文章
名不正则言不顺,言不顺则事不成
查看>>
zookeeper 四字命令的使用
查看>>
IntelliJ中的main函数、for循环、System.out.println()快捷键
查看>>
Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据
查看>>
linux每日命令(13):more命令
查看>>
WebSocket学习与使用
查看>>
Logistic Regression
查看>>
防止sql注入:替换危险字符
查看>>
.net 获取 存储过程的输出参数
查看>>
eclipse+webservice开发实例
查看>>
Eclipse导入Android项目的方法(转)
查看>>
真武汤
查看>>
live555直播
查看>>
转载:JS进度条
查看>>
面向切面编程(AOP)的理解
查看>>
【转】远程桌面 剪切板复制文件失效解决方法
查看>>
SQL Server差异备份的备份/还原原理
查看>>
java 内部类
查看>>
leetcode - Search in Rotated Sorted Array II
查看>>
coursera课程Text Retrieval and Search Engines之Week 2 Overview
查看>>