Programmer Religious Wars and the Abstraction Gradient

Support this website by purchasing prints of my photographs! Check them out here.

Chances are, as you read through this list of languages and frameworks and databases, you're gonna go through a myriad of feelings:

Machine Code, Assembly, C, Go, C++, Perl, Python, Visual Basic 6, Ruby, PHP, Node.js, Node.js + Express, CodeIgniter, Zend Framework, Ruby on Rails, Visual Basic .NET, Java, MySQL, Redis, MongoDB, SQL Server…

Some of them you love, some of them you are neutral with but wish you knew more, some of them you have worked with and dislike, and some of them you downright hate (even if you've never worked with them previously!).

Honestly though, most if not all of these technologies can solve any given computing task. While there are a few qualities that differentiate them, such as complexity, community, debugging, it often comes down to a question of how abstract is the given technology.

I honestly don't know enough about many of these technologies to have rated them, but they can all be plotted on a 1D graph ranging from closer to the metal/concrete to highly abstract. Chances are, the type of technologies you prefer exist in close proximity. Notice how I mentioned not only languages but also frameworks. Ruby, for example, is going to be closer to the concrete side of the scale, while the Ruby on Rails framework is going to be be closer to the abstract. Writing raw database queries will be more concrete while using an ORM will be more abstract.

Personally, I'm a fan of scripting languages combined with minimal frameworks, e.g. Node.js + Express or maybe PHP + SleekMVC. I could never get into strict typing of C/C++, and I feel naughty using full-featured frameworks with ORMs like CakePHP or RoR. Then again, some people love the efficiency of the C's, and some love the rapid development of RoR.

Keep the abstraction gradient in mind the next time you come across a flame war about CodeIgniter vs Kohana or Ruby vs PHP or Node.js vs PHP + Apache. They all do the same thing, but with tradeoffs between ease of development and execution efficiency. Please leave comments below about what you think, especially if you propose a sorted list of these technologies based on where they should fall on said abstraction gradient.

Thomas Hunter II Avatar

Thomas has contributed to dozens of enterprise Node.js services and has worked for a company dedicated to securing Node.js. He has spoken at several conferences on Node.js and JavaScript and is an O'Reilly published author.