Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路

两味真火
 两味真火
发布于 2017年05月27日
收藏 114

自从谷歌 I/O 2017宣布将支持 Kotlin 作为 Android 开发的 First-Class 语言,各种 Kotlin 能否取代 Java 的文章、争论层出不穷。

作为一名老 Java 程序员,心态是比较复杂的,虽然类似场面见过不少。

早在 2009 年,就有了 Scala 是否是 Java 后继者的争论。

2009年7月 InfoQ 发表的一篇文章:「Roundup: Scala as the long term replacement for Java」,还谈到了 Java 之父 James Gosling 也偏爱 Scala 。(参考下图)

尽管 Scala 在业界的口碑不错,还受到不少自命极客的程序猿的拥趸。

在 Java 程序员当中,也掀起了一阵学习 Scala 的风潮。但时至今日,取代 Java,还远远谈不上。

Java 从诞生到现在,已有22年的历史。

Java 在业界的霸主地位,虽然这些年一直受到 C/C++ 、Node.js 、GO 、Python 等语言的挑战,但一直稳如泰山。

在众多领域的普及率、Java 不是榜首,也是名列前茅。

下图是 2017年5月 最新的 TIOBE 编程语言排行榜

Java 依然是遥遥领先,不过相比较去年同期,Java 下降了 6.32% 。

Java 的普及率从 2016年年初以来一直呈下降趋势,Java 程序员的未来之路该如何走,还是值得思考一下。

懂得居安思危、未雨绸缪,未来的运气才不会太差。

Java 生态圈

Java 的生态环境开放、自由,在Sun/Oracle、Google、Apache、Eclipse基金会等各大厂商,还有技术大牛的共同努力下,Java 的生态圈异常繁荣,各种优秀的开源框架层出不穷。

Spring Boot

Spring Boot 是 Pivotal 团队推出的一个支持快速开发的框架,伴随 Spring4.0 而生,继承了 Spring 的优秀特质,简化了使用 Spring 编码、配置、部署的过程,使项目的开发变得简单、敏捷。

Spring Cloud

Spring Cloud 是基于 Spring Boot 的一整套分布式系统下的微服务构建框架,包含了众多的子项目,如 Spring Cloud Config 、Spring Cloud Stream 等。

具体可参考:http://projects.spring.io/spring-cloud/

Hadoop/Spark

Hadoop 是首个获得极大应用的大数据框架,是大数据领域标志性的解决方案。

Spark 通过完善的内存计算和处理优化,极大的提升了速度,是具备流处理能力的下一代批处理框架。

Spark 体系还包括一系列附加库,如Spark Streaming 、Spark MLlib、Spark GraphX、SparkNet、CaffeOnSpark等。

Kafka

Kafka 是 LinkedIn 使用 Scala 开发的一个分布式消息中间件,可以实现不同应用之间的松耦合,由于其可扩展、高吞吐、低延迟、高可靠等特性而被广泛使用。

具体可参考:https://kafka.apache.org/intro

ElasticSearch

ElasticSearch 是基于 Lucene 的实时分布式搜索引擎,由于其搜索稳定、可靠,速度快、安装方便等特点,是使用最广泛的开源搜索引擎之一。

具体可参考《Elasticsearch: 权威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

Nutch

Nutch 是 Apache 旗下的高度可扩展、可伸缩、可插拔的开源网络爬虫框架,功能完整。

当然爬出框架还有很多:Heritrix、Crawler4j、WebCollector、WebMagic、SeimiCrawler、HtmlUnit 等,可根据实际项目需要选择。

在爬虫领域,Python 可能使用的更多一些,入门也简单。

爬虫的难点不在于语言的选择,无论 Java 、Python 都可以胜任,关键还是反反爬策略的制定,以及各种实战的积累。

ethereumj

ethereumj 是以太坊协议的纯 Java 实现。不过在区块链领域,Go 语言的使用率可能更高一些。开发人员可以酌情选择。

代码可参考:https://github.com/ethereum/ethereumj

Deeplearning4J

DeepLearning4J(DL4J)是基于Java语言的分布式深度学习框架,在机器学习领域应用广泛。

入门可以参考《DL4J快速入门》:https://deeplearning4j.org/cn/quickstart

不过由于谷歌的 TensorFlow 提供的 java API 也会日趋完善,目前不少 java 程序员也会选择 TensorFlow 作为机器学习的首选框架。

