Java 这个路径的问题本来不是什么大问题,但是实际对一部分人(主要是不用 IDE 的人,或者会用 IDE 的但是暂时没有用 IDE 的人)造成了 ergonomics 的麻烦
比如 GitHub 上面,打开一个 Java 项目,想简单看下源码要点 N 多次,这还是 GitHub 也“优化”了文件夹嵌套的情况下
就算我 clone 下来,直接用 shell 访问也要敲 N 多次键盘(还不说 clone 本来就多一步)
这些情况都可以装插件来缓解,但是在一个比较简单,插件比较少的环境中,这就成为了实际的问题。
一些其他生态中,很大一部分开发者就属于这种情况,那么 Java ,或者 Java 生态对于他们来说就是“麻烦”的。你不得不承认如果没有“专门优化”,处理文件比处理文本要麻烦十倍。
这不是说 GitHub ,shell 或者其他生态做得多“好”,实际上屎的东西很多。Java 世界做出了全面偏向 IDE 的选择,是有利于隔离外面这些屎的。(至于 Java 自己一堆历史包袱和生态内部问题搞出另外一大坨屎那是另一个问题)
但是问题在于某些 Java 开发者的心态——既然自己决定了主动与其他人隔离,就不要在意其他人的想法。但是某些 Java 用户不仅没有这个觉悟,还振振有词“Java 适合做带项目,你看我们的带项目多牛逼”
问题是为了做“带项目”,就一定要抛弃“小项目”么?我认为这就是 Java (或其生态)在不欢迎它的群体眼中的最大问题。一个旁例是 C#,C# 在语言本身的风评上总体比 Java 好(好像越来越齁是一个问题),生态上则主要集中在那个众所周知的问题上面。C# 也能做带项目,这些带项目中一样各种设计模式啰哩啰嗦,一样嵌套一堆文件夹,但是 C# 也有很多小一点的项目,GitHub 上高 star 的 C# 项目中并不难找到文件夹嵌套和其他语言差不多一个水平,目录结构非常简洁的项目,大概和 Swift 项目的感觉差不多吧。而这并没有影响 C# 做带项目。
我的观察是这种现象与项目的 domain 是强相关的,某些领域的项目做得就很 Java ,某些领域就不那么 Java 。所以 Java 这些特点可能与此也有点关系。
ergonomics 的另一个例子是 ... TypeScript 。可以说 TypeScript 设计上是想要把 JavaScript 往 C# 的方向扭(毕竟这俩同源,虽然最近好像没绷住变成了 Scala :P ),有一些 TypeScript 项目也出现了 “Java 味”的雏形(暂且不用“重”这种定义模糊的词,我们就用 Java 来定义 Java 和“不知道哪个时代的 Java 特色编程思想”)。但是人们讨论 TypeScript 时,好像主要是在讨论它的 Scala/C++/Haskell ... 味,而不是“Java 味”,这一方面当然是因为很多人本来就对 JavaScript 有更多的“Java 味”的需求,另一方面就是 TypeScript 的 ergonomics 做得不错——不仅是不错,而且可以说几乎就是 Java 的另一个极端。
TypeScript 解决问题的方式很巧妙,考虑一个问题:TypeScript 的 killer app 是什么? TypeScript 的 Rails ,Docker/K8s ,Flutter 是什么?
GitHub 的数据告诉你是 VSCode:
https://github.com/search?p=1&q=stars%3A%3E1000+language%3Atypescript&type=Repositories (前两个是 Markdown 项目)
这就很有意思了,因为 VSCode 这个项目本身是 TypeScript 开发的,但是领导核心是 Eclipse 正统,代码也挺 C#,内置了(非常不错的,“原生”级别的) TypeScript 支持。和 Eclipse ,IntelliJ 一样,VSCode 不仅仅可以用于 TypeScript ,并且这部分人还不少——VSCode 官方插件市场里面,Python 、C++、C# 都买了热搜(讽刺的是往后一点就能看到 Java 的热搜),后面还有 Go ,PHP ,Dart ...
暂时无法对比这些语言和 TypeScript 的数据,因为 TypeScript 的支持是 VSCode 内置的,内置的,置的,的 ...
反过来想,就是这些语言的用户,都是 TypeScript 的潜在用户!
我个人主力用 VSCode ,写 C++、C#,OCaml ,Python ,当然还有 TypeScript/JavaScript 。JetBrains 做了 Rust 的 IDE ,但是像 Haskell 这种不可能有人给做正经 IDE 的语言,也把支持 VSCode 和 LSP 作为第一优先级,OCaml 官方教程给新手首推的就是 VSCode 。这部分长尾,VSCode 也全吃下了。
虽然 Electron 在资源占用方面也很“重”,但是反正我写其他语言也要装这玩意,从开发其他语言的 VSCode 用户,转到 TypeScript 开发者,在 IDE 方面没有 overhead ,也就是装个 Node.js 和 npm 的事儿。
这就是另一点了——JavaScript 从小做起,人家做小工具也不差,所以我装个 Node.js 跑个小工具也不亏。
赢麻了。