Java

Java

傻逼 Java 是世界上最傻逼和脑残的编程语言,没有之一。

推荐使用的编程语言:

  • Node.js (JavaScript)
  • Python
  • Go

为什么说 Java 是傻逼


王宇鹏@zhihu
https://www.zhihu.com/question/263715023/answer/276501136

人不行,啥都白扯。还有黑php和nodejs的人大多都是java的。 个人感觉 java的东西其实很一般,说java成熟,体系健全,容易学。全是一些井底之蛙。

论性能有GO,

论成熟度 spring 成熟? 感觉远还不如nodejs, NPM上什么东西都有, spring MVC -》boot -》 spring 5 感觉根本不成熟, 文档版本乱的狗屎一样,根本没有最佳实践。 java的库 也没有nodejs 成熟和好用。 功能上java库大多都是用起来非常不顺手,基本上你要的功能都要折腾一番才能勉强能达到好用易用。相反nodejs社区你想要的东西都有,有可能有bug总比没有强。 只有先解决有了,库的数量多了,才能慢慢到好用,java连先解决都没做到。毕竟亲爹sun没了, 其实看看github,StackOverflow 等国外的趋势就知道java 开源第三方已经死了。除了中国国外全转其他语言了。 微软有C#,google有GO,java有谁再用呢? 2017年的java 完全不是2010的java的时代了。java如果没有android 早就沦为小众服务器端语言了。

这里提供一个数据 GitHub Octoverse 2017 java 排第三, 但是 你如果仔细研究一下就会发现全是Android,java后端的开源项目已经和濒临灭绝动物一样珍贵。(JavaScript数量比python和java 加起来还多,至于前端还是nodejs项目我也没法统计了,太多了数不过来)

当然有人看不上github的数据,无所谓。java后端已死不过是时间问题。因为java为什么火是因为sun和google。现在sun没了,google因为版权问题搞其他语言了。java说白了就是靠历史的成绩撑到2017.

功能与性能 是选择语言工具的两个重要原因。 原来黑PHP主要是性能, 功能上 和开发效率上ROR,PHP,WEB开发全都是秒杀java,真的是秒杀java。 spring boot 就连通过不同的content-type 返回json和页面 都做不好,异常都无法针对content-Type 分别处理。 日志log错误信息冗长无用,就没有人解决一下日志漂亮的显示吗? 这些都是其他框架内置的功能。java解决这种很多实用的问题都要自己写一大堆代码。 没有go的时候只能通过性能来吹牛逼,根本不提java库成熟度易用度非常低的事实。

是的 动态语言原来无法和静态语言比性能。 但是nodejs出现 直接把动态语言的性能提升了好几个数量级。V8就是快。 结合跑多个nodejs进程 竟然性能非常好。PHP现在也追了上来,比以前PHP强多了虽然比nodejs还是差点。这里的排行榜已经很清楚了写明了nodejs的性能。 在看看spring boot 默认性能 非常差, 你可以把spring 调的很快,但你确定初学者能搞定? 而这些 nodejs和PHP都是默认的。 更不要说GO了

最二逼的就是 如何让门槛比较低的程序员也能写出能用的代码并且不影响服务的稳定性?如何让不同的程序员也写出长得差不多的代码?

世界上没有一种语言能让初学者写出高手一样的代码。 IDE提示也没用,因为初学者看不懂IDE,就连拼写错误提示都不会看。对初学者最友好的是PHP,毕竟一个请求挂了完全不影响其他请求。

”java 你做一个server,每一行代码你都大概能知道发生了什么,内存是如何分配的,线程资源是如何分配的,一个class, jvm是如何翻译成字节码的,我new 了一个对象我的开销大概在哪个地方,这些一般都是能搞清楚的,碰到上面的问题,也能通过一些方法解决“

真的很搞笑,初学者你启动一个spring boot 发生了什么谁清楚,估计很多老手都不清楚。相反nodejs和go社区都在抛弃这种大而全吹牛逼的框架。 go和nodejs 用的内置http库就能启动web server。库的功能单一才更容易理解。相反java的框架大多都是一层套一层,看起来头疼的要死。屏幕没有8K分辨率 打开的文件都不够放。

好招人,java 容易学更是扯淡。 你让一个零基础的人 学spring boot 快还是PHP 快 还是nodejs koa2快。

容不容易学关键看文档。容不容易学关键看文档。容不容易学关键看文档。重要的话说三遍

