你好!
本周作客“大咖对话”的嘉宾是杨晓峰,他目前是Java核心类库北京团队leader,首席工程师。2011年加入Oracle Java团队,经历了从 JDK 7 到 JDK 11 的研发过程,目前领导 Java 核心类库北京团队,专注于 JDK 核心类库新特性的测试和开发,希望对 Java 技术的演进和普及做出贡献。
极客时间:目前您的工作中,技术和管理各自占的比重大概是多少?有什么心得?
杨晓峰:技术和管理各占一半一半,因为我不做人事管理,更多的是属于技术leader。Leader和manager是不同的,对leader来说,一方面思考更多的是团队未来的技术路线图,并要做好短期和长期的计划;另一方面要让团队有士气、让团队出成果,每个人都清楚自己的目标,实现自己的价值。
首先,作为技术上的带头人,一定要弄明白未来的方向什么是对的、什么是错的。这个对错是带引号的,并非那种绝对的对错,而是要清楚公司整体的目标与未来一段时间内的规划,作为leader定出的路线图要与部门或是公司的整体方向保持一致。
如果leader对目标的理解有偏差,很可能团队辛辛苦苦做事,最后却得不到认可,这是很伤士气的。因此,在具体的操作上,作为Leader,会积极地去和我的上级和合作团队去沟通,保证我带着大家走的路是没有走偏的。
其次,我所涉及的管理,更多的是让团队出成果、有士气,攻克前路上的难点,而有成果是有士气的保证。比如现在我们的目标,就是把JDK 11发布计划里的内容,按照既定周期把相关任务高质量的完成好。
在具体执行中,我的原则是不能把目标设定的太大,即使是一个大的目标,最好也采用迭代的方式,把它拆分成一个一个小的可验证的里程碑。这样做的好处是团队能一直看到成果,了解自己所做事情的价值,否则人是很难保持一个长久的状态的。如果在被认可之前走太久的话,难免会感觉到倦怠与疲惫。
这些都是一些实际执行中的做法,并没有太多高大上的东西,但对我来说,带团队就是这样一步一步踏踏实实往前走。
当然,每个产品的要点不一样,对Java来说,质量是首先要保证的,对质量的要求会远远高于对数量和对速度的要求。因为Java是一个非常基础的平台,它也是整个Java生态的基础,一旦它出了问题,就会波及在它之上的所有工具、产品、厂商,影响会非常非常大,因此基础平台必须要谨慎。
但对于创业期的产品来说,可能会以一些可接受的质量代价来换取速度,这些都是要看实际情况来判断的。
极客时间:Java已经更新到版本10,但有调查显示目前绝大部分的程序员仍在使用Java 8,不知道这一数据是否准确?判断是否迁移需要考量哪些关键因素?
杨晓峰:的确是这样,目前大部分用户还在使用Java 8,还有人在使用Java 7,甚至是Java 6,但与此同时,新版本的热度和接受度在不断提高。主要原因有以下两点:
第一个原因,语言版本升级从来不是个一蹴可就的事情。Java是一个基础平台,它的生态中包涵大量类库工具,比如Maven、Spring、Guava等,还有各种基于它的基础产品,比如Cassandra、Hadoop等。
对一个严肃的厂商来说,升级不是一个简单的事情,选择升级Java的前提是所有主要开源类库、软件、第三方厂商产品都已经支持了新版本。很高兴的是,目前主流的项目都已经逐渐完成了对Java 10等新版本的支持。除此之外,还得考虑新版本中有什么特性是自己必须的,能对自己的效率产生很大提高的,还有安全、性能等不同角度的考量。而这个过程必然是需要一定时间的。
第二个原因,在过去的发版模式里,Oracle为每个大的Java版本都提供了长期升级,JDK 8按目前计划至少到明年年初才会停止免费升级,相当于免费升级了5年。坦白说,对比主流产品,Java的免费支持周期,从任何角度来说都不能算短,背后是厂商大量的、持续的、默默无闻的投入。
如果想升级的话,成熟的JDK10,或者即将发布的JDK 11都会是一个好的选择。例如,JDK 11是一个长期支持版本,按照目前的发布计划,它会有非常长的支持周期。这是一个非常重要的考虑因素,Java这么多年起起伏伏,但却能一直稳定保持在编程语言第一的位置,跟背后有一个可信厂商的持续投入是分不开的。
另外,从新特性的角度出发,新版本里,从强大的ZGC、更好的G1到基本的字符串改进,再到各种基础类库、协议,各方面都有非常大的提高,不是修修补补,而是本身能力的巨大提升。因此,虽然升级到新版本会有一些学习曲线,但一定是值得的。
极客时间:现在很多新语言都极具冲击力,您能谈谈Java目前面临的最大挑战,以及未来的发展趋势么?
杨晓峰:虽然现在各种新语言活跃,但我认为Java面临的最大的挑战并不在于外部语言的冲击,而是计算模式和场景的变化。
过去十几年里,Java平台主要的投入都致力于让它可以在那种大吞吐量的、长期运行的服务器端跑的好。
但云计算兴起后,微服务、Serverless等新的计算模式对编程语言的技术要求变成支持快速启动、高数据密度、短时间运行的工作负载等。另外像大数据、人工智能、深度学习这些领域,会更看中语言对数据的运算能力等。
而这些方面恰恰是Java仍然需要进一步改进的。目前,Java也在不断精进、不断加强这些方面的能力,比如Amber,旨在大大改善Java的开发效率,让语法变得简单,更加符合现代的编程思维;比如Valhalla,旨在提高Java的数据处理能力,支持更加高效的数据处理和复杂数据类型等;比如Panama,旨在解决和本地代码交互的效率等问题;比如Loom,旨在让并发相关的开发变得更高效和平易近人,还有引入Fiber等类似协程的机制。
除了不断提升基础能力、提升应用性能之外,Java也在积极做瘦身,去掉一些已经退出历史舞台的技术,甩掉一些包袱,让自己变得更简洁、更高效。
极客时间:您能用一句话来概括Java的核心竞争力么?能进一步介绍一下吗?
杨晓峰:Java最大的核心竞争力来源于全球超过1200万的 Java 程序员,庞大的Java生态,海量的类库、工具、产品构建的无所不能的竞争力。
从语言特性来讲,Java有它的优势,比如扩展性、可靠性、安全性、强大的JVM等。你可以重新设计一个语言,去掉Java的历史包袱,保留Java的长处,还能吸收其他语言的优点。然而,Java已经聚集起来的生态是不可替代的,如果真想替代,那将是一个庞大的不可估量的投资,另外重复制造轮子的价值是什么呢。
很多问题不是靠语言本身能解决的,而是要靠语言衍生出的各种类库和工具,因此,选择了Java 就相当于选择了一个最可靠的一站式解决平台。比如想搭建微服务框架,在Java生态中能找到各种快速搭建的框架和方案,还能找到足够多的优秀程序员。
总结来说,Java有着世界上最完整的生态、最庞大的程序员群体。目前,从小型设备到超大规模的应用开发中,Java几乎是不可替代的,真正的大规模系统很少能够离开Java。