Java这门语言是在1995年5月由Sun公司发布的,以这个时间点来计算,Java这门语言已经27岁了。Java一直都是一门非常流行的语言,特别是在后端。
虽然近些年来,后端领域出现了很多新兴的,别具特色,引人注目的新语言,比如基于JavaScript的NodeJS,Google的GO,以及非常具有函数式风格的JVM动态语言 Scala,更简洁的Kotlin等。这些语言,至少从后端来说它们完全是可以替换掉Java,与它们比起来,Java似乎有点陈旧而迂腐。
但我认为一个事实是,至少在后端领域,这些新兴的语言虽然在后端带来了一些冲击,但Java仍然是后端编程的主流与最佳选择,这些语言从未真正撼动Java的影响力与流行度。
究竟这是什么原因呢,基于此谈一谈我的个人的一些想法。
首先要申明的是,本文为个人薄见。
TIOBE Index数据
首先,我认为要讲一讲为什么Java仍然是主流,因为不能靠我个人的感觉或凭空下这个结论,这样就不够严谨了。
而对于编程语言来说,我认为参考一个编程语言的流行度与影响力来说,使用TIOBE Index数据是最具权威性的。
从TIOBE Index官网查看最新的编程语言的数据值,参照如下图:
从图上可见,Java仍然是排名前三的语言。而事实上,如果翻查TIOBE Index的历史数据,Java排名始终非常稳定,虽然时而上升,时而下降,但总是前几位,这个影响力是非常持续的。
而Python以及C,这两门语言,严格的说和Java并不是同类的,Python主要应用于爬虫,人工智能,数据分析,自动化运维等方向,C则是比较底层的编程语言,而Java则更多的算是后端应用级编程语言。
也就是从后端编程这个领域来看,无论所谓的新兴的语言,NodeJS也好,GO也好,Scala或是Kotlin也好,它们当然有着自己独特与优秀的一面,但从整体上来说,Java仍然是后端编程的最优选择,这个始终未曾被撼动过。
而其实很多优秀的程序员并不喜欢Java,这也是业界有所共知的。
那究竟是什么造成Java能够如此长盛不衰呢。
对Java的思考
这里,我就基于我个人的思考,讲述一下为什么Java能够仍然具有影响力的原因所在。
优势一:Java易学,学习曲线较低
Java语言有两个非常明显的特点,这使得它易于学习,学习与使用Java,比起其它一些语言更容易。
第一:Java是一门高阶语言
什么叫High Level语言,就是语言层面帮你做了非常多的事,省去了非常多程序员的工作,如Java的垃圾回收,Java在设计上就避免了指针的概念。与之相对应的,则是C这样的Low Level语言,它有结构体,有指针,甚至一些语言需要自己管理与回收内存。
所以,使用Java,程序员能更专注于业务的实现,不需要太过于关注语言级别的优化。当然,这样的语言的缺点是它无法性能最大化,在这方面给程序员提供的空间相对较小。
第二:Java是一门面向对象的语言
我们都知道,语言主要有三种范式,面向过程,面向对象以及函数式风格的语言。这三种范式中,显然以面向对象更容易学习与理解。因为面向对象就是对我们现实生活的映射与建模,而面向过程和函数式风格则相对理解与学习起来更考验程序员的能力。
比如非常有名的Scala语言,它在函数式风格方面更具优势与吸引力,但Scala的学习曲线非常高,函数式风格就是这样,它在简化代码的同时,也降低可阅读性,带来了难以理解的缺点。我甚至看网上有人将Scala形容为自己过后都不太能读懂自己的代码这种说法。
所以,Java语言非常易于学习,这使得它的推广与流行非常容易。
优势二:Java严谨,易于维护,又兼具简洁与优雅
易于学习的语言挺多的,但在学习曲线不高的前提下,又能够做到严谨,易于维护,稍微用心下就能写出简洁与优雅的代码的,这样的就不多了。
比如论流行度来说,现在最流行的语言是JavaScript。JavaScript也很容易学习,但它与Java明显不同,JavaScript并不严谨,而且随着代码的增加,越来越难以维护,所以现在才有了TypeScript,其实你只要用过TypeScript,就会发现它与Java非常类似。
基于Java,你同样能写出简洁与优雅的代码。当然,我不是说它能和一些函数式风格那么简洁,但Java的可维护性确实非常优秀。
《代码简洁之道》就是以Java语言来示例的。如果很难做到,又不易于维护,也不会用Java来说明。
优势三:Java程序员群体非常大
当然,就单个程序员本身来衡量这个事情,并不是值得关注的点,甚至有可能优秀的程序员可能还不屑于与人多的为伍。
但我们要知道现在软件开发的一个显然趋势与特点是:
软件开发已经越来越复杂,越来越需要团队的协作才能完成
很多年前,求伯君仅凭个人之力开发出一个WPS,而比尔盖茨也自己一个人开发出Windows,这些仍然是我们行业的佳话。但是,与那个时候相比,现在的软件开发早已没有办法凭个人之力来做到了,一个企业应用级软件,后端,前端,移动端WEB端,一个人?还是Windows或是Linux操作系统,哪一个人能搞定?
所以,软件开发需要的是团队,站在公司或团队的立场来衡量这个事情,就会理解,一个编程语言有比较大的群体,就会非常有利。
想想IT行业人员流动率,使用那些小众的语言,未来你招谁来做这些事,你是否有足够的资金支撑,不是每个公司都能象阿里,腾讯或GOOGLE一样有这么雄厚的实力,轻松招到优秀的程序员。
优势四:强大的生态
今天,任何一门编程语言,光谈语言本身,不聊生态,都是耍流氓的行为。
我们现在并不是软件行业的早期,什么都没有,都得重头开始钻研,实现。软件开发早已站在巨人的肩膀上,经过几十年的软件行业的发展,无论是从软件行业的方法论,比如敏捷软件开发,DDD领域驱动思想或是设计模式等,还是从软件的基础工具或生态,如缓存,数据库,安全等解决方案上,都已经有着完整的成套的解决方案。
而实现这些解决方案的基础类库或框架,我称之为生态。
生态是Java足以傲视其它很多语言的一个非常重要的原因,使用Java,几乎在每一个解决方案上,Java都有着成熟的,而且是数量众多的选择方案。
你想要做数据存储,JDBC?还是Hibernate或是Mybatis;用缓存提高性能,那可以是Redia或是Memcached;安全?OAuth2行不行,Spring Security或是Shiro?
基础开发框架,全家桶式的Spring足够了没有?不喜欢Spring,没关系,Dropwizard这样的非Spring给你选择,类似的替代方案非常多。
同步式编程不喜欢,那异步式编程如何?Spring WebFlux或是Vert.x,RXJava等都是可以考量的选择。
更别说Java中存在的Apache基金会,Eclispe基金会等一大堆知名,可靠的生态提供商,它们都维护与支撑着一大堆基础类库。
使用Java,几乎在任何领域,你都可以做到只关注业务,不需要重复建设底层的轮子。
这种优势是其它很多语言难以匹敌的。
优势五:稳定可靠的质量
Java的稳定可靠来源于两方面,一是Java语言本身的稳定与可靠,其二是其生态的稳定与可靠。
Java是谁开发的?早期是Sun公司,现在的主要负责公司是Oracle,但Java并不仅仅是Oracle开发的,还有Redhat,Eclipse,IBM,Amazon等公司的参与。这些公司你应该都很熟悉,无一不是我们软件行业中的巨头。相比较下来,Kotlin只是Jetbrains公司的,GO是Google的,TypeScript只是微软的。
这就是为什么Java语言本身的质量如何稳定与可靠的原因所在。
再说回生态,Java不只有强大的生态,而且关键是稳定与可靠的生态。如果仅从数量上来说,Java生态估计可能没法与前端npm的生态相比。
但是,Java生态的运作模式非常成熟,要么是软件基金会,有名的比如Apache或是Eclipse;要么是大公司开发的比如Spring;虽然个人也有非常多,但相当一部分我们使用的生态是这些基金会与大公司的杰作,理所当然的它们的质量相当有保证。
相对应的,我在2020年使用TypeScript的时候,使用了一个有点名气的iOC框架,typescript-ioc
你有在哪个Java生态中,遇到过这种3年没有更新的,还有大量使用程序员在用的类库或框架,做Java的可能压根没有意识到它们的生态原来是如此的稳定与可靠,更新稳定。
优势六:Java一直在进步
就语言级别的比拼,Java在语言特性上,可能没有Kotlin简洁,也比不上Scala这么函数化,也没有GO语言高效;所以,Java并不能称得上是最优秀的语言,甚至在很多语言特性上,Java非常啰嗦,不讨人喜欢。
但Java从未停止进步,最开始JMV性能差,于是Hotspot出现了,现在更进一步,又有了GraalVM;垃圾回收不高效,于是有了G1GC(Garbage First Garbage Collector)
不够简洁?于是Java 8添加了lamaba表达式,Stream流等,后面的版本又陆续添加了Sealed Class以及Record Class等,以前很多语言有的Java没有的,如今Java都慢慢的增加上了。
Java从未停止它的脚步,不断的变更与改进自我。
Java语言的五大原则
Java语言在创世之初,就确定了五大原则,它们是:
- • It must be simple, object-oriented, and familiar. (Java必须简洁,面向对象以及易于上手)
- • It must be robust and secure. (Java必须健壮以及安全)
- • It must be architecture-neutral and portable. (Java必须技术中立以及与可移植的)
- • It must execute with high performance. (Java必须是高性能运行的)
- • It must be interpreted, threaded, and dynamic. (Java必须是直译的,多线程以及多态)
27年过去了,Java始终坚守了这些原则。虽然现在新兴的优秀语言越来越多,多元的编程的世界当然是我们程序员应该欢迎与喜欢的,不同语言各有特色,各有优劣,我们可以做出更好的适合业务的选择。
但直到现在,Java仍然是值得我们尊重与感谢的编程语言。在今天的互联网,Java起到不可替代的作用。它是企业级应用开发的绝佳选择。
仅以此文向Java致敬,仅以此系列表达我对Java的热爱。
本系列终。
关于我
我是御剑,一个致力于追求,实践与传播编码之道的程序员。
访问微言码道
(https://taoofcoding.tech)以阅读更多我写的文章;
访问myddd
(https://myddd.org)以了解我在维护的全栈式领域驱动开源框架。