java语言完善,但是没有好用文档屁用没有。 javascript 语言问题多,亮点也多,只要文档说的明白(Mozilla都在大力搞文档了,把文档当作严肃的产品来做,官方中文)初学者看一遍就不会走弯路,2017年的JavaScript文档已经完全脱离2年前乱七八糟的样子,相反java文档已经变成了乱七八糟。

spring boot的文档 由于版本更替太快没有一个能用的。乱七八糟的注解解释。 相反nodejs和JavaScript的文档遍地都是。而且中文的文档更是如此,nodejs国内文档很多,相反spring boot, spring5的在哪?

关于招人 在补充一点 有钱可以随便招,没钱什么都招不到, 招不到人完全取决于成本,当然你只想低薪招到能干活的人是不可能的,即使是java也会bug频出。而且招10个5000的java和招5个10000万的nodejs 的 无论是工资成本,沟通效率 ,都是nodejs更省钱,如果你知道中国的企业的税负情况。肯定会选择nodejs。

总结:假如你是一个精通所有语言的人所有框架的人, 如果为了性能肯定选GO,一步到位。 否则就是nodejs或PHP,当然nodejs比PHP性能和开发效率都高一些。 有人不服说PHP的开发效率高。实际来讲PHP的框架程度的确完善,nodejs这点还比不了。但是你不要忘了 同一种语言前后段的优势,这不仅仅是效率上的,而是功能上的,例如你做react,vue 的服务端渲染,PHP和java根本没法做。react和vue不支持其他语言。根本没有其他语言的库只有javascript。再举个例子,graphQL,你用其他语言能做吗?

现阶段选择javascript 和nodejs 是性能和功能和开发效率的最佳选择。你可以选择GO(性能优先),PHP(性能差点,开发效率优先,对初学者友好)。 java真的已经抬出场外。

从商业上讲 选择GO从创业到上市都不用换架构,缺点是前期效率低, 选择nodejs 可以在前期创业一直坚持到B或C轮在转GO+K8S。 选择java基本上因为开发效率低前期招人太多,直接就资金链断裂倒闭了。 后期即使C轮了还是要上GO或其他架构。因为到了后期都是什么好用用什么,不用考虑钱和开发效率了。做游戏的选C,做网站的选GO,做计算的用GPU+机器学习,该用啥语言就用啥语言。这样看来 选择JAVA完全没有道理。一个笑话就是” 我们公司用JAVA,要大量招人,下面回帖 如果不用java也不用招这么多人了。“

当然如果你是只会一种技术的,还是会啥用啥,洗洗睡吧。能搞定java的多线程,异步,rxjava 流式响应式的也不会吊死在java上。这些和初学者已经没什么关系了。

最后在对说nodejs不成熟, 性能不好的人, 尤其是搞java的能不能不谈性能,说说功能,一天老说什么netty,多线程,有意思吗,前有nginx + openresty, 后有 go + caddy , 而且人家搞C和erlang的也没说什么。RUST也出来。google也自己开发TPU了。未来有没有java的份还是多学点吧。

编辑于 2017-12-17


CLI

java -jar file.jar

参数

  • -Da=b: 设定一个 a=b 的 property。在Java程序里用 System.getProperty("a") 获取值。

注意 -D 参数必须出现在 -jar 参数之前,否则无效。傻逼Java!

Tips & Solutions

.properties file

傻逼 Java 的 resources bundle 资源文件 *.properties 文件只支持 ascii 编码,所有非 ascii 字符必须用 "\uxxxx" 转义。很多原生的 Java i18n 方案用 .properties 存储本地字符串。我找不到任何图形界面的 .properties 文件编辑器(除了某些古董的 Eclipse plugin)。唯一的方法是用 native2ascii。native2ascii 好像是某些版本 JDK and / or JRE 自带的。但是安装了最新版 Windows 的 JDK (x64) 里找不到这个工具。Linux 里 openjdk 的包里面包含 native2ascii : apt install openjdk-8-jdk-headless 。

# 参数 [options] input_file output_file
native2ascii -encoding UTF-8 Messages_zh_CN.utf8.properties Messages_zh_CN.properties

Input Messages_zh_CN.utf8.properties:

Dashboard.Success=成功
Dashboard.Skipped=跳过
Dashboard.Failed=失败

Output Messages_zh_CN.properties:

Dashboard.Success=\u6210\u529f
Dashboard.Skipped=\u8df3\u8fc7
Dashboard.Failed=\u5931\u8d25

结论是傻逼 Java 去死吧。


Last update: 2021-03-08 08:15:55 UTC