找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[ 行业资讯 ] 【访谈】郑晔谈Java开发:新工具、新框架、新思维

2014-06-14 21:38| 发布者: zhouy | 查看: 2452 | 收藏

摘要: 守望者:InfoQ邀请郑晔(Thoughtworks高级咨询师)讨论java发展,你是否还在java6中挣扎,java8提供了更加强大的类库,并且有别于以前的版本,java8对于并发和JIT有别于以前java版本的思路,大家应该专注。 ... ... ...

1995年5月23日,Java语言正式诞生,1996年1月,JDK1.0发布;2000年5月,JDK1.3、JDK1.4相继发布;2004年9月,J2SE 1.5发布;2009年12月,Java EE 6发布;2014年3月18日,Java SE 8发布。19年的历史,Java已经成为全球最流行的开发语言之一,也是使用最为广泛的企业级语言,没有之一。在软件开发的世界里,两年一小变,三年一大变,QCon北京2014大会上,来自ThoughtWorks的首席咨询师郑晔回顾了最近十多年软件开发领域的发展变化,并重点介绍了Java世界程序库、开发方式、工具等的变化。会后,InfoQ对郑晔做了一次深入专访。

InfoQ:为什么会在这次QCon演讲上选择“你应该更新的Java知识”这样一个话题?

郑晔:这个话题可能与我个人的经历有关。我的职业生涯是从Java起步的,中间各种机缘,我做了很多其它不同类型的项目,接触过各种各样的程序设计语言。最近几年又重新把所有的注意力放回Java,我很惊讶地发现,现在许多程序员讨论的内容几乎和我十多年前刚开始做Java时几乎完全一样。要知道,我们生存的这个行业号称是变化飞快的。 其实,这十几年时间,在开发领域已经有了非常多的新内容涌现出来,即便是Java开发这个领域,也有了很多变化。我自己最近的几个Java项目,用到了不少十年前没有的东西。既然我有了这样的感觉,为什么不能尝试着总结一下呢? 于是,去年我在自己的blog上写了一个系列的《你应该更新的Java知识》。我自己真正总结出来的内容要远比写下来的多,在公司内部,我做了一个有十几节的课程,给自己的同事分享过。这次的QCon分享的主题,就是基于这个系列课程第一讲的概述部分。所以,我在演讲上也提到,如果想了解全部内容,就看以后还有没有机会在更多的大会上分享了,当然,如果想更完整地了解,可以专门联系我。

InfoQ:在演讲中您提到,您向大家推荐了很多比较好用的Java开源软件,比如Guava,能详细说说吗?

郑晔:我推荐的程序库有一个的原则,它们必须有很易用的API,而不仅仅为了实现功能。下面是我在演讲里列出的几个我愿意推荐给大家的程序库。我对Guava的一个评价是,只要你做的是Java项目,就应该用Guava。Guava某种程度上是弥补了JDK的不足,我们都知道,JDK是为了给Java开发人员提供一个基础的开发包,但是,JDK基本上定位于功能实现。这在10多年前,没有问题,但现在,随着人们对于代码编写认识的加深,仅仅有功能已经不够了,还要有一个易用的接口。举个简单的例子,把文件读到一个字符串里,如果用JDK实现,光想着异常处理都回让人头疼不已。Guava是一个现代的程序库,它有着更易用的API。当然,Guava也有一些新增功能,比如,一些集合类、缓存等等。Guava做得怎么样?看一下Java 8的文档就可以知道,有一些API几乎就是原封不动地从Guava上借鉴来的。Joda Time是我提到的另一个程序库。它现在的位置很有趣,我们都知道JDK中原有的日期库设计的非常糟糕,Joda Time就是为了让我们躲开Java的日期库。但是,因为它设计得很好,它也被JDK借鉴了,于是有了JSR 310,现在已经是Java 8的一部分。不过,从技术发展来看,Java 8广泛使用起来还有很长的路要走。大多数人还会继续与Java 6做斗争,所以,我还是把它列了出来。

InfoQ:对于这些新工具、新框架的学习,您有什么好的方法分享给大家?

郑晔:软件开发行业是一个发展变化很快的行业,尽管很多思想层面的东西变动不大,但在具体操作层面上,总会有新的东西层出不穷。作为一个程序员,如果不希望为这个时代淘汰,一个开放的心态必不可少。就我个人而言,我会一直开着自己的雷达,了解各种新技术、新知识的。至于到具体的工具框架学习,没有什么特别的,文档是最好的老师。基本上,文档会把功能性的东西都告诉你。

InfoQ:在实际的开发中,同一个功能往往有不同的框架做了实现,比如MVC的实现就有Struts、SpringMVC等。在遇到类似的情况时,您是怎么选择框架的?

