This summer I am mentoring a group of interns at my job. It has been an exciting experience so far, but also a very revealing one.
First, it re-emphasizes just how truly complicated enterprise software development can be. Veteran developers don’t often think about this. Most of us learned about all the layers and components and technologies that make up modern software slowly, over time. It is only when you try to teach it all at once, to someone with no experience with any of it, that you realize that something as seemingly “simple” as writing a basic Java webapp wired with Spring is actually really freaking complicated, and very difficult to explain.
Second, it re-emphasizes that most of the material related to enterprise software development (Java in particular) is not very friendly for beginners. For example, the Java EE tutorial does an OK job of explaining how everything works, reading like something between a slick sheet and an actual tutorial. What is worse is that it doesn’t really explain why you would use any of the technologies under the Java EE umbrella. If a developer doesn’t understand the point, how can you expect them to care?
Take Spring as another example. If you go to the Spring Core homepage, you can find all sorts of example code. Most of it shows how to use spring to wire up a whole Java Webapp, from top to bottom. That’s great for someone who is already familiar with all the bits and pieces, and just wants to see how they can be tied together.
But that isn’t exactly as useful for beginners. You know what would be useful? A basic command line Java application that demonstrates why dependency injection is useful, and shows how to use Spring Core for DI, and DI only. Once they get that out of the way, they may actually have a chance to understand how and why it can be used alongside Servlets and JAX-RS and the like.
Then there is the matter of Spring Boot, which makes it easy for beginners to Java web application up and running. The danger with Spring Boot, however, is that if someone uses it without knowing what it is doing, it will give the appearance of magic, and magic can be dangerous in this business.
This is all to say that I know now what we need more of - tutorials and reference material that breaks down all the pieces of enterprise software, bit by bit, giving each context and purpose, as well an explanation. Once the pieces make sense on their own, a new developer may better understand how they work in unison.
I acknowledge, of course, that such material is not easy to write. But I’m going to give at least some of it a shot. After all, it’s no use complaining about something if you don’t try and fix it.