没想到下面推文意外战起 Java 了。
结论写在前面,我认为 Java 是一个泛用性很高的语言,各领域都有成熟的生态系支援。
一个新语言的兴起往往是因为他解决了旧语言在某些方面的不足,但不代表旧语言原来
擅长的情境可以很好的被新语言解决。
我想工程师若能比较理性的看待每个语言擅长的情境,能少走一些弯路。
下面是我自己对 Java 粗浅认识的讨论,若有错误的地方也欢迎大家讨论。
1. JAVA 一开 Eclipse 开发就占用大量 Client 资源
自从我换用 intellij 以后就感觉比较没那么吃资源了,推荐你试试,另外 Java9
力推的模组化或许可以让 Java 使用上比以往轻量一点,还需要观察。
2. node.js, python 都能在树莓派、MAC、WIN 跑了 优势在那 ?
如果是但纯和这两个语言比的话,优势在多执行绪的效能。
Python 在单一执行绪的效能的确是很优越,但只要主流 CPython 没有解决 GIL 的问题
,Python 永远不能很好发挥多 CPU 得效能。当然你可以用 multiprocessing,但用
process 资源就是比 thread 重。因此在 concurrency 的情境下,Python 相较 Java
是比较有劣势的。当然不是无解,只是花心力去研究 Python 底层做性能调校,和直接
用已经可很好支援多 CPU 的语言,就需要工程师自己评估了。题外话,JPython 似乎
没有 GIL 问题,但相对比较冷门就是了。
至于 Node,众所皆知 Node 在 Application level 是 single thread。尽管可以用
pm2 这样的工具起 cluster,但 process 的问题依旧存在。最简单的例子,当今天某个
Node 的 process loading 过重时,其他 Node 的 process 只能在旁边发呆。
Java 的 multi thread 相较这两者比较能发挥多 CPU 的系统效能。
3. 现在 node.js, python 社群还在主动发展中
社群主导这件事好坏很难讲,像 Node 每过几年都要分裂一次,还有去年三月的 npm 的
left pad 事件,总是让我在使用 Node 时感觉抖抖的 (囧....
4. 改个小 BUG ,等个两分钟编译完,发现不对,再改一下
经 sky790312 版友补充,可以用支援即时 check style 的 js IDE。
编译要两分钟我更倾向是专案的问题而不是 Java。
我假设你这边说的是相较 Python 和 Node 这种修改不需要编译,修改程式比较快。
的确,编译的确会花一些时间,但不编译真的会比较好吗?
我实际上看过一些 Python 和 Node 案例:很快改完小 bug,改完上传跑 CI 才发现语
法错误,不小心多个 ";" 或缩排错误之类的。这还是团队有做 CI,一些连基本 CI 都
没做的公司我还真不知道要怎么避免这问题,要知道只要是人就一定会犯错,很多时候
都是自以为改的只是小地方就忘了先在本地跑测试或 check style 之类的。
另外如果等待编译是你的痛点的话,建议可以试看看 Golang,编译超快。
5. 可台湾环境比较保守一些,大部分还停留在上个世纪。
板上还有阿里研究院征 Java 工程师的文章,我想阿里应该不是保守的公司。
6. 若追求效能,就该用 c++。
修正:经 Sirctal, chiaming0914, elements 指正,GC 这点是我错误论述。
下面用双引号匡起来的内容就是被指正有问题的部分,请不要尽信。
保留争议原文让后续读者知道这里原先的争论点是什么。
"但用 C++ 就要自己处理 GC 问题。而我认为自己刻的 GC 能比 JVM GC 优秀的工程师应
该是少数中的少数,因此把 GC 问题也列入考量再加上 JIT 技术的话, C++ 效能并不
一定总是能乐胜 Java,当然主要还是要看使用情境。"
额外补充一点忘了回
7. 至于原始码封装的优点,现在也可以用 docker 来处理了
用 docker 封装 runtime 环境时,通常选用较小的 image (例如 alpine), 但你不总
是会用这些环境开发。我之前在 alpine 安装某些 Python 连 my-sql 相关套件的时候
遇到不少问题(年代久远,已经忘记是那个替三方套件了),最后是解法是开发环境和
production 安装不一致的第三方套件,这件事让我在做 CI/CD 的时候蛮困扰的。