【CSDN 编者按】随着大数据人工智能的潮流,Python 已经被炒作的天翻地覆,其学习用户数量逐渐上升,许多人暗自担心 Java 技术是否会在未来几年就沉寂了?对此你怎么看呢?

作者 | Jackson Roberts

译者 | 弯月

出品 | CSDN(ID:CSDNnews)

如今,虽然 Java 仍然主导着企业级的应用程序,但是 Java 却鲜有炒作。尤其是对于编程新手来说,由于 Java 缺乏大肆宣传,所以会被很多人忽视。

年轻/天真的开发人员(包括我自己)经常会被新语言和新工具所迷惑,有时甚至以牺牲生产力和理智为代价。我曾经对 TypeScript 万分痴迷,也曾认为 Node.js 生态系统是有史以来最酷的技术。我喜欢转译的代码、实时调试、庞大的程序包库,甚至是支离破碎的构建系统。而当我尝试在实际生产中使用这些技术,并与经验丰富的工程师交谈时,这些技术身上的魔力瞬间消散了。

另外,我也曾对 JS 生态系统也充满了非常不理智的热爱,因为 JS 技术非常热门,它有炒作。但最后却发现,现实远不及我的期望。如今,我在 Java 的工作中品尝到了曾经在 JS 身上求而不得的美好体验。蓦然回首,发现自己以前完全被炒作牵着鼻子走,差点错过了 Java,我不禁有点失望。Java 编程十分有意思、效率很高,但新手开发人员却对这个“老家伙”退避三舍,这对 Java 来说太不公平了。

Java 的伟大之处

我个人感觉,编写 Java 程序的感觉非常好。这在很大程度上归功于 JetBrains 在 IntelliJ IDEA 中付出的心血。自动补齐、快速跳转到定义、查找调用等各项功能都非常方便使用,而且重构很容易。但是,Java 真正出类拔萃的地方在于第三方库的开发体验。

依赖关系与行业趋势

虽然我的经验很有限,但在我看来,大胆使用外部依赖项是现在的趋势。“自给自足”已经过时,现在的流行趋势是“万物为我所用”。特别是 JavaScript 开发人员使用第三方库的频率极高,即使是一些琐碎的操作(例如,数字的左侧填充操作等)。我认为积极使用第三方依赖关系并没有太大坏处,但是上游 API 的变化可能会对非类型化的 JS / Python 代码库造成严重破坏。

在 Java 中使用第三方库时,你需要确切地知道将哪些类型传递给方法。最重要的是,如果使用函数错误,编辑器会给出警告。所以,从大量使用外部库的角度来看,我认为应该有更多人会喜欢 Java。

标准的类型可节省时间

动态类型、弱类型等等,无论什么类型都有许多缺点。当依赖项改变了 API 方法时,你的应用程序就会运行时出问题,而不是构建时,这就是问题所在。如果开发人员必须参考方法的实现,才能搞明白需要哪种类型,那么就会浪费大量的时间。TypeScript 和 Python 的类型提示可以解决此问题,但是它们缺乏在运行时验证传递类型的能力。

我不是很喜欢 TypeScript 的类型保护,因为你必须自己实现,并保证实现的正确性。在我看来,这对于定义者和使用者双方都没有好处。考虑以下代码:

interface Dog {bark: () => void;
}/* The developer has to manually implement
a heuristic check for interface adherence!
When they update the interface, they have
to update the type guards too! */
function isDog(pet: object): pet is Dog {return (pet as Dog).bark !== undefined;
}
const dog: any = {bark: () => console.log('woof')};if (isDog(dog)) {// TS now knows that objects within this if statement are always type Dog// This is because the type guard isDog narrowed down the type to Dogdog.bark();
}

声明一个类型,而且还必须为该类型编写验证逻辑,这让我觉得很难受。上述代码让人感觉某人使用了错误的工具。

与 TypeScript 的定义不同,Java 的标准类型系统不仅明确了类型定义,而且还可在默认情况下保证类型保护,所以减轻了程序员的很多负担。

没有优化的负担

Java 开发人员可以放心地使用 JVM。无论是实现多线程应用程序还是将大量数据存储在堆上,他们都可以相信自己不会因内存管理或数据竞争而陷入困境。这个优势主要体现在和 C++ 的对比中,因为 C++ 就有很多这样的坑。

