讨论 Java 相比其他编程语言(c++, go, rust 等)的缺点

2023-12-06 09:54:12 +08:00
 steelshadow39

本人学生,我自己是写 Java 的,最近发现身边技术能力远高于我的同学对于 Java 这门语言的态度并不友好。由于没有大型互联网项目的经验,所以还没有体会到 Java 相较于其他几种语言的瓶颈,自己能想到的缺点也就性能相对较弱,代码冗长(我本人觉得这种代码即注释挺方便理解的)。Java 的生态可能是最全的吧?并且现在互联网公司大头应该还是 Java (个人想法,我猜想一些公司仍然使用 Java 是因为换门语言的成本太高?所以求稳)。

想请教各位 V 友的看法,以及在国外编程语言的发展趋势是什么情况?

只做理性讨论,没有“XX 语言是最好的”这种想法,谢谢。

23513 次点击
所在节点    Java
162 条回复
fox0001
2023-12-06 18:47:24 +08:00
#1 结帖,#9 补完。相比之下,个人喜欢 go 。但企业开发还是推荐 java ,spring 框架成熟,也好招人。
byte10
2023-12-06 18:49:20 +08:00
@CaptainD 对头。

他们说一个语言很差,还是很偏见。java 适合团队开发,自己写代码的话。js ,go ,是可以一把梭,但是你后面扩展和维护就相对困难一些。
mmdsun
2023-12-06 19:00:22 +08:00
主要原因还是大多 Javaer 水平太低了,不愿意去碰新技术,特别是 Java 后端。

就拿多线程来说,很早就是 CompletableFuture+异步 Stream 流。 结果大多数人还得线程池 submit+get 。

还有就是 Rx 库、Reactive Programming 。Rxjava 、Rxjs 、RxSwift 在前端、移动端风靡时。Java 后端几乎没有声音,Spring Webflux 出了好多年了、R2dbc 反应式数据库 star 还不过 1 千。还各种吐槽 Webflux 不好用来劝退他人。我上上家公司外企几乎全栈反应式架构。

还有 fp ,当 Java 8 支持各种 Monad 、compose 、curry 化都没有问题时,居然看到有人反对在 Java 中用函数式编程,和 lambda 表达式,简直逆天了。

以后可能是虚拟线程,结构化并发,Data Oriented Programming ,然而面试官还在问 Java 8 的新特性😂
oamu
2023-12-06 20:54:18 +08:00
@mmdsun 异步编程确实不好,业务代码嵌套在异步流程结构中,可读性差;运行时脱离上下文,debug 和维护都更加困难。虚拟线程才是未来,希望有朝一日能用上吧。
chenjiangui998
2023-12-06 21:02:13 +08:00
语法这些都是其次, JDK 太垃圾了, 很难理解一个数组类型 jdk 能定义出一堆乱七八糟的东西来, 可能我水平不行吧,
james122333
2023-12-06 22:24:22 +08:00
1. 非脚本 命令行不友好
2. 开发需要偏重的工具否则累人
3. oop 并不直观 搭配使用一些动态语言特性更杂 难以直观的追溯问题原因
4. 包管理工具反人类 格式过于複杂 变相实现一种 dsl 语言
5. jar 包不能保护原始码不被 decompile 出来
6. 资源消秏过重
7. 学习耗时太多而学到的多半是专属的东西 cp 值并不高
CaptainD
2023-12-06 22:59:40 +08:00
@steelshadow39 #27 有的语言擅长系统编程比如 Cpp 、Rust ,有的语言擅长 ML 比如 python ,语言特点不同擅长领域不同,这是正常,如果说我长期在系统编程领域内混,看不起抽象程度更高的语言,显然是不客观的
adskhf
2023-12-06 23:04:34 +08:00
@ganbuliao 对 go 的拥护者我只能说,求求你们学习一下 programming language theory……学了就知道 go 的设计有多烂了(关键词 sum type ,null safety ,default zero value ),人家 java ,c++确实也烂,但是人家都几十年前出的语言了,你 go 这么晚才出……也不知道吸取教训……
ikas
2023-12-06 23:18:27 +08:00
语言而已,脚踏实地学一个比什么都好

规则相当复杂的 c++,然后规则相当容易的 java,两个掌握了,其它的不过是熟悉语法

真正要学的是技术不是语言语法,而是方法,思维
hez2010
2023-12-06 23:44:08 +08:00
@murmur 你首先排除的 C# 第一时间接受了龙芯的 LA64 移植合并进入了主线,而你说的 spring cloud alibaba 所谓国产的光缺因为某些懂得都懂的原因至今都没能将 LA64 的移植成功合并入 openjdk 上游。
holeecow
2023-12-06 23:53:35 +08:00
@BBCCBB rust YYDS 真的挺有意思的
IvanLi127
2023-12-07 02:28:48 +08:00
@pkoukk 我感觉 hashmap 这类 java 经典面试题,就是个死记硬背的题。 我以前应试前端、其他语言后端也会被问到这类 java 的题,还特别说了是 java 的 xxx 实现,所以该卷都卷🤣
fpk5
2023-12-07 02:39:41 +08:00
写 C 写多了 10000%会觉得 Java 又臭又长
LeeReamond
2023-12-07 04:08:25 +08:00
和其他语言相比,java 缺少一等公民变量,又缺少二等公民函数,那自然只能从三等公民算起了......
dayeye2006199
2023-12-07 05:15:06 +08:00
抛开场景搞语言引战纯属耍流氓啊
anjingdexiaocai
2023-12-07 08:18:01 +08:00
个人不觉得 Java 有啥问题,用过 kotlin 也没别人说的那么好,感觉相比高版本的 Java 没啥优势。
gtx990
2023-12-07 08:23:22 +08:00
@mmdsun

你知道 java 的 project loom 为什么第一版是 stackless coroutine 而最终版是 stackful coroutine 么?就是因为异步需要改代码,同步不需要。并且需要从上到下全都改,从 webflux 改到 r2dbc ,只要你有任何一个 dependency 是同步的就寄了。改完了你得到了什么呢,如果是 compute heavy ,改了跟没改一样,如果是 io heavy ,瓶颈还在数据库,压测的 tps 还是一样的,顶多省两台后端的机器。

你跟老板汇报,我花了一个月用最酷的技术重构了后端,老板问你除了让同事更难看懂之外有什么产出,你怎么回答?
siweipancc
2023-12-07 08:43:06 +08:00
啥都用,体感 Lua 最难受,给饥荒写个 mod 难受的要死
keymao
2023-12-07 09:08:51 +08:00
企业级应用的基座,你拿来和 rust go 甚至是 C++去比? 这四位除了 rust 和 c++算一个赛道的,其他几位根本就没啥关系好嘛...

go 能做后端,但是企业级应用就是不认可那有什么办法? 光一个 Spring 就足以奠定 Java 的稳固根基了。


差的不是 Java ,你觉得 Java 有问题,多半是你自己的问题。 还有说什么 Java Boy 的 不清楚,但是说 Java 吃内存那简直是贻笑大方,带自动垃圾回收的就没有不吃内存的。
xinyu391
2023-12-07 09:19:03 +08:00
Java 的缺点 就是 入门太简单了!

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

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

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

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

© 2021 V2EX