Java 20年:历史与未来
作为最受欢迎的编程语言之一,Java已经走过了20个年头。从已经落寞的诺基亚到现在火热的电商系统,我们都能看到Java语言的身影。从1995年的第一个版本到现在的Java 1.8,我们甚至能从Java的版本迭代中看到不同时代编程语言关注的重点。经过了过去20年的发展,Java已经成为如今使用最为广泛的企业级语言。为了庆祝Java的第20个生日,InfoQ为此采访了Java技术专家彭晨阳(网络ID:板桥)。
\\
InfoQ:您是哪一年开始接触Java的?还记得当时『世界』是怎么看这门语言的吗?
\\
\
板桥:我大概是2000年之前开始接触Java,当时大家都认为Java慢,几乎没有几个人看得上眼,那时使用Perl/C实现CGI比较快,PHP很方便。
\
\\
InfoQ:能回忆下你的职业生涯中与Java相关的经历吗?
\\
\
板桥:2000年之前使用Perl开发过一个类似西祠、西陆社区网站,随着功能日益复杂,维护拓展比较麻烦,打算使用Java改造升级。但是Java比较复杂,当时有EJB等规范,因此误用过EJB来做产品,其实EJB更适合做企业中可靠性要求比较高的项目。而对于社区项目来说,性能是关键,这个道理后来我从CAP定理中才得到答案,当然当时也没有听说过CAP理论,这段教训是相当深刻的,EJB很难掌握,运行起来更慢,最后也以失败告终。
\\
之后研究学习了Jive开源Java论坛,对其设计模式与缓存两个优点进行了综合学习与应用。有一段时间参与过手机游戏的开发,那时客户端是J2ME,但是游戏逻辑不加载在客户端,而是将客户端只作为界面展现,类似今天的浏览器+Angular.js这样富客户端。当然,这个系统对网络要求比较高,但是当时无线网络3G还没有推出,后来放弃了,从该项目中我意识到高性能的大型并发系统使用Tomcat这样的普通Web服务器已经无法承担,于是对异步消息JMS等技术产生了兴趣。
\\
之后,陆陆续续参与过一些项目的咨询和设计,大部分都比较普通,无非是CRUD增删改查。于是萌生了做一个快速开发框架,在不丢失多层架构的基础上能有Delphi等二层架构的开发效率,这大概是JDON框架的原型。当然,该框架后来从快速开发为首要目标转移到灵活性为首要目标。
\\
做了不少项目后,需要寻求理论指导,原来的数据库+Java路数已经不能包打天下,后来逐步开始引入DDD领域驱动设计CQRS和EventSourcing。
\
\\
InfoQ:很多人都在唱衰Java,您能结合Java的发展现状和趋势谈谈Java的前景吗?
\\
\
板桥:Java发展到今天已经20年了,作为一个编程语言确实不简单,想当初人人受怀疑的慢语言到今天通用的健壮语言,真是大智若愚啊。Java代表的面向对象思想确实给工程领域带来了革命性的变化,当然思想是不断进化发展的,如今人们开始看好函数式编程语(FP)。尽管Java 8也加入了函数语言的特点,但是OOP和FP两者到底是不同的编程范式,不过掌握FP有一定门槛,这也是造成很多人观望的一个原因。
\\
Java在数据流处理方面还是很有竞争力的,而大数据实时流处理系统是Java的新领域,在这个领域有Apache Kafka、Apache Samza、Apache Storm、Apache Spark的Streaming模块和最新的Apache Flink。Spark是基于JVM的函数语言Scala编写,其余都是Java编写。
\
\\
InfoQ:JVM的普及促使相关周边语言不断涌现,你怎么看这些JVM语言?
\\
\
板桥:以Scala为代表的JVM语言发展迅速,Scala语言特性是首先区分不变性和可变性,当初使用EJB时首先要区分是无状态和有状态,这说明思路是一脉相承的。可变性的状态是造成副作用和各种Bug的罪魁祸首,可能我们如果只是把可变状态使用数据库实现时没有注意到这种问题。其实这个问题遍布在应用的每个角落,特别是使用类和对象这个OOP概念实现时最容易发生。一个类或对象包括字段和方法,如果这个字段值是可变的(可变状态),我们使用这个对象时如果不打开它的类代码是无法得知它有可变状态的,那么就会导致各种副作用发生。
\\
而函数编程由于函数方法是第一公民,没有什么东西挡在它的前面,没有类或对象包裹着它们,因此,它们无法私藏可变状态字段,能够确保应用系统每行代码都是基于不可变的基础之上。
\\
如果说Scala之类JVM的函数语言适合不断添加功能函数的应用场景,那么Java之类的OOP语言适合不断增加实体物体的应用场景。前者好动,后者好静。
\
\\
InfoQ:Java是如何拥抱云时代的?
\\
\
板桥:Java在云时代面临以Go语言为主的容器(Docker等技术)生态圈的挑战。其实JVM也是一种容器,但是这种容器特性正在被Linux学习与赶超,那么,JVM的定位就可能比较尴尬。
\\
Docker之类容器可以在本地笔记本或电脑上运行,然后同样可以部署到云上运行。当在云上运行时,Kubernetes能够以一种可控的方式升级容器从而实现运行管理一批容器,如同一个大型船队或舰队一样,你可以控制它们的流量访问量,可以指定多少个容器来扩展支撑一个服务的运行,随着访问量提升,你通过增加容器数量能够整个系统的负载能力。
\\
当然,Java的大型分布式系统越来越多,Java在云计算与分布式系统中还是扮演主要角色,形成一个大型的生态圈。当我们站在泰山之上,一览众山小,当你在全球拥有多个数据中心时,语言已经变得不那么重要了,关键是架构设计。
\
\\
InfoQ:Go语言这两年比较火热,你怎么看这门语言?与Java相比,他有哪些优劣?
\\
\
板桥:Go语言相对Java主要优点是其并发组件模型,Java的并发比较低级,无非是多线程与锁,想搞清楚Java中各种锁的用途,包括数据集合Collection的线程安全性与性能差异对比,需要花费大量时间与精力,包括使用经验。而Go语言使用了Channel/CEP这样的组件简单封装了多线程与锁,将以前JMS的Queue队列模型架构引入到了语言之中,两个对象之间交互只要通过Channel通道就可以。这种模型保证了并发性,有简化了编程模型,无疑受到很多人的欢迎。
\\
Go语言当前也受到更加强劲的Rust语言挑战,如果说,Go语言的Channel是一种有形的设计,那么,Rust语言的并发模型达到无形的设计,只要你编写好函数方法,安全性与并发性就无形中得到了解决,不用专门去思考并发,有意识地去使用并发组件模型编程。
\
\\
InfoQ:现在的开发语言特别多,Java、Go、PHP、Rust、Python等,你认为未来语言的发展趋势是怎么样的?
\\
\
板桥:现在的开发语言如雨后春笋,主要原因是CPU进入多核并发时代,以及大型架构进入分布式系统,如何使用一种语言从微观的CPU多核之间并发到数万台服务器之间的分布式计算处理,这种大一统的愿景促使人们在不断探索。
\\
在Java中,我们可以通过框架来实现这点,以我前几年研发Jdon框架为例,虽然能够勉强实现并发与分布式,但是这种实现需要很强的知识背景,不利于初学者上手。而要达到普及这个目标,必须从语言入手,让语言初学者在学习掌握语言以后,无形中就会实现了并发与分布式。
\\
Go语言在这方面比较突出,其并发模型以读写操作为基础。请注意,Java等语言并发模型没有这么高,它们是以线程为基础,再应用到读写场景中,而我们现实中必须以读写为基础,再应用到具体业务场景中,这里面高低层次:线程–\u0026gt;读写操作–\u0026gt;业务应用,无疑越靠近业务应用的语言越能简化我们的开发,而分布式系统也是基于读写操作,著名的CAP定理也隐含了以读写操作为基础的语境。
\
\\
受访嘉宾介绍
\\
彭晨阳,Jdon.com创办者和版主。软件开发设计咨询从业20年,10余年Java开发经验,拥有ERP、大型游戏、互动电视三网合一等架构经验。独立咨询顾问,个人擅长复杂系统的软件架构和领域建模。流行新技术思想的传道者,主持解道网站跟踪国际最新软件架构思想和设计技术。首个国内Java开源框架项目Jdon框架的设计者。
\\
感谢臧秀涛对本文的审校。
\\
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群)。
Java 20年:历史与未来相关推荐
- Java编程语言的历史和未来
通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序. 开始免费试用! 作为Internet上著名的编程语言 ,Java对人们如何浏览数字世界产生了深 ...
- java语言发展历史_Java编程语言的历史和未来
java语言发展历史 通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序. 开始免费试用! 作为互联网上著名的编程语言 ,Java对人们如何浏览数字 ...
- 《Java 20年:道路与梦想》迷你书发布
互联网与Java的诞生 \\ 1995年春天,那是我第一次亲眼见证并体验互联网的魅力,当时网景公司刚刚发布了Navigator浏览器.因为我有C语言和SQL的软件开发背景,所以我立刻问自己--如何进行 ...
- 使用java进行婚礼庆祝_#102030:在30天内运行20 10K,庆祝Java 20年
使用java进行婚礼庆祝 1995年5月23日是技术史上的重要时刻. 业界似乎并未意识到当天发布的语言会在未来几年内完全改变技术的格局. Java将在今年的同一天庆祝20岁生日. Java 20年,哇 ...
- #102030:在30天内运行20 10K,庆祝Java 20年
1995年5月23日是技术史上的重要时刻. 业界似乎并没有意识到当天发布的语言会在未来几年内完全改变技术的格局. Java将在今年的同一天庆祝20岁生日. Java 20年,哇! 回顾20年前的存储器 ...
- python javascript人工智能_Python,Java和JavaScript哪个编程语言未来发展空间更大?...
编程语言未来哪个更有前景?哪个会被淘汰?这些都是初入IT行业的小白比较关心的问题.今天就借此机会,来谈谈:Python,Java和JavaScript这三门语言,到底哪个更具发展前景? 谈论这个问题之 ...
- 甲骨文携手各界共庆Java 20周年
本文讲的是 : 甲骨文携手各界共庆Java 20周年 , [IT168信息化]可曾记得你用Java写的第一句话"Hello World"?你的第一本Java书籍的封面?你调试的 ...
- Java 20 超神版正式发布,展示了 Java 技术的最新进展
作用域值(Scoped Values)进入孵化阶段 记录模式(Record Patterns)进入第 2 预览阶段 switch 模式匹配(Pattern Matching for switch)进入 ...
- 计算机历史和未来课程,计算机课程作业,计算机与汽车结合的历史与未来ppt概要.ppt...
计算机课程作业,计算机与汽车结合的历史与未来ppt概要 第五组 小组成员:王培至,周祥,钱晓立,张一丁,李蕴韬,袁浩,张永康,张竣琛 (不分先后) 计算机.计算机网络.与汽车的 发展史概述 计算机网络 ...
- JAVA学习基础知识(一)JDK的安装和配置及Java的发展历史
前言 欢迎阅读本系列文章,本文主要内容为Java的发展历史,以及在电脑上如何配置Java环境.ps:这是第一次发布java语言的文章,若出现错误,望指正. 文章目录 前言 java的发展历史 Java ...
最新文章
- linux文件编辑操作,Linux下文本编辑及其文件操作
- python退出程序-Python退出命令的总结
- 全球及中国橡胶行业盈利状况及十四五竞争前景展望报告2021版
- Python Django模板templates渲染及配置
- 2021牛客暑期多校训练营3 B Black and white 最小生成树 + 思维
- java工作台无法显示_【Eclipse】使用指南(18)搜索工作台
- Django中--使用redis存储历史浏览记录
- [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)...
- 多文件结构和编译预处理命令
- 5G 改变社会的真相在这里!
- 一文了解 AI 改变生活的 14 种姿势
- mysql 导入,导出数据库
- 《WebGL编程指南》学习笔记——2.使用 canvas 元素
- 【持续更新】Eclipse使用教程
- 多摩川读写EEPROM以及并口实现
- 906. 超级回文数
- 木马专杀软件测试自学,5款免费杀软“紫狐”木马查杀测试
- 软件工程导论——课堂学习笔记
- 服务器上主要有什么作用,服务器是干什么的,有什么作用!
- 基于PHP+MySQL动漫周边商城销售网站的开发与设计
热门文章
- python教程5小时完整版_Python零基础入门教程5小时完整版(北京理工大2020年版)
- Windows核心编程 第二十章 DLL的高级操作技术
- 【算法】双指针算法 ( 有效回文串 II )
- PYTHON 数据分析常用类库
- mysql导出数据库数据字典
- 任务05—学习 MARKDOWN 语言
- java文本输入输出小结
- [实验]通过内核Patch去掉iOS-v4.3.3的沙盒特性
- 红旗桌面版本最新运用要领和成果解答100例-7
- JQuery Basic Features Quick Walkthrough