在你看来,符合以下条件的语言有哪几种?

  • 高质量的打包管理器和构建系统

  • 标准类型

  • 大型社区

  • 自动优化

我认为唯一合格的语言就是 Java。

大学没有 Java 课程

我目前就读于科罗拉多大学博尔德分校。这是一所很棒的学校,我们计算机系的名气虽不大,但很多高等计算机科学课程都来自卡内基梅隆大学或斯坦福大学。在大学期间,我学习和使用了以下编程语言:

  • C++。所有核心的必修课程都选择了该语言:计算机系统、操作系统、数据结构等。当然,选择 C++ 也确实很合适,因为它可以直接进行内存管理、创建内核模块,而且还带了很多挑战和学习的机会。

  • Python 和 Julia。如你所料,这两门语言是数值计算和离散数学教授的挚爱。

  • Scala。编程语言原理教学中使用了该语言,主要是因为其函数编程和模式匹配特征。尽管 Scala 使用了 JVM,还可与 Java 互操作,但它为开发人员提供的体验不同于 Java。

  • Web 编程语言(HTML / CSS / JS)。这些仅用于一门名叫“软件开发方法和工具”的课程,这门课程非常注重行业趋势。

目前我马上就要毕业,却从未见过 Java。我觉得很可惜。

总结

构建应用程序的方法不止一种,但是我认为 Java 没有得到足够的重视,尤其是在创业公司和新手编程社区。非类型语言也是非常实用的工具,但我不认为它们就是构建大型应用程序的默认选择。如果你是一位全栈开发人员,而且从未深入就接触过 Java,那么请在下一个项目中尝试下吧,你会收获意外惊喜。

90 年代和 2000 年初,Java 和 JVM 被炒得沸沸扬扬,但我觉得即便到了今时今日,它也不应该从大众的视野中消失。我个人就通过 IntelliJ 和 Java 发现了意外的惊喜。

网友评论

不过,也有不少网友表达了不同的看法:

评论1:

在我看来,Java 做出了大量错误的妥协:

  • 语言的高级程度比不上 Python/Ruby/JS/PHP

  • 语言的低级程度比不上 Rust/D/Nim/Zig

  • 专用程度比不上 Erlang/R/Go/Julia

  • 语言的特有风格比不上 Lisp/Haskell

为什么要使用 Java 呢?有人会说,Java 很好、很快,生产效率高,支持丰富,经过系统的测试,文档也很齐全,还有大量的开发者,许多公司都在用它。

但我认为这些还不够。

Python 比 Java 还要古老,支持、文档和开发者数量都比Java高很多。但是 Python 语言比 Java 高级很多,非常适合高层应用,如数据操作、脚本、Web 开发等。

如果分布式系统需要大量 I/O,那么 Erlang 和 Go 要比 Java 好很多。当然,Erlang 和 Go 不如 Java 那么有名,但为了满足需求,付出一些代价也是值得的。同样,如果系统对速度有要求,那么就应该选择 Rust 而不是 Java。

如果想写得开心,我也不会选 Java。LISP 也非常好。为什么要考虑效率呢?我是自己写着玩,又不是要开公司。

所以 Java 虽然不是很差的选择,但我不会用它。

评论2:

在我看来 Java 就像清洁车一样。你去上班,坐进清洁车,点火,然后做完每天必做的工作,然后熄火回家睡觉。没人会把清洁车放到车展上,但你需要时,它就会出现,可靠地完成工作。

原文链接:https://jackson.sh/posts/2021-04-java-underrated/

声明:本文由CSDN翻译,转载请注明来源。

60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!

直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!

