可能是以前 j2ee 那一套真的给大家留下了巨大的阴影吗。

我觉得倒不是 j2ee 的问题,问题在 jvm 本身上。对于 adhoc 任务来说,java 就是又笨又重配置又难部署成本高。搞个 hello world 要分别装开发环境和运行环境,启动还要另外写 shell 脚本。综合了编译型语言和解释型语言的缺点。

所以到底是谁觉得又笨又重配置又难部署成本又高了?

9 成的人没有写过 j2ee 项目,ssm 可不是 j2ee 。

好像很多发别的帖子的都觉得这个帖子又又难成本高,还有巨大**隐患
建议移动到水区

可能因为是从 ssh 那个时期开始接触的,感觉 java 的这套东西还挺好理解的,spring-boot 之后更好一些
最大的问题还是内存使用,起步内存高,对小机器不友好,xmx 太低了也不太行,不太适合个人整活

又笨又重配置又难部署成本高,还有巨大的安全隐患?
并不觉得 Java 笨重,语法确实稍显啰嗦,但好处是容易看明白啊。
配置难是什么年代的事情了? Spring boot 了解下?
部署成本哪里高了?都自动化了啊?
巨大安全隐患说的是 log4j 么?其实像我就没有受到任何影响呢。

我们公司写 C 和 C++的大佬就是这么认为的,太吃内存,当初 Log4j 的漏洞,还特地发文章给我看。。。。

java 干企业开发还是挺好的,事越多的东西越适合 java ,你就一个简单的计数器啥的的确没必要 java

但这并不影响我用来赚钱

主要是吃内存, 并且没有内置模块, 稍微干点正儿八经的活, 就要引入 maven, 都上 maven 了, 那不得再整个 IDE? 这样一看, 是不是就很重了

maven 其实挺好的,至少人家只专注拉 jar 包,npm 什么的乱七八糟 js 下载来,又是去下 bin 又是编译 dll 的

先问是不是

Java 就是内存占用太大,我一个 1c1g 的 do 机器跑了 PHP,MariaDB,Nginx,Redis

1.笨重是真的,适合搞中大型项目,自己整些小玩意儿是真的费劲,比如给朋友写个小工具,让别人运行还要把 jre 打过去,这就很扯淡了。。
2.配置难、部署成本高这个并不认同,因为 spring 的加成,现在 Java web 的开发已经很简单了。

确实,编译这个事搞疯我好几次

大佬收入多少?年入 200 万以下就不要到处指指点点了,让干啥干啥毕竟养家要紧。

一个语言被吐槽的越多说明他越火,而且现在部署起来很方便哈,springboot 下并不需要写 shell ,直接打包成可执行文件./service.jar start 就行了,还能做成系统服务来启动

从天安门到西单,你走着就能过去,骑车稍微快一点,开车也可以但是不好停车,你非要修条铁路开高铁也不是不可以,就是麻烦点。甚至你为了能开飞机过去修个机场也行。

安全???谷歌工程师本周表示,Chrome 代码库中大约 70%的严重安全漏洞是内存管理和安全漏洞。而造成这种结果的不是 java ,而是 C++

很烦 xml

com/xxx/yyy/zzz/www/kkk/mmm/ddd/qqq.java

我曾经见过一个项目,总共就只有 3 个.java 文件,结果项目嵌套了十几层文件夹。

200W 以上还搞技术本身就是个伪命题

java 确实感觉好难用,一个新手要开发 java,得配置 java,idea,idea 插件,maven 这一大堆东西,idea 还经常抽风,maven 不翻墙也经常连不上,偶尔遇见 eclipse 的老项目也是抓瞎,一旦使用稍微冷门点的东西比如 bazel 和 osgi,代码高亮跳转都要搞半天,而差不多的 c#,一个 vs 解决百分之 99 的问题..

这个难道不是使用者的问题吗,换什么语言都是这样

Java 就鼓励这样深层嵌套文件夹。Java 程序员都被教坏了。

这不是 Java 的问题,这是写 Java 的人的问题

讲真我现在觉得 spring 全家桶基本上已经到达旧 j2ee 这么重的程度

java 是鼓励把域名反过来当包名,啥时候鼓励深层嵌套了?

go/monthly

