本人学生,我自己是写 Java 的,最近发现身边技术能力远高于我的同学对于 Java 这门语言的态度并不友好。由于没有大型互联网项目的经验,所以还没有体会到 Java 相较于其他几种语言的瓶颈,自己能想到的缺点也就性能相对较弱,代码冗长(我本人觉得这种代码即注释挺方便理解的)。Java 的生态可能是最全的吧?并且现在互联网公司大头应该还是 Java (个人想法,我猜想一些公司仍然使用 Java 是因为换门语言的成本太高?所以求稳)。
想请教各位 V 友的看法,以及在国外编程语言的发展趋势是什么情况?
只做理性讨论,没有“XX 语言是最好的”这种想法,谢谢。
1
lizhian 357 天前
占内存,语义啰嗦,反过来也是它的优点,定义明确,入门简单.但是后面写着写着就觉得很烦,羡慕其他语言的语法糖
|
3
NessajCN 357 天前 4
我对 java 本身没什么好恶
不过有些 java boy 明明其他啥也不会却喜欢张口闭口 java 天下第一, 什么 java 取代 go, java 取代 cpp 那就很招人烦了 |
4
Hyschtaxjh 357 天前 via iPhone
太卷
|
5
yazinnnn0 357 天前 5
只有一个赛道的才有比较的意义, java 的应用场景和 c++和 rust 都没啥关系, 没有比的必要, 和 go 比也只是部分重合
如果对比 csharp kotlin 这种应用场景大范围重合的语言, java 的表达能力较弱, 历史包袱大一些, 糖少一些, 脑细胞多费一些 |
6
sunwei0325 357 天前
indeed 搜一下, 北美后端也是 java 为主
|
7
PTLin 357 天前
倘若你没有学习过 cpp ,go ,rust ,那么和你讨论 java 相比其的优劣是毫无意义的,你很难理解 java 相比这些的优点究竟是什么,也难以理解那三个语言解决了什么问题。就像我上一个天天只会说 java 天下第一的同事一样。
|
8
murmur 357 天前 1
java 看市场和占比已经赢毛了,那就不叫缺点叫特色了
|
9
yazinnnn0 357 天前
近些年流行的工业语言大多有向 ml 学习借鉴的趋势
比如 kotlin fsharp swift rust dart, 都有 ocaml 的影子(go 除外) |
10
murmur 357 天前 10
很多人看 java 语法一坨屎,啰嗦,这个不支持那个不支持,但是 java 背后是一个帝国,别的语言还在造轮子的时候,java 这边给你准备好了开箱即用的停车场,连车带车场都给你搭好了
|
11
iyiluo 357 天前
和你提到的语言比较,缺点是多了个 jvm ,运行前要多启动一个虚拟机。Java 的特点是稳重,向前兼容,社区支持度高,很多系统默认提供 Java 的对接文档
|
13
28Sv0ngQfIE7Yloe 357 天前 5
「最近发现身边技术能力远高于我的同学对于 Java 这门语言的态度并不友好」
你都说了吗,是同学,等你工作干螺丝钉工作的时候,就知道在成熟的 java 项目里,写着所谓「冗长、啰嗦」的代码,但是代码能稳定运行,不出 bug ,是什么感觉了 |
14
steelshadow39 OP @PTLin 是这样的,水平还不够,只有都懂才能对比优劣
|
15
Exception615 357 天前
如果你熟悉 java ,那么上手 scala 会很快,都是基于 JVM 上编译运行,scala 的语法和函数式编程用起来更便捷
|
17
cookii 357 天前 via Android
先不说就业环境和语法层面。
个人认为 Java 最大的问题是起动慢,占内存,需要跑在 jvm 上。 虽然 graalvm 可以解决这个问题,但历史包袱很多,很多库都不支持,遇到问题很难排查,也没听说谁家把 native java 放到生产上跑。 |
18
yannxia 357 天前
没什么大缺点,Java 这些年还是有很多的进步,固守 8 的话,那确实没啥意思了。
- Java 的内存占用较多(当然这个锅主要 Spring 要背) - 语法啰嗦就见仁见智吧,现在都有 var 了,类型定义也没觉得比 Rust 和 C++ 啰嗦啥。 说起来,Java 口碑好坏主要取决于,对 Spring 的观感如何,喜欢像 Gin(go) 之类脚手架,自然对 Spring 嗤之以鼻,但是也有人就是喜欢这种全生态的体系(在下就是)。 |
19
CaptainD 357 天前
[身边技术能力远高于你] 这并不代表他们的技术实力真的很强,也许是你们还没长期工作过的片面认知,或者他在某个方面很强,但对 Java 本身的了解不够
|
20
PTLin 357 天前 3
@steelshadow39 这种问题最好的方法还是自身的多加学习,自己解答自己。帖子里大部分回答对你都没价值,因为你分辨不出来对面站在什么角度和你分析的优劣。
|
21
NoThing2Talk 357 天前
啥都面相对象,写个 main 函数也要创建 class ,写多了烦
|
22
QWE321ASD 357 天前
你自己编码为什么要在意别人,语言是工具不是信仰.
|
23
BBCCBB 357 天前
java 挺好的. 其他各种语法糖的语言不一定好.
我 Java, python, go, rust 都学过, 主业 Java, 也看了 go 的好几个开源项目的源码, 不太喜欢 go, 现在慢慢学习 rust 中. rust 复杂度太高. 但语言很棒 Java 算是各种语言的一个中间点吧. 没有那么多魔法. 但需要魔法的地方绕一点也能实现, 你去大一点的公司/项目, 就知道 java 的好处了.. 当然缺点也是有的. |
24
nothingistrue 357 天前
门槛低但上限高,同时学习曲线是阶梯型的(有资质的人平缓前进,无资质的人被淘汰,没有捷径)。这个是 Java 最特色的,同时是优点和缺点。
比较编程语言,这就跟比较英语跟法语一样,毫无意义。 |
25
Martens 357 天前 2
占内存,启动慢,打包体积大
更偏向于应用层,封装度高 |
26
Leviathann 357 天前
你在 java 项目里会使用 ADT 和 pattern matching 的吗
这就是 java 的发展趋势 |
27
steelshadow39 OP @CaptainD 偏底层研究的人应该更偏向于 cpp 和 rust ,这可能是一个原因
|
28
ProphetN 357 天前
JAVA 语言本身和全家桶是两码事。JAVA 作为一个中古语言,肯定和现代语言没法比,但是 Kotlin 用起来很爽。其它语言要想达到 JAVA 的稳定度和维护性,势必也要搞一堆全家桶,反过来说为啥不直接用 JAVA ?
|
29
feirisu 357 天前
这贴太水了....
|
30
RainCats 357 天前
当你工作后发现水平不一,实习生和架构师的代码你都能比较容易看懂并且维护的时候,大概就不会吐槽 java 语法的事了。
当然我没有怎么接触过其他语言,只是看过一点点 |
31
Greendays 357 天前
就是写起来麻烦,而且工作中很多企业会用很旧版本的 JAVA ,新特性用不了,写起来更麻烦了。功能上没啥可挑剔的,常规业务都有很好的解决方案。作为程序员学好几种语言是非常正常的,如果今后就打算进互联网公司做普通的工作,JAVA 作为第一种深入学习的语言没啥毛病。如果有往算法方面研究的打算,那肯定会接触到 Python 这些的,应该也不需要网友来提建议。
|
32
Nazz 357 天前 via Android
说一下 springboot ,依赖注入自动化程度很高,但是,一旦出现问题就难以排查,而且官方文档稀巴烂
|
33
StoneHuLu 357 天前
都不用跟别的比,就跟完全重合的 c#比,java 都比不了,表达能力和糖差太多了
|
34
ggvoking 357 天前
实在用不来 java ,算是半个 java 黑,占内存(大学时玩 mc ,自建服务器老是 oom ,映像非常不好),啰嗦,以及非不喜欢那个注解的方式,以前大学学 java 的时候,非常讨厌那个注解,很不直观看出跑起来的原理,但是各种框架都是用那个注解方式。现在工作这么多年 Unity C#技术栈,看到 C#代码是通过反射和属性标签跑起来的框架嗤之以鼻,一个是反射性能拉,一个是框架流程不直观。现在更多喜欢 go 和 rust
|
35
aLazarus 357 天前
java 就算再不好,起码代码规范还是有的,不会像 js 一样把一万个方法全丢在一个 js 文件里……
|
36
ocean1477 357 天前
java8 没有字符串插值,很难受。
|
37
gitrebase 357 天前
见过一个 Java 项目,全是 static field 和 static method ,当 C 语言写……就写出这种生命周期看着很混乱的东西,看着脑壳疼:
class A { public static A a = new A(); .... } class B { public static A a; public static B b = new B(a); public B(A a) { ... } .... } |
38
jeesk 357 天前
别人的意见真的很重要吗? 是技术引导业务还是业务引导技术呢? 用合适的语言就足够了。java 语法的落后不是开发者能力不行, 很多时候是为了兼容性。 我个人觉得 java 可能是为数不多兼容性做得不错的语言之一了。
|
39
musi 357 天前
@RainCats #30 就算是 java 也做不到你说的“实习生和架构师的代码你都能比较容易看懂并且维护的时候”,如果有只能说项目简单,不然按你这个逻辑用 java 就写不出来屎山了
|
40
llhhss 357 天前
缺点就是没得玩
你和技术能力远高于你的同学写出来的东西看上去和跑起来可能都是一样的 |
41
c2const 357 天前
java 缺点就是太卷 :(
C++系列就是人少岗位更少,要求更高,也卷,不过卷进去了就没那么卷了 :( -------- 但语法糖其实无所谓的,以前同事做 JAVA/安卓逆向的,可以自己写 IDEA 插件,来支持你想要的语法糖,比如支持 C 系列的#define 、#if 等预处理、支持运算符重载、支持元编程等等; 性能的问题不大,一般公司遇不到,加机器就行 :) |
42
steelshadow39 OP @gitrebase 这个是开发者自身的问题吧
|
43
fredweili 357 天前
函数式进步太慢,技术负担重
|
44
debuggerx 357 天前 1
成也多线程,败也多线程;
成也设计模式,败也设计模式; 成也 jvm ,败也……好吧,这个不算失败,只能说在很多新兴领域成了拖油瓶,曾经的优势不再明显 要不是有喷射大脑,估计还会有多几倍的人喷它 |
45
reeco 357 天前
没有意义的讨论,不如花点时间用这几门语言分别写下 side project
|
46
gitrebase 357 天前
@steelshadow39 #42 肯定有开发者的原因,但我侧重于表达语言的能力对开发者的约束
|
47
XCFOX 357 天前 3
在我看来 Java 缺少好用的 ORM 。就这一点足以否决 Java 作为互联网项目的后端。
C# 有 EF Core 、Ruby 有 Active Record 、php 有 Eloquent 、TypeScript 有 MikroORM 、kotlin 有 Ktorm ,连 Rust 这样的编译型语言都有 SeaORM 。 别的语言已经用 OOP 语法完成 CURD 业务了,Java 还在用 MyBaits 手写拼接 SQL 。 都说 Java 生态好,可是连最基础的 ORM 都没有好用的。在我看来真正生态繁荣的是 Node.js 背后的 npm 生态,当然 npm 过于繁荣、各种包库卷出花来,质量更是良莠不齐... |
48
coderzhangsan 357 天前 3
以前有句话说:穷玩车,富玩表,屌丝比电脑;程序员中的屌丝,就是比框架、比语言;好吧,说点跟技术无关的,比如你的职业规划。
如果你是个大牛,就忽略。 如果你是个普通人,或许将来发展不会太高的上限,那我的建议就是好好学 java ,虽然这语言人很多,也比较卷,但是工作这东西首要是挣钱,剩下的就是如何舒服的挣钱。 1.国内市场主流语言就是 java ,而且大部分公司规模都不会小,这些或多或少能保证就业和待遇,大环境在差,只要国内主流语言市场还是 java ,就基本可以保证有你一口饭吃。 2.java 生态没得说,你的工作至少不会造轮子,这样至少也不会出现轮子的 bug ,工作少一点烦心,生活也会比较顺心,内分泌也不会紊乱。 |
53
chenzw2 357 天前
对于我来说,单个 jvm 太占内存,至少 512M 起步,做个项目拆分个 5 、6 个模块,再加上 nacos 、mysql 等各种组件,没台 16G 内存的服务器你都不能流畅地运行起来。。。
|
54
BaseException 357 天前
@XCFOX #47 正经人用 mybatis plus 从来不手写 sql ,除非是复杂 sql
|
55
ns09005264 357 天前
对比 Go 我想不出有什么大的缺点,对比 Rust 的话,就是 null 的存在,空指针异常挺烦人的。还有 Enum 挺弱的。
|
56
Rorysky 357 天前
java 语言特性优秀,不然也不会在 web 后台占据领导地位。
但是 jvm 本身限制了应用与系统隔离,jvm 本来是抹平系统和硬件架构差异的,但是这一点在 llvm 之后变得不是那么必要一个虚拟机做这件事。 |
57
version 357 天前 1
如果你有 10w 创业.二次开发 php 或者轻量语言.
如果你有 100w 创业..就会选择 php 或者其它轻量语言 如果你有 1000w 创业.自然会选择高大上的语言.严谨的业务 黑猫白猫..能赚钱自然是好猫.. 只要国内那帮老的架构师不退休..java 还是他们唯一可控的.不可替代的优势--(代码量多.架构复杂.一般人不能接手).有时候代码烂和架构搞特别复杂也是不被裁员的优势. |
59
LykorisR 357 天前
团队开发和个人开发是完全不一样的,做个人项目开发必然哪个用着舒服用哪个,但是团队的话需要考虑水平参差不齐,这种时候所谓的“啰嗦”反而会成为优势
|
60
ionfev 357 天前
前段时间在 B 站看到了 2020 年周志明的演讲:《云原生时代,Java 的危与机》,觉得非常有启发。
|
61
steelshadow39 OP @c2const #41 卷也不算是语言问题,算是社会问题了哈哈
|
62
jorneyr 357 天前
占内存
|
63
murmur 357 天前
@ionfev 云原生的意思是一切为了上云设计,容器化,微服务,这些对 java 来说也是成立的
再一步 serverless 甚至函数计算就危险了,你的命脉都是在别人的架构上的,别人对你停服你迁移的资格都没有 |
64
murmur 357 天前
都 2023 年了不会有人以为云原生=go 吧,就简单的 curd 计数器这种业务最多加个锁那你用 go 的确也无所谓,甚至你的业务都是可有可无
|
65
jackmod 357 天前
缺点:启动巨慢。
优点:死板。 我没放错位置。 |
66
pengtdyd 357 天前
每个语言有没有语言的优势,合并非要比个高低呢?
|
67
miaotaizi 357 天前
任何语言都有他的有点
缺点大部分都是人的问题 |
68
ionfev 356 天前
@murmur 有了在 k8s 上部署 SpringBoot 程序的经历,觉得微服务时代"启动快,内存占用低,因为有集群,可以不再追求长时间不间断不出错的运行"是有一种不可阻挡的潮流。Java 现在生态非常好,但是也要顺应潮流。至于 Serverless ,感觉只是服务交付方式的一种形式,从原来的高配置虚拟机按月租年租的时间付费,转变为按使用量付费,应用场景适合算法训练类型的按次数运行的任务,不适合长时间不间断的运行的任务。
|
69
sunnysab 356 天前
我学的时候最不习惯的就是,没有 swap()。C++ 里有引用和指针,Rust 里有借用,但是 Java 里面好像是要包裹 Integer ?我到现在还不会写 swap(),写 Java 作业的时候用 if-else 感觉很难受。
其他不习惯的地方,如:不能重载运算符,导致有时候写起来较为臃肿;函数必须包含在类中、且一个文件只能有一个 public class ,文件名必须和类名一致,这些很不习惯——有时候并不想创建太多的文件。 还有就是性能(内存占用和速度)吧。前几年我的电脑内存还是 8G ,写起 Java 来,IDE 、浏览器加上微信 QQ 后我的内存就有些捉襟见肘了。用 Rust 写过一段时间的 Web 项目,占内存挺小,速度快。抛开实际开发过程中的效率,以及语言学习的难易程度问题,个人觉得软件就是应该榨干硬件的性能(当然这中间有 balance ,现今也不用去用汇编做上层该干的事,我只是表达这么个意思)。 可能有些规则记得不清,或有办法绕过。轻喷。目前在写 C++ / Rust ,Rust 更多一些。 |
70
ZeroDu 356 天前
缺点就是占内存;
|
71
chenPiMeiHaoChi 356 天前
除了占内存多点没别的了,就这点成本比起稳定性和屎山可维护性来说不值一提。楼上所谓的 java 啰嗦管的宽恰恰正是 java 项目屎山稳定性的保障,对于所有的花里胡哨我就说一句话:
到点下班大过天。 |
72
nianyu 356 天前
没关系,下次你会遇到远高于你同学的同事,对 java 这门语言态度相当好
|
73
zhhmax 356 天前
其他的优缺点不说了,就谈个人感受:以前上班用 java ,最近搞一个新项目用了 go 发现,java 这玩意儿以前是咋用过来的,后面写项目会首选 go 了。
|
74
Rever4433 356 天前 1
毫无必要的争论,如果你的业务是从 0-1 开始的,那肯定选 PHP 、Rust 、node.js 这样的轻量级语言。如果业务是从 1-100 那选择语言的时候就必须考虑生态是否繁荣、从业者数量多少、是否有成功的经验这样的问题了。在中国几乎肯定会考虑 Java 的
|
76
longzhx 356 天前
JavaBoys 都一直在卷,不过他们卷的是语法、设计模式、抽象度,所有通用系统站了一群 java boy 虎视眈眈。
若是有逃离这个方向的机会,我会毫不犹豫抓住机会。 |
77
lesismal 356 天前
嘲笑 golang 的主要群体是 curd boy ,这部分人对性能没有太大需求。
而且这些人中绝大多数自己都不熟悉 golang 相关的轮子就嘲笑 golang 开发效率低,按这个道理如果他们没写过 php 、ruby 、nodejs 、python 、c#等语言、则同样可以嘲笑那些语言效率低。 随便嘲笑吧,其实我们这些务实的 gopher 也真的不喜欢这帮人来 go 捣乱,看见他们把简简单单逻辑写成某些其他语言风格冗长的设计模式屎山,我们也很烦的。 所以,对于这部分人,请你离开,千里之外,咱们各自安好,各自都有美好的未来。 |
78
lsk569937453 356 天前
@gitrebase 自己代码写的烂和语言没啥关系吧。。。。
|
79
dif 356 天前
作为接盘过 java\python\scala 项目的小菜鸡来说,只有 java 接盘的过程是最舒服的。至于缺点,啰嗦是罗嗦了点,但用工具和插件能解决这些啰嗦。卷是真的卷,大佬们动不动就一顿八股文。
|
80
pkoukk 356 天前 1
作为语言,特性丰富但丰富不到点子上,方便码农的语法糖太少,被语法简洁派和语法简单派两派都看不起
在运行时,它的内存消耗太大 在虚机年代下,这点内存差别没什么影响,但是 k8s 年代,能够动态调度资源,按需使用的时候,比较起来花的就多挺多了 |
81
falcon05 356 天前 via iPhone
太占资源了,也许适合企业,但对个人很不友好,我都买 1c1g 那种服务器。
|
82
pkoukk 356 天前 6
告诉你比你水平高的同学对 java 不友好的原因:
Java 国内从业者数量太多,而且普遍具有丰富的从业经验,各个能用的赛道都卷出鱿鱼花了 我多年前从传统软件业转互联网的时候,看了一下各个语言的大头兵面试题,JAVA 都开始问你源码细节,HASHMAP 的红黑树实现 那个时候其它任何一门语言都没有卷到这个程度,那个年代其它语言甚至你懂 CRUD 就能上岗,这不是卷过头是什么? 作为一个即将入行的人,java 的池子可能有 1000 平米大,但里面挤了 1W 人 其它语言可能只有 100-200 平大,但里面可能也只有 100-200 人 作为一个学的好的,水平高的人,如果有的选,大部分人会选后者 |
83
forgottenPerson 356 天前 1
其实很多人新手觉得 java 好的人,很多觉得 java 轮子太多了,网上一搜差不多都能很好解决,对于 node 、c#、go 他们觉的啥都要自己写,其实对于 web 开发还是没有深刻理解,就比如 java 很多新手前后端交互其实不是很理解的,也有特别多问题,但是真正理解 web ,或者很扎实的程序员应该来说 go 、c#这些开发效率还是挺快的,还是看人把。go 、c#这些他们觉得搜答案不像 java 一样很容易搜到。
|
84
KnightYui 356 天前
效率低
|
85
AlexHsu 356 天前
如果 kotlin 也算是 java 的话 其实 java 没什么缺点
|
86
LavaC 356 天前
那句话怎么说来着,真正垃圾的语言根本没人讨论,讨论度越高就代表语言越成功
|
88
yzbythesea 356 天前
正常,读书的时候都爱追新潮。我那会儿,面向函数编程的语言特别受推崇,现在都没人提了,比如 Haskell 和 Clojure ,后面刚工作的时候大家又开始宣传 Scala ,再之后就是 Kotlin ,现在貌似很推崇 Rust 。然而我工作大项目里只写过 Java ,Go 和 C 。
|
89
DefoliationM 356 天前 via Android
JVM ,语法啰嗦,又臭又长,主要是有个 JVM ,没有 JVM 其实语法怎么样都无所谓了。
|
90
BruceLees 356 天前
人太多
|
91
CuChulainn 356 天前
JVM 在云原生时代很吃亏,Quarkus 正在尝试解决这部分问题。但在 spring 这种生态里并不好做。
|
92
wupher 356 天前 1
从 Java 2 出来就开始接触,到现在都 21 了。不过最近几年主要都在写 Kotlin 了。
优点: - 跨平台 - 开源库众多 - 语法简单 - spring 缺点: - type hell - 内存消耗 / GC - 虚拟机,系统调用麻烦,访问操作系统资源也麻烦 - GUI 以上。最近几年其实更多的是利用 JVM ,使用的是 Koltin 或者 Groovy 这样的派生语言。 |
93
montaro2017 356 天前
@NoThing2Talk #21 JEP 445 已经在 preview 了 https://openjdk.org/jeps/445
|
94
murmur 356 天前
@pkoukk 100-200 那个是互联网,互联网是烧钱砸吆喝,裁员也是最积极的 1000 那个是企业和 gov 开发,是要赚钱的,不赚钱没人做
尤其是现在国产化,一大堆业务系统需要翻新,首先排除 c#,微软的东西,然后选 spring cloud alibaba 沾国产化的光 |
95
tomatocici2333 356 天前 1
大部分人都碰不到 java 的缺点的
|
96
ITdream 356 天前
java 的痛点:
我想要一个香蕉,但是给我的可能是一个拿着香蕉的猩猩,甚至是整个丛林 |
97
xgdgsc 356 天前 via Android
看好明年有了静态小体积编译的 julia 做业务,配合 rust ,llvm 代替 jvm
|
98
bugmakerxs 356 天前
@lizhian 语法糖有点不好就是多了以后代码无法标准化
比如 js 的函数定义 function shit() var shit = function() var shit = () => {} let shit = function() {} let shit = () => {} 诶真不好记 |
99
Bingchunmoli 356 天前 via Android
@NessajCN 我记得不是各种号宣传的 go 取代 java ,go 是新一代的 c emm
|
100
Bingchunmoli 356 天前 via Android
@murmur 这个在看 go 有同感,spring 这套太全了,面向 spring 编程了
|