一直被唱衰的 Java 没“死”,却惨遭“忽视”!

CSDN 2021-05-05 00:15

【CSDN 编者按】随着大数据人工智能的潮流,Python 已经被炒作的天翻地覆,其学习用户数量逐渐上升,许多人暗自担心 Java 技术是否会在未来几年就沉寂了?对此你怎么看呢?

作者 | Jackson Roberts
译者 | 弯月
出品 | CSDN(ID:CSDNnews)

如今,虽然 Java 仍然主导着企业级的应用程序,但是 Java 却鲜有炒作。尤其是对于编程新手来说,由于 Java 缺乏大肆宣传,所以会被很多人忽视。

年轻/天真的开发人员(包括我自己)经常会被新语言和新工具所迷惑,有时甚至以牺牲生产力和理智为代价。我曾经对 TypeScript 万分痴迷,也曾认为 Node.js 生态系统是有史以来最酷的技术。我喜欢转译的代码、实时调试、庞大的程序包库,甚至是支离破碎的构建系统。而当我尝试在实际生产中使用这些技术,并与经验丰富的工程师交谈时,这些技术身上的魔力瞬间消散了。

另外,我也曾对 JS 生态系统也充满了非常不理智的热爱,因为 JS 技术非常热门,它有炒作。但最后却发现,现实远不及我的期望。如今,我在 Java 的工作中品尝到了曾经在 JS 身上求而不得的美好体验。蓦然回首,发现自己以前完全被炒作牵着鼻子走,差点错过了 Java,我不禁有点失望。Java 编程十分有意思、效率很高,但新手开发人员却对这个“老家伙”退避三舍,这对 Java 来说太不公平了。


Java 的伟大之处


我个人感觉,编写 Java 程序的感觉非常好。这在很大程度上归功于 JetBrains 在 IntelliJ IDEA 中付出的心血。自动补齐、快速跳转到定义、查找调用等各项功能都非常方便使用,而且重构很容易。但是,Java 真正出类拔萃的地方在于第三方库的开发体验。

依赖关系与行业趋势

虽然我的经验很有限,但在我看来,大胆使用外部依赖项是现在的趋势。“自给自足”已经过时,现在的流行趋势是“万物为我所用”。特别是 JavaScript 开发人员使用第三方库的频率极高,即使是一些琐碎的操作(例如,数字的左侧填充操作等)。我认为积极使用第三方依赖关系并没有太大坏处,但是上游 API 的变化可能会对非类型化的 JS / Python 代码库造成严重破坏。

在 Java 中使用第三方库时,你需要确切地知道将哪些类型传递给方法。最重要的是,如果使用函数错误,编辑器会给出警告。所以,从大量使用外部库的角度来看,我认为应该有更多人会喜欢 Java。

标准的类型可节省时间

动态类型、弱类型等等,无论什么类型都有许多缺点。当依赖项改变了 API 方法时,你的应用程序就会运行时出问题,而不是构建时,这就是问题所在。如果开发人员必须参考方法的实现,才能搞明白需要哪种类型,那么就会浪费大量的时间。TypeScript 和 Python 的类型提示可以解决此问题,但是它们缺乏在运行时验证传递类型的能力。

我不是很喜欢 TypeScript 的类型保护,因为你必须自己实现,并保证实现的正确性。在我看来,这对于定义者和使用者双方都没有好处。考虑以下代码:

