加拿大计算机科学家詹姆斯·高斯林 (James Gosling) 进行了 Java 的原始设计,并为原始版本的 Java 实现了编译器和虚拟机,也被广泛认为是“Java 之父”。

James Gosling 最近接受了企业软件开发公司 Evrone 的技术布道师 (DevRel) Grigory Petrov 的采访

在这次采访中,James Gosling 谈了很多关于编程语言的话题,比如他对现代编程语言新特性的看法,他对编程语言更新带来的颠覆性变化的看法,为什么不是所有的编程语言都使用 JIT 技术等等。

Grigory:我们希望将俄罗斯的 Python、Ruby、Java 和 Go 社区组织为软件开发人员和软件顾问。通过这次采访,我希望展示这个行业的基本问题,进而帮助开发者同行。您在 Java 方面的经验和工作经验可以帮助开发人员变得更好,让我们一起努力实现这一目标!

一些编程语言,例如 Go,避开类和继承作为特性。作为语言设计师,您认为什么是现代、通用、合乎逻辑的编程语言组合方式?

James:我应该继续使用类,因为我发现它们对于这种情况非常有效。事实上,我对如何以不同的方式做事没有任何好的、清晰的想法。C 中宏的存在几乎是一场灾难,因为它们不是语言的一部分,而是语言之外的一个特性。Rust 正是那种想要以正确方式使用宏的语言。

对于其他编程语言,例如 Lisp 家族,它们有一种定义语法的方法,几乎​​完全独立于语义。我写了很多 Lisp 并且沉迷于用 Lisp 程序操作 Lisp 程序的技术。某些语言允许您以不同的方式执行此操作,例如 Groovy,我们可以在其中直接使用 AST,以及 Rust,它具有语法集成的宏。

Lisp 通过操作代码片段来生成新代码,这在 Java 领域中经常使用。这是一种非常低级的方法,但非常流行。因为开发者可以结合注解,使用不同的语言来生成字节码,所以这是一种非常强大的技术,经常在意想不到的场景中使用。一个例子是 Jackson 框架,它通过计算序列化器来提高性能。

当然,这既是一种强大的技术,也很难驾驭。技术充满了可能性,但可能性是有限的。我与 Lombok 有着强烈的爱恨情仇。它添加了很多很棒的 Java 特性,但另一方面,它也暴露了它的弱点。一些功能应该是内置的。

Grigory:我们最近采访了 Ruby 的作者 Yukihiro Matsumoto,他提到了他对 Ruby 3.0 的最新主要版本所做的一个实验。他试图在不引入重大更改的情况下发布此版本,然后看看发生了什么。我知道 Java 对“破坏性”持谨慎态度。那么所有编程语言都考虑兼容性并且每个主要版本都兼容是一个好主意吗?或者这仅适用于 Ruby 或 Java 等特定语言?

James:这几乎完全取决于开发者社区的规模。每一个重大的变化都会给开发者带来问题,如果社区很小,那么破坏性的变化并不是什么大问题。还有一个必须权衡的成本效益。如果添加一个破坏性的变化增加了负担,但同时带来了一些好处,那么可以考虑。例如,如果将下标运算符从方括号更改为圆括号,则可能不会带来任何好处,并且会给开发人员带来很大的困扰。那么这将是一个愚蠢的改变。

例如,JDK 9 引入了一个极其罕见且具有破坏性的变化:如果开发人员使用某些所谓的隐藏 API,包装器机制将被破坏,而打破包装器边界并以不应该使用的方式使用 API 的开发人员将遇到从8升级到9有很多问题。

还有一种情况是某处存在错误并且开发人员已针对该错误实施了解决方法。在这种情况下,如果修复了错误,则存在变通方法被破坏的风险。

格里戈里:让我们谈谈公司和行业的发展。我自己从来没有给机器人编程过,但我花了一些时间为那些为数百万人开发软件的公司工作。与 20-25 年前相比,我看到像 GitHub 这样的社交编码平台得到了大型公司的支持,这些公司帮助个人开发人员和企业或工业软件开发人员开发开源。那么我们是否可以认为这是开源软件的黄金时代,您怎么看?

詹姆斯:我不知道如何回答这个问题,因为它关系到未来。“这是开源软件的黄金时代”的想法意味着“从现在开始它不会走下坡路”。如果现在是黄金时代,那么未来不就是黄金时代吗?

所以我的观点是,不管黄金时代是什么样子,我们所处的环境越来越好,我们离理想的“黄金时代”越来越近了。目前,我们正面临着围绕安全和人类网络恐怖主义的各种危机。虽然这种情况仍在发生或正在发生,但我认为这不是黄金时代。如果有办法结束网络恐怖主义——这将是一个非常“黄金”的时期,让我们拭目以待。我会说这是一段非常美好的时光,但它可以变得更好。

Grigory:您在 Java 和 JVM 中使用了 JIT 技术。JIT 带来了令人印象深刻的速度,并且不会影响该语言的优雅语法和高级特性。许多编程语言都参考 Java,例如 C# 和 JavaScript,它们使用热路径编译以接近 C 和 C++ 的速度重新编译代码。然而,许多其他语言,如 Python、Ruby 和 PHP,都有可选的 JIT,但并不流行。许多主流编程语言也没有使用 JIT 来提高性能。那么为什么不是所有的编程语言都使用 JIT 来为开发人员提供更快的速度呢?

James:事实上,静态类型语言更适合 JIT 以提高性能。使用动态语言,例如 Python,实际上非常困难。人们通常最终做的是在语言中添加注释,这为您提供了一种类似于 TypeScript 的编程语言,它本质上是带有类型注释的 JavaScript,这很有趣,因为 JavaScript 本质上是没有类型声明的 Java,所以 TypeScript 本质上是带有类型声明的 Java混合语法。

但是如果你是一个用 Python 编写快速脚本的开发人员,声明似乎会困扰他们,并且考虑变量的类型是非常烦人的。脚本语言世界中的大多数开发人员并不关心性能。他们更关心尽快完成开发,而不关心性能和相关细节。

格里戈里:有一个非技术性的问题。当我们谈论不同的语言时,在您个人看来,对于刚入门的开发人员或相关学科的学生来说,应该选择什么作为他们学习的第一语言的第一语言?

James:我对这个问题的回答肯定有点偏颇,毕竟 Java 已经成功使用了这么多年。但是我自己学的第一种编程语言是 PDP-8 汇编代码,大约在同一时间我还学习了 Fortran。所以我认为对于初学者来说,你可以教他们任何东西,因为每个人的学习能力不同。

但是,在这种情况下,我认为更多地考虑初学者的未来职业道路很重要。如果你想成为一名全面的软件开发人员,构建一个大型、高性能的系统,那么无论学习什么 JVM 语言,都无法绕过 JVM 语言。但如果你是一名物理专业的学生,​​我会说 Python 也不错。

事实上,我认为你选择哪种编程语言作为你的第一语言学习并不重要。虽然许多人总是坚持他们学习的第一门语言,但如果他们能够学习多种语言并来回切换,实际上更好。我什至认为大学应该提供比较编程语言优缺点的课程。一门涉及用 5 种不同编程语言完成作业的课程旨在让学生快速学习这些语言,因为它们并没有真正的不同。但学生们通过这种方式思考语言的优缺点。

我很久以前就已经这样做了,例如使用 Cobol 进行数值计算和 Fortran 进行符号运算,这两种语言都不是这两种语言的专业领域,但我最后还是得到了 A 的成绩。

发表评论