Aside from its widespread use, it’s also the most in-demand programming language among employers, with more job listings on Indeed (as of March 2017) seeking developers with Java skills than any other language. So naturally, if you’re one of the employers behind the 36,000+ job listings seeking Java developers or you’re a Java programmer looking for your next gig, the skills and characteristics that set great Java developers apart from the pack is crucial information. And if you’re a Java programmer looking for your next gig, knowing what skills you should level-up and what characteristics to promote to your prospective employers is good-to-know info.
We reached out to a panel of development leaders, IT recruiters, and Java pros and rounded up some useful perspectives to get some insights on this question:
“What are the most common characteristics & skills of great Java developers?”
Meet Our Panel of Development Leaders and Java Experts:
David Evans is the CTO of Uncorked Studios. He has a history of lean startup life, having managed tech teams both locally and remotely for companies such as ModCloth, Intridea, and DeepLocal. He is a former adjunct instructor at the University of Pittsburgh, where he taught mobile application development to graduating seniors.
“For it being a language that has existed for almost 30 years…”
Java’s community and the language itself are an excellent tool for everything from large-scale banking systems to a way to power Android phones. For several years, universities have had their Computer Science curricula based on the Java language and its features, which has created a deep talent pool. Great Java developers are born every day, and here are their qualities:
- Great Java developers can make the leap from simply being good at the ins and outs of the language itself and begin to understand the nuanced world of performance, whether that be memory overhead, computation complexity, or speed.
- They will shrug when asked if something is possible; of course, it is, and they will sweat the details of getting the most value per line of code.
- They’ll digest javadocs and learn to bridge to the JNI native layer when they need the absolute best.
- They will not be afraid to lean on ideas like reflection and runtime resolution to patch older systems while they are replaced.
- They’ll always look to apply the most modern patterns and language features to existing systems but will not balk at supporting them.
- The language has had its stripes for years, so great Java devs can jump into any codebase and learn to swim fast.
Nizar Khalife is one of the Ironhack‘s lead instructors.
“A few skills make great Java developers stand out…”
- Object Oriented Programming – Great Java developers are skilled in the implementation of object oriented design patterns and can architect their code effectively in an OO way. It takes experience to do this well.
- Knowledge of the Ecosystem – A great Java developer is skilled in the use of the technologies in the Java ecosystem: Struts, Spring, Maven, Gradle, Ant, JUnit, Spock, and Hibernate, among many others.
- Communication – It may seem obvious, but good communication is something that sets a great developer apart. Programming is a discipline that is social in nature. Communicating inside the team and to stakeholders is crucial.
- Concurrency – Another common thread that skilled Java developers tend to share is their knowledge of concurrency and multithreading (see what I did there?). Definitely not an easy subject. They have a great understanding of Runnable and Thread.
- Databases – Knowledge of the intricacies of SQL queries is another thing that great Java developers tend to have. Basic CRUD operations and things like joins, aggregations, and indexing are all big parts of it.
- Data Structures & Collections – Great Java developers know the ins and outs of data structures such as List, Map, Set, Vectors, and Matrix.
- JVM and Memory Management – These are some of the trickier subjects that great Java developers are skilled in. Their knowledge of the runtime and how it does garbage collection is crucial to their success. After all, memory-related errors are so common!
Guillaume Catella is the Founder & CEO of Creatella.
“A great Java developer is…”
1) Someone who likes solving puzzles. If you’ve ever spent hours and hours on a Rubik’s cube, it’s a sign that you may enjoy programming.
2) You have to be very patient and persistent. Some programming challenges take a long period of concentration and research to solve.
3) You need to be organized. The higher-level programmer you become, the more architecturally you have to think. This means understanding how every piece of code fits together in the big picture. This takes theoretical thinking.
4) If you get satisfaction from finding a needle in a haystack, you will get satisfaction from programming.
5) If you love being in control! A programmer makes the computer their bitch.
6) You should be able to build algorithms. A series of causes and effects and “this happens to cause that.” We should be interested in creation, like the painters who use tools to create something. Computers are the scene of our magic at the moment, but in a short time everywhere will be. I like a sentence from the “Silicon Valley” series: “You see all this magic happen. It is not magic. It’s talent and sweat.”
7) Be able to learn new technologies and willing to step out of your comfort zone to explore and learn new skills. The new technologies are increasing exponentially, so as a programmer, learning is a very important task.
8) If the person has a good imagination, then it is a golden skill. Before you code on a text editor, having an image of what you are making and approaching it like an artist makes the process faster.
Kevin has been a Java developer for 18 years and is currently the CTO at Let’s Be Chefs.
“One of the most common characteristics of the great Java developers I’ve hired is…”
That they tend to work on projects outside of work. That can be open source projects or some other kind of personal project. The side projects also don’t even necessarily have to be Java-based. It seems that developers who only code on work projects have a much narrower focus and skill set, which makes them less useful overall.
Alyssa has over 11 years of experience in the software engineering field, and currently, leads Clara Lending ‘s Data Engineering team.
“There is no single set of skills that define great software engineers that use the Java language…”
Engineering is about solving problems given a set of constraints, and great engineers are great within a given set of contexts. However, if we narrow down the problem and constraint sets to highly
available, concurrent, and memory-intensive back-end services, then there certainly are a core set of Java-specific skills needed to be great.
- Understand when memory is being allocated, from what context, and how it affects heap fragmentation.
- Data intensive applications, especially, use libraries that require large contiguous areas of heap. Excessive fragmentation can lead to Out Of Memory errors when allocating these large objects.
- Thread local objects high on the stack are typically not a concern. Globals and objects low on a thread’s stack, especially mutable objects, are a concern.
- Be familiar with the various garbage collection algorithms, and how to use the profilers.
- GC pauses can kill latency sensitive applications (services and workers).
- The G1 collector is a solid choice for most applications of this type but is not always best – especially for micro services that end up being heavier on memory usage that originally anticipated.
- Know about cache coherence and fence instructions.
- This is the ‘volatile’ keyword in Java. Not using it (where appropriate) leads to subtle bugs.
- If there is a Single Writer, then this is not an issue.
- Use LongAdder where appropriate (commutativity is a friend).
- Understand thread pools.
- The `ForkJoinPool` has certain caveats.
- Know when to micro-optimize.
- Small things matter if they happen repeatedly.
- ‘StringBuffer’ and ‘StringBuilder,’ primitive collections, etc. – these add up, but only if they add up.
Kehinde is an Andela developer, currently working with Homie to build out their Android offerings. He is based in Lagos, Nigeria, and received a Bachelor’s Degree in Economics from the University of Ibadan and a degree in Computer Science from Moshood Abiola Polytechnic.
“A great Java Developer is someone who…”
Embodies Java’s core definition: (WORA) Write Once, Run Anywhere. They carry passion in every line of code they write, and they can understand the nuances of design patterns and algorithms while following the best practices of software development. They need to be able to be creative and think outside the box to devise logical solutions for programming problems. Eliminating stupid mental effort (ESME) is something I find essential in the Java ecosystem, and that is accomplished by turning to open source libraries when possible and not creating new solutions from scratch. Also, contributing to open source solutions is a solid way to aid the Java community. They must be adaptable, excited to change direction, happy to learn new technologies and try new things because that will allow them to switch between various versions of Java without skipping a beat. Lastly, they have to have a commitment to excellence which will result in developing clean code that does not need refactoring and will let other others easily read and understand it.
Josh MacDonald is an internet entrepreneur who has sold marketing software to thousands of marketing agencies worldwide.
“The definition of a great developer is going to change from person to person….”
A developer who understands the scope of the project, and can work well in the team to write reusable and well-documented code is a great developer. The main problem I face when hiring a good developer is simply making sure that their code can be maintained by someone else. More often than not, programmers like to write code that only they can easily maintain, and that can be quite costly to an employer like me.
Steve Pritchard is the Technical SEO Consultant for Ben Sherman.
“A good Java developer will have a sound understanding of…”
Garbage collection. They should know how to optimize it, and when it is triggered.
They will be experienced in class loading, and also be able to get to grips with the class loading process.
It’s also important they have the ability to use a debugger to debug programs, as well as profile various applications.
A great question to ask a developer you are interviewing is: “Which of Java’s open source libraries do you think is the most valuable?” Asking a candidate this question gives them the chance to demonstrate just how knowledgeable they are about Java’s ecosystem.
Mike is the Director of Operations at Vodori, a Life Science focused Digital Marketing Agency, where he manages their consulting division, Vodori Interactive. He’s been professionally developing Java-based software for 16 years and hiring developers for most of that time.
“I think, as with all knowledge workers generally and developers specifically, that the great ones come in a number of different types…”
All of them are intelligent and creative – able to recognize patterns and similarities across disparate problem spaces and extract solutions from them. Some of them are arrogant, pushing through problems on their own and producing unique solutions. Others are humble, able to defer to others, get help and bring a team together to produce something greater than the sum of its parts.
The most common skill I’ve seen in successful developers is having the ability to quickly write code, run, analyze, debug, recode, and restart on problems. The faster a developer can get through that loop (like the Orient-Observe-Decide-Act loop in combat), the more information she develops and better decisions get made. This process is good during initial development, but becomes even more valuable in late-stage development of complex systems and deployed applications. Other developers often get stuck analyzing the problem, attempting to work out the logic tree in their head, or have trouble reproducing the condition and give up.
Alyssa Langelier is a career advisor at Coding Dojo, a premier coding school and the only boot camp to teach three full technology stacks in a single 14-week program.
“To be a truly great Java developer, you must be a strong problem solver…”
Great Java developers are masters at tackling a question head-on with thorough research, thoughtful questions, and immense patience. Many developers will tell you that Java is one of the most difficult languages to learn, making a strong work ethic and great research skills essential to success.
Adam Paul is the CEO of Blast Off Apps.
“I think the most important characteristic of Java developers is…”
The ability to create a truly fluid experience for the user. There is a surprising lack of creativity in the applicants we see at BlastOffApps.com.
Creating a great user experience is the key to developers, and that is lost on many back-end or infrastructure coders. UX and other front-end focused coders are a little better, but still, lack this ability.
Gaurav Sharma is the Business Development Manager (IT) for Sharabh Technologies Pvt. Ltd.
“The must-have skills of a Java developer actually depends on what job (s)he is hired for…”
But basically, following core concepts must be very clear:
- OOPs Concepts & Patterns
- Abstract Classes and Interfaces
- File IO and Serialization
- Collections – List, Map, Set
- Access Specifiers
- Exceptions – Checked, Unchecked
- Java Keywords – Static, Final, volatile, synchronized, transient, this super etc.
- JVM and Memory Management
- Multithreading and Synchronization
- Dependency Injection
If the job is related to networking or distributed applications, he following skills will be needed:
- Knowledge of Protocols like IP, HTTP, TCP, FTP, UDP
- Sockets, RMI, RCP
If the job is related to Java based web applications, the developer must be good at:
- JSP / Servlets
- Web Frameworks like Struts / Spring
- Service Oriented Architecture / Web Services – SOAP / REST
- Markup Languages like XML and JSON
If someone has to work on Java UI, then he should know:
- Frameworks like Swing, SWT, AWT, JavaFX (SWT only if you’re building something on top of Eclipse)
Every Java Developer is expected to have Database Knowledge, so he should know:
- SQL Queries – Inner Outer Joins, Group By , Having
- Stored Procedures
Craig Dalziel is a Business Manager of Pearson Frank.
“We are far more interested in working with someone who is self-taught…”
But who is truly passionate about programming than someone who studied at a high level and isn’t obsessed with coding. We want to work with developers who eat, sleep, live, and breathe code. If they have been to university, or are experienced developers already, then what have they been working on in their spare time on evenings and weekends? What are they excited by? What are they looking forward to? Coding out of office hours demonstrates a willingness to learn and a competency to try new techniques, and staying on top of current trends and features can only be beneficial. A lot of the technical elements of a role can be taught ‘on the job,’ but passion and pride in your work can’t be faked, and that is what gets people excited about working with you.
“A great Java developer should have a few important skills and characteristics…”
Keep the code simple – The signature of a great Java developer is to keep the code simple. This helps the software maintenance, and it allows an easy reading on code review and bug-fixing. This characteristic is priceless when time is a critical condition.
Technological cultivated developer – Having a wide knowledge about the field makes a difference because a technological cultivated engineer can tackle any problem in any project and chooses the best solution possible. For instance, the developer should know what are the most common errors that create a memory leak. Also, the developer has to know about what is the best moment to implement different kinds of software patterns.
Good communicator – The developer that makes the difference knows how to communicate an idea in many different ways to anyone in the company. Also, the developer is not selfish and shares his or her knowledge with partners. Coffee time and presentations are the perfect opportunities to become a herald of technologies.
Peter Lawrey likes to inspire developers to improve the craftmanship of their solutions, engineer their systems for simplicity and performance, and enjoy their work more by being creative and innovative.
He has a popular blog “Vanilla Java” which gets 120K page views per months. It is 3rd on StackOverflow.com for [Java] and 2nd for [concurrency] and is lead developer of the OpenHFT project which includes support for off-heap memory, thread pinning and low latency persistence and IPC (as low as 100 nano-seconds).
NOTE: The following information is excerpted from What skills should a Core Java Developer have? via Vanilla #Java.
“I have been trying to put together a list of basic skills a Java developer should have to move on to being an advanced Core Java programmer…”
- can write code on paper which has a good chance of compiling.
- can use a debugger to debug programs and profile an application.
- are familiar all the primitives types and operators in Java.
- understand the class loading process and how class loaders work.
- can use multiple threads both correctly and can prove this improves performance or behavior (e.g., wait/notify/notifyAll, SwingUtils.invokeLater, the concurrency library)
- can use checked exceptions, generics and enums.
- can time a small benchmark and get reproducible results.
- can write a very simple client-server TCP service.
- have an understanding of garbage collection, when is it triggered, what can you do to minimize it.
- understand when to use design patterns such as Singleton, Factory, Fly-weight, Builder, Object Pool, Iterator, Strategy, Visitor, Composite.
Suggestions on how to get these skills:
- Read Java Concurrency in Practice (http://jcip.net/).
- Write a simple client-server TCP service such as chat.
- Read up on Design Patterns and try to use them, such as at http://www.oodesign.com/, so you can learn when they help and don’t help.
Born out of a vision to create software development company where quality, innovation, and personalized services trump low cost, makeshift solutions, Cygnet Infotech is one of the most trusted names in the IT services sector.
NOTE: The following information is excerpted from 5 Essential Qualities of a Good Java Developer via Cygnet Infotech.
“Companies look for developers who are passionate about Java programming language and who believe that it the #1 programming language…”
It may sound crazy – surely there are several other languages out there that can do the job as well. But a developer needs to be crazy about java – such a quality will drive him to find solutions to complex problems if he is stuck.
Also, if he is passionate, he won’t feel shy in offering new and creative solutions for development. It will also ensure high quality of Java Application Development. Developers who have their own blog or who contribute to blogs and enter into debates regarding Java have a good chance of impressing the interviewers.
FootBridge Information Technology
Since 2000, FootBridge IT has been connecting IT and engineering professionals with top employers throughout Boston, New England and nationwide. Our recruiting team uses cutting-edge methods, industry knowledge, and staffing expertise to ensure that our clients and candidates are well served.
NOTE: The following information is excerpted from Java Developers: The Must-Have Skills Employers Need via FootBridge IT.
“If you want to be considered for a Java position, you should be…”
Java developers do not work alone. They are key members of the development team, and they must work with various staff both inside and outside the IT realm. Therefore, it will also be essential that you can demonstrate soft skills like:
- excellent written communication;
- excellent verbal communication;
- the ability to take design concepts and run with them;
- agility; and
- creative problem-solving skills.
Crystal McKee is the Director of Talent Acquisition at The Armada Group, an award winning Silicon Valley On-Demand Talent Solutions firm for emerging technologies. Specializing in web application development, service management, and IT infrastructure transformation. Armada’s subject expertise lies in software engineering, project management, systems engineering and database administration.
NOTE: The following information is excerpted from Java Developers: The Skills Employers Need You to Have via The Armada Group.
“Almost all companies use some variant of the Agile development methodology to manage their projects…”
Be prepared to explain how agile works and how it’s affected your approach to building your applications. Demonstrate the interpersonal skills needed to participate in agile scrums and planning sessions.
Defining requirements is still the top challenge facing most software projects. Even if your team has business analysts who write the specifications, the better you can communicate with your business users, the better the applications you’ll create.
Earning relevant certifications like the Oracle Certified Expert Java EE Web Component Developer not only shows you know your stuff, it shows you are committed to developing your skills to the top of the profession.
Moshin Khan is a Technical Recruiter at iPlace USA. As an International Recruiter, he conducts in-depth technical and non-technical interviews for positions from startups to Fortune 500 corporations nationwide.
NOTE: The following information is excerpted from How to screen Java developers’ skills to find the best via LinkedIn.
“Firstly, Java world changes often, so experience with framework gained 5 years ago is not valid anymore…”
Bear this in mind when you assess Java skills based on so far employment.
Secondly, in Java world ecosystem knowledge of tools and libraries is more valuable than knowledge of the language itself. Without it a programmer will write everything by himself from scratch and just waste time. If a developer is familiar with Java libraries and frameworks then he can use it like Lego to make what they need and write code only where it is necessary. By doing it this way their work is much more efficient.
Last but not least only commercial experience is important. Java knowledge from university is hardly ever useful for business coding. So unless you recruit for an entry, junior position you can skip assessing Java skills based solely on university education and degree. In that case what is more important is candidate’s real life coding projects, it doesn’t have to be a commercial one – it can be hobby or open source programming project.
Joseph Macwan technical writer with a keen interest in business, technology and marketing topics. He is also associated with Aegis Softwares which offers Java application development services.
NOTE: The following information is excerpted from Top 4 skills that affect a Java developer’s salary via OpenSource4U.com.
“Being a Java developer is an achievement, and all the developers who have worked hard to be what they are will vouch for this…”
As a developer, we often face challenging situations which involve getting stuck in development or incorporating a complex functionality. But Java developers are fighters and know all the moves to accomplish their goal.
Besides the on-the-job challenges, developers also have to continuously work on their skills to keep up with the trends and developments in the field.
Using database management systems (DBMS) in development is important. Therefore, a good developer is expected to be familiar with the options out there. You should acquaint yourself with offerings like Oracle, MongoDB and MySQL. In this arena, Oracle is often the most preferred DBMS because it helps in managing content which is often the required purpose.