Why do so many people become Java haters?

2021-08-15 12:41:14 +08:00
 Cbdy

I did some searches on the Internet, and there seem to be quite a few answers on the Internet.

e.g.

I read many of these posts, and I found that the most concentrated complaint against Java is

It's very verbose and repetitive.

However, there have been many improvements in recent versions of Java for the issue (Type Inference, Text Blocks, Recoeds, etc.). And Java 17 will be released in a month, Java code is becoming more and more concise.

But it may take more years to change the over-engineering culture of the Java community..

6975 次点击
所在节点    Java
67 条回复
secondwtq
2021-08-17 21:54:33 +08:00
@CRVV
> 比如 checked exception,要在 finally 里面写一个 try catch 来包住 file.close,结果是非常多层的嵌套。当然现在已经有新的写法了。
checked exception 确实是 Java 比较奇怪的设定。但是我的体验是每种技术都有自己奇怪的角落。你后面提到 C++,C++ 奇怪的东西不少么?

> 比如 Java 很喜欢标榜自己没有指针,还造了个词“引用”。但 Java 的引用是 C++ 的指针,C++ 的引用在 Java 里面不存在。这是让人很不爽的用词方式。
我觉得如果一个东西在汉语里面叫“冷烤馒头”,在英语里面不一定要叫"Cold roasted bread"或者“LKMT”。
维基百科上有一张图: https://en.wikipedia.org/wiki/File:Germany_Name_European_Languages.svg 画的是“德国” (.de) 在不同欧洲语言中如何称呼,日耳曼也是德国,德意志也是德国,阿勒曼尼也是德国。
如果 Java 的设计者认为“引用”的名字更合适,那自然可以用“引用”这个名字,更何况两者不是一个东西,比如 Java 不支持 pointer arithmetic 。

> 中文的 Java 资料里面类似的情况更多,比如“内存模型”,中文说的内存模型和 wikipedia 的 memory model 说的是完全不相关的两件事。
Java 中文的内存模型就是 JMM (Java Memory Model) 啊,我看 wikipedia 的 Memory model 也提到了 JMM,没感觉有啥不相关的。

> 比如有个 Azul C4 GC,号称 pauseless,但如果你去翻它一篇 pdf 的像论文一样的东西,里面会说其实有那么大概 1 ms 的 pause,但这种重要信息从来不会出现在好找的地方,所有地方都说 pauseless 。我从来没在其它语言上见过这种销售话术。

我倒是觉得这个很常见。
比如 Rust 声称自己 Empowering EVERYONE to build reliable and efficient software,但是觉得 Rust 门槛高的应该不在少数。
Rust 声称自己 guarantee memory-safety and thread-safety,然而 Rust 至今连个像样的 spec 都没有。
另外你的 C4 GC 是第三方 Azul 做的,并不代表官方态度,上面 Rust 的 claim 是官方的,要找非官方的更多。还是 Rust 的例子:
最近 GitHub 上火了个项目 https://github.com/mTvare6/hello-world.rs ,这项目很明显是揶揄 Rust,其实应该主要是一些 Rust 项目的“销售话术”的。
实际上就算不涉及商业利益,你到任何一个圈子里面,看到最多的都是对其主题的吹捧。比如我看过两眼 BSD 圈子,都是吹 BSD 如何如何优雅啊,这个好那个也好啊,最喜欢跟 Linux 比较,然后说 Linux 虽然很多人用,但是就是不如 BSD——这种现象的部分原因应该是 BSD 的阳光下的地盘(划掉)生存空间被 Linux 严重挤压。不过你到 Linux 圈子里面,也能看到 Linux 比 Windows 好的大量吹捧——大概也是类似的原因。这个应该也能部分解释主题所说现象。

其实我觉得最牛逼的“销售话术”还是 Haskell 的: Avoid success at all costs. (顺便,Haskell 圈子里面吹捧一点不少)
james122333
2021-08-18 01:27:30 +08:00
因为人不是机器 计算机产生的目的就在于此
本来目的是节省时间 反而要花更多时间不就更痛苦 不只 java 很多语言越来越多不必要的複杂度 有人爱人生耗在这样的事物上吗
语言本身来讲 java 都不是很类 unix
james122333
2021-08-18 01:40:47 +08:00
@speedofstephen

编程语言都可以考虑扩展性 一开始有基本规范就足够 为了安全以及规范还有延续风格目的 所谓对象抽象化带来的扩展性还会被打折
想改却改的头痛就是对象带来的问题
CRVV
2021-08-18 12:41:01 +08:00
@secondwtq

引用和指针这两个名词的问题,其实我的意思是说它不应该用一个已有概念的名词来表达另一个已有概念,它混淆了“指针”和“引用”这两个词。至于一个概念有不同的名字,这是很正常的事情。德国可以叫日耳曼,也可以叫德意志,但不能叫法兰西。

中文的内存模型还有另一个意思,比如
https://zhuanlan.zhihu.com/p/34461147

销售话术本身是正常的,我指的是把一个存在 pause 的 gc 标榜成 pauseless 这种明显说谎的做法。
吹如何如何优雅,这显然算不上说谎。
至于 Rust,在一些限定条件之下,它确实降低了 buil reliable and efficient software 的门槛,这句话没说错。
charlie21
2021-08-20 18:21:23 +08:00
anyxchachapoly
2021-08-31 09:57:23 +08:00
讲实话,没搞懂为啥通篇英文,你这內容用中文表达又不是特别困难,中英夹杂可能开会习惯的话,我感觉也能接受,但你里边有明显中<>英用法的句构,何必呢
THESDZ
2021-09-03 10:38:23 +08:00
实际上的问题在于 java 的定位,我个人理解的是,java 为了降低使用门槛,或者说,提高编码质量的下限,即,水平再差的人,写出来的代码也会因为语法的规则,代码质量也不会太离谱.

为了这个目的,自然就会有很啰嗦的代码.

而程序员的熟练度总在提升,总会进步到可以脱离这些啰嗦语句的技术水平,那么这些就成为了负担.

而 java 也在做这样的进步,例如 var springboot 的默认约定代替显示配置等.

总而言之,语言自然有其优势,工具只是适用不适用,不应该有鄙视链,你可以说 我现在的水平不需要 java 来帮我做约束,我可以用动态语言,写出结构清晰的代码,或者说,java 的强约束让我无法写出我想要的灵活功能,而非全面否定 java 或者 javaer

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX