I'm at the beginning of my career, working as a web developer for a small company. I would really like to advance my skills, but I was wondering, in what direction: horizontally or vertically?<p>In other words, should I learn a lot about a small number of technologies, or should I expand my knowledge to a lot of fields, taking the risk of knowing stuff only superficially.<p>Both approaches are fun. While learning a lot of stuff superficially is easy and not too frustrating, becoming an expert in a specific technology can also be fun, since I get to choose that technology...<p>But what I would really like to know is which path to take in order to become a great programmer? And which is the path to a more lucrative job? Are they the same?
Programming isn't just about writing code, it's about solving problems.<p>In my opinion, once you've achieved competence in your domain, you're probably better served by branching out to new areas. You can always go deeper in your area if you later discover that you need to, but different domains lead to different perspectives, and different perspectives can give you ideas or solutions that you would never see otherwise.
To steal from James Altucher, you're an expert at the intersection of all the things you know.<p>Vertical knowledge in several domains is the best way to develop unique expertise.<p>If the intersection of those domains is unique, you're knowledge is more likely to have value.