Despite the changes that Java and its ecosystem have seen in recent years (more frequent release cycles, the end of free support from Oracle, etc.), Java is the most common choice for developing serious applications. Knowledge of this language opens opportunities for new or junior developers.
Java is a wide area; developers use this language to create everything from Android or web applications to program controllers.
Before getting into trends, we’d like to focus a bit on the technologies. The following are the most common choices for Java developers, i.e. the basics every developer should have in their toolkit.
This appears to be the only version control system that is still developing (and for which the surrounding infrastructure is still developing). GitLab and GitHub are constantly adding new services. It’s surprising that some are only now beginning to recommend studying Git; this should have long since been in your skillset.
This is important. Version 8 is gradually going away, and even major companies that aren’t quick to update platforms are thinking about the future. More and more often, at the start of projects customers are asking “How many developers in your company work with version 11?” You can focus on Java 11 as a long-term support version, but we recommend not falling behind – take a look at new features at least once every six months.
Let’s be honest: the long-time standard JEE has in practice been replaced by this open-source platform. Most projects for big business now use Spring. Knowledge of Spring 5 is a must-have for developers. If you join a big company, you’ll probably work with Spring.
We’d like to recommend just one, but Maven is still more common than Gradle. In fact, either instrument is a good choice.
This is a popular framework and a great choice for module testing Jedis. We’d also add Mockito and PowerMock for work with mock objects.
What about other programming languages? Why learn them when Java continues to be a market leader? Well, you need to learn them. New languages enrich our experience. But you should invest your time wisely, so let’s look at the languages on the JVM platform.
Kotlin is the only JVM-based language now actively used in production as an alternative to Java. Some clients use it as their standard development language, so knowing and using Kotlin is a great idea.
This language is on the market, but it hasn’t gained mass popularity – it’s sooner a niche language. Scala is mainly used in Big Data (Spark) projects and to create complex distributed systems. Still, Scala is a really interesting language to learn – just don’t get too deep into it unless you’re aiming for a career as a Scala engineer.
Despite its promising start, Groovy’s main niche now is in auxiliary utilities, build jobs and pipelines. If your project doesn’t use Groovy, you can put it aside until you really need it.
If you really want to expand your portfolio, try languages not based on JVM. I think you’ll find it useful:
Python engineers have an alternative stack for development, a powerful toolkit for creating various utilities, and the opportunity to play with Machine Learning & AI technologies.
Go is an easy- and fun-to-learn language for quick server-side development.
Learning these languages opens new frontiers in programming – and new professional opportunities.
Let’s take a closer look at what’s influencing Java development now and what you should learn now in order to be in demand tomorrow:
“Everything’s moving to the cloud.” You hear this more and more often at tech conferences. More and more companies who were afraid of giving up their own data centers for the cloud now understand that the time has come.
Today, practically every company has at least a part of its infrastructure in the cloud. For many companies, migrating applications and data to the cloud is the main technological focus for the next few years.
And while traditionally, open-source technologies were the basis for Java solutions, many of them are now available in the cloud as a service. Providers offer their proprietary cloud services (e.g. those related to AI), and services oriented towards developers themselves are actively developing. We can confidently say that the cloud is growing from flexible infrastructure to a full-fledged platform for development and use of complex systems.
For developers, this means that knowledge and experience with the main cloud services will be key – and even more important than knowledge of Java itself. In practice, Java engineers must turn into cloud developers.
The list of cloud market leaders hasn’t changed recently: Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP), with AWS leading the pack. Azure is growing its market share, while GCP is trying to keep up with the help of interesting new services and attractive pricing.
Historically, AWS and GCP are nearer to Java developers, but experience with any of these clouds will make it much easier to find a Java developer job.
Just two or three years ago, microservices were a growing trend in industrial systems; today, this architecture is seen by the majority as the primary basis for building their platforms (especially in the cloud). This means that to boost your career as a Java engineer, you will need knowledge in this area.
In most cases, microservice architecture is inextricably linked with the use of Docker containers for builds and deployment, and with the use of a container manager when the number of services is relatively large. One of the most successful solutions for container management today is Kubernetes — an open-source solution from Google that is now being jointly developed by several major vendors. This platform has also become the basis for other more complex solutions.
Among future challenges in this area is the building of reliable and transparent asynchronous communication in systems with hundreds or thousands of services for heavily loaded platforms. In this respect, you should know and understand Reactive Programming and templates like CQRS and Event Sourcing.
Companies are more and more often facing leaks of valuable information. Such incidents lead to huge losses, both financial and reputational. Enterprises are ready to invest serious money into protecting their data, applications, and infrastructure. Many major companies, including us, already have divisions to test their software for vulnerabilities.
How does this affect software development? In addition to the appearance of new project roles (e.g. Security Engineer), design and security testing stages have been added to the standard development cycle. It’s no longer enough just to write code: you have to make sure that this code is free of vulnerabilities.
OWASP Top Ten and Defensive Coding Practices are coming back into use. For CI/CD pipelines, there are new tools for conducting SAST (Static Analysis security tests) and DAST (Dynamic Application security tests), while regular Penetration Testing (Pen Tests) is becoming part of the QA process.
Nowadays, when a team might lack the right specialist and startups can change directions in a matter of seconds, Full-Stack developers are in high demand. If you’re not afraid to dig into related areas, can pick up new tools on the fly, and solve problems where they appear, you’re the right person for this role.
Imagine a project member who can do front-end, program business logic in the back-end, and set up the CI/CD pipeline for new modules. This person will be extremely valuable to the team and to the company.
It’s not easy sustaining such a wide skillset but knowing a few technologies from related areas definitely won’t hurt you. For front-end, React, Angular, and Vue.js are popular; in DevOps – Terraform and Ansible. For CI/CD pipelines, you can learn Jenkins or Team City (and even better to read about clouds in Azure Pipelines).
While it’s impossible to cover everything happening in the industry in one article, we’ve tried to list the main things you’re likely to see in your everyday work. You can also check our article "Top 5 Useful Videos for JAVA Developers" for more Java tips and tricks.