是谷歌的 Kotlin 产品经理,同时也是 Java Champion。他和 Bruce Eckel(《Java 编程思想》作者)一起主持“快乐之路编程”播客。在其中一集播客中,Eckel 谈到了“仍被困在 Java 世界中的人们”。Ward 对此表示同意,并将 Java 的默认可变性称为“万亿美元级别的错误”(参考了 NullPointerException 是“十亿美元级别的错误”的说法)。Ward 对 Java 的看法引起了 InfoQ 的好奇。InfoQ 采访了他,以下是采访内容。
InfoQ:Kotlin 产品经理在谷歌是一个怎样的角色?你的日常职责是什么?
InfoQ:2022 年 JVM 编程语言处在一个怎样的状态?
InfoQ:现在有多少 JVM 后端开发在使用 Kotlin?你认为 Kotlin 怎样才能在后端开发中变得更受欢迎?
InfoQ:JVM 编程语言与其他编程语言相比如何,尤其是在云环境下?Python 和 JavaScript 在谷歌搜索中出现的频率比 Java 更多,在 Stack Overflow 上的相关问题也更多。
InfoQ:GraalVM 生成的原生 Java 应用程序启动更快,使用更少的内存。这将如何影响 JVM 语言在云计算中的竞争地位?
InfoQ:Scala 为什么如此吸引你?
InfoQ:Scala 最适合哪些应用或解决哪些问题?不适合哪些场景?
InfoQ:JetBrains 声称 Kotlin 是“更好的 Java”,但是 Java 的受欢迎程度仍然是它的 5 到 12 倍。你认为 Kotlin 今天的角色是怎样的?在未来会变成什么样?
InfoQ:在“快乐之路编程”播客的 第51集 中,Bruce Eckel 谈到了“仍然被困在 Java 世界中的人们”(大约在 33:15),你表示了赞同。请你解释一下为什么你和 Bruce 会这么认为。
InfoQ:正如 Tony Hoare 所说的那样,NullPointerException 是“十亿美元级别的错误”。语言中的 Null 安全性是对这个错误的解决方法。Kotlin 有,Dart 和 Swift 甚至有 全面Null安全性 (Sound Null Safety),但 Java 没有,而且似乎在短时间内不会提供。你认为这是为什么?
InfoQ:你说在未来添加 Null 安全性是“非常困难或不可能的”。但 Dart 在发布 1.0 版本 7 年后为应用程序和库添加了 Null 安全性。不管怎样,你对希望减少 NullPointerException 的 Java 开发人员有什么建议?
InfoQ:在同一集“快乐之路编程”播客中,你称 Java 的默认可变性为“万亿美元级别的错误”(大约在 35:05)。请详细说明你为什么这样认为。
InfoQ:你认为工具支持(比如 IDE 和构建工具)对一门编程语言取得成功有多大影响?
InfoQ:说到工具,Visual Studio Code 在 2021 年 2 月拥有 1400 万用户,在 Stack Overflow 的“2022 年开发者调查”中是第二受欢迎的 IDE(第一名是 neovim)。我们假设 Visual Studio Code 成为所有开发人员的默认免费 IDE,并且支持所有相关的编程语言和框架,那么这将会如何改变软件开发?
InfoQ:编译器可以暴露代码错误。静态分析器,如 Error Prone、Spotbugs 或 PMD,会显示更多的错误,包括可怕的 NullPointerException。为什么这些静态分析器没有得到更广泛的使用?
InfoQ:你说你“喜欢把尽可能多的验证逻辑放入编译器可以验证的东西中”。Java 编译器不验证可空安全性、空 else 分支等,但是像谷歌 Error Prone 这样的静态分析器会这么做。你如何看待将这些分析器添加到 Java 中所带来的好处与它会让工具链复杂化的问题?
InfoQ:谷歌的跨平台 UI 框架 Flutter 编译一个变更和更新应用程序只需要不到一秒的时间。相比之下,为什么编译和更新 JVM 应用程序仍然如此缓慢?
InfoQ:在我的 Spring Boot 项目中,频繁的类重载失败抵消了编译速度。关于你的“将包含不确定数量问题的东西部署到生产环境”,我认为 Dart(Flutter 使用的语言)的编译复杂性可能与 Java 差不多。尽管如此,大多数情况下,Flutter 在移动设备上重新编译和部署只需要 1 秒钟,但大多数 Java 项目都做不到。现在,Flutter 有了它的整个工具链(编程语言、编译器、运行时、框架和构建工具),但 Java 还没有(例如,构建工具和应用程序框架)。对于开发人员的生产力来说,JVM 语言拥有整个工具链有多重要?
InfoQ:你如何定义和衡量一门编程语言成功与否?例如,你可以说 Scala 是成功的,因为它让函数式编程变得更加主流。你也可以认为 Scala 不再成功了,因为它把第二大 JVM 语言的位置让给了 Kotlin。
InfoQ:软件开发的历史就是抽象层次不断增加的历史,面向对象和函数式编程已经有 50 多年的历史了。你认为在过去的 20 年里,抽象层次是如何提升的?你如何看待未来 20 年的增长?
InfoQ:哪一种编程语言发展得最好?
InfoQ:JVM 语言即将到来的哪个新特性最让你感到兴奋?
InfoQ:如果你可以对每一种 JVM 语言都做一个改变,你会做哪些改变?
InfoQ:COBOL 已经有 60 多年的历史了,现在仍然有人在使用它。你认为在 2056 年 Java 60 岁的时候,开发人员还会开发新的 Java 应用程序吗?
InfoQ:请你对 2022 年 JVM 编程语言的发展状态做个总结。
InfoQ:James,感谢你接受我们的采访。
总结
Ward 很好地解释了播客上的评论——当 Eckel 谈到“仍被困在 Java 世界中的人们”时,他指的是使用他和 James 眼中的 Java 旧范式(比如过程式和面向对象编程)的开发人员。相比之下,Eckel 和 Ward 在 Scala 中采用了 Java 语言中没有的函数式编程概念。可变性让 Ward 更难理解代码,并最终产生更多的 Bug,这与不可变的函数完全不同。
作者简介
Karsten Silz 作为全栈 Java 开发人员在欧洲和美国工作了 23 年。2004 年,他在美国联合创办了一家软件产品初创公司。Karsten 领导产品开发 13 年,在公司被收购后离开了公司。自 2017 年以来,他一直是德国和英国的承包商(Spring Boot、Angular、Flutter)。他在 2020 年以 CTO 的身份参与创办了软件即服务初创公司“Your Home in Good Hands”。
James Ward 从 1997 年开始就是一名专业的软件开发者,大部分时间在帮助开发人员构建高质量的软件。他是纯函数式编程狂热爱好者,为了完成工作可以在理想方面做出妥协。
原文链接 :
Java Champion James Ward on the State of Java and JVM Languages