article-spots
article-carousel-spots
programs
Hard skills

What a Java developer needs to know today to be in demand tomorrow

30 Oct 2019

Roman Shramkov, CTO EPAM Ukraine and head of Java Competency Center, wrote about skills that come in handy for Java developers, if they think about their future career in the field.

I’ve been asked a lot of times: “What I should invest my time in to be in high demand in IT market?” It is a burning issue for both experienced engineers and novices in the industry. Let us look into the issue. As a starting point, we’ll use observations of our projects in the Java Competence Center, my own opinion and the results of expert discussions. Projectwise, we mainly provide Java solutions for large enterprises which are very often web-based.  

First of all, despite all the changes that Java language and its ambient have undergone lately – transfer to more frequent releases, discontinuation of free Oracle support, etc. – Java is the most widespread platform for profound app development. If you are a novice, then the knowledge of this programming language offers great career prospects. 

Java is a broad term. Java developers do various things: develop apps for Android, Web development, or program controllers. 

Before we start discussing trends, I will briefly outline the technologies, which in my opinion and based on my EPAM experience, are now the most common choice for a Java developer. This is the starting point. 

So, a Java developer needs to have the following skills in their arsenal: 

  • Git. Today it seems to remain the only version management system that continues to develop and thus develops the surrounding infrastructure. For example, GitLab and GitHub regularly acquire services. Surprisingly, some sources have only recently started to advise studying Git. The tool should have been added to the skill set a long time ago. 
  • New versions of Java. It is important, believe me. It’s common knowledge that version 8 is coming to its end. Even big companies, which update the platform reluctantly, are looking to the future. Clients are more frequently asking how many developers in the company work with Java 11 before launching projects. You can focus on Java 11, which is a long-term support version, but I’d recommend keeping up with the trends and catching up on new features at least once every six months. 
  • Spring platform. Let’s be honest: the long existing JEE standard has been pushed out by this open-source platform. Now the majority of projects for big business use Spring. That’s why a good command of Spring 5 is a must for a developer. If you start working for a big company, you are bound to see Spring. 
  • Maven or Gradle. I want to recommend one thing, but the fact is that Maven is still more widespread than Gradle. A few years ago, when I looked the stats, it struck me as odd. Anyway, both tools are doing the job and are a great choice. 
  • JUnit 5 for module testing. This framework is widely used and is a great choice for Jedi of module testing. I’d also add to the list Mockito and PowerMock for working with mockups.  

What languages to study besides Java? 

What about other programming languages? Do we need to study them if Java dominates the market? My answer is clear: of course, we do. New languages enrich your skill set. However, to invest your time wisely, let’s look at the languages that appeared on the JVM platform. 

  • Java. A one-size-fits-all language. Yes, Java is also on the list, because in many cases it will suffice. A lot of projects follow an easy path relying solely on Java. Java developers are certain to have jobs in the near future. Just keep up with the new versions. 
  • Kotlin. Perhaps it is the only JVM-based language widely used in production as an alternative to Java. Some clients use Kotlin as a standard programming language, and that’s why it is great to know and use it. 
  • Scala. It is available on the market, but not very popular and is a niche language. Scala is mostly used on Big Data projects (Spark) for developing complex distributed systems. Anyway, Scala is an interesting language to study, but you should immerse yourself in it only if you want to build a career of a Scala developer. 
  • Groovy. Despite a good start some time ago, it’s mostly used for writing utilities, build jobs, and pipelines. If you don’t use the language on your project, you can put it off until you really need to study it. 

If you really want to add alternative languages to your portfolio, try some non-JVM languages. In my view, these can be the most useful: 

  • JavaScript. Allows you to master front-end development and enables you to read JS code.  
  • Python. It will add an alternative development stack to your skill set, a powerful tool for writing various utilities, and give you an opportunity to try Machine Learning and AI technologies.  
  • Go. It is an easy-to-learn language that can be used for quick server-side development. 

Mastering these languages opens new horizons in programming and more career prospects for you. 


What will define Java development in the near future? 

