首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

只有我觉得 Java 很糟糕吗

  •  1
     
  •   bokchoys · 52 天前用 iPhone 发布 · 5216 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。
    环境配置,到编写代码,都比其他语言复杂一些
    为什么那么多公司用?
    第 1 条附言  ·  52 天前
    不好意思!不知道帖子会引战。
    楼主还是学生。
    第 2 条附言  ·  52 天前
    期待更多大佬的解答。求学 ing
    第 3 条附言  ·  52 天前
    帖子标题没有恶意。
    93 回复  |  直到 2019-03-04 09:02:51 +08:00
        1
    yukiww233   52 天前   ♥ 1
    日常引战
        2
    woscaizi   52 天前 via iPhone   ♥ 1
    因为 java 的类型检查,强约束,编译时检查可以使普通程序员也能写出还可以运行的代码。
    并且 java 生态非常非常好,尤其是国内。
        3
    Lonely   52 天前   ♥ 1
    是的,走好不送。
        4
    rockyou12   52 天前
    回 lz,真的只有你。特别是你写过大点的项目,多会几门后端语言后才知道为啥
        5
    misaka19000   52 天前 via Android
    是的,Java 很垃圾,PHP 是世界上最好的语言
        6
    bumz   52 天前   ♥ 2
    只写 50 行代码你用机器码都没人拦你

    500000 行代码没有静态检查全靠运行时?重构都没法重构
        7
    lynskylate   52 天前 via Android
    等你写 c 艹写多了就知道 java 有多好了,有相对完善的标准库,完善的包管理,丰富的生态,优秀的虚拟机(还可以 hack 字节码),不用考虑对象生命周期,操蛋的 abi 兼容,过多遗留代码以至于语法上。以上几点 c 艹基本都很烂,就标准库来说,到现在还没有网络库,文件库,想要跨平台还得自己去做兼容。
        8
    Linxing   52 天前 via iPhone   ♥ 1
    @woscaizi golang 了解下 除了国内生态圈这一点
        9
    orangeade   52 天前 via Android
    所以诞生了 kotlin/scala/go,个人项目我才懒得用 Java,公司项目无所谓,循行内部编码规范就行
        10
    lynskylate   52 天前 via Android
    等你写 c 艹写多了就知道 java 有多好了,有相对完善的标准库,完善的包管理,丰富的生态,优秀的虚拟机(还可以 hack 字节码),不用考虑对象生命周期。而 c 艹这些方面都很烂,就标准库来说,到现在还没有网络库,文件库,想要跨平台还得自己去做兼容。除了缺少上面 java 的优点外,c 艹还有操蛋的 abi 兼容,过多遗留代码以至于写库还得向下兼容到 98。


    ———————————————
    打错重发一遍
        11
    lhx2008   52 天前   ♥ 6
    并不复杂,相反是简单,Java 用少量的可预测的 API 构建高楼大厦,而不是各种组装好的预制板,通过奇怪的切割方法来使用。
    另一个证明 Java 简单的方法是,你可以比较轻松的看懂别人写的 Java 代码,但是你在 Python 和 Javascript 里面要看懂那些“高手”写的代码是极其困难的。
        12
    liujj   52 天前 via iPhone
    1 考虑招人成本,至少培训班出来的写 Java web 领域还是没问题的
    2 企业级稳定性和生态,Java 是国内事实上的标准,良性循环加一大堆布道师
    3 然而对于个人而言,学习 Java 很难深入系统底层,深入的是 jre,有一句笑话是写 Java 的不知道 nginx 也不懂 linux 原理
    4 所以我选择 golang
        13
    woscaizi   52 天前 via iPhone
    @Linxing golang 确实不错,不过需要多人协作的项目,还是会考虑 java,因为会 go 的人还是少。
        14
    Raphael96   52 天前 via Android   ♥ 2
    c# 比 java 好,什么你说生态环境?哦,你们聊我先走了
        15
    Salvation   52 天前   ♥ 3
    觉得糟糕就不用呗.

    1. 一个东西,如果你认为糟糕,但是用的人非常多.你应该自己沉下心好好思考下,思考其优点究竟在哪里,为什么这个优点可以盖过其缺点等等内容.这个思考过程对人的帮助很大.
    2. 这种帖子很难拿到真实的原因.因为你没有真正用这几种语言写过、维护过大型项目.很多理由写在纸上是一个意思.但是看到再多次也不能理解到.等动手做一次之后就能很清楚.所以你看了再多的回帖,不懂的还是不懂.你去做一下,可能瞬间就明白了.
    3. 糟糕这个词形容 java 不太好.如果你认为糟糕,首先你得说清楚,哪个场景,和什么语言对比,结果如何,为什么糟糕.否则你说的这些缺点未必是真正的缺点.如果能具体到某个点上去聊.能深入一些
        16
    webjin1   52 天前 via Android
        17
    westoy   52 天前
    你去 CSDN、javaeye 之类的论坛找找十几年前的论战, 尤其敏捷开发流行的时候各种动态语言撕 X Java 的, 理由和你的差不多

    于是后来又流行了一句话, 动态一时爽, 重构 XXX

    就入门门槛、开发效率、防止犯错, 有利于重构、生态这几块,java 算是最均衡的
        18
    bokchoys   52 天前
    @lynskylate 谢谢,了解啦
        19
    bokchoys   52 天前
    @liujj java 要理解的层面需要很多,谢谢解答
        20
    bokchoys   52 天前
    @Salvation 谢谢你的建议,很中肯。
        21
    bokchoys   52 天前
    @yukiww233 不好意思!不知道帖子会引战。想更了解一下
        22
    bokchoys   52 天前
    @orangeade 我的想法应该很接近你了
        23
    bokchoys   52 天前
    @rockyou12 我接触的还太少了,谢谢!
        24
    bokchoys   52 天前
    @lhx2008 谢谢解答!了解啦
        25
    bokchoys   52 天前
    @misaka19000 Ahahahaha
        26
    bokchoys   52 天前
    @westoy 了解,谢谢!
        27
    wly19960911   52 天前
    复杂的有自己的理由,首先复杂的原因是有一部分冗余代码用来提高设计上的灵活。

    反而越灵活的代码越难入门的时候掌握到一些设计上的门道,容易走偏。
        28
    DevRoss   52 天前 via Android
    不觉得糟糕,但觉得写得不爽罢了
        29
    wly19960911   52 天前
    @wly19960911 #27 我就举例 js 把,js 很多时候把 java 基础的面向对象各种反复强调实现,表面看起来灵活,你只能知道实现了面向对象,入门的时候学习你根本体会不到面向对象的好处,另外如果想要面向对象,为什么不一开始就看面向对象实现的东西呢。
        30
    1002149271   52 天前 via Android
    又臭又长,人生苦短,所以我用 python …
        31
    bokchoys   52 天前
    @1002149271 ahahahah
        32
    Cbdy   52 天前
    Java 历史悠久也很流行,所以有很多用户,这些用户中有很多是半吊子或者民科
    事实上 Java 并不糟糕,相反,它的竞争对手更糟糕(如 Python、Go 甚至是 C++)。当然 Java 平台确实有一些过度工程或者过度设计的地方,但是放到 2019 年看,Java 仍然是最优秀的严肃的工业级别的通用编程语言

    如果你觉得 Java 糟糕,并不是你比 Java 设计者聪明或者 Java 应在 IT 行业的演变过程中淘汰,而是你没有掌握正确的方法
        33
    ClutchBear   52 天前
    就虎扑这种口水网站,
    用 "只有我觉得 xxxx" 当标题的, 直接小黑屋 15 天以上
        34
    loveCoding   52 天前
    Intellij idea 可以让你一直爽
        35
    lovedebug   52 天前
    Java 也在进步,只是你没看到被网上文章带了节奏
        36
    lovedebug   52 天前
    Java 的生态目前是最好的。下一个可能 Node ? python 或者 Go ?不确定
    Java 底层的 JVM 技术是目前不少新式语言在学习的。
    Java 非常适合团队开发,犯错可能性少,Node Python 等弱类型语言团队开发考验每一个人的水平
        37
    HuHui   52 天前 via Android
    个人觉得目前就生态上,go 可能有希望
        38
    bokchoys   52 天前 via iPhone
    @lovedebug #36 了解。谢谢!
        39
    micean   52 天前
    生态、调试、重构,用来用去只有 java 最舒服
    啰嗦是啰嗦了一些
        40
    lht260   52 天前
    兄弟,等你写过大型项目就知道为啥了
        41
    gejun123456   52 天前 via iPhone
    intellij 熟练点 很多代码都能自动生成
        43
    rockyou12   52 天前
    @HuHui go 的工具链真的难以表达……这么久才好像快有个稳定的包管理工具

    以前写,项目必须在 gopath 下也搞得我很恶心
        44
    Maboroshii   52 天前
    golang +1
        45
    presoul   52 天前 via Android
    只有我觉得 这种标题的人都是什么心理…
        46
    bokchoys   52 天前 via iPhone
    @presoul #45 没什么心理
        47
    nicevar   52 天前
    我们都老了,这是 00 后找存在感专用标题格式。。。
        48
    bokchoys   52 天前 via iPhone
    @nicevar #47 😅
        49
    icylogic   52 天前 via iPhone
    我从短暂的人生当中学到一件事……

    所有说自己无意引战的,全部当做引战处理就可以了!
        50
    josephok   52 天前 via Android
    @rockyou12 go mod 包你爽。
        51
    josephok   52 天前 via Android   ♥ 1
    Rust 也挺好的。就是国内用的少。
        52
    dot2017   52 天前
    Java 别的都好,内存回收实在太垃圾!
        53
    deadEgg   52 天前
    以前 java、python 写了很久,

    现在在写 pure c,来对比下写 c 你将遇到什么

    1. 平台移植兼容,你将需要面对各种平台写一堆另新手费解的宏,定义自己的基本数据类型根据编译器,cpu 位数,我见过一个很老的项目甚至兼容 8bit 的平台。不同的平台提供的库也很难去弄,一个不成熟的 c 项目可能带给你的是编译要弄很久。
    2. 编译选项,不同的编译选项导致编译进不同的代码,所以你有时候会发现一堆定义相同的函数,当遇到这类事情你还得了解编译场景。。
    3. 混编汇编,别问,问就看不懂
    4. 多流派写法,不同的项目都有自己的写法流派,有些 struct 去面向对象,去做接口,有些写法不理解个半天根本不明白它在写什么。
    5. trick 代码,可以说 c 是最能写出花样的,新手很难理解一些 trick 的代码片段。比如内核常用的 container_of 这种。或者一些大数实现中对结构内存的分配调整,很难以上层的思维模式去理解,上层可能可以很轻松的获取操控内存大小,但是在 c 里面,总是很难明白在一个 struct 里面的 char *到底里面有多大内存。
    6.分包自由,代码很长,我有见过把所有核心功能都放到名为 lib 包的项目,一个.c 文件可能几千行然后也不面向对象,只面向功能去做(或者说面向组件),上手一个 c 的项目其实都很去理解他的核心思路。
    7. 和别的代码混着写,反正 makefile 足够自由,可以加入很多别的语言在里面。。

    所以,少年珍惜 java 把,java 这门语言可以说是上手算是挺快的了。
        54
    msg7086   52 天前
    不如试试 C 井?
        55
    justin2018   52 天前
    楼主 来做前端 😁~ 总有新花样~
        56
    zorui   52 天前
    当你使用其他语言做一些项目的时候你才会想起 java 的好。
        57
    cpdyj0   52 天前
    感觉吐槽的点不太对,环境配置这都不叫事,况且我觉得 Java 算是简单的了……
    私以为 Java 最大的缺点(或者说是最大的优点-见仁见智吧)语法过于简单,导致表达能力较低,写起来不爽;不过也极大地限制了大家自由发挥,加之设计模式的推广极大降低了理解他人代码的难度(?).
        58
    zhazi   51 天前 via Android
    @cpdyj0 语法简单,导致表达能力弱,你能说说语法难的语言怎么体现表达能力了吗
        59
    vegito2002   51 天前
    java 编写代码复杂???
        60
    EscYezi   51 天前 via iPhone
    Java 算是相对简单的语言了,想要的包 Maven 都能找到,语法简单限制严格,比较啰嗦但是可读性和可维护性好。
    曾经我也一度瞧不起 Java,因为太啰嗦。写了一段时间 PHP,回来捡起 Java,才知道自己当初还是太年轻,代码量一大,才知道 Java 的好。
        61
    EscYezi   51 天前 via iPhone
    @zhazi #58 用 Kotlin 举个简单的例子:
    fun f(i: Int, s: String?): String {
    return s ?: when (i) {
    1 -> "one"
    2 -> "two"
    3 -> "three"
    else -> "unknown"
    }
    }
    同样的功能用 Java 实现一下试试(
        62
    KasuganoSoras   51 天前
    @EscYezi #61
    <?php
    function f($i) {
    $list = Array("one","two","three");
    return isset($list[$i]) ? $list[$i] : "unknown";
    }
    (笑
        63
    KasuganoSoras   51 天前
    @EscYezi 忘了还有空指针判断
    <?php
    function f($i, $s) {
    $list = Array("one","two","three");
    return $s == null ? isset($list[$i-1]) ? $list[$i-1] : "unknown" : $s;
    }
        64
    hasunday   51 天前 via iPhone
    日常引战。lz 不想学 java,可以学 go scala
        65
    SpiderXiantang   51 天前 via Android
    java 就是为了简化工程复杂度而生的
        66
    kyuuseiryuu   51 天前 via iPhone
    @woscaizi php 没有这么多约束菜鸟程序员也能写出可以跑的代码,嘿嘿嘿嘿[滑稽]
        67
    13160919135   51 天前
    生态好,太多公司用,不学不好找工作。虽然我也认为这个语言很垃圾
        68
    cuebyte   51 天前
    覺得複雜是因為沒用到正確的工具,sdkman 推薦給樓主。
    另外,各種 SSM/SSH 配置的複雜純粹是 legacy,用上 spring boot 就爽快許多了。

    Java 除了 NullPointerException 以外沒大毛病,可以通過 lombok 或者 Kotlin 消除,況且這個問題其他語言也有。
    如果覺得文件體積大,Jigsaw 歡迎你。
        69
    cuebyte   51 天前
    @Linxing
    @orangeade
    @liujj
    @rockyou12
    @Maboroshii
    請教一下,忽略人的問題(命名規範設計模式等),儘從語言和生態上來說,go 比 Java 好在哪?
        70
    woscaizi   51 天前 via iPhone
    @EscYezi 老铁,是不是查表法更优雅? kotlin 确实很简约,不过 java 的很多代码可以用 idea 来生成啊。
        71
    crack105   51 天前
    IntelliJ IDEA 一直爽
        72
    dbpe   51 天前
    动态语言一时爽...重构火葬场...
        73
    orangeade   51 天前
    @cuebyte #69 Docker/k8s/istio/grpc,一堆容器、微服务相关的基础设施都是用 Go 写的
        74
    abcbuzhiming   51 天前
    @EscYezi 我也一样,只有在静态语言写过一段时间回见,跳到动态语言后,被动态语言的优点和缺陷都洗礼过,才知道 Java (静态语言有类型检查)的好。我现在基本不考虑任何没有类型检查的语言写项目
        75
    k8ser   51 天前
    简单的例子,代码水平不高的时候,python 里面一个函数想返回啥返回啥,一时爽了,后面维护起来跟坨屎一样。
        76
    Allianzcortex   51 天前
    我也曾经有同样的想法并且中二到发朋友圈长篇大论说这个,真想捶死自己....楼上的很多回复让我想起了之前看有人发过 Pornhub 的面经, [Manager 问了一些基础的问题,C++和 Java 的区别,多线程,垃圾回收,然后问了一个项目。大约半个小时。他们组主要是用 Go 和 Java] ,Java 和 Go 果然是未来的趋势
        77
    lihongjie0209   51 天前
    环境配置 复杂???????????
    还有比 java 环境配置简单的嘛????
        78
    sonyxperia   51 天前
    可能他们不觉得 Java 糟糕吧
        79
    EscYezi   51 天前 via iPhone
    @woscaizi #70 只是举个例子对比一下 switch 和 when2333
        80
    gam2046   51 天前
    Java 从业者,同样觉得 Java 有些方面有点糟糕,主要原因是历史包袱太过沉重,在这种古老语言上,Java 的向下兼容做的算是不错了。相比更古老一点的 Python,直接语法大改了。对标 C,Java 的入门门槛真的低了很多。其他与 Java 同时代的编程语言,目前还在使用的,基本上都已经变成特定场景下的特定编程语言。

    但是与同类型的.Net 相比,毕竟.Net 出生晚,没有那么多需要顾及的历史包袱。.Net 优越性比 Java 高不少。不过反过来说,因为 Java 历史悠久,因此大量的第三方轮子很多,并不需要自己造,也就是所谓的生态好很多。

    单纯从语言上来讲,我自己觉得.Net 比 Java 好的很多。Java 那个基于类型擦除实现的假泛型,就搞的很头痛。
        81
    tairan2006   51 天前   ♥ 1
    Java 的优越性在生态上,语法简单也是优势。但是又臭又长,包特别大,泛型实现垃圾。

    .Net Core 语法好,生态差。

    Golang 语法简单,生态也好,但是没有泛型,抽象能力差。 所以 Go2 才是最好的选择(还没有
        82
    gamexg   51 天前
    在 C#、go 还没有出来时,java 基本是大型项目最好的选择吧。

    c/c++ 的内存管理是个大问题,即使顶级公司一样会出现空指针、内存泄漏等问题。

    php、python 等不是静态类型语言,小项目没什么问题,大型项目真的是重构火葬场。

    java 的槽点大概是写起来非常啰嗦,非 java 程序员,记得一次临时用 java,发一个 http 请求用了 30 多行。但是这个问题并不是无解,使用第三方库后一个 http 请求几行就能够完成。

    .net 系列现在的确挺好。但是 x 年前,.net 只能在 windows 下运行。第三方开源尝试实现 linux 支持,结果被微软威胁,我记得开源版被迫停止开发并执行代码审计移除可能侵权的代码。现在微软倒是开始拥抱开源了,但是黑历史在那里。

    go 太年轻了,生态倒是还好,但是开发人员招不到(付费简历库全省居然只有 3 份简历...)。还有说不支持泛型是个问题的,不过我感觉无泛型支持问题倒是不大,也就个别时候多写点代码吧。
        83
    wangxiaoaer   51 天前
    @tairan2006 #80 哈哈哈,不知道有生之年能不能等到 go 的泛型和方便的二进制发布以及包管理,目前的 gomod 感觉用起来还是不爽,总感觉一个包管理直接引用源代码很不灵活。
        84
    Cbdy   51 天前 via Android
    @wangxiaoaer
    Go 更像一门 DSL,这些设施不要也罢
    当时怎么说的来着? Go 不需要泛型
        85
    wangxiaoaer   51 天前
    @Cbdy #83 如果作为 DSL 的话,那就没必要跟 java c#比较了,但现在看来,远远不是只作为 DSL 的存在。

    所以“ go 是 c++的升级版”这种观点,我觉得在现阶段还是比较稳妥的一种说法。目前跟 java 还是没法比。
        86
    wangxiaoaer   51 天前
    @lhx2008 #11 我也觉得 java 不管是从可读性还是编码速度都很好,即使可能会有乱用设计模式绕来绕去,但是起码读起来很清晰,写起来也没有各种千奇百怪的符号。

    最起码,除了泛型的 < > 和 lambda 的 => 其他都不需要组合键。
        87
    Cbdy   51 天前 via Android
    @wangxiaoaer C 语言我信,C++就算了
        88
    cuebyte   51 天前
    @orangeade 有更多的庫和工具是用 Java 寫的啊,Node 和 Python 也是,這並不說明任何事啊。
        89
    closedevice   51 天前
    忌讳半瓶子水的时候发表任何语言的评论,语言的好坏,得先等你深入了解并实战几门语言之后,有更好的结论.上来就来各个 XXXX 语言不好,你得举出各种同样情况的对比案例,然后才能进一步分析吧
        90
    sweetx523   51 天前
    半吊子水的学生==。
        91
    ifxo   51 天前
    主要是用的人多了,没人敢说它不行,好比皇帝的新衣,你会说自己傻吗
        92
    yingfengi   50 天前 via Android
    生态是一切。
        93
    haon   50 天前
    借楼问一下 go 的生态好在哪里
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1503 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 17:08 · PVG 01:08 · LAX 10:08 · JFK 13:08
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1