一直被唱衰的 Java 没“死”,却惨遭“忽视”!相关推荐

  1. 途牛:一直被唱衰,就是没倒下

    比连续多年亏损更让人吃惊的,是途牛仅剩2亿美元市值.当初率先打出1元游的价格战,用高额补贴和巨额营销费用获取市场,当烧掉的钱却没有带来应有的市场规模,途牛没有发展,只是挣扎求生存. 远在2016年,新 ...

  2. 编程语言也有中年危机,Java 为何一直被唱衰?

    [CSDN 编者按]在 2021 年 1 月的 TIOBE 榜单中,Java 分明还处在第二的位置,可为何这么多人在对 Java唱衰,Java 到底存在什么问题? 编译 | 弯月 出品 | CSDN( ...

  3. Java已死?九百万程序员说不

    Java没死,事实上它拥有足够的能量让你的应用跑起来.那些对Java吹毛求疵人频繁地聚焦在一些小众问题上,总是和其他技术或者语言做些不公平的对比,这些语言并没有像Java一样得到广泛应用及长远的历史. ...

  4. java 已死_Java已死?九百万程序员说不

    Java没死,事实上它拥有足够的能量让你的应用跑起来.那些对Java吹毛求疵人频繁地聚焦在一些小众问题上,总是和其他技术或者语言做些不公平的对比,这些语言并没有像Java一样得到广泛应用及长远的历史. ...

  5. 库克谈“唱衰苹果”:一派胡言!

    今天的科技圈,库克和苹果公司可谓是抢尽了风头.虽然新品发布会并没有预料之中的那么让人"一饱眼福",但随即发布的 iOS 12.2 也算是挽回了一些"颜面".事实 ...

  6. 传神语联何恩培:别着急唱衰机器翻译 未来将是人机共译时代

    机器翻译替代简单劳动,复杂劳动.智慧劳动人来做,这就是传神"人机共译"正在做的事情. 前几天,腾讯同传作为机器翻译产品的代表,成为了博鳌论坛开幕式及部分核心论坛的同声传译:原本想着 ...

  7. Java 已死?听听这些重量级大咖是怎么说的

    Java 已死?听听这些重量级大咖是怎么说的 在 Java 的世界发生了什么事?事实上,很多.Java 9 在 9 月将会来临,Jigsaw 终于获批,而 Java 大咖正在给我们提供关于这一编程语言 ...

  8. 任志强罕见看衰楼市:没看到任何理由能阻止下滑

     任志强罕见看衰楼市:没看到任何理由能阻止下滑 任志强表示房地产库存无论是住宅还是商业地产,库存仍旧在加大. 任大炮在去年曾和英联国际不动产董事长郭建波曾有过一场围绕房价涨跌,并以"裸奔 ...

  9. java 快死了_如果Java快死了,那么它肯定看起来非常健康

    java 快死了 Java快要死了的奇怪但流行的断言只能在没有证据的情况下提出,而不是因为它. 在酷孩子闲逛的论坛(Hacker News,Reddit等)中反复出现的偏见与Java语言背道而驰. 人 ...

最新文章

  1. 有什么好的中小企业企业管理软件?
  2. MYSQL中删除重复记录
  3. 虚拟机出现蓝屏解决方法
  4. Sublime Text3—Code Snippets(自定义代码片段)
  5. OSChina 周四乱弹 ——妹子喜欢的是程序员 这是标准……
  6. 【转】[教程] CSS入门3:如何插入CSS样式
  7. tp 数据库查询排序_怎么进行数据库分库分表?
  8. 第八章Transact-SQL程序设计
  9. 400 fps!CenterFace+TensorRT部署人脸和关键点检测
  10. 车道线识别/Opencv/传统方法
  11. 解决SSM项目下静态资源(img、js、css)无法引用的问题
  12. 批处理删除指定文件或文件夹
  13. gitlab-runner配置与注册
  14. 软件测试自学怎么学?
  15. 如何重新设置苹果id密码_苹果手机ID密码忘了?别着急,这二种方法轻松帮你搞定!...
  16. project telecom / dianxin / shenfenzheng / SIM
  17. Ubuntu安装flash
  18. Red Hat Enterprise Linux 7.0 安装方法
  19. z=z(x,y)中面积积分和方向余弦
  20. 密码学入门(2):对称密码

热门文章

  1. 分享一个stm32的OLED驱动,实现图像平移滚动滑动,esp8266-wifi物联网远程开关天气,开源代码电路原理图
  2. linux命令:软件更新 sudo apt-get update 和 sudo apt-get upgrade
  3. 算法提高 身份证号码升级
  4. Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群
  5. Bug错误一:报this.setData is not a function错误
  6. Java 容器类练习题(一)
  7. 模拟,贪心,枚举(二)
  8. [UI]实用案例--Shape绘制实用圆圈
  9. 2014百度之星资格赛——Disk Schedule
  10. sinx/x的极限为什么是1_某个波长的激光最小的聚焦光斑可以到多少?怎么让聚焦光斑更细?为什么聚焦系统要用扩束镜?...