是 Java 导致的深层嵌套还是程序员自己喜欢深层嵌套啊,你别啥锅都往 Java 上面扣啊,你也可以平级搞很多个包啊,Java 也是 ok 的啊,而且本来就是一个 namespace 的问题,啥都是语言的问题呗。。。。。。

Java 本身的安全隐患比 C/C++小多了,至少没有指针就很难有各种内存漏洞。漏洞主要是在应用层,各种五花八门的框架提供了整套整套的功能,很难完全没有漏洞。但这不是 Java 的锅,不管什么语言搞一个 Java 这样的生态不见得能有更少的漏洞。

以前作为一个 Java 新手的感受是,学 Spring 那一套只能照猫画虎,站在层层抽象外无法看透内部原理,以至于自己无法理解自己写的代码,各种注解更加重了这种困惑;然后就是各种 PO/POJO/VO/BO/DAO/DTO ,反正不管写啥,先照着固定模式把这些“O”写一遍;最后就是终极大杀器——Tomcat 等一众容器,接手一个项目可能要花很多天才能在本地搭好一个可以跑的开发环境,各种依赖的版本兼容性需要跟同事打听才能了解到……最终的天花板就是 JVM 原理,我记得当时凡是 5 年以上经验的同事都人手一本 JVM 的书。

后来我在想,Java 作为历史最悠久的技术栈之一,技术方案已经进化得非常成熟,但对于新手来说,可能还是得亲自走一走整个进化过程,才能理解为什么当前的 Java 是当前这个样子。但那样的话,也确实需要相当多的时间,来承载这个技术栈悠长的历史。

当然我已经不用 Java 很多年了,也有耳闻 Java 依旧在进化中,比如当前顺应微服务潮流的解决方案,似乎对新手友好了很多。但 Java 技术栈似乎被其他语言抢先了一些宣传推广的机会,国内的技术发展模式跟海外很多地区有较大的区别,国内的技术宣传比较擅长贩卖焦虑,比如各种捧一踩一和取代论,而国内的开发者普遍有从众心理和“被淘汰”焦虑,以此催生出了“面向简历开发”等现象,最终导致一些宣传工作做得很好的技术栈得到了大量的推广和应用,甚至一些本来跑得好好的项目也会被强行换一些“新潮”的技术栈重写。

一门技术要想在开发者中站稳脚,就得集思广益(开放)、快速迭代,顺应业务需求变化、生产需求变化、开发模式变化,我不清楚 Java 技术栈是否是这样的,如果是的话,就一定会长久发展下去的。

200 万以下搞技术的都是混口饭吃,就别挑肥拣瘦了。

各种"O"和路劲 /文件夹嵌套是架构设计(开发者)的问题。。
jdk 半年一个版本迭代,但很多人仍停留在 JDK8 ,这个也是开发者的问题
说到 Java ,上来就是 Spring 全家桶的各种配置,能不重么?就好像说去学 JS ,一上来就是 Vue ,React ,NPM ,WEBPACK 啥的一大堆不一样又笨又重?
每门语言有不同特性适合不同用途,老怼产品经理搞不清需求,程序员也要明白自己需求才对啊,反正我的需求就是赚钱,用 Java 不妨碍我赚钱

你也可以不用全家桶, 就用他核心的 ioc, aop, 其他各种组件自己写轻量级的.

这个是典型的套着模板写代码,如果就是很简单的功能,完全不用搞很多层嵌套,开发者自己的问题

我们写 Scala 只觉得 Java 笨,但大家都在 JVM 上跑,一样的重,配置难,部署成本高。
但安全隐患是真的,语言弱鸡只能依赖运行时反射,你看 CVE 列表是不是有一半漏洞都是因为 Java 笨,不够灵活动态,开发着自作聪明的反射,动态解释引入的漏洞?😏

假如你这个小工具换成 JS 或者 Python 还不是一样,可能自包含做得还不如 Java ,需要你朋友自个儿装 NodeJS 或者 Python

jvm 的问题

自动化出问题呢,难调试

再来个搜索,酸爽

我那个年代 J2EE 太流行,各种配置要吐血,后来的什么 SprintBoot 都没碰过,不搞 JAVA ,舒畅太多。

先问是不是

是, 但是 java 工程化高, 更适合多人合作

小工具包一個 JDK8 200MB 分發太不爽了.
Java 不適合做小工具.

