• 中文
    • English
  • 注册
  • 查看作者
  • Java默认可变性:“万亿美元级别的错误” | InfoQ访谈

    是谷歌的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:在“快乐之路编程”播客的
    中,Bruce Eckel谈到了“仍然被困在Java世界中的人们”(大约在33:15),你表示了赞同。请你解释一下为什么你和Bruce会这么认为。

    InfoQ:正如Tony Hoare所说的那样,NullPointerException是“十亿美元级别的错误”。语言中的Null安全性是对这个错误的解决方法。Kotlin有,Dart和Swift甚至有
    (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年开始就是一名专业的软件开发者,大部分时间在帮助开发人员构建高质量的软件。他是纯函数式编程狂热爱好者,为了完成工作可以在理想方面做出妥协。

    原文链接

  • 0
  • 0
  • 0
  • 126
  • 请登录之后再进行评论

    登录
  • 任务
  • 实时动态
  • 发布
  • 单栏布局 侧栏位置: