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

The other kind of programmer I've encountered a lot is the self-taught kind. A lot of them entered technology through the web, and picked up a lot of what they know through online tutorials, copying snippets of code, and just mimicking what they've seen others do. They tend to have a relatively shallow understanding of many different technologies - usually front-end web development technologies like HTML, CSS, and JavaScript - and rather than seek mastery of any one of these tools, they depend on offshoots or new tools to improve upon or replace their predecessors. Beyond the basics, this group as a whole has extremely diverse skill sets. Some move on to mobile optimized content, some go into technical library construction, others into completely new territories that haven't been explored. This also has a tendency to leave "gaps:" beyond the rudimentary basics, there is little overlap among them. Partly to do with this diversity is the tendency to want to experiment: they learn by trial and error, they are focused on something that works and overlook understanding about why it will work, and more concerned about shipping code than whether it's "right" or not. Vertical programmers seem to also gravitate towards flatter, smaller shops of development. Again, this may have something to do with how decentralized web development is, but some of the best people I know exhibit these kinds of behaviors have gone through traditional college programs as well.

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.