Herr Bischoff

Ryan Dahl on Software

Ryan Dahl, original developer of the Node.js JavaScript runtime, in October 2011:

I hate almost all software. It’s unnecessary and complicated at almost every layer. At best I can congratulate someone for quickly and simply solving a problem on top of the shit that they are given. The only software that I like is one that I can easily understand and solves my problems. The amount of complexity I’m willing to tolerate is proportional to the size of the problem being solved.

In the past year I think I have finally come to understand the ideals of Unix: file descriptors and processes orchestrated with C. It’s a beautiful idea. This is not however what we interact with. The complexity was not contained. Instead I deal with DBus and /usr/lib and Boost and ioctls and SMF and signals and volatile variables and prototypal inheritance and C99_FEATURES and dpkg and autoconf.

Those of us who build on top of these systems are adding to the complexity. Not only do you have to understand $LD_LIBRARY_PATH to make your system work but now you have to understand $NODE_PATH too - there’s my little addition to the complexity you must now know! The users - the one who just want to see a webpage - don’t care. They don’t care how we organize /usr, they don’t care about zombie processes, they don’t care about bash tab completion, they don’t care if zlib is dynamically linked or statically linked to Node. There will come a point where the accumulated complexity of our existing systems is greater than the complexity of creating a new one. When that happens all of this shit will be trashed. We can flush boost and glib and autoconf down the toilet and never think of them again.

Those of you who still find it enjoyable to learn the details of, say, a programming language - being able to happily recite off if NaN equals or does not equal null - you just don’t yet understand how utterly fucked the whole thing is. If you think it would be cute to align all of the equals signs in your code, if you spend time configuring your window manager or editor, if put unicode check marks in your test runner, if you add unnecessary hierarchies in your code directories, if you are doing anything beyond just solving the problem - you don’t understand how fucked the whole thing is. No one gives a fuck about the glib object model.

The only thing that matters in software is the experience of the user.

I found this on GitHub in a Gist. The discussion below it is an interesting read. There is a number of developers condemning this as a bitter rant. It may appear so but it is not. One comment by David Pfahler nails it especially well:

[…] In the author’s opinion, software is here to solve problems for humans. That’s it. Not to enjoy writing it, not to enjoy abstraction, nothing like this. You can disagree with that, of course, but it’s not like the author missed that or didn’t think about that aspect. He is 100% rejecting it.

Exactly. As soon as you start to enjoy the act of writing software in and of itself, you’re in trouble. You should be solving a problem and be done, not tinkering for the sake of tinkering. It is supposed to be a means to an end.

Imagine a carpenter who particularly enjoyed hammering. Not building — hammering. Who devised thirty-seven different ways to hit a nail. Who took five times as long as necessary, drove in ten times the extra nails and installed thrice the required girders, just because he enjoyed hammering so much. All while exclaiming and explaining the virtues of hammering every particular way. You’d probably think that person to be utterly mad. At the very least you would want to get away as far as humanly possible.

Yet, for the most part, this is precisely what modern software development has become.