As a junior developer, you probably feel as if there are endless new technologies, languages, and practices being developed all the time. It can often seem as though the more you learn, the less you know, because of the range and complexity of everything going on in software development today.
It can be tough to figure out how to strike a balance between generalist and specialist, especially as a new developer out of school, a boot camp, or even learning on your own. On the one hand, you don’t want to stretch yourself too thin, but on the other, you want to avoid getting shoehorned into a specific area that can lead you to a learning rut.
No matter where you are in the process, here are a couple of metaphors may help you visualize this balance:
One of the classic models for the relationship between the breadth and the depth of your knowledge is the “T model”. Picture a T, with breadths of knowledge represented as the horizontal top and more in-depth understanding of a specific area as the stalk. This concept has existed in business and skills recruitment generally for decades and can be used to help visualize how you can have some knowledge or skills that cover a wide area with a much more limited area or skill with which you have a much deeper and nuanced understanding.
I recently came across an expansion of this concept with the paint drips example. Imagine a paintbrush full of wet paint is drawn across a vertical wall. There will be a smear across the top, and where there is enough paint, drips will fall down the wall. Whereas in the T Model, there is one area of specialized knowledge represented, in the paint drip example there is a larger area of broad-based knowledge, and over time the paint fills in the areas of deeper understanding.
This visual represents your knowledge base filling in and expanding your general scope of understanding. The T model exists to demonstrate the concept between breadth and depth of knowledge simply; the paintbrush example extends this concept and shows a more realistic representation of what one’s skills look like over the course of a career.
Say you are a junior front-end developer. You have some HTML/CSS/Js skills. You know the basics of a front-end framework or two and can create simple CRUD apps with some polish. You know how to set up a simple hosting option using prebuilt containers to serve your application.
These would be the broad top of your knowledge base. But could you organize a fresh AWS or similar server account to host your application from scratch? Could you explain and rebuild Webpack to run your production build? Since you know some CSS, has this translated into Less or Sass or another CSS preprocessor? These are a couple of areas in which you can start to visualize the broad base of knowledge and the deeper roots of each of the areas.
With these mental models established for understanding breadth vs. depth in programming skills, I would propose the following approach: while working and learning on the job, pick one to five areas to dive into for a year. This exploration could be work-related or done through personal projects. Maybe you spend time learning a new trending language or understanding servers and network setup. No matter what you choose, try exploring these new areas while maintaining a balance using these visuals and see where you are in a year.
Getting practice in balancing breadth and depth with software development will better prepare you to learn whatever future skills will be required of you in your career… and most certainly will pay dividends for a long time to come.