趣招生合作机构 > 学校机构 > 广州源码时代欢迎您!

咨询热线 400-168-8684

广州为什么总有开发者说讨厌Java

发布时间:2023-03-07 09:18:27
点击查看大图

Java入门体验

作为一个拥有超过15年Java开发经验的开发者,我对Java生态系统了如指掌。所以我知道我可以安装哪种JDK、如何去管理多个JDK版本、有哪些IDE、构建工具、常用库等等。

但是对于刚开始接触Java的新手而言,他们更多的是这样来入门的:

我不确定Oracle JDK是免费使用的还是需要付费的商业版本,就自身而言,我想使用免费并且开源的版本。

经过进一步搜索,我了解到Oracle JDK有一些免费的替代品,如OpenJDK、AdoptOpenJDK、Amazon Correto Microsoft、 OpenJDK、Zulu、Temurin。但我不知道它们之间有什么区别,于是我随便选择了一个(OpenJDK)。

安装了OpenJDK,设置了JAVA_HOME,并将JAVA_HOME/bin添加到PATH中,我就可以开始使用了。

打开VS代码,创建了一个.java文件,复制粘贴HelloWorld程序,然后做了javac HelloWorld.java nad java HelloWorld 准备写一个测试。谷歌建议我使用JUnit。

如何使用JUnit库?再次在谷歌上搜索,大多数文章都显示将JUnit与Maven或Gradle一起使用。

什么是Maven/Gradle?好吧,它们是构建工具。于是我又安装了Maven/Gradle,搞定…

如何创建一个Maven/Gradle项目?大多数教程都展示了使用Eclipse或IntelliJ IDEA创建项目。所以现在我需要安装一个IDE。

从IDE创建Maven/Gradle项目后,我发现为了构建HelloWorld项目,我已经使用了一半的流量…好吧,没关系,我的流量充足。

虽然这个过程看起来没那么容易,但是也没那么可怕。而且,很多任务都是一次性设置的。但是,无形之中也给入门级小白一种印象:Java需要复杂的设置,没有繁琐的IDE设置就无法使用Java。

核心标准库不够用

通过调研,我们还发现了以下一些问题:

一个常见的问题是Java的核心标准库不够用,许多任务需要一些外部库,这也是事实。

没有内置的测试库、JSON(取消)编组支持,等等。

虽然Java NIO是一个很大的进步,但与其他语言相比,Java中的文件I/O仍然是复杂而冗长的。

没有内置的(类似Kotlin)对不可变数据结构的支持。

Java有很好的标准库,如Collections、Streams、Java NIO等。

使用文件I/O、JDBC等仍然感觉非常低级和冗长。

有很好的第三方库,如commons-lang、commons-io、Jackson、Gson、Vavr、Eclipse Collections来执行这些任务。

在我看来,添加第三方库并不是一个大问题。

挑战在于,当有太多的选择时,新手们会感到困惑,不知道该选哪一个。


Java是最啰嗦的语言,这是对Java最常见的评论。 (这只是表明你还没有使用过Go语言)

我的观点:

人们讨厌setters、getters等,但我不认为这有什么不好。因为可以用Lombok和Records来避免编写模板。通过使用正确的库,可以编写出不那么冗长的Java代码。

事实上,我认为Java在冗长和简洁之间取得了适当的平衡。通常,基于Java的企业应用程序会被维护很多年,而被认为冗长的东西实际上会帮助人们理解它。


十年前,我在EJB 2中使用EAR打包,我知道处理ClassLoader的问题是多么令人沮丧。另外,我在JBoss/WildFly等应用服务器中部署Spring应用时,也有处理类加载器问题的经验。

幸运的是,在过去的7、8年里,我没有再使用EJB、OSGI、JMX、应用服务器。在现代的Java世界中,应用程序被构建成fat jars,而框架则负责做AOP、ByteWeaving、动态代理等。

除非你还在开发传统的应用程序,否则我认为你不会用现代Java技术栈来处理这些问题。


虽然现代框架使专业开发者很容易构建应用程序,但对于新手来说却变得很困难。大多数的框架都是非常抽象的。当他们试图多了解一些东西的时候,就像剥洋葱一样,发现需要了解的东西无穷无尽。

虽然从Java 8开始,Java增加了一些函数式编程支持,但Java绝对不是作为函数式编程语言设计的核心。有些人提到他们可以用FP构建软件,比用OOP好用得多。你也可以在Java中应用一些FP的概念,如纯函数、不变性,但不会像Clojure或Haskell等FP语言那样自然。

我之所以问 "为什么你认为Java很复杂?"是为了了解别人的观点。虽然我不同意一些观点,而且有些事情对我来说不是什么大问题,但这有助于我理解其他人的想法。

在我看来,任何语言、框架和库都是为了解决一个主要问题而创建的,在这个过程中,它可能也会有一些非主要的功能。Java被设计成面向对象的语言,如果你想让它成为一种功能编程语言,它就没有Clojure或Haskell那么好。每种编程语言都有它的利基领域,比如Python用于机器学习,Go和Rust用于系统编程,Java和Node.js用于企业应用开发等等。

Java的优势在于建立大型企业应用程序,而不是在控制台中打印 “Hello World”!!!。Java生态系统的发展是为了满足企业的需求,并提高开发人员的生产力。

在一个典型的企业商业应用中,你需要通过与其他几个外部系统的集成来构建复杂的业务流程,以及与关系型数据库、NoSQL数据库、消息传递系统、缓存提供商、云服务等进行交互。

是的,你需要学习和了解大量的东西,才能有效利用这种快速应用开发平台。这是为了实现这种生产力可能需要付出的代价。

不要因为互联网上有 "语言X很复杂 "的调侃就简单地抛弃任何编程语言或者平台。不要因为听信别人根据他们2004年的经验说 "X语言很复杂 ",就一直重复这个说法。