PageFileUsageMonitor[1] 用 VB6 寫的,60KB.
NoClose[2] 用 AutoHotkey 寫的,500KB.

小工具就該用 VB ,AutoHotkey 寫,免安裝,單一執行檔.

[1] www.standards.com/ThisAndThat/PageFileUsageMonitor.html
[2] www.dcmembers.com/skrommel/download/noclose/

java 跑起来还不简单....

但是为什么 Google 工程师和 firefox 工程师为什么不用 java 而要用 C++和 Rust 呢?

这个也许就能回答 OP

代码是工具,Java 适合 web 业务; python 适合做小工具……不同需求使用合适的语言是一个程序员应该有的能力吧。

当然咯,如果别人限制你使用的语言了,也没啥好讨论的。

程序员的核心是逻辑设计与算法设计,还有对业务需求的理解,最后再加上对编程语言工具的运用。

PHP 呢?

Java 适合一个水平高的,带一帮水平一般的干活。
C++的话,就要一帮水平高的。

确实笨重,难写,部署恶心。最后那个巨大安全隐患不至于,还有个 PHP 垫底呢,养活了一代渗透测试员呢( doge

自动化部署还要调试个啥?机器不坏就不会出问题。你以为运维也和你的代码一样被产品经理要求天天改来改去啊。

老鄙视链了

#19 嵌套是程序员和项目规划的问题啊,你完全可以平铺写

引战帖


在 Github 上面,随便用一个关键词找 Java 代码,就会发现全都是这种嵌套十几二十层的结构。

如果只有一两个项目这样写,我可以说是程序员的问题。但是几乎所有 Java 项目都是这样组织代码的,只能说明是 Java 生态圈的问题,Java 的开发模式就鼓励这样写。而且,Github 上面,绝大部分的项目代码量连 500 行都没有,但是文件夹嵌套了几十层。

连个代码文件组织都搞得这么繁杂冗余,窥一斑而见全豹,Java 这个语言,无论是语言特性,还是生态环境,还是开发模式,都又笨重,成本又高,部署又麻烦。

楼上有些人还拿 spring 来说事情。很多搞微服务的人,用 Spring 来做微服务,真正的业务代码只有十几行,结果要用 Spring 这么重的框架。用一个非常『笨重』的框架来搞『微』服务,简直是讽刺。他们还沾沾自喜,觉得 Spring 解放了生产力,提高了开发效率。真是好笑,最提高开发效率的事情,难道不是抛弃 Java 吗?

笨重这点没得洗,撸的三年腾讯云🐔儿跑几个 go 服务都没啥问题,java 的 ssh 那套起两个,内存就不够了

我觉得我们公司的业务量根本用不着上 Java ,但是 Java 招人好招,上手就能糊代码。

编程语言和普通语言一样 很容易先入为主。

习惯了脚本语言 php/js ,任何静态语言都觉得别扭,写变量还要定义类型,脱裤子放 p
习惯了静态语言,任何脚本语言都觉得糟糕,没有规矩没有约束乱写

先学中文会觉得中文很美,古事宋词,英文枯燥单一
先学英文会觉得中文很晦涩难懂,莫名其妙。

实际上 php java go node 写一个应用 没有啥本质的区别,就是单纯的语法不同而已

没人拦着你用 C/C++ 呀!

对,医院里的人都有病。

你的截图里 src/main/java 这三层是 maven 的项目结构,跟 Java 本身又没关系,去掉域名的三层,还剩 4 层,也不算很离谱吧?

  1. JVM 在 o11y 上有天然的优势。如果换一套 practice / 换一个 vendor ,你就知道别的语言有多痛苦了。没有 wire ,probe 要不要 dev 自己改?没有 agent ,SRE 要不要自己出苦工?

用 Spring 无论是 dev 还是 SRE 只需要把全家桶里那些事实规范照着一引入就好了。

  1. 对研发来说,我自己体验的部署成本取决于服务发现(不要从 ip 开始让我啥都自己写) / 配置方式(自己写一屁股 yaml placeholder 还是热配置中心) / 部署平台(能不能让我点点点就完事)的成熟度。跟语言没啥关系。
  2. 开发效率取决于能不能方便切分「可以乱写的部分」和「不能乱写的部分」,并规整好它们的依赖。C++我没写过,不敢乱说。就 C 和 go 这种语言的 module 和依赖管理,光是想到一下头就在疼了。