郑晔:在功能类似的情况下,我会选择更符合技术发展方向、API设计更好的库。举个例子,如果开发一个Web应用,以前的做法是用Spring MVC一个一个页面写,但现在我不会这么做了。我会倾向于基于微服务的架构,这是一个符合技术发展方向的做法。更容易理解的说法是,后台提供基于REST的API,由前台页面进行访问。这样原来传统的方式就显得笨拙了,它们是为了由后台渲染页面准备的,所以,后台框架我会选择一个更容易做REST API的框架,比如用Jersey加上Jackson。再举一个API影响选型的例子,我们常用的Log库,以前我们都会选择Commons Logging,但是使用这个库,通常我们的代码都是在正式地写日志之前,先判断一下isXXXEnabled。因为这个库是Java 5之前设计的,之所以这么做,有许多性能之类的考量。而现在,我的首选Log库是SLF4J,就省去了那些不必要的代码,非常清爽。

InfoQ:在演讲中,你还重点讲了自动化。那么,在这方面您是怎么做的?

郑晔:对于自动化,我的基本理念是,尽可能自动化一切能够自动化的东西。十几年前,我们提到自动化,基本上就是编译、打包,而现在自动化的范围比以前大得多。我在2011年曾在InfoQ上发表了一篇名为《软件开发地基》的文章,里面谈到了我在项目里所做的一些基本的自动化工作。时隔三年再来看这篇文章,大部分内容依然是适用的。而现在,当我们谈到自动化,应该比那篇文章的范围还大,在我自己的项目里面,我们会把一些环境部署的过程也自动化起来,按照现在流行的说法,目标是要做持续交付。在Java自动化领域,最近几年一个比较大的变化发生在工具领域。我在演讲中提到了,如果你现在还在用Ant和Maven,你就落伍了,Ant做简单的事不简单,Maven做复杂的事情很困难。现在的趋势是,以全功能语言做自动化脚本。《软件开发地基》那篇文章里,我用的工具是buildr,它依赖于Ruby语言。最近几年Java领域表现最活跃的自动化工具是Gradle,它现在几乎是我做Java项目的默认之选,其基础是Groovy。

InfoQ:您讲到轻量级部署相关的一些建议,能详细说说吗?

郑晔:一说起Java应用的部署,大家直觉上就会想到“打个包,部署到应用服务器”。这也是几乎十多年前就定型下来的开发方式。但对于开发人员来说,这就几乎就意味着各种开发的噩梦。为了在开发阶段定位一些问题,我们就不得不在“本地”进行用上“远程”调试。应用服务器是一个“老大哥”年代的产物,那时候大公司要卖应用服务器,更要卖硬件,所以,它们炮制出复杂的业务场景。但是,对于许多团队来说,你可能一辈子都碰不到这样复杂的情况。当年,EJB的破产已经让我们见识了这种虚幻的需求在程序员社区里是站不住脚的。现在,轮到应用服务器本身了。我在演讲里曾经举过一个例子,说明这个应用服务器中一个虚幻的需求,在一台应用服务器上部署多个应用。现在我们看到,大多数应用多个应用服务器都不够,一个应用服务器部署多个应用除了测试玩玩,在实际的场景中,几乎就是站不住脚的。开源社区的兴起让普通程序员有机会见到高手是如何工作的,高水平程序员总会追求更“简单”的工作方式,吸引更多程序员走入这种方式中。我很高兴地看到,我们的开发方式不再是由老大哥主导了。最近几年,随着云和移动开发的兴起,微服务的概念逐渐进入了我们的视野,随之而来的就是社区对于开发和部署的反思。前面提到的DropWizard的就是一个很好的例子,通过它,我们只要打出一个JAR包,和传统的方式不同的是,这个JAR包直接就是一个可运行的应用。是的,它是有Main函数的。有Main函数就意味着,我们可以很方便地在IDE里做我们想做的一切,包括调试。这样一来,对比从前那种笨拙的方式,开发人员可以做到“易者易为”。

java8的发布确实和以前的java版本有比较大的区别,比如对于并发和IO而言jdk1.4开始就做了"质"的改进,提出了无等待的算法,NIO,AIO以及常用的并发集合,但是这些远远不够,java8提供更好的改进,提出了fp的一些思想,对并发有新的理解,比如原子类AtomicLong等核心CAS同样有性能上的问题(参考守望者共享资源->java开发技术->CAS性能问题),提出了longadder的解决方案,java开发人员可以自己更新java基础。

本文由守望者watchmen收集整理,部分内容源于网络。本文仅代表作者个人观点,不代表守望者的本意。如有违法侵权内容,请提交到守望者管理员处,立即处理。

