V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cbdy
V2EX  ›  Java

Why do so many people become Java haters?

  •  1
     
  •   Cbdy · 2021-08-15 12:41:14 +08:00 · 6879 次点击
    这是一个创建于 956 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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..

    67 条回复    2021-09-03 10:38:23 +08:00
    maninfog
        1
    maninfog  
       2021-08-15 12:47:30 +08:00   ❤️ 1
    No more Java, change to Kotlin please 😁
    wangkun025
        2
    wangkun025  
       2021-08-15 12:50:17 +08:00   ❤️ 1
    毁誉参半
    Ehend
        3
    Ehend  
       2021-08-15 13:03:46 +08:00 via Android
    java17 出来了可能个人项目用用吧,公司还是 8
    Jooooooooo
        4
    Jooooooooo  
       2021-08-15 13:07:28 +08:00
    用的人多呀, 然后不必可避免的有些场景不适配
    ericls
        5
    ericls  
       2021-08-15 13:09:31 +08:00 via iPhone
    工具就是工具就是工具
    Leviathann
        6
    Leviathann  
       2021-08-15 13:16:14 +08:00   ❤️ 6
    主要是 java ee,servlet 那套东西的确很恶心,很莫名其妙,你就算说透了历史发展也解释不了为什么没见过其他语言还整这套的,而且 java 社区还把这套东西当宝

    而且 tomcat 的 logo 真的巨丑

    另外用 java 的人喜欢给守旧找理由,比如我组最近升级到了 11,并且引入了 kotlin,但是 java 的部分 var 却不能用,问就是不稳定,不清晰,不好维护

    还有设计模式,相当一部分就是给早期 c++,java 强行搞万物基于 class 导致的函数抽象的缺失擦屁股,

    被恶心的多了当然就巴不得他死了呗
    WIN2333
        7
    WIN2333  
       2021-08-15 13:19:18 +08:00   ❤️ 2
    骂的人多才说明用的人多,没人用的谁骂啊
    sagaxu
        8
    sagaxu  
       2021-08-15 13:21:58 +08:00
    还有比 Java 更罗嗦的语言吗?
    xgfan
        9
    xgfan  
       2021-08-15 13:22:30 +08:00 via iPhone   ❤️ 6
    Java 太过中庸,很多人都想来踩一脚,证明自己很厉害。
    Rwing
        10
    Rwing  
       2021-08-15 13:22:59 +08:00   ❤️ 1
    Leviathann
        11
    Leviathann  
       2021-08-15 13:31:48 +08:00
    而且 java 几个关键性的 project 进展都很慢,一个 Valhalla 一个 loom,尤其是 Valhalla 做了不知道多少年,现在看也还是遥遥无期。。
    Samuelcc
        12
    Samuelcc  
       2021-08-15 13:34:01 +08:00 via Android
    我觉得 Java 是很靠谱的 work horse. 平时那些黑 Java 的我觉得不少人只是平时不写 Java 或者不是主写 Java 的为了装个 b 吧,不排除有真正的 hacker 被 Java 限制了他思维的速度但是应该不多。另外用得多的语言一般都被黑呀,例如 c++ js golang
    ikas
        13
    ikas  
       2021-08-15 13:34:33 +08:00
    语言牛逼了.我用就厉害了
    ???
    Vegetable
        14
    Vegetable  
       2021-08-15 13:39:35 +08:00
    用着不爽才会喷,好不好客观就在那。
    chendy
        15
    chendy  
       2021-08-15 13:40:28 +08:00
    稳定的挣钱工具,为啥要 hete
    pabupa
        16
    pabupa  
       2021-08-15 13:42:06 +08:00
    问题是它为什么不支持`import a as b`,,,,这现实起来不要太简单吧……可是就是没有。
    maplerecall
        17
    maplerecall  
       2021-08-15 13:46:00 +08:00 via Android
    Java 本身并没有大问题,围绕 Java 的生态圈也足够强大,但问题是进步太慢了(也许是 orical 的锅),加上用户基数多,一对比就显得守旧古板,不够 geek 了。

    比如几乎定位相同的 C#,用过的基本都说好,本身还在不断快速进步,性能好,开发效率高,心智负担小,所以口碑好,国外占有率也不低。

    再比如靠碰瓷 Java 起名的,被公认十分糟糕的 JS 也在很迅速的弥补不足和引入新特性,实实在在地大幅度提升开发体验。虽然抱了 web 的大腿,但也越来越多的出现在各种其他地方。
    rita413413
        18
    rita413413  
       2021-08-15 14:31:19 +08:00
    java 是我第一门的编程语言,虽然现在不用了,但也不会讨厌她。以后有情怀了再用 java 谢谢项目吧。
    b1t
        19
    b1t  
       2021-08-15 14:48:23 +08:00
    Why you bully me?
    EscYezi
        20
    EscYezi  
       2021-08-15 16:51:14 +08:00 via iPhone
    倒是不讨厌 Java,讨厌一直停留在 Java8 不升级,Java 再怎么革新也吃不到半点好处
    akira
        21
    akira  
       2021-08-15 17:41:48 +08:00
    喜欢不喜欢重要么。。不耽搁赚钱就是好语言。。。
    TypeError
        22
    TypeError  
       2021-08-15 17:52:46 +08:00
    落后包袱太多了,看着难受,那一堆 xml 就不想看
    dqzcwxb
        23
    dqzcwxb  
       2021-08-15 18:08:06 +08:00   ❤️ 15
    JudyHal
        24
    JudyHal  
       2021-08-15 18:23:24 +08:00
    Java 可以说是集合了各种设计缺陷的一个近亲杂交产品,骂他只是因为一个非常普通的理由,因为这样做是错的,但他好像还以自己的错误为荣,Java 的存在可以说是往所有程序员头上拉的一坨屎
    felixcode
        25
    felixcode  
       2021-08-15 18:26:48 +08:00 via Android
    一堆人固守在 java8,吹着 java16,17 的改进,自认为 java 才是唯一正道,其它语言都是旁门左道,指不定想着 java8 用来养老,再也不用学别的语言了。
    zoharSoul
        26
    zoharSoul  
       2021-08-15 19:27:53 +08:00
    @pabupa #16 因为几乎不会有人手写 import
    ztcaoll222
        27
    ztcaoll222  
       2021-08-15 21:02:50 +08:00
    exception 和 lambda 打架
    zxCoder
        28
    zxCoder  
       2021-08-15 22:25:24 +08:00
    @sagaxu 我想说 c++。。。。 虽然肯定会有很多人反对我
    alexkkaa
        29
    alexkkaa  
       2021-08-15 22:35:04 +08:00 via Android   ❤️ 2
    不是 java 牛逼 是 Oracle 牛逼。
    jdk 设计的就是求稳
    这就戳到了很多大公司的 g 点,利于群体合作,语言特性少, 按部就班
    cansiny0320
        30
    cansiny0320  
       2021-08-15 22:44:00 +08:00   ❤️ 4
    原文以为楼主是外国人 结果发现回复哟用的是中文 不懂为什么要用英文发帖
    ebony0319
        31
    ebony0319  
       2021-08-15 23:12:58 +08:00 via Android
    语言我就服 c,c++,java.
    很多语言都想干翻 java,最后都成了末路英雄
    TomDu
        32
    TomDu  
       2021-08-16 00:39:16 +08:00   ❤️ 1
    为什么要写工地英语😅
    Mirage09
        33
    Mirage09  
       2021-08-16 03:16:54 +08:00 via iPhone
    对一个语言这么大恶意,真是迷惑…
    micean
        34
    micean  
       2021-08-16 08:35:41 +08:00   ❤️ 1
    over-engineering 说到底还是人的原因
    java 不是一定要这样写那样写
    daysv
        35
    daysv  
       2021-08-16 08:47:41 +08:00
    态度上保持中立, 要我写, 打死我都不写
    jsjjdzg
        36
    jsjjdzg  
       2021-08-16 09:06:01 +08:00
    这个和前端很像啊,走有人抢着做布道师。。。
    qwerthhusn
        37
    qwerthhusn  
       2021-08-16 09:41:27 +08:00
    Java 程序员路过,看着 Kotlin 里面的各种各样的特性都很吸引人,但就是没有动力去学。。。
    aflow
        38
    aflow  
       2021-08-16 09:58:25 +08:00
    就没人喷一喷 java 的 io 接口吗,真的很烦唉
    swim2sun
        39
    swim2sun  
       2021-08-16 10:51:40 +08:00
    世上只有两种编程语言:一种被人骂,一种没人用
    memorycancel
        40
    memorycancel  
       2021-08-16 10:52:47 +08:00   ❤️ 1
    因为过于冗余吧。
    gablic
        41
    gablic  
       2021-08-16 10:55:41 +08:00   ❤️ 2
    Why do so many people become Chinese haters?
    CRVV
        42
    CRVV  
       2021-08-16 11:10:03 +08:00
    Java 有一些奇怪的设定,而且奇怪得很明显。

    比如 checked exception,要在 finally 里面写一个 try catch 来包住 file.close,结果是非常多层的嵌套。当然现在已经有新的写法了。

    比如 Java 很喜欢标榜自己没有指针,还造了个词“引用”。但 Java 的引用是 C++ 的指针,C++ 的引用在 Java 里面不存在。这是让人很不爽的用词方式。

    中文的 Java 资料里面类似的情况更多,比如“内存模型”,中文说的内存模型和 wikipedia 的 memory model 说的是完全不相关的两件事。

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


    这些是我不喜欢 Java 的原因,我并不介意它 verbose and repetitive
    ysc3839
        43
    ysc3839  
       2021-08-16 11:21:29 +08:00   ❤️ 1
    我对 Java 语言本身没什么讨厌的,我个人不喜欢 Java 是因为它背后的公司不开放。
    有的人喜欢拿 Java 开源来证明它背后的 Oracle 开放,时不时在 Java 对比 C# 的文章里看到,说 Oracle 比微软如何如何开放,所以大家喜欢用 Java 而不是 C#。然而 Oracle 起诉 Google 使用 Java API,以及收紧 Oracle JDK 的协议都能说明它并不开放。
    C# 没有 Java 成功显然是因为早年微软不开放+不开源,但我认为 Java 成功并不是因为它开放,甚至也不是因为它开源,因为 Java 在 2006 年底才开源,在此之前 Java 就已经很出名了。
    因此我拒绝 Oracle 发布的东西,我会用 MariaDB 而不是 MySQL,我会用 OpenJDK 而不是 Oracle JDK,就算 OpenJDK 需要自己手动解压配置我也不会用 Oracle JDK 那个一键安装包。
    Ayanokouji
        44
    Ayanokouji  
       2021-08-16 11:34:08 +08:00
    因为只能用 jdk8
    pkoukk
        45
    pkoukk  
       2021-08-16 11:41:25 +08:00   ❤️ 2
    @dqzcwxb
    变革会带来混乱,混乱就是权力的阶梯。哪怕成不了大牛,也有机会成为大牛的腿部挂件。
    不像现在,入场晚的连大牛的腿毛都抱不上
    Bromine0x23
        46
    Bromine0x23  
       2021-08-16 11:45:10 +08:00
    用的人多吧?
    我觉得 JS 更 sucks,但好像批判的声音也没 Java 这么大
    bomb77
        47
    bomb77  
       2021-08-16 11:47:43 +08:00
    @TomDu #32 可能是因为话题太引战,用英语会缓解撕逼氛围?
    eric96
        48
    eric96  
       2021-08-16 11:50:26 +08:00
    硬要说具体语言的话,我说 JS 和 Python 的迭代和工程化才是 suck,割裂,混乱
    kett
        49
    kett  
       2021-08-16 11:57:03 +08:00
    因为用的人多,即便只有一少部分人不满,在这么大的使用基数下也是一大批人。
    yazinnnn
        50
    yazinnnn  
       2021-08-16 12:06:47 +08:00
    等 jdk17 发布了就把线上环境切到 17

    ps,kotlin 项目
    charlie21
        51
    charlie21  
       2021-08-16 12:32:08 +08:00
    @Rwing #10 怎么赵劼还做过争议性这么强的帖子 不过确实总结得很透彻
    miniwade514
        52
    miniwade514  
       2021-08-16 14:21:45 +08:00
    @cansiny0320 而且楼主发完贴之后就不说话了
    sutra
        53
    sutra  
       2021-08-16 14:29:25 +08:00
    这个 thread 下,居然没有 PHP,不和谐。
    speedofstephen
        54
    speedofstephen  
       2021-08-16 14:42:36 +08:00
    哎,这么多人讨厌 Java,本 Java 粉丝其实很能理解。直言不诲的说,我很讨厌 PHP 。但是为什么讨厌呢?我想了了想可能是因为某些使用 php 的人,他们实现功能的方式过于的简单粗暴,不考虑扩展性。《编程思想》,《重构》基本是每个 Java 开发都会看的。有可能是因为小城市,这里的 PHP 开发写的东西简直可以作为书上的反面典型。 总结了一下站内的回复,感觉多数人讨厌 Java 也是相同的原因,他们觉得 Java 背后的群体代表的就是不思进取,故步自封的保守派。还有的人说因为培训的大多是 Java,所以 Java 这个群体的平均水平不高。这个确实是事实,但这不是 Java 的错。
    tt67wq
        55
    tt67wq  
       2021-08-16 18:04:42 +08:00
    主要是恶心国内的 Java 面试官吧,Java 语言本身瑕不掩瑜
    ao99
        56
    ao99  
       2021-08-16 20:43:45 +08:00   ❤️ 1
    忘记在哪看到的一句话:“Java 是个很糟糕的语言,但它无所不能”
    liuxu
        57
    liuxu  
       2021-08-16 20:48:56 +08:00
    谁 hate java,我刘某人第一个带着 php 的兄弟办他
    csy123
        58
    csy123  
       2021-08-16 23:51:01 +08:00
    @cansiny0320 #30 提高讨论门槛吧
    unlimitedsola
        59
    unlimitedsola  
       2021-08-17 00:33:54 +08:00
    @Leviathann 守旧的多数还是不愿学新知识。
    cenbiq
        60
    cenbiq  
       2021-08-17 18:12:47 +08:00
    刚刚思考了整整 10 分钟,愣是没想到什么优点
    secondwtq
        61
    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
        62
    james122333  
       2021-08-18 01:27:30 +08:00 via Android
    因为人不是机器 计算机产生的目的就在于此
    本来目的是节省时间 反而要花更多时间不就更痛苦 不只 java 很多语言越来越多不必要的複杂度 有人爱人生耗在这样的事物上吗
    语言本身来讲 java 都不是很类 unix
    james122333
        63
    james122333  
       2021-08-18 01:40:47 +08:00 via Android
    @speedofstephen

    编程语言都可以考虑扩展性 一开始有基本规范就足够 为了安全以及规范还有延续风格目的 所谓对象抽象化带来的扩展性还会被打折
    想改却改的头痛就是对象带来的问题
    CRVV
        64
    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
        65
    charlie21  
       2021-08-20 18:21:23 +08:00
    anyxchachapoly
        66
    anyxchachapoly  
       2021-08-31 09:57:23 +08:00
    讲实话,没搞懂为啥通篇英文,你这內容用中文表达又不是特别困难,中英夹杂可能开会习惯的话,我感觉也能接受,但你里边有明显中<>英用法的句构,何必呢
    THESDZ
        67
    THESDZ  
       2021-09-03 10:38:23 +08:00
    实际上的问题在于 java 的定位,我个人理解的是,java 为了降低使用门槛,或者说,提高编码质量的下限,即,水平再差的人,写出来的代码也会因为语法的规则,代码质量也不会太离谱.

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

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

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

    总而言之,语言自然有其优势,工具只是适用不适用,不应该有鄙视链,你可以说 我现在的水平不需要 java 来帮我做约束,我可以用动态语言,写出结构清晰的代码,或者说,java 的强约束让我无法写出我想要的灵活功能,而非全面否定 java 或者 javaer
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   994 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 172ms · UTC 22:10 · PVG 06:10 · LAX 15:10 · JFK 18:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.