Hacker News new | ask | show | jobs
by lolo_ 3840 days ago
I see this kind of article posted regularly, and it has been for at least the past decade (if not longer.)

Worse, it's often accompanied with 'but profession X is so much better and they are all certified and do things properly unlike us awful cowboys!'. In the worst case you get the whole 'in the future everyone will program and programmers will become totally redundant'.

I have a feeling the developers writing these posts don't have a huge amount of experience, and have a natural tendency to want to turn the table up side down and start afresh to get rid of all this cruft. I understand it, but it's frustrating

But what they perceive to be the cruft isn't just cruft. In programming the possibility of starting afresh is there, and has been done several times - haskell, erlang, go, rust, clojure, etc. etc. etc. on the programming side. In the web world the front end is filled with the latest great solution that just pushes aside all this terrible accidental complexity, and this happens in other realms too, yet we still see these articles.

I think there are a number of things at play here:

1. Programming is hard and often in annoying, frustrating, and painful ways. Nothing you do can change that, and blaming it on tooling or legacy or whatever doesn't change the _intrinsic_ complexity at hand. People like to imagine it's hard in challenging and enjoyable ways, and sometimes it is, but more often it's just frustrating.

2. Abstractions won't save you. They help, but always involve trade offs of one kind or another. Something that is declarative enough hides imperative details which eventually leak in horrible ways unless you come to understand how they work, and something too imperative invites duplication, complexity and bugs. Having seen giant T/SQL stored procedures, Microsoft Access queries that take hours to run and excel sheets that are so complicated nobody can vet them, I have seen my fair share of collapsed abstractions which started wonderful.

3. Programmers are needed. A great example is excel - some people point to it as the philosopher's stone of the 'everyone is a programmer' world, but as soon as you start doing things it's not good at, or exceed a certain complexity, it explodes into horrible pieces and fails in all kinds of terrible ways. Then the programmers need to step in. It's not something special or conceited, personally I think only a certain % of the population are capable of thinking in a sufficiently logical way to understand what a computer needs, whether employed as 'programmers' or not, and these are the only people who can help beyond the simplest case. Nothing to do with intelligence, just a kind of thinking. The power of software + the rarity of this way of thinking combined with people actually using it is why programmers are expensive, it's not an anomaly imo.

4. Real world work is largely boring and/or painful. I think particularly here people miss this point, in fact PG wrote a great piece relating to this (http://paulgraham.com/schlep.html), but it's so important - even the most interesting problem involves a great deal of schlep to get things _nicely_. No matter how wonderful programming could possibly be made, there is no avoiding this. It's true not only of programming but any job. I think there's too much of a delusion sold by many that work can be nothing but a joy if only you pick the right one - no. It can _net_ be wonderful, but in that net are wins and losses. If you love programming, the kick of solving problems and seeing an application do something for somebody easily outweighs the pain of schlepping to that point.

5. Other professions aren't magically better. I did a civ eng degree at arguably the top civ eng school in the world, and worked in a practising office for a couple of years and believe me the insight I got from both the theory and practice of engineering made it incredibly clear that the kind of abominations and messes you see in programming are nothing compared to that. You think you lack freedom in programming (you don't btw), ha! At least in programming things can be fixed only conceptually and not risk lives :)

6. Programming is actually wonderful. Despite the schlep and pain, you can build things that are actually useful using only 'thoughtstuff'. Everything that is broken can be fixed, and a great idea and a decent community around it can be enough to change anything that really is broken out there. That is totally counter to most industries out there. Problem solving in such a pure fashion, even in the compromised and often boring ways commercial programming causes you to do it is still an amazing privilege.

7. The possibility for shifting your area of programming are huge. In how many other industries could you change your specialisation by doing hobby work on a project open to anyone? You'd usually either have to 'start again' or simply not have the opportunity to change what you work on.

I feel like I have a blog post in me about this that refines and expands on the points above, but these are my thoughts on this perennial and understandable pattern of articles.

As a final note, a sad aspect is that this kind of article (not necessarily in this case) seems to downplay programming skills as just knowledge of the mess we have, or suggest it is not a nice job to have, or whatever else, which can have real world consequences. I think we have a lot to improve in programming, but to suggest it's some terrible sucky mess is a mistake, and a fatal one if you think that in the cases where in fact there is something wrong, they can't be fixed.

I remember entering a long and painful depression after reading an article by a well known author (who will go unnamed) who talked about how programming utterly sucks but if you do a real job and use programming then it's amazingly useful, just avoid the former. I think that was not a well thought out point to make and reflected more on the author than reality, including the grass is greener imagining of how somebody in another job could use programming and how great that could really be.

These kind of discussions have real world impact, let's not leap to 'X sucks' before we really know that it does.

1 comments

> In the worst case you get the whole 'in the future everyone will program and programmers will become totally redundant'.

Yeah, not going to happen because not everyone can think in the level of detail required to program.

Some people just think programming is like waving a magic wand, but when you keep asking them "so, what should it do if this happens? What about if that happens?" they slowly start to understand...

Yeah this is exactly what I mean by a certain kind of logical thinking. It's made worse by these tasks seeming a lot more simple than they actually are, before you even think about accidental complexity.

What's frustrating is when programmers mistake inherent complexity for the accidental kind and therefore label the whole enterprise a terrible mess.

In fact overall I think this distracts from ACTUAL accidental complexity since if you think programming is generally terrible you'll probably not be too interested in some small details of that :)