Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路
http://blog.jobbole.com/111422
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 上搜索。
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 抽中了下下签,您又恰巧选择了下下策。但愿不会如此。
Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路的更多相关文章
- 谈谈Java程序员进阶的那些知识和方向
谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...
- 聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路
引言 很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想说,这位同学你站出来,保证不打死你,-_-),原文章名称叫做<回答阿里社招面试 ...
- Java 程序员快速上手 Kotlin 11 招
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:霍丙乾 近经常会收到一些 "用 Kotlin 怎么写" 的问题,作为有经验的程序员, ...
- Java 程序员快速上手 Kotlin 11招
收录待用,修改转载已取得腾讯云授权 作者 | 霍丙乾 编辑 | 迷鹿 前言 最近经常会收到一些 "用 Kotlin 怎么写" 的问题,作为有经验的程序员,我们已经掌握了一门或者多门 ...
- 文章推荐一个Java程序员跟大家谈谈从业心得
一个Java程序员跟大家谈谈从业心得 2017-10-21 java那些事 java那些事 java那些事 微信号 csh624366188 功能介绍 分享java开发中常用的技术,分享软件开发中各种 ...
- 工作了3年的JAVA程序员应该具备什么技能?(zhuan)
http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 ...
- 一个10年Java程序员的年终总结,献给还在迷茫中的你
我越来越担心我作为一个Java程序员的未来. 恍然间,发现自己在这个行业里已经摸爬滚打将近10年了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作 ...
- JAVA程序员面试30问(附带答案)
第一,谈谈final, finally, finalize的区别. 最常被问到.final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能 ...
- 五月的仓颉大神写的 三年java程序员面试感悟 值得分享给大家
感谢 五月的仓颉 的这篇文章 , 让我重新认识到自己身上的不足之处 . 原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前 ...
随机推荐
- 008、Docker 组件如何协作(2018-12-25 周二)
参考https://www.cnblogs.com/CloudMan6/p/6774519.html 以httpd为例,介绍Docker组件间如何协作 root@docker-lab:~# d ...
- IDA Pro使用(静态分析+动态调试)
链接:http://skysider.com/?p=458 IDA Pro使用(静态分析+动态调试) 1.静态分析 IDA FLIRT Signature Database —— 用于识别静态编译的可 ...
- luogu P3304 [SDOI2013]直径
树的直径两遍dfs救星了 至于一定在直径中的边数,可以发现这些边一定是连续的(不然你两条直径中间能有空挡?),然后,如果某个点往下有多条直径,那么这条点以下都不算入答案.所以以直径分别两端点为根,找出 ...
- 第16月第5天 performSelector afterDelay cancel dispatch_semaphore_wait
1. //不延时,可能会导致界面黑屏并卡住一会 [self performSelector:@selector(startScan) withObject:nil afterDelay:0.3]; - ...
- IOS中的三大事件
iOS 中,所有显示在界面上的对象都是从 UIResponder 直接或间接继承的,只有继承了它才可以处理事件.而在ios中的事件可以分为三大类: 1.触摸事件 2.加速计事件(摇一摇) 3.远程控制 ...
- Java 集合和映射表
集合 可以使用集合的三个具体类HashSet.LinkedHashSet.TreeSet来创建集合 HashSet类 负载系数 当元素个数超过了容量与负载系数的乘积,容量就会自动翻倍 HashSet类 ...
- K-means聚类算法原理和C++实现
给定训练集$\{x^{(1)},...,x^{(m)}\}$,想把这些样本分成不同的子集,即聚类,$x^{(i)}\in\mathbb{R^{n}}$,但是这是个无标签数据集,也就是说我们再聚类的时候 ...
- 使用SpringSecurity保护方法应用
(1)pom添加依赖 <dependency> <groupId>org.springframework.security</groupId> <artifa ...
- 【CTF WEB】ISCC 2016 web 2题记录
偶然看到的比赛,我等渣渣跟风做两题,剩下的题目工作太忙没有时间继续做. 第1题 sql注入: 题目知识 考察sql注入知识,题目地址:http://101.200.145.44/web1//ind ...
- python日志和异常
“日志”转载:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html "异常"转载:http://www.cnb ...