以上只是个人正在使用或练手,并且比较看好的一些开源框架。如果想了解更多,可以去 Github 上搜索。

譬如,在 GitHub 的 Search 框,输入 java stars:>10000,可以搜索到星数最多、最热门的一些 Java 开源框架,如图:

如果想发掘 Java 前沿的开源项目,可以选择 Explore,点击 Trending 按钮,就可以看到近期热门的一些开源项目。

可以选择 today「当天热门」、this week「一周热门」和 this month「一月热门」,还可以在右侧选择语言来查看,比如选择 Java 语言,如图:

注:觉得好的,记得点击 star,大神贡献代码也需要鼓励  :)

可以看到,得益于最近被谷歌钦点为 Android 的官方语言,JetBrains 的 Kotlin 这一周成了最大的热门。

Java 的生态圈如此繁盛,Java 离陨落还尚需时日吧。

普通的 Java 程序员能更多的学习、使用这些优秀的框架,有能力的还可贡献一些代码,融入这个繁荣的生态,在我看来是上上策。

JVM 语系

Java 功能强大、生态丰富,已无需多言。但类型、语法与编程范式方面,存在一些局限性,也长期为人所诟病。

所以,有不少开发人员试图去寻求其他语言,既可以突破 Java 的这些局限,又可以与 Java 和谐共处。

Java 的祖师爷们也是非常明智,一开始就将编程语言 Java 与运行时环境 JVM 分离。

JVM 负责与操作系统的交互,屏蔽了具体操作系统的细节,制订了一整套生成字节码的规范,使得前面这一构想得以顺利实施。

如今有众多语言运行在 JVM 上,Groovy、Scala、Kotlin、Clojure 可能算得上是其中的佼佼者。

Groovy

Groovy 是类似 Ruby 的动态语言,适合编写脚本、插件、测试例,DSL (领域特定语言)等。知名的自动化建构工具 Gradle 主要就基于 Groovy 。

Scala

Scala 的设计初衷,就是在 JVM 上整合面向对象与函数式编程的各种特性。

大名鼎鼎的大数据处理框架 Spark、消息中间件 Kafka、用于构建可容错,可扩展、高并发应用的Akka,都是基于 Scala 语言编写。

Kotlin

前几日刚升级为 Android 官方开发语言的 Kotlin ,近期是一个热门。从前面讲到的 Github 上的 star 指数也可窥见一斑。 

基于 Kotlin 的库和框架、官方工具的支持、教学视频、文档等,也肯定会层出不穷。

Clojure

Clojure 被认为是基于 JVM 的 Lisp 方言,是函数式编程的铁杆。知名的大数据处理框架 Storm 主要就是由 Clojure 语言编写而成。

Ceylon

Ceylon 是面向企业级应用设计开发的强静态类型编程语言,支持 Java 和 JavaScript 虚拟机。

具体可参考:https://ceylon-lang.org/documentation/current/

下图是 2017 年的 JVM 语言使用率调查:


来源:Baeldung,链接:http://www.baeldung.com/java-in-2017

注:Groovy 达到了将近40%的份额,有点出乎我的意料。另外,得益于谷歌这么推一把,Kotlin 后续的比例有望来个大跃进。

2008 年开始,Oracle主办的 JVM 语言峰会,为 JVM 语系的架构师、设计师、工程师,提供了非常好的开放式合作的机遇。

顺便说一下,今年的 JVM 语言峰会,时间:7月31日~8月2日,地点:Oracle Santa Clara Campus,有兴趣的童鞋可以关注一下。

作为一名 Java 程序员,如果要选择第二门编程语言、或想来个多语言编程的话,选择 JVM 系的语言显然是一个非常不错的选择。

选择 JVM 系语言的一大优势是,前期可以使用熟悉的 Java 搭架子,局部功能优先尝试一下新语言,如此风险最小,与 Java 可以实现无缝切换。

至于具体如何选择,就要看你在功能性、实用性、舒适性、有趣性之间,如何取舍了。

结语

Java 自身在性能、语法、编程范式等方面,也是在不断地提高改进。

譬如 Java 8 引入了 Lambda 表达式、Optional、Streams、Date/Time API 等,Java 9 带来了 Jigsaw(模块化)等。

Java 程序员可以适时的与时俱进。

不过,谷歌等其他厂商由于对 Java 不具备掌控力,还有吃官司的风险,寻求 Java 的替代方案,动机是存在的。

