How to Build Java Applications Today #74 (Java Tech Popularity Index Q2/2023)
Tags: java
Published: 2023-05-02 19:28:20

## TL;DR

All back-end frameworks lost job ad share to Jakarta EE. VS Code was #2 in IDE job ads. React still only had a slim job ads lead over Angular. Python beat Java by 3x for Udemy course buyers.

***

## README

Welcome to the Q2/2023 issue of my newsletter “How To Build Java Applications Today”! If you like it, then [subscribe to it for free on Substack](https://bpfnl.substack.com)! Or read it on [dev.to](https://dev.to/ksilz/series/11995) or [Medium](https://ksilz.medium.com). Even better: Share it with people who are interested!

***

## What's This?

My quarterly "Java Tech Popularity Index" measures the **popularity** of IDEs, build tools, JVM languages, databases, back-end frameworks, web frameworks, and mobile app frameworks with data from **millions of developers**: **job ads** from 59 countries, **online training** students, **Stack Overflow** questions, and **Google** searches.

I also **recommend** options in each of these seven areas. My recommendations are based on that popularity, industry analysis, and my 24 years of Java experience.

**Why popularity?** Because picking a popular technology makes our developer life easier: easier to learn, build, debug & deploy, easier to find jobs/hire, and easier to convince teammates & bosses. Now popularity can make a difference in two situations: When multiple technologies score similarly, we could go for the **most** popular one. And when a technology is very unpopular, we may **not** use it.

## Update for Q2/2023

Late by two weeks, this issue has two new features: **scorecards** for each area and the actual number of **questions** at Stack Overflow.

- Scorecards show the **current standings & trends of the top three technologies**. The **runner-up is at 100%**, but not on the card. The **leader (left)** and **number 3 (right)** are. The red arrows show the **trend** vs. the runner-up.
- Until now, I used [Stack Overflow Trends](https://insights.stackoverflow.com/trends?tags=spring-boot%2Cjakarta-ee%2Cquarkus) to show the number of questions. That had two problems: Not all technologies were available there (the Micronaut back-end framework, for instance, is not). And the numbers were a **relative** percentage of all questions, which made it harder to understand the actual number of questions. Now I use the [StackExchange Data Explorer](https://data.stackexchange.com/stackoverflow/query/new), which gives me the number of questions for all technologies.

On to what's **new & noteworthy in Q2/2023**:

- The number of **developer ads is down** in Q1/2023.
- All back-end frameworks lost share against **Jakarta EE** over the last two months (Quarkus & Micronaut) and nine months (Spring Boot).
- **Python** now has three times as many course buyers on Udemy as Java (39.8 million vs. 13.3 million). The gap is widening: It was four times as many buyers in the last nine months (4.3 million vs. 1.1 million).
- **VS Code** claims the #2 spot in IDE job ad mentions for the first time, beating IntelliJ by 11%.
- At 13-14%, **React** has had the slimmest job ads lead over Angular for the last 1.5 years. But in Udemy course purchases, React now has the largest lead over Angular at 1.5:1.
- At 1.7:1, **React Native** has had the slimmest job ads lead over Flutter.
- **Postgres** narrowly overtook MySQL in questions at Stack Overflow for the first time (1,509 questions vs. 1,485).
- **Gradle** also surpassed Maven at Stack Overflow for the first time but with a more comfortable lead (440 questions vs. 390).

## IDEs

This is **IntelliJ (100%)**, not on the card, vs. **Eclipse** (left) and **VS Code** (right). The arrows show the **trend vs. IntelliJ**.

![Scorecard For IntelliJ (100%) vs. VS Code (left) and Eclipse (right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1x81n6jp2ex5qzfhq2g6.png)

VS Code pulls away from IntelliJ in all categories but Udemy courses. Eclipse pulls away slightly from IntelliJ in jobs but loses ground in all other categories.

Here are my **recommendations**:

- If you **don't want** to spend money, then use **Eclipse**.
- If you **may** spend money, evaluate **IntelliJ**.
- Evaluate **VS Code** for non-Java work, like web development (I use it for all my websites).
- If you're using **NetBeans**, consider moving off of it.

**[READ IDE DETAILS](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/ide/)**

## Build Tools

Here is **Gradle (100%)**, not on the card, vs. **Maven** (left) and **Ant** (right). The arrows show the **trend vs. Gradle**.

![Scorecard For Gradle (100%) vs. Maven (Left) and Ant (Right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ev29257renpis5qmxnv.png)

Maven holds steady against Gradle except for Stack Overflow. Ant holds up surprisingly well in jobs for its age but has disappeared from searches and Stack Overflow.

Here are my **recommendations**:

- If you use Scala, then use **sbt**.
- Otherwise, if you absolutely cannot stand XML files and/or need to customize your build heavily, then use **Gradle**.
- Otherwise, use **Maven**.

**[READ BUILD TOOL DETAILS](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/build)**

## JVM Languages

This is **Kotlin (100%)**, not on the card, vs. **Java** (left) and **Scala** (right). The arrows show the **trend vs. Kotlin**.

![Scorecard For Kotlin (100%) vs. Java (left) and Scala (right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lkfa6crr3fjkjlorbjw2.png)

Please take the Kotlin numbers with a huge grain of salt: Most Kotlin development is on Android, not in JVM projects. Kotlin gains on Java in all categories except for jobs. Scala declines against Kotlin in all categories (see the [job ad section](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/lang/#employers-job-ads) for why job numbers for Scala are missing).

Now let's look at JVM competitors. Here is **JavaScript (100%)** vs. **Python** (left) and **Java** (right). The arrows show the **trend vs. JavaScript**.

![Scorecard For JavaScript (100%) vs. Python (left) and Java (right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ix9nik89oregx4jnrp9e.png)

Python slightly declines in jobs against JavaScript but holds steady or slightly increases in all other categories. Java holds steady in searches but declines slightly everywhere else.

Here are my **recommendations**:

- If you need to switch languages or are on a new project:
  - Use **Scala** if you need functional programming.
  - Use **Kotlin** if you really need a "more modern Java".
  - Otherwise, use the **latest Java LTS version** you, your team, and your application can take.

**[READ JVM LANGUAGE DETAILS](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/lang)**

## Databases

This is **Postgres (100%)**, not on the card, vs. **MySql**  (left) and **MongoDB** (right). The arrows show the **trend vs. Postgres**.

![Scorecard For Postgres (100%) vs. MySql (left) and MongoDB (right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7tvh3hwva6ds6sdw0nl.png)

Postgres gains slightly on MySQL except for jobs where it loses slightly. MongoDB holds steady against Postgres except for questions where it also loses somewhat.

These are my **recommendations**:

- On your current project, **keep your existing database** unless that database is absolutely, irrevocably, really not working out for you.
- If you need to switch databases or are on a new project:
  - If you know that you'll need the NoSQL features and/or scalability, and you can't get this with MySQL, then use **MongoDB**.
  - Otherwise, use **MySQL**.

**[READ DATABASE DETAILS](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/db)**

## Back-End Frameworks

Here is **Jakarta EE (100%)**, not on the card, vs. **Spring Boot** (left) and **Quarkus** (right). The arrows show the **trend vs. Jakarta EE**.

![Scorecard For Jakarta EE (100%) vs. Spring Boot (Left) and Quarkus (Right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/drw953q487jk9uhd8jcr.png)

Spring Boot pulls away from Jakarta EE everywhere except for jobs, where it dropped from 588% in June 2022. Quarkus gains on Jakarta EE everywhere and pulls away in Stack Overflow questions.

Here are my **recommendations**:

- On your current project, **keep your existing back-end framework** unless that framework is absolutely, really not working out for you.
- If you need to switch back-end frameworks or are on a new project:
  - Use **Quarkus** if you need the smallest possible, fastest-starting Java application **now**.
  - Otherwise, use **Spring Boot**.

**[READ BACK-END FRAMEWORK DETAILS](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/be)**

## Web Frameworks

This is **Angular (100%)**, not on the card, vs. **React** (left) and **Vue** (right). The arrows show the **trend vs. Angular**.

![Scorecard For Angular (100%) vs. React (left) and Vue (right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rrrj7y4k1dfwr703pmbr.png)

React pulls away from Angular except for jobs where Angular holds steady. Vue holds steady or gains slightly against Angular.

Here are my **recommendations**:

- If you already use **React**, **Angular**, or **Vue** in your project, keep using them. Otherwise, evaluate a migration. In many (most?) cases, such migration doesn't make business sense.
- If you start a new project or migrate, start with **React** first, **Angular** otherwise, and finally, **Vue**.

**[READ WEB FRAMEWORK DETAILS](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/fe-web/)**

## Mobile App Frameworks

Here is **Flutter (100%)**, not on the card, against **React Native** (left) and **Xamarin** (right). The arrows show the **trend vs. Flutter**.

![Scorecard For Flutter (100%) vs. React Native (Left) and Xamarin (Right)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rhk9e1n5lvfuyyjw63v.png)

Flutter gains on its competitors in all categories but installed apps.

Here are my **recommendations**:

- **Don't** build two separate applications with Apple's and Google's **first-party** frameworks. Use a **cross-platform** framework instead.
- If you already use **Flutter** or **React Native** in your project, then keep using them. Otherwise, evaluate a migration. In many (most?) cases, such migration doesn't make business sense.
- If you start a new project or migrate and have used React before, then start with **React Native** first and use **Flutter** otherwise.
- If you start a new project or migrate and have **not** used React, then begin with **Flutter** first and use **React Native** otherwise.

**[READ MOBILE APP FRAMEWORK DETAILS](https://betterprojectsfaster.com/guide/java-tech-popularity-index-2023-q2/fe-mobile)**

## Next Issue

The next issue will arrive on **Wednesday, July 26, 2023**. That's the plan, at least. 😁

[Subscribe to this Index on Substack for free](https://bpfnl.substack.com) to receive the next issue automatically!

***

## About

Karsten Silz is the author of this newsletter. He is a full-stack Java developer (Spring Boot, Angular, Flutter) with 24 years of Java experience. Karsten has worked in Europe and the US and is also an author and speaker. He got a Master’s degree in Computer Science at the Dresden University of Technology (Germany) in 1996.

Karsten co-founded a software start-up in the US in 2004. He led product development for 13 years and left after the company was sold successfully. Karsten then co-founded the UK SaaS start-up "[Your Home in Good Hands](https://yourhomeingoodhands.co.uk/)" as CTO in 2020. Since 2003, he has also worked as a contractor.

Karsten has [this newsletter](https://bpfnl.substack.com/), a [developer website](https://betterprojectsfaster.com/), and a [contractor site](https://ksilz.com/). He's on [LinkedIn](https://www.linkedin.com/in/ksilz/), [Twitter](https://twitter.com/karsilz), [Xing](https://www.xing.com/profile/Karsten_Silz/), and [GitHub](https://github.com/ksilz). Karsten is also a [Java editor at InfoQ](https://www.infoq.com/profile/Karsten-Silz).