- Test your Java Development skills
- Test your candidate's Java skills
Bulb hired 70 developers in 12 months using Geektastic’s assessments, saving 58 days of engineering resource
- 70Engineers hired in the last 12 months
- 44Hours per week of engingeering time saved
- 50%Reduction in time to hire
- 408Technical assessments outsourced
Hire Java developers, faster with Geektastic Code Challenges
When you are developing a Coding Challenge for a specific programming language, designing a challenge to demonstrate knowledge of core and key language features and strengths is the main priority. Some of the most important considerations to incorporate in a Java Programming challenge include:
- Object-Oriented design
- structuring a programme and encapsulating functionality through Classes
- understanding of generics
- and potentially depending on the requirements of the position requiring candidate evaluation, knowledge of thread-safety and concurrency handling.
We have written a broader blog post about creating challenges which you can read here.
If you are going to create a Java Coding Challenge to assess a software engineer’s skills, a major consideration is “application build”.
How should the code be compiled and run?
Of course there are plenty of Java challenges online that use the simplest form: command line compilation and a class with a
main() method which outputs directly back to the command line via
System.out(). In fact, this is how many automated code testing platforms work. A candidate’s test solution is validated by the command line output from the programme. But this is of course severely restrictive in terms of the types of test that can be produced i.e. mainly algorithm-focussed problems. To provide more sophisticated Code Challenges utilising interesting real world problems that really evaluate a candidate’s ability, a more sophisticated build system is necessary. Java is not known for the ease and transparency of its build systems. Maven is the oldest, most established and enterprise-level incumbent and is familiar to many Java developers. Gradle is a newer and considerably simpler build tool that addresses some of the complexities of Maven-based configuration and build. Ideally a java programming challenge would incorporate both Maven and Gradle build skeletons that the candidate can choose between and add to if required. It would be surprising to find a good Java developer without familiarity with at least one of these build automation tools.
Java programming challenges or Java coding/programming exercises are not only used by potential employers to assess the technical skills of their job applicants, they can be used as Java practice, to benchmark your skills against your peers. Since all Geektastic’s take home code challenges are reviewed by super talented reviewers all submissions receive a thorough review - you can read more about how we review here.
Java has been around for a long time in programming language terms. It was developed at Sun Microsystems (since acquired by Oracle) and the first version was released in 1995. Although peak interest in Java as assessed via Google Trends was some years ago, Java is still the dominant programming language in the world today by a number of different measures e.g. PYPL PopularitY and TIOBE Index.
Whereas languages such as its principal forerunner C are in decline, Java has held on to its dominant position. It’s probably no accident that Java’s appearance coincides with the beginning of the exponential growth of the internet and the growth of software development as a whole that has come about to support and leverage the internet . Although Java also now seems to be somewhat in decline, there are a number of languages (many using functional paradigms) in the ascendancy rather than a single main challenger. In fact, it may be that no future language will hold the position of dominance that Java does now or did in the last decade or more.
The Java Virtual Machine
Java initially also held the promise of being able to write consumer facing applications for desktop machines running Java using the Swing GUI toolkit (and its intended successor JavaFX) although it would not be unfair to say that that has rarely been realised beyond areas such as software development tools and custom financial services or scientific applications for example. In the enterprise space though, Java as a language for backend, server-side applications has proved dominant in many situations right through to enterprise level critical applications.
Although Java has previously suffered from somewhat confusing release nomenclature - this seems to have standardised on whole numbers - and the current version is Java 8 which was first released in March 2014. Java 9, after a number of delays, is at the time of writing scheduled for release in September 2017.
In recent years Java has adopted some of the ideas of functional programming in response to the challenges in maximising performance and efficiency when running on multi-core processors. There is considerable complexity in handling concurrency and mutable state in Java applications through management of threads. There are several excellent books concerning concurrency management using Java including what is a generally regarded as the “classic”: Java Concurrency in Practice by Brian Goetz et al.
It could also be claimed that Java was significant in gaining traction for the Open Source movement. Java has an extremely strong and extensive collection of open source libraries under active development. Some of those frameworks and approaches from the open source community have proved superior to those originated by the core industry itself e.g. Hibernate over Enterprise Java Beans (EJBs - adopted by Sun Microsystems from an IBM specification) and the Spring Framework (and all the associated libraries and products that developed from that project). A number of very sophisticated IDEs (Integrated Development Environments) such as Intellij Idea and Eclipse were initially developed to support the creation of Java code (and indeed are themselves desktop Java applications).
Libraries and Frameworks
As with libraries and frameworks in any programming language there is sometimes an opposition between ease of use and the flexibility to innovate. The maturity of Java as a language and the maturity of many of the open source libraries means that many key problems have been solved many times. Solutions to problems have frequently converged and as they should, libraries have built upon the innovations and shortcomings of earlier projects. There are now relatively standard ways of delivering core application features particularly for the web and services-based architectures. Again, Spring projects have frequently lead the way in terms of standardising common functionality and delivering support for web applications: web MVC (Model-View-Controller) architecture; delivery of REST services; standardisation of interaction with message brokers and with a wide range of datasources; batch processing and security. Spring projects and libraries generally build upon lower level libraries: JDBC; JSP; JSON and XML handling for example and are positioned more as libraries and approaches for application construction. Spring still supports both XML- and annotation- based configuration, although annotations have generally been regarded as the future. By annotating application classes Spring can connect beans together at application start up and add lots of “boilerplate” functionality to an application in a few lines of code. The more recent Spring Boot project is a logical development of the Spring ethos for application creation in that it allows the creation of a standalone Spring application or embedding of application servers such as Tomcat or Jetty without the need for creation of a .war file and deployment to separately managed application server.
The Spring Boot project effectively allows a short Code Challenge - with a timeframe of hours - to yield a fully runnable and testable application. A Code Challenge focussed on Spring might therefore supply a partially or fully configured Spring Boot application that can form a base on which the candidate adds code to implement the requirements of the challenge.
Looking to find out more about take-home code challenges and what makes a good challenge?