Java is a cross-platform, object-oriented programming language designed to be used in the distributed environment of the internet.
Created in 1995, it has become one of the most popular programming languages in history. The Popularity of Programming Languages Index ranks Java as the second most popular language in 2021.
Known for its simplicity, security, versatility and flexibility it is used for creating applications of all shapes and sizes:
- Web applications
- Server-side applications
- Android applications
- Big data and analytics
- Scientific supercomputers
- Trading applications
- Desktop GUI applications
Due to the popularity of the language, there are millions of Java developers out there. But how can you tell which ones really know their stuff?
In this blog, we’ll explore the technical and business skills that you need to look for in a prospective Java candidate who will be a real asset to your team.
System design and architecture
Designing and architecting systems is the art of conceptually planning out the components of a system to achieve the desired objectives.
This is a difficult skill because it is so open-ended: there are infinite ways to create any given system and no single correct solution.
Experience is the best teacher in this case, which is why hiring a Java developer with solid systems design and architecture experience is critical.
In addition to substantive experience, they should be familiar with the principles of system design, core concepts such as scalability, failover, fault tolerance as well as different architecture patterns like client-server, peer-to-peer, microservices, distributed systems etc.
Object-oriented programming (OOP) languages are organized around data—or objects—rather than functions and logic, with all programming operations carried out using these objects.
This makes complex problems easier to solve, creates objects that can be reused across programs, and means that code is easier to debug and more secure because the data is encapsulated into objects.
Your Java developer should have a strong grasp of objects and classes in Java, as well as the four key features of OOP: abstraction, encapsulation, polymorphism and inheritance.
Relational and non-relational databases
Relational databases store structured data in rows and columns while non-relational databases store unstructured and semi-structured data in a looser, but more flexible format.
There are pros and cons to each and which database you use will depend on the kind of data you have. Given the flexibility and the breadth of use cases for the Java language, both kinds of database are relevant, depending on the nature of the project in question.
A flexible Java dev will need to be familiar with both kinds of databases, as well as some of the most prominent database systems for each (relational: MySQL, Microsoft SQL server, PostgreSQL, Oracle etc.; non-relational: NoSQL, MongoDB, Cassandra, Redis, DynamoDB, neo4j etc.).
Spring is the most popular app development framework for enterprise Java and is an absolute non-negotiable for your Java candidate.
It consists of a collection of pre-written programming and configuration models to streamline the development process for high-quality Java applications.
Your candidate should at least be familiar with the core Spring framework and know how to use it to build robust Java applications.
Java is a back-end language, which is why Java skills can be powerfully complemented with frontend skills to make for a well-rounded, full-stack developer.
Kotlin is an open-source, cross-platform, object-oriented programming language designed specifically to be interoperable with Java.
The language is compatible with the Java ecosystem, meaning devs can use their favorite Java Virtual Machine (JVM) frameworks and libraries. It is often seen as a safer and more concise form of Java and is a particular favorite for Android development.
Kotlin is useful as an alternative for Java, as a means for expanding existing Java apps or to work alongside Java in the same application.
Being proficient in Kotlin will be a boon for your prospective Java dev, particularly if you want them to deploy Android projects.
Java application containerization is the process of packaging a Java application, along with all its dependencies, into a single ‘container’.
This makes it highly portable so it can be deployed at scale across any number of servers with great efficiency, in a resilient fashion and at relatively low cost.
In terms of technical skills, your candidate should be able to build container images that are portable, slim and secure as well as be familiar with automation, immutable infrastructure, monitoring and observability.
Your candidate will need to have expertise in container technology such as Docker as well as container orchestration tooling like Kubernetes, Docker Swarm, Rancher, Mesosphere, Openshift and, ideally, cloud-native tools such as AWS ECS/AKS or Azure Container Service.
DevOps is essential for the modern Java developer, especially among senior developers who are responsible for how their teams work and want to instil best practices and a collaboration mindset.
Your candidate should be very familiar with automation, configuration management, continuous integration and continuous delivery as well as the most popular tools for achieving these: Jenkins, Puppet, Ansible etc.
Java build tools
Build tools are programs that automate the creation of executable applications from source code.
These technologies are incredibly helpful because they automate the non-value-add manual work, manage dependencies, ensure the correct execution of commands and are a prerequisite for key DevOps processes such as CI/CD.
The most popular build tool for Java projects is Apache Maven, which should be a key skill for your prospective developer. Other popular examples include Jenkins, Gradle, SBT and TeamCity.
Unit tests are automated tests that ensure that the smallest sections of an application (a “unit”) are doing what they are supposed to.
This helps to find problems early on in the development lifecycle, to clarify the purpose of each unit and provides a kind of ‘living documentation’ that detail the purpose of each unit, which makes understanding and amending the code much easier for future contributors.
A great Java developer will almost always write unit tests for their code.
Today, there are many tools available to support developers in testing effectively and your target candidate should be familiar with some of the popular Java testing frameworks such as JUnit, JBehave, Mockito, Selenium, TestNG etc.
The modern developer won’t survive on technical proficiency alone! They need to be able to work well as part of a team and in alignment with the rest of the business. That’s where the business skills come in.
Problem solving and creativity
Java system design is like solving a complex, open-ended puzzle. Problem solving skills, creativity and the ability to think laterally are key requirements for building great Java apps.
Familiarity with latest tech trends
The Java space moves quickly, there are always new frameworks, libraries and best practices emerging. A high-quality developer always has their finger on the pulse of the scene and is keeping themselves up-to-date.
Working as part of a team requires excellent time management skills so that the team is not held back by someone who is prioritizing a minor problem, while ignoring much more important issues.
Attention to detail
Great attention to detail is a must for any developer due to the challenging, fine-grained nature of the work. Try writing and testing a complex Java application with a slap-dash approach and see how you get on!
A top-notch Java developer will be able to balance a wide range of technical skills—from system design to tooling and testing—while working in a creative, organized fashion.
If you’re looking for a great Java developer, check out our database of vetted, global engineering talent that can seamlessly integrate with your existing team!