所以,作为 Java 程序员,过于依赖 Java,也是比较有风险的。

适时的主动去改变,不要让自己哪天陷于被动。

除了学习第二、第三编程语言,程序员可以把更多的重心,放在算法上。

以后的生活无处不算法,从娱乐影视推荐、新闻资讯过滤,到出行购物、住宿交友等等,我们都离不开算法。

尽管许多优秀的算法,包括最前沿的深度学习学法,都会有大牛奉献开源实现,但只有其中的原理深刻理解了,才能掌握、并利用好这些算法。

后记

技术的更迭,有时候会来的很突然,很猛烈。但系统的更迭,往往会慢得多。

譬如 Cobol 语言,尽管语言本身陨落已超过 20 年,依然能在银行、证券、保险、电信等行业领域里见到 Cobol 的身影。

即使几年之后,Java 因各种阴差阳错、机缘巧合,开始走向陨落,Java 程序员们再混个 20 年,也是毫无压力。

因为 Java 常年占据编程语言前列(榜首),目前有太多的平台使用 Java 了。

Amazon、Google、eBay、阿里、京东、银行、证券、医疗、移动、电信、ERP等等。

各个领域,各行各业,Java 程序员吃老本也能再吃个 20 年......

当然,这只是 Java 抽中了下下签,您又恰巧选择了下下策。但愿不会如此。

最后,推荐一幅比较全面、而又有趣的 JVM 语系的海盗图:Pirates of the JVM

链接:https://jaxenter.com/wp-content/uploads/2017/03/Pirates-of-the-JVM-JAXenter-768x4245.png

稿源:世说微语

>>>【全民狂欢,评论有礼】5月15日-31日评论每日更新的“新闻资讯和软件更新资讯”,评论点赞数超过 20 的可登上每周更新的“源资讯”和“软件周刊”两大栏目,点赞数超过 50 的还将获得 5 活跃积分奖励和开源中国定制好礼。详情

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路
加载中

精彩评论

Eriloan
Eriloan
合适的场景用适合的工具,整天搞事儿。
jun4rui
jun4rui
Java的问题还是太重了,假设你要写一个网站,按照标准主流的做法,你先要学会Maven构建整个项目,然后学Tomcat,然后学SSH(现在能用jFinal啦!),这样大概是比较主流的。

换Python/JS,你就直接开写了还要干啥啊,你学会Django或者Express的时间恐怕比学会Maven和用Java IDE还少。
yybear
yybear
我觉得对于程序员多学两种语言没啥难度吧,我目前就是java golang python kotlin都用,每个语言都有好和坏的一面,看具体场景选择就好。java有重的一面,但是的确非常适合大项目大团队使用。
G-Bamboo
G-Bamboo

引用来自“jun4rui”的评论

Java的问题还是太重了,假设你要写一个网站,按照标准主流的做法,你先要学会Maven构建整个项目,然后学Tomcat,然后学SSH(现在能用jFinal啦!),这样大概是比较主流的。

换Python/JS,你就直接开写了还要干啥啊,你学会Django或者Express的时间恐怕比学会Maven和用Java IDE还少。
术业有专攻吧,用py写确实快,但是如果项目大起来,就不好管理了
G-Bamboo
G-Bamboo
Java不会被取代,但是在Android领域,Java的使用量势必会下降。少了Android开发者的支持,很可能几年之后,编程语言排行榜上Java就再也没办法站在第一的位置了。

