Skip to content

Instantly share code, notes, and snippets.

@cookrn
Created November 5, 2012 05:04
Show Gist options
  • Save cookrn/4015437 to your computer and use it in GitHub Desktop.
Save cookrn/4015437 to your computer and use it in GitHub Desktop.
Ryan Dahl on Software

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.

@bburrough
Copy link

I'll just leave this right here... Joel Spolsky in 2000, "Things You Should Never Do, Part 1."

http://www.joelonsoftware.com/articles/fog0000000069.html

Ryan's sentiment doesn't reflect reality. Joel's understanding is a much better representation of the real nature of software development.

You cannot both make a programmer's life simple and easy, and make the user's life simple and easy. Those two things are inversely proportional to each other. If you want to solve more problems for an end-user, the programmer has to do more work. If these two things were not inversely proportional, a programmer could make the user's life easier by simply not doing any work!

Look, fundamentally, computers are hard. They're weird, esoteric machines that aren't like anything humans are naturally familiar with. Just think about the fact that a computer executes millions upon millions of instructions every second. Now imagine the number of instructions you execute to bake a cake. Those are many orders of magnitude different from each other. There are weird natures between the human scale and the computer scale that are dealt with through all of the things that Ryan is complaining about. If you eliminate those, what are you going to do, write your own libs? Write your own compiler? Write your own assembler code? Good luck getting a simple hello world application written, let alone a web server, a browser, or an operating system.

The idea that Unix is a house of cards that, at some point will be more easily replaced than understood is foolishly wrong.

Computers are hard. Programming is hard. You're not doing yourself any favors by sitting there bitching about it. You need to knuckle down, dive in, and start dealing with that complexity on your user's behalf. Isn't that what they're paying you for? The more you founder and delay, the longer it's going to take to achieve some real, valuable outcome for an end user.

@stevemao
Copy link

@hansman
Copy link

hansman commented Aug 20, 2017

"This is a common pattern that has been repeated in many well-established sciences: not just medicine, but physics, mathematics, chemistry, and others. The fields start out monolithic, with just a few deep ideas. Early experts can master all those ideas. But as time passes that monolithic character changes. We discover many deep new ideas, too many for any one person to really master. As a result, the social structure of the field re-organizes and divides around those ideas. Instead of a monolith, we have fields within fields within fields, a complex, recursive, self-referential social structure, whose organization mirrors the connections between our deepest insights. And so the structure of our knowledge shapes the social organization of science. But that social shape in turn constrains and helps determine what we can discover. This is the scientific analogue of Conway's law."

@hansman
Copy link

hansman commented Aug 20, 2017

@ORESoftware
Copy link

Bottom line is - someday I hope someone writes a better OS than Unix. I pray to God everyday that my Ubuntu Desktop machines boots up, because it's not a given lol. I think ultimately open source software mostly sucks, but that's another thing altogether.

@amiteshore
Copy link

If builders built buildings the way programmers wrote programs, the first woodpecker that came along would destroy civilization.

@workingjubilee
Copy link

While it is pleasant to imagine our world is made of sterner stuff than software, I've stepped through enough buildings with lead-laden plumbing and asbestos-lined walls, yes, even in the 21st Century, and no, they weren't condemned, that I do not believe the two disciplines are all that far off. They merely both have the ability to construct a pleasant-seeming facade.

@alevosia
Copy link

alevosia commented May 5, 2020

What about developer experience?

@terraboops
Copy link

the computer revolution hasn't happened yet.

@lastmaj
Copy link

lastmaj commented May 27, 2021

I think this is painfully true (and hard to swallow)

@KulaGGin
Copy link

KulaGGin commented Jun 6, 2021

Uncle Bob disagrees:
https://youtu.be/SVRiktFlWxI?t=1807
https://youtu.be/qnq9syXUuFE?t=3400

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

That's not the only thing that matters. There are many other things that matter: how long does it take you to deliver this software, how clean the code is, just 2 examples.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment