Java 仍是最适合学习软件工程的语言

Java 仍是最适合学习软件工程的语言

我承认这标题起得不怎么样。“适合学习”,什么叫做“学习”?如果是为了工作考虑,Java 当然值得学习。但这里的“学习”并不是“适合工作”的概念,而是指为整个计算机领域认知体系打下良好基础的“学习”。甚至可以说 Java 是适合任何一个计算机类专业本科生学习的语言,尤其是软件工程专业。

近年来,我们似乎常常听到“Java 将要没落了”,而且 Java 的市场份额的确不再增长了。很多人对 Java 的第一印象就是“啰嗦”,冗长得让人看着就犯恶心。写 Java 代码确实不是一件让人十分愉快的事情,你不得不编写大量的模板代码,然后将真正的代码逻辑放在一系列既定的框架之中。程序员热爱自由,但 Java 背叛了程序员。

看看那些“现代”语言吧:Python、Kotlin、Swift、Ruby、JavaScript(ES6 之后)……这里说的“现代”当然不是说它们的出现时间都很近,而是指它们在近些年才开始被广泛使用且备受好评。这些语言无论具体语法如何,都是注重简洁灵活的,程序员可以按照自己喜好的方式编写代码,使用各种不同的方式实现同一种功能。而 Java 则显得太臃肿、太死板,大多数程序员实现同一种功能都会写出几乎一模一样的代码。

然而我们看到,任何一本被以“设计模式”作为标题的书,只要标题中没有明确说明使用的是哪门语言,就几乎必然使用 Java。在如此多主流语言中,Java 是唯一一门完全面向对象的语言,它直接而丑陋地将类结构暴露给用户,而这恰恰造就了以 Java 作为开发语言的项目往往有着很好的框架结构。Java 强迫你以框架的方式思考代码结构,熟悉了 Java 开发流程后,构建一套自洽的类结构几乎是潜意识行为。大量的工厂类和访问器/修改器方法使 Java 写起来臃肿不堪,但这也使得 Java 是最容易用类图描述的主流语言。

“设计模式本质上是为了弥补语言设计时的缺陷。”这句话是非常正确的。若 Java 中也能自由地将函数当作一等公民对待,那么工厂模式几乎没有任何存在价值。如果 Java 在语法层面上直接支持访问器与修改器,那么任何以 get 和 set 开头的丑陋方法也将不复存在。

但我们也看到,一门语言的语法越灵活,代码呈现的个人风格也就越强。历史上认为 Java 语法丑陋而试图简化它的尝试有很多,Groovy、Scala、Kotlin……但它们都只在一些特定领域取代了 Java 的功能,Scala 在大数据处理上获得了一定的成功(Spark),Kotlin 在安卓 UI 开发上获得了成功,而更多语言则死去了,例如目前应用范围几乎只在 Gradle 配置文件的 Groovy。理论上来说,这些替代品都有能力直接对接 Java 生态,用 Scala、Kotlin 甚至 Clojure 实际上都可以写 Spring,但现实中这么做的人少之又少。归根结底,Java 在目前的实践中仍是最适合团队后端开发的语言。在有少数几个架构师掌控全局的情况下,Java 代码的生命周期是很长的。而这些更加灵活的替代性语言更适合小团队或是单人开发……但这种情况下为什么还要用 Java 生态?

工程化有两个方向,一种是像 Go 一样追求极致的简单,一种是像 Java 一样追求极致的结构化,即使这会使得代码臃肿不堪。而在大学中教学的目的不单单是为了工程,更重要的是教会学生通过系统化方式组织代码的知识,在这种情况下,Java 就成了几乎唯一的选择。无怪乎当今高校理论书籍中的示例代码要么是用于演示底层逻辑的 C,要么就是 Java。

Java 不会在可见的未来死去——即使它是对程序员精神的背叛。


Java 仍是最适合学习软件工程的语言
https://snowfly-t.github.io/2022/06/29/Java仍是最适合学习软件工程的语言/
作者
Snowflyt
发布于
2022年6月29日
许可协议