最新评论(61

人生能绕几个圈
人生能绕几个圈

引用来自“开源_zj”的评论

新晋Java程序员,刚刚毕业结束完实习,目前方向是金融这块。技术发展太快,各位老手能不能给点发展建议,让我们这样的菜鸟少走弯路,谢谢!🙏

引用来自“人生能绕几个圈”的评论

术业有专攻,哪怕缩小到一门语言上也一样,你想往哪个方向发展就把那个方向的技术学精,少用框架,多练真本事,才能真正了解运行处理的原理。不过这也不意味着,其它就不闻不问,只是以你专攻的方向为主,其它为辅。

引用来自“开源_zj”的评论

感谢前辈指点,谢谢

引用来自“人生能绕几个圈”的评论

客气,多交流吧,另外,说个题外话,建议别找加班多的工作,尽量找个加班少的,收入与付出是成正比的,具体的度你自己把握吧,只是我觉得把生活全耗在工作上没必要,还是要有自己的时间,身体很重要

引用来自“开源_zj”的评论

端午节假期没怎么上网,今天才看到,感谢建议。我们公司有时候项目紧还是要加班的,这估计是这行的通病,平常下班也会自己充电。现在基本一周跑20公里,身体是革命的本钱嘛。
我最近有事,没忙得赢上,好样的,加油,少加班,呵呵
_森屿海巷_
_森屿海巷_
好文
开源_zj

引用来自“开源_zj”的评论

新晋Java程序员,刚刚毕业结束完实习,目前方向是金融这块。技术发展太快,各位老手能不能给点发展建议,让我们这样的菜鸟少走弯路,谢谢!🙏

引用来自“人生能绕几个圈”的评论

术业有专攻,哪怕缩小到一门语言上也一样,你想往哪个方向发展就把那个方向的技术学精,少用框架,多练真本事,才能真正了解运行处理的原理。不过这也不意味着,其它就不闻不问,只是以你专攻的方向为主,其它为辅。

引用来自“开源_zj”的评论

感谢前辈指点,谢谢

引用来自“人生能绕几个圈”的评论

客气,多交流吧,另外,说个题外话,建议别找加班多的工作,尽量找个加班少的,收入与付出是成正比的,具体的度你自己把握吧,只是我觉得把生活全耗在工作上没必要,还是要有自己的时间,身体很重要
端午节假期没怎么上网,今天才看到,感谢建议。我们公司有时候项目紧还是要加班的,这估计是这行的通病,平常下班也会自己充电。现在基本一周跑20公里,身体是革命的本钱嘛。
AutoPlus
AutoPlus

引用来自“AutoPlus”的评论

我说一个,单进程非阻塞异步网络编程,Java 目前还是 Class callback 的模式 (NIO Netty) (作为对比,NIO Netty 的老爹 Node.js 是 Function callback 模式),这也是某些小白选择 Go 的原因 --- Go 有 go {} 可以把 Callback 进行 yield 封装从而编程 await 伪同步模式。如果 Kotlin 实现了 async await,3 年后会稀释掉绝大部分的 Java 网络编程 --- 作为 Hadoop,如果你有 async await 为什么还要忍受 Netty 的 Class callback。题外话,已经有很多语言实现了 async await --- JavaScript 7,Python 3,PHP 不知道,Nim asyncdispatch,C# 很早就实现了,...

引用来自“丛林迷雾”的评论

你说的没错,但是你确定async await是缺点嘛?这只是一种表现形式好吧
我说 async await 是优点
人生能绕几个圈
人生能绕几个圈

引用来自“开源_zj”的评论

新晋Java程序员,刚刚毕业结束完实习,目前方向是金融这块。技术发展太快,各位老手能不能给点发展建议,让我们这样的菜鸟少走弯路,谢谢!🙏

引用来自“人生能绕几个圈”的评论

术业有专攻,哪怕缩小到一门语言上也一样,你想往哪个方向发展就把那个方向的技术学精,少用框架,多练真本事,才能真正了解运行处理的原理。不过这也不意味着,其它就不闻不问,只是以你专攻的方向为主,其它为辅。

引用来自“开源_zj”的评论

感谢前辈指点,谢谢
客气,多交流吧,另外,说个题外话,建议别找加班多的工作,尽量找个加班少的,收入与付出是成正比的,具体的度你自己把握吧,只是我觉得把生活全耗在工作上没必要,还是要有自己的时间,身体很重要
一只囧蟹
一只囧蟹
同意完成一个目标,Java的最啰嗦!
shitalpig
shitalpig
垃圾Java早该滚去吃屎了,垃圾js也该被ts代替
叶挺锋_yet
叶挺锋_yet
java有个渣渣爸爸 oracle 注定 java 很快要没落
开源_zj

引用来自“开源_zj”的评论

新晋Java程序员,刚刚毕业结束完实习,目前方向是金融这块。技术发展太快,各位老手能不能给点发展建议,让我们这样的菜鸟少走弯路,谢谢!🙏

引用来自“人生能绕几个圈”的评论

术业有专攻,哪怕缩小到一门语言上也一样,你想往哪个方向发展就把那个方向的技术学精,少用框架,多练真本事,才能真正了解运行处理的原理。不过这也不意味着,其它就不闻不问,只是以你专攻的方向为主,其它为辅。
感谢前辈指点,谢谢
返回顶部
顶部