会员评论  

已有0参与评论

推荐阅读

[守望者 算法视频]01_数据存储(链表与数组)
[守望者 算法视频]01_数据存储(链表与
本章重点介绍数据的在计算机的存储方式 :连续存储(数组)与链式存储,同时
[守望者   java初中级视频]22_javaNIO,AIO编程
[守望者 java初中级视频]22_javaNIO,
内容简介:本课程介绍阻塞,非阻塞,同步和异步的基本概念,介绍javaNIO,AIO
[守望者   java初中级视频]00_java初中级课程学习导航
[守望者 java初中级视频]00_java初中
内容简介:全面贾少这套视频课程学习需要具备的理论基础,以及适合的学习人群
【守望者 linux项目】linux下的FTP服务器与客户端,作者 灯下野狐 ...
【守望者 linux项目】linux下的FTP服务
本项目是一个完整的FTP服务器及FTP客户端设计示例,对于需要学习网络编程项目
【守望者 游戏项目】基于cocos2d-x的跑酷游戏项目教程
【守望者 游戏项目】基于cocos2d-x的跑
Cocos2d-x跑酷游戏项目教程Cocos2d-x跑酷游戏项目教程cocos2d-x特性cocos2
【守望者 linux项目】mini WEB服务器设计
【守望者 linux项目】mini WEB服务器设
以下是曾经Watchmen一个朋友学习网络编程时设计的一个简单的MiniWEB服务器。
【守望者 观点】智能路由和Wi-Fi探针是一对好基友
【守望者 观点】智能路由和Wi-Fi探针是
智能路由与Wifi探针可以收集用户行为,同时可以收集用户MAC地址,还可以跟踪
[守望者 linux视频]01_开发工具与开发平台
[守望者 linux视频]01_开发工具与开发
本课主要介绍gcc,gdb等系列开发工具,开始编写程序之旅。要求理解Linux开发平
[守望者 算法视频]08_数据查找_hash算法
[守望者 算法视频]08_数据查找_hash算
守望者:普通逐个查找O(n),组织方式可以无序的数组或者普通链表。已经排序的
【解读】什么样性格的人会被夸性格好
【解读】什么样性格的人会被夸性格好
守望者:性格决定命令。好的性格意识着给别人面子,能接受别人装逼,而且以上
[守望者 linux视频]02 进程内存管理与valgrind的使用
[守望者 linux视频]02 进程内存管理与v
本课主要介绍Linux可执行文件与进程内存结构, Linux进程结构及内存申请与释放
[守望者 C和指针]11_高级指针_C_面向对象
[守望者 C和指针]11_高级指针_C_面向对
(1) 彻底解决指针、取地址后的类型问题。(2) 回调函数示例。
【观点】闲聊阿里“996",全集团ALL IN无线策略及加班之意义 ...
【观点】闲聊阿里“996",全集团ALL IN
守望者:几乎的所有的员工都不喜欢8小时之外的工作,而几乎所有的老板都期望
【守望者 观点】你是哪种人?一个能看穿你的人性和欲望的测试 ...
【守望者 观点】你是哪种人?一个能看
守望者:这个心理测验来自西方,是与人潜意识有关。我10多年前认识个朋友,从
【守望者 Linux项目】二阶段提交应用项目(Two-phase commit protocol )2PC 高并发 . ...
【守望者 Linux项目】二阶段提交应用项
背景:以下是watchmen曾经编写的一个二阶段提交银行系统的项目。这个项目源于

行业聚焦  面试交流  职位推荐  开发视频   技术交流  腾讯微博  新浪微博

友情链接:课课家教育  阿里云  鲜果  W3Cfuns前端网  中国企业家  环球企业家  投资界  传媒梦工场  MSN中文网  Android开发者社区  cnbeta  投资中国网  又拍云存储  美通说传播  IT茶馆  网商在线  商业评论网  TechOrange  IT时代周刊  3W创新传媒  开源中国社区  二维工坊  Iconfans  推酷  智能电视网  FreeBuf黑客与极客  财经网  DoNews  凤凰财经  新财富  eoe移动开发者社区  i黑马  网易科技  新浪科技  搜狐IT  创业家  创业邦  腾讯财经  福布斯中文网  天下网商  TechWeb  雷锋网  新浪创业  和讯科技  品途O2O  极客公园  艾瑞网  抽屉新热榜  卖家网  人民网通信频道  拉勾网  创新派  简单云主机  

手机版|黑名单|守望者在线 在线教育 linux 高级程序设计 C/C++ 大数据 ( 蜀ICP备14029946号

成都守望者科技有限公司 © 2013-2016 All Rights Reserved