Teaching Java On The Job
CodeFX Weekly #46 — 1st of December 2017
Hi everyone,
chances are you’re working for a company that is looking for Java developers, but isn’t happy with the skills the applicants bring to the table — be it at entry level or for more experienced positions. Some companies decry the shallow talent pool, others hope that throwing money at the problem makes it go away.
The third and arguably most arduous path is to move “Java chops” from the “required” into the “nice to have” section, hire applicants that otherwise fit the bill, and school them in-house. This is what I want to talk about today.
I send this newsletter out every Friday. Yes, as an actual email. Subscribe!

Code Academy
At Disy, where I was employed and still do a lot of freelance work, we recently started working on a what we call the Code Academy, a collection of curricula that cover various technologies important for our daily work. Here’s the current list of Java language topics:
- generics
- collections
- lambdas and streams
- module system
- concurrency
Beyond that we want to cover:
- frameworks (Spring, Hibernate, etc)
- web technologies (HTML5, JavaScript, etc)
- craftsmanship (design patterns, clean code, unit testing, etc)
- tools (Maven, Git)
For each topic we aim to mix proven sources (mainly books and online courses, but also docs and blogs) with exercises that were handcrafted for our requirements to create two to five days minicourses. Developers should spend about half the time trying things out for themselves and solving the exercises, which are then discussed with their mentor. Ideally we finish with a small project that combines various topics (maybe generics, collections, and unit tests or lambdas, streams, and concurrency).
We see several advantages of such a structured approach over the more common “learning on the job” (i.e. “learning from StackOverflow”):
- clear learning goals prevent googling sprees and tutorial creep that can be very unsatisfying and wasteful
- curricula guarantee consistent learning experiences that cover pitfalls and best practices along with important background information
- curricula can be improved over time
- content was carefully selected to teach relevant skills (“all killer, no filler”)
- mix of video, books, blogs, etc. makes learning more varied (they lead to a certain amount of repetition, which can be either reinforcing or boring — we’ll see)
- exercises and reviews make sure that new skills are actually practiced (many sources lack in this regard)
With that we want to make it easier to hire developers with a non-Java background because we are able to identify areas where they need improvement and then mix a collection of minicourses into the rest of the onboarding process.
As a bonus, even experienced developers might use these to freshen their memory or fill long-standing holes in their Java knowledge.
Generics and collections
We just started out and so far we only finished generics and collections (we have about 20 pages of notes for the rest) — here are the sources we picked for each.
Generics
- Java Fundamentals: Generics (Pluralsight video course)
- Java Generics and Collections, 1st edition (chapters 1–4, 6, 7, 9)
- Effective Java, 2nd edition (items 23, 24, 26–28; but can’t wait to update to 3rd edition)
Collections
- Java Fundamentals: Collections (Pluralsight video course)
- Java Generics and Collections, 1st edition (chapters 10–17)
- my blog posts on correctly implementing equals and hashCode
- Effective Java, 2nd edition (items 25, 29, 32, 33)
I don’t want to go into too many details, but as an example, here’s what the Collection Basics section of the Collections course looks like:
- Col: 1. What Are Collections and Why Use Them?
- Col: 2. Defining and Iterating Collections
- G&C: 10. The Main Interfaces of the Java Collections Framework
- G&C: 11. Preliminaries
- G&C: 12. The Collection Interface
- EX: work through
CollectionExercises
and verify your solutions by runningCollectionTests
Structure
After some discussion we decided to create a code-academy
monorepo and put everything in there. It looks looks like this:
- generics
- src
+ main
+ test
pom.xml
README.md
+ collections
README.md
The main README explains what this is all about, how to set everything up, how to make exercises and start reviews. It also links to the topics, each of which have their own folder.
Each topic folder has its own README that describes the course, its goals, the sources, and, most importantly, the actual curriculum (like the Collection Basics section shown above). Beyond that the folder contains the exercises we created, which so far are organized as Maven projects, but that can of course be changed on a topic-by-topic basis.
On Monday, the first developer will start with the generics and collections course and I’m super thrilled to see how it works.