interface Dog {    bark: () => void;}
/* The developer has to manually implementa heuristic check for interface adherence!When they update the interface, they haveto update the type guards too! */function isDog(pet: object): pet is Dog { return (pet as Dog).bark !== undefined;}const dog: any = {bark: () => console.log('woof')};
if (isDog(dog)) { // TS now knows that objects within this if statement are always type Dog // This is because the type guard isDog narrowed down the type to Dog dog.bark();}

声明一个类型,而且还必须为该类型编写验证逻辑,这让我觉得很难受。上述代码让人感觉某人使用了错误的工具。

与 TypeScript 的定义不同,Java 的标准类型系统不仅明确了类型定义,而且还可在默认情况下保证类型保护,所以减轻了程序员的很多负担。

没有优化的负担

Java 开发人员可以放心地使用 JVM。无论是实现多线程应用程序还是将大量数据存储在堆上,他们都可以相信自己不会因内存管理或数据竞争而陷入困境。这个优势主要体现在和 C++ 的对比中,因为 C++ 就有很多这样的坑。

在你看来,符合以下条件的语言有哪几种?

  • 高质量的打包管理器和构建系统

  • 标准类型

  • 大型社区

  • 自动优化

我认为唯一合格的语言就是 Java。


大学没有 Java 课程


我目前就读于科罗拉多大学博尔德分校。这是一所很棒的学校,我们计算机系的名气虽不大,但很多高等计算机科学课程都来自卡内基梅隆大学或斯坦福大学。在大学期间,我学习和使用了以下编程语言:

  • C++。所有核心的必修课程都选择了该语言:计算机系统、操作系统、数据结构等。当然,选择 C++ 也确实很合适,因为它可以直接进行内存管理、创建内核模块,而且还带了很多挑战和学习的机会。

  • Python 和 Julia。如你所料,这两门语言是数值计算和离散数学教授的挚爱。

  • Scala。编程语言原理教学中使用了该语言,主要是因为其函数编程和模式匹配特征。尽管 Scala 使用了 JVM,还可与 Java 互操作,但它为开发人员提供的体验不同于 Java。

  • Web 编程语言(HTML / CSS / JS)。这些仅用于一门名叫“软件开发方法和工具”的课程,这门课程非常注重行业趋势。

目前我马上就要毕业,却从未见过 Java。我觉得很可惜。


总结


构建应用程序的方法不止一种,但是我认为 Java 没有得到足够的重视,尤其是在创业公司和新手编程社区。非类型语言也是非常实用的工具,但我不认为它们就是构建大型应用程序的默认选择。如果你是一位全栈开发人员,而且从未深入就接触过 Java,那么请在下一个项目中尝试下吧,你会收获意外惊喜。

90 年代和 2000 年初,Java 和 JVM 被炒得沸沸扬扬,但我觉得即便到了今时今日,它也不应该从大众的视野中消失。我个人就通过 IntelliJ 和 Java 发现了意外的惊喜。


网友评论


不过,也有不少网友表达了不同的看法:

评论1:

在我看来,Java 做出了大量错误的妥协:

  • 语言的高级程度比不上 Python/Ruby/JS/PHP

  • 语言的低级程度比不上 Rust/D/Nim/Zig

  • 专用程度比不上 Erlang/R/Go/Julia

  • 语言的特有风格比不上 Lisp/Haskell

为什么要使用 Java 呢?有人会说,Java 很好、很快,生产效率高,支持丰富,经过系统的测试,文档也很齐全,还有大量的开发者,许多公司都在用它。 

但我认为这些还不够。

Python 比 Java 还要古老,支持、文档和开发者数量都比Java高很多。但是 Python 语言比 Java 高级很多,非常适合高层应用,如数据操作、脚本、Web 开发等。

如果分布式系统需要大量 I/O,那么 Erlang 和 Go 要比 Java 好很多。当然,Erlang 和 Go 不如 Java 那么有名,但为了满足需求,付出一些代价也是值得的。同样,如果系统对速度有要求,那么就应该选择 Rust 而不是 Java。 

如果想写得开心,我也不会选 Java。LISP 也非常好。为什么要考虑效率呢?我是自己写着玩,又不是要开公司。

所以 Java 虽然不是很差的选择,但我不会用它。

评论2:

在我看来 Java 就像清洁车一样。你去上班,坐进清洁车,点火,然后做完每天必做的工作,然后熄火回家睡觉。没人会把清洁车放到车展上,但你需要时,它就会出现,可靠地完成工作。

原文链接:https://jackson.sh/posts/2021-04-java-underrated/

声明:本文由CSDN翻译,转载请注明来源。

60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!

直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!


☞“时隔 10 年,重新开始写代码的我要崩溃了!”

Linux 30 年专访:Linus Torvalds 谈 Linux 内核开发与 Git

☞Google 宣布 Kotlin-first 已四年,为什么 Java 开发者仍不买账?