Let’s take a deeper look at factors that influence Java development nowadays and what we need to study today to be in demand tomorrow: 

Cloud as a platform. “It’s all about cloud technologies” – that’s what you hear at numerous technical conferences. Moreover, most major clients, who earlier didn’t want to give up their own data centers and transfer their data to the cloud, do understand now that the time has come. 

Today almost all companies have at least some infrastructure in the Cloud. And for many of them, app and data migration is a major technological focus for the next few years. 

Besides, if open-source technologies were the historical basis of Java solutions, now a lot of them are available in Cloud as a service (CaaS). Providers offer their own unique cloud services (for example, related to AI), and developer-oriented services are evolving as well. We can safely say that Cloud technologies are transforming from a flexible infrastructure into a full-fledged platform for developing and maintaining complex systems. 

For developers it means that knowledge and experience of working with major Cloud services will become essential, and even more important than the knowledge of Java itself. It actually means that we need to transform from Java developers to Cloud developers.  

A list of Cloud market leaders hasn’t changed lately, it includes Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP), with AWS being the leader. Azure is quite successfully increasing its market share, and GCP is trying to keep up with the competitors and offers cool new services at competitive prices. 

Historically, Java developers have adhered to AWS and GCP, but experience with any of these Cloud platforms is in high demand. 

Microservice architecture. If 2-3 years ago we could think of microservices as a growing trend in industrial systems, today the overwhelming majority of clients consider the architecture the foundation for building their own platforms (especially in the Cloud). It means that your current or next project will definitely require knowledge in the field. 

In most cases, the microservice architecture design is inextricably linked with the usage of Docker containers for compiling and deployment, as well as with the usage of a container manager, if the number of services is pretty big. One of the best solutions to manage containers nowadays is the Kubernetes platform – an open-source solution from Google developed together with several major vendors. The platform has become the basis for other, more sophisticated solutions. 

Among the future challenges in this area, we can mention designing a reliable and transparent asynchronous communication in systems with hundreds and thousands of services when building high-load platforms. That is why it is essential to know and understand Reactive Programming techniques and such templates as CQRS and Event Sourcing. 

If you want to have the bleeding edge in this area for Java, you can read about GraalVMMicronaut and Quarkus

Security. Companies face information leakage more and more often. These incidents lead to considerable losses – both financial and reputational. Clients are ready to invest big in protecting their data, apps and infrastructure. Many big companies including EPAM have entire departments dedicated to testing their own software for vulnerabilities. 

How does it influence software development? Apart from the fact that you need to cooperate with new project roles (for example, Security Engineers), a standard app development cycle is complicated with new design and security testing stages. Now writing code is not enough, we need to make sure the code has no vulnerabilities. 

We’ve seen the revival of such terms as OWASP Top Ten и Defensive Coding Practices. In CICD pipelines you can find tools for SAST (Static Analysis security tests) and DAST (Dynamic Application security tests), and Penetration Testing (Pen Tests) becomes part of the QA process. 

FullStack – approach to work. Nowadays, when you don’t have the necessary specialist in your team, and the startup development can pivot drastically, full stack developers are in high demand. If you have no fear exploring an adjacent area of expertise, can master new tools on the fly, and resolve arising issues on the spot, you are the right person for the job. 

Imagine a person on the project who can deal with front-end, write back-end code to develop business logic, and set up a CICD pipeline for new modules. It goes without saying that such a specialist will be an asset to any team and company. 

Being a full stack developer is not easy, but it never hurts to know a few additional technologies from related fields. Front-end development is popular with such frameworks as React, Angular, Vue.js, and it’s a nice idea to know Terraform, Ansible for working in DevOps. Jenkins or Team City are useful for developing CICD pipelines (it’s even better to take a look at Azure Pipelines and read the chapter on Clouds). 

It’s impossible to cover everything that is happening in the industry in a single publication. I did my best to mention the basic things that you have to deal with every day at work. The rest can be discussed in the comments. 

Author: Roman Shramkov, CTO EPAM Ukraine, head of Java Competency Center