Vertical and Horizontal Programmers
I've noticed there are two camps of developers.
I got off the phone yesterday with one of the fine folks at Udacity, easily one of my favorite online education platforms, and I got the opportunity to speak with their director of content development about different approaches to teaching software and web development. What I ended up spending most of my time explaining was a pattern that I noticed among my colleagues and my friends in technology: there seem to be two "ranges" of behavior that developers seem to fall nicely along. I've noticed that a lot of people who have had formal education in computer science (through a higher-education program usually) and those who were self-taught (like myself) tend to exhibit different sets of behaviors. For the sake of clarity, I'll refer to these behaviors as vertical and horizontal behaviors respectively.
Vertical Behaviors: focused on depth and by the book
I should first describe the kind of programmer I notice who usually comes straight out of college. Typically, they have a strong understanding of one or two languages, typically Java or C++ (occasionally Python), and a solid grasp of Big-O analysis, basic data structures, and algorithms. Some of them concentrate in a particular area later on, such as robotics or machine learning, but for the most part, most of these people have similar skill sets and knowledge. Of course, there is a vast degree of proficiency in these areas, but otherwise, their general nature seems to be very similar: focus on performance, efficiency, and the theoretical underpinnings of the code you're writing. There's also a sense of being "by the book" - they tend to look at documentation or formal writings first, they try to fit problems into structures that they are familiar with, and they gravitate towards mastery of a few languages and tools they are used to. They're comfortable with structure, and tend to do very well in larger development shops. Much of this may simply be due to the institutionalization of this kind of programming, but there are always examples of this outside of traditional higher education.
Horizontal Behaviors: a breadth of skill and experimental
These have nothing to do with performance or background
Regardless of whether one is more aligned with one type or the other, I have very little to say about which is better. In fact, I'd go so far as to say it has nothing to do with how good of a programmer you are. I've presented two extremes here. I certainly classify myself as a more horizontal programmer than a vertical one, but it seems to me that people are always some mixture of both. It makes less sense to say whether you are vertically or horizontally inclined than to say to what degree you are of both. In many ways, this is similar to whether it's better to be a specialist (similar to what I'm calling vertical) or a generalist (similar to what I'm calling horizontal). The question seems moot. Being a specialist may entail mastery or myopia, just as being a generalist may entail polymathy or lack of focus. They seem to be different styles, but they hardly indicate performance. Take a look at this previous post to read more.
I'd love to hear your thoughts on this.