When it comes to hiring a software engineer, Java is one of the languages most sought after by recruiters in 2022. Indeed, 43% of recruiters who responded to our Tech hiring survey said they were seeking to hire Java developers.
Hiring a high quality Java programmer requires looking for candidates who not only have at least a minimum base level understanding of the language itself, but also candidates whose thinking lends itself to utilizing the Java language to its fullest. Moreover you’re undoubtedly looking for candidates with experience related to specific Java technologies who are also going to work well within a modern development team.
Your hiring criteria will also need to take into consideration the level of experience you require and you’re no doubt wondering what it costs to hire a Java developer and where to find them.
Java Language Skills
There are fundamentals to the Java Language that any candidate you hire, no matter the level, should have some familiarity with. These skills are by far the easiest to screen for using on-line testing tools and pre-existing interview questions about language basics. At the very least your candidate should be able to readily discuss fundamentals such as:
- the different level of member variable and class protection (public, private, protected, default)
- how to define interfaces, classes, abstract classes, and inner classes
- using static member variables and classes
- handling exceptions
- the basic data types and their wrapper classes
Another good early screening mechanism is to probe a candidate’s knowledge of the Collections framework. Not only is this a very common framework used within Java programming, but it also will give you a sense of their knowledge of the fundamental relationships (what is the interface hierarchy?) as well as basic computer science concepts (what is the difference between an array and a linked list and how is that reflected in the different Collection implementations based on those data structures?). You will also want to test the candidate’s knowledge of the Java Virtual Machine (JVM) — how it handles garbage collection for instance and the difference between the heap and the stack.
There are other common Java frameworks you should expect a candidate has encountered and has some experience with, such as those related to J2EE (Servlets and JMS, for instance). If they have done any full stack development, the concept of Object Relational Mapping (ORM) and Inversion of Control (IOC) should not throw them off. Plus there are a number of non-Java technologies a dedicated Java programmer would likely be familiar with, such as the HTTP protocol, SQL for doing database queries, front end technologies such as HTML and Javascript, or data formats like JSON and XML. They also might have familiarity with the object oriented languages such as Python or C#.
Object Oriented Programming Skills
In addition to proficiency with the language itself, you will want to find candidates that are best able to make use of the Java programming language’s strengths and therefore “think like a Java Programmer.” Java as a language encourages its developers to use “object oriented programming” to ensure efficient code reuse and encapsulation of logic. The idea is to prevent unmaintainable “spaghetti code” that freely mixes data and logic in a way that is hard to follow and has too many interlocking dependencies.
You will want to find developers that can think in abstractions, behaviors, and describe how different entities relate to each other. Developers should be able to easily identify the commonalities between entities and a good test is to have them model a problem in terms of its entities and the actions they perform — either using a modeling language like UML or by defining some simple classes with member variables and operations.
Specific Java Technologies
As a hiring manager, you will need to understand the Java technologies and ecosystem required by your team. It’s not enough to say you need to hire a Java developer. You need to know what frameworks are being used by the team and what frameworks are comparable to those frameworks. Often, even if a candidate is not an exact match, their experience is readily transferable and they may be able to get up to speed quickly with your technology stack if they are proficient in a comparable technology.
However it is important to be aware that developers end up specializing in a particular area. Are you looking to hire a full stack web developer or a mobile developer? For iOS or Android? Or perhaps you are looking for someone who specializes in working with web services or big data. While there are developers who are “jacks (or jills) or all trades,” more often you will find yourself needing to prioritize which skill sets within the Java realm are the most important to you.
General Developer Skills
Finally, there are skills necessary for a developer to succeed as part of your team that are not Java specific, but nonetheless important to evaluate to ensure you have a well functioning, productive team that is able to develop quality code in predictive cycles. You will want to make sure you see some sample code from your candidate to determine if the code they write is well structured, maintainable, and readable code. You will also want to make sure they have experience working with a debugger, even on code that is not their own. Other key skills include experience with:
- unit testing, mocking
- CI/CD (Ant, Maven, Jenkins)
- working with a source code repository
- working in a team in environment with issue tracking, sprints, and code reviews
As with any position, having strong communication skills, both written and verbal, are important criteria and you should also check to see if the candidate has knowledge of your specific problem domain (i.e. finance, networking).
Developer Experience Levels
When you do your hiring, an important question to keep in mind is the level of experience you need for your team. It’s always good to have at least some advanced Java developers on staff who can lead the team and mentor more junior members, but it’s also worth considering whether a more junior hire would be more practical from a budget standpoint as well as your team’s current workload. Often seniority is thought of in terms of number of years of experience, but there are also practical considerations in terms of their knowledge base.
Entry Level Developers — often fresh out of school or a training program, these developers may not have much practical real world experience, but should know the language basics and common data structures and algorithms. They are often eager to learn and enthusiastic, but may be prone to re-inventing the wheel when it comes to “solved problems.” They are often not ideal for very small organizations, as they require a fair amount of mentoring on basic development processes.
Junior Developers — usually these candidates have at last 2 years of experience. They should be familiar with common Java technologies in addition to the basics and should be able to write readable, clean Java code. They may have less experience at high level design and may be less proficient at code optimization.
Senior Developers — these candidates have experience in the realm of 3-6 years working with Java and often have worked with other technologies. A senior developer should have a strong knowledge as to how to optimize code and the JVM as well as experience creating high level designs and working with relational databases.
Java Architects – In addition to experience coding in Java, they will have familiarity with design patterns, working with multithreading and synchronization, integrating disparate systems, and creating high level designs as well as high performing code. Moreover you will be looking for candidates who can work with other resources such as product management and UX to meet customer requirements.
You will also have to consider whether you wish this hire to play a lead role, which will also come at a cost in addition to requiring the requisite management skills. With these levels of experience come different salary levels, with the national average (according to Glass Door) starting at $68k at the low end and increasing up to $118k as you progress up the experience ladder.
Regional Salary Differences
As with many developer roles you hire, you will likely find that candidates want the freedom to work remotely. This can present logistical challenges, but it also gives both you and the candidate flexibility, opening up a wider talent pool. It also means you need to be aware as to how pay for developers vary, not only in different parts of the country, but world wide.
The most expensive developer salaries are going to be in locations like New York and San Francisco / Silicon Valley where the cost of living is high compared to other locations that are going to have a large pool of local talent to draw on (Dallas, Charlotte). If you’re considering offshore developers, 1st world nations are likely to be equally if not more expensive (Switzerland, the UK, Israel) but salaries drop off quite a bit if you are willing to work with resources in Eastern Europe or developing world locations such as India and Brazil.
A simple search for salaries for a “java developer” at all levels of experience gives you sense of the range of pay by region:
San Francisco, CA: $124,271
New York, NY: $119,167
Dallas TX: $115,186
Charlotte, NC: $112,137
Switzerland: $123,174.73
Israel: $103,169
United Kingdom: $68,558
Poland: $43,473
Brazil: $33,462
India: $7,294
Source: Glassdoor Salaries
Where to Look for Java Developers
How you hire candidates in part depends upon your own resources and needs. Traditional job posting boards such as Dice and Glass Door are of course options, but you may want to consider investing in a recruiting agency such as Total or Zip Recruiter. Alternatively, you may prefer to hire a freelancer who works at an hourly rate such as Upwork or Gigster.
If you’re willing to invest the time and do a bit of legwork, consider reaching out to developers in their “native habitats” and look for talent through GitHub (a code repository with profile pages) or StackOverflow (a Q&A site) to find developers that are motivated self-starters.
Most importantly, don’t ignore your existing developer base as a source for finding more developers. Incentivize referrals to encourage your team to bring on talent with whom they have already established good working relationships.
Interviewing Candidates
When it comes to hiring candidates, use CodinGame to do your initial screening. It doesn’t require technical knowledge on the part of the recruiter and allows you to screen for basic skills in a way that will not be repetitive to your own development team.
While take home tests are useful to see how a candidate handles more complex assignment without the pressure being in an interview, consider also the option of doing collaborative coding exercises with CoderPad. This will not only give you insight as to how the candidate thinks, but also how they work collaboratively with another coder interviewing them.