2021 年 Java 开发者生产力报告
【慧聪教育网】Java开发工具JRebel和XRebel的开发商——Perforce最近公布了其第九份年度全球Java开发者生产力报告,该报告基于对850多位Java开发者的调查而得出。涵盖的主题包括Java团队的性质、他们遇到的挑战,以及首选的开发工具等诸多方面。通过调查发现,尽管有越来越多的开发者使用微服务,但是开发者仍然面临着较长的重新部署时间和服务间的功能问题。
关于受访者
此次调查中49%的受访者是Java开发者,6%为董事或副总裁,其余的则是由团队负责人、架构师和顾问组成。其中有超过三分之一(36%)的受访者在大型企业或组织中工作,在中小型公司有42%,在初创公司有15%。大多数人都是在小型团队中工作,这表明人们对更敏捷的开发和采用微服务的需求不断增长,在微服务中,开发人员可以使用较少的代码片段。40%的团队在3至9人之间,24%在10-20人之间,17%在20-50人之间。
Java和微服务趋势
不出所料,有69%的受访者仍在使用Java8,紧随其后是的JavaScript占40%,以及Java11占36%(在调查中受访者可以选择多种编程语言)。只有16%的受访者表示他们正在使用Java12或更高版本,而目前有15%的受访者仍然在坚持使用Java7或更早期的版本。
对于微服务的采用保持稳定,有66%的受访者正在积极过渡或已经在使用微服务了。只有13%的受访者根本不打算转型。调查中还询问了开发人员在他们主要的应用程序中拥有多少微服务,并以1到20这种规模进行选择。最终得出的答案是:使用5-10的有36%,使用1-5的有34%,其次是16%使用了20或更多的微服务,最后使用10-20的占了14%。当然,公司或组织可以拥有多个应用程序架构,例如:42%的用户使用Monolith、SOA29%、移动设备23%,以及桌面设备18%。
最受欢迎的工具
该报告对受访者在每个类别中最常用的技术和工具也进行了调查:
应用服务器——Tomcat仍占66%的份额。之后,JBoss/WildFly(19%)、WebLogic(18%)、Jetty(15%)和WebSphere(14%),后几个的占比相对比较均匀。
应用程序框架——SpringBoot以62%位居榜首,与去年的83%相比有所下降。DropWizard的用户占8%,比2020年的1%有所增加。Quarkus也类似,采用率从1%增加到6%。
框架配置——Annotations以75%的优势居于领先地位。
IDE——IntelliJIDEA以65%排名第一,其次是Eclipse(48%)、VSCode(27%)和NetBeans(13%)。
JRE/JDK分发——使用OracleJDK开发者有所增加,从去年的50%上升到59%,尽管有报告指出很多人由于许可成本而放弃使用JDK。这可能归因于响应此次调查的大型企业的数量占比较高,而大型企业通常比小型组织更难过渡。排名第二的是AdoptOpenJDK占22%,使用AmazonCorretto的占比10%。
数据库——最受青睐的是数据库是MySQL占比43%,其次是OracleDB和PostreSQL,分别占36%。接下来是MongoDB,有29%的受访者在使用。
构建工具——Maven以67%的占比成为开发者的首选工具,而去年Maven和Gradle则是并驾齐驱。
虚拟化工具——88%的受访者表示他们在使用这些工具,而最常见的工具是Docker,占57%,低于去年的74%。Kubernetes以42%的占比排名第二,相比去年的35%有所提高。VMWare以27%的份额位居第三。
CI/CD——Jenkins在受访者中使用占比61%,其他竞争对手(Bamboo、TravisCI和TeamCity等),仅占12%或更少。
PaaS——大多数受访者现在正在使用PaaS服务提供商,只有24%的受访者表示不使用。对于使用PaaS服务提供商的用户,AWS占39%是用户的首选;MicrosoftAzure紧随其后,占24%;GoogleCloud位居第三,占18%。
开发者的痛点
最严重的应用程序性能问题是较长的应用程序响应时间,达到54%(与去年的55%相提并论)。这种持续的趋势与微服务的采用不断增长相吻合。报告中的另一个性能问题是高CPU使用率(39%)和内存泄漏(35%),过多的开放连接和IO查询也分别达到26%和19%。
部署时间是最常见的问题。59%的开发人员经历了超过四分钟的重新部署时间,而20%经历了超过10分钟的重新部署时间。这背后有两个潜在的原因。一种是,随着微服务规模的增长,开发和创建应用程序将花费更长的时间。第二个原因是由于微服务在远程虚拟机上运行。
针对微服务,对服务间功能进行故障排除是报告中最大的挑战,占30%;其次是在本地设置开发环境的问题(占24%)。这可以归因于创建复杂的微服务应用程序的困难度。