High-level areas of knowledge

  • Core Language
  • Design Patterns
  • Specific Technologies
  • Architecture

Core Language

Learning the core features of your language of choice creates a solid foundation on which your career will thrive and grow. Aiming to stay ahead of the curve when the language, naturally, evolves.

From Nos:

When a fundamental change comes over the industry, go back and master the new way. So for example, when Stream/Lambda's where added to Java, and now with Reactive (Rx) programming.

Eugenp of Baeldung has an excellent series on Java "Back to Basics" and code over on github.

Design Patterns

In the world of Enterprise development we will encounter EIP, PoEA, Services and REST.

Nos with many years in the software industry says:

I started with Pascal, Modula2/3 and Ada as a junior for the first few years, then went on to C/C++ as a senior developer. Here is where I applied the algorithm and data structures we learned at uni. Then when Java came out, I jumped ship... and I've never cared about algorithms and data structures since! Java isn't the kind of work where that matters. You'll care more about SQL queries and XML/Json parsing!

Specific Technologies

If you are looking to become a Java developer you will experience many libraries during your long career:

  • JMS
  • Kafka
  • ServiceMix
  • OGSi
  • and so much more...
Learn these as and when the need arises


Upon having experience working with the fundamental building blocks of your language, design patterns and a toolbox worth of technologies to dip into the architecture is what brings all this together into a solution.

Once the above is in place it becomes second nature to assemble entire architectures, the whole application and it's stack, making the correct trade-offs for performance and stability as required.

In life we gain knowledge and experience. Knowledge is what we know and experience is knowing how to apply this knowledge.

What is important to realise is converting the explicit knowledge in the above areas into tacit knowlede.