What programming is like
What is programming like?
We in the software profession have done a terrible job of explaining to the public what it is that we do. Everyone has interacted with a teacher or a doctor. There are TV shows about lawyers, cops, even government officials. However warped our impression of their day-to-day, we can relate to these professions. TV depicts programmers as modern-day wizards, socially aloof, hacking into systems or bringing the new algorithm online just in time to stop the cyberterrorists — totally disconnected from people’s experience of the software they use every day. Software remains mysterious.
This isn’t just a problem for awkward “so, what do you do?” conversations at parties. I believe one reason why so many demographics are underrepresented in software is that unless you grew up with it, you’re unlikely to have the faintest idea what making software is actually like. Why would you strive — particularly against economic obstacles and systemic biases — to enter a profession you know nothing about?
Programming sucks
Inspired by a friend who couldn’t see what was so hard about programming, Peter Welch wrote a hilarious, heartfelt and all-too-true rant about what writing software is like. His title, and answer: “Programming Sucks”. The whole, long post is enjoyable reading, but here’s a representative excerpt:
Imagine joining an engineering team […] for a bridge in a major metropolitan area. […] The bridge was designed as a suspension bridge, but nobody actually knew how to build a suspension bridge, so they got halfway through it and then just added extra support columns to keep the thing standing, but they left the suspension cables because they’re still sort of holding up parts of the bridge. Nobody knows which parts, but everybody’s pretty sure they’re important parts. […]
Would you drive across this bridge? No. If it somehow got built, everybody involved would be executed. Yet some version of this dynamic wrote every single program you have ever used, banking software, websites, and a ubiquitously used program that was supposed to protect information on the internet but didn’t.
Welch brilliantly describes the nuances and stresses of trying to cobble together something useful, based on a blueprint nobody bothered to draw, out of parts designed to do almost, but not exactly, what you need them to do.
Reading this, I immediately wanted to send it to every friend and family member to whom I’d failed to explain what it was I did all day. But I didn’t send it, because it only tells part of the story. Programming sucks, so why do it?
For me, it’s because programming is amazing.
Why we do it
Programming is like building structures out of Lego, but I never run out of Lego bricks, and if there’s no brick with the exact shape that I need, I can make that brick. I can take the structures I build and use them as bricks to build bigger, more ambitious structures. I can build tools out of bricks to help me build quicker. If I build a model city, or a crane for building model cities, I can offer them to millions of people to download and play with, in any part of the world.
Fred Brooks wrote in The Mythical Man-Month:
The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.
Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms.
One of the most liberating things about writing software is that the tools you use for it are also software. Remember that Lego tool you could buy to help you pry bricks apart? Imagine if you could build that tool out of Lego bricks. We can use the skills we have for writing software to improve the tools we work with. We can write software that makes us better at writing software.
There is a dark side, as Welch entertainingly describes. There are deep, scary flaws in the tools and processes we use to build software. Everything is more difficult and arcane than it should be. We spend so much effort, after the software is “done”, fixing problems that should never have been possible to introduce in the first place. Sometimes it’s amazing that anything ever works. But somehow, it does, and so we have smartphones, and Angry Birds, and the Internet. Programming sucks, but look at where we are!
Programming gives us live video conversations with relatives around the world; a map of our own biology; widgets that monitor oil pipelines from the inside; spreadsheets that run entire businesses; games where you build cities, or pretend to be a goat.
Of course these are specialised fields, each with its own demands and disciplines, but they all start with writing apparent gibberish in a text editor. The reach and breadth of what you can do with gibberish is remarkable.
Castles in the air
Programming sucks, but for me, that is cause for tremendous optimism. We can use programming to improve programming! We can reduce the complexity that programmers have to keep in their heads. We can make more visual, interactive, intuitive tools for understanding the behaviour of programs. We can make it easier to fix incorrect programs, and easier to write correct ones. Programming is only going to get easier, and more powerful, and more accessible.
If we’ve come this far — in the 60-odd years that programming has even been possible — while programming sucks, how far can we go when it doesn’t?
Brooks’ phrase “building castles in the air” was once used satirically, to mean chasing an impossible dream.
For me, that’s what programming is like.
Thanks to Joseph Chow, Lily Han, Conrad Irwin, Martin Kleppmann, Lee Mallabone and Kiran Prasad for reviewing a draft of this post. Their feedback improved this post immeasurably.
Lego photo credit: dunechaser
Comments (archived)
Comments are disabled, but please feel free to reach out on social media if you'd like to discuss this post!
Comments from a previous URL for this post (which now redirects here):
Great rebuttal! Reading through Programming Sucks, I could relate to much of the pain expressed, but that isn't how I approach my day-to-day.
It's just like you said, I'm a kid in a sandbox playing with my virtual lego. I'm paid to play. Thanks!
– bsodmike at Fri, 02 May 2014 17:16:14 +0000
Very well said Sam! Programming is like magic. We craft enchantments which build other enchantments, and they actually do things. It feels like sorcery.
– calebmadrigal at Fri, 02 May 2014 17:24:31 +0000
I think the "magic" angle came across a bit stronger than I'd hoped. (The Fred Brooks quote actually goes on to explicitly compare programming to "the magic of myth and legend", but I trimmed it.) Magic suggests something hard to learn or accessible only to a few, which is an impression I want to change.
But when it works, it does feel that way sometimes... :-)
– Sam Stokes at Sat, 03 May 2014 01:51:25 +0000
I'm a wizard, Harry.
I keep trying to get my boss to make that my official job title, too. "Wizard"
– Draco18s at Fri, 06 Jun 2014 05:05:13 +0000
I posted a follow-up post about comparing programming to magic. I think we could do better with a different analogy: http://blog.samstokes.co.uk...
– Sam Stokes at Tue, 23 Sep 2014 01:37:27 +0000
this makes me want to learn programming... i want magical powers.
– lily at Fri, 02 May 2014 17:58:11 +0000
Go for it! There are websites like Codecademy and LearnStreet (among others) which serve free interactive online courses to give you an introduction to programming or web development. There are also Q&A sites like StackOverflow with lots of helpful people who can help you out (provided you can show them you put effort into solving your own problems first).
You can also start with HTML, which is a markup language that is essential the Lego kit for building the front (looks) of a website (in combination with CSS). It's less complicated than building applications, but it has its own set of challenges and IMO a lot of fun to do as well.
– Marijke Luttekes at Fri, 02 May 2014 18:40:20 +0000
Khanacademy just added programming courses as well, and let's not forget W3 school's. Both 100% free and also hella useful.
For python and a few other languages there's also learnpythonthehardway.com
And forums etc. Do it man, learning to code is super rewarding.
– JLH13 at Fri, 02 May 2014 20:39:36 +0000
Thanks for adding the suggestions. I knew I forgot some, I like Khan Academy too. There are also lots of people willing to help. :)
– Marijke Luttekes at Fri, 02 May 2014 20:42:33 +0000
For sure, must everyone I know would help, most of them will get frustrated quickly if you can't problem solve a bit on your own though, so the best piece if advice is to make Google your buddy :)
– JLH13 at Fri, 02 May 2014 20:49:33 +0000
Please do forget W3 schools. Or remember it as a stern warning. There are so many far better things out there.
– martijnhoekstra at Mon, 05 May 2014 10:38:31 +0000
Thanks for providing even one example...
W3 school's is an amazing resource when you consider it's main material is 100% free.
If there are better options please enlighten us, but do not shoot down someone else's thought out example by trying to discredit a perfectly fine learning resource.
Source: I actually work in this field and use these resources quite a bit.
– JLH13 at Mon, 05 May 2014 19:58:32 +0000
For JS and CSS: MDN as a resource, for more of a tutorial on JS, Eloquent JavaScript. For PHP, "a fractal of bad design". For SQL and XML: tons and tons of other tutorials.
The fact that things like https://chrome.google.com/w... exist and get highly rated should give you pause.
– martijnhoekstra at Mon, 05 May 2014 20:30:46 +0000
Please do! I wrote this in the hope it would inspire people to learn to program. I would be very happy if it worked!
– Sam Stokes at Sat, 03 May 2014 01:52:50 +0000
When I read Programming Sucks this morning, I thought it was both true and a bit depressing. I would totally understand people thinking "if it sucks that much, then why on Earth are you doing it?". Lego on the other hand, is a perfect and almost idyllic metaphor. I can identify in both articles.
In the end however, it's also a matter of taste and not everyone will like programming, just as I really don't like economy whereas others love it and that's really not a bad thing. We all have our own connections to a subject.
– Marijke Luttekes at Fri, 02 May 2014 18:30:56 +0000
Totally, that was the first thing that stopped me emailing "Programming Sucks" to my friends and family - thinking they'd respond "oh you poor thing"!
– Sam Stokes at Sat, 03 May 2014 01:54:25 +0000
Honestly, when I read Welch's piece I thought "Damn, and he doesn't even apparently work for a dotEDU!" The scary reality is that bridge project he talked about is the way we run our education system in the USA, writ unbearable large. If he'd just been writing to complain about some aspect of dotEDU space he'd not have to had changed all that much.
– Drew Northup at Wed, 21 May 2014 15:00:55 +0000
Fred Brook's words resonate with thoughts I've had about programming before as well. To me programming is as much an art as a science, if not more of an art. It allows us to communicate with the world impossibly complex mental constructs in hopefully intuitive ways, and those constructs can change as a result of interactions making it a very unique art form in that its become so interactive.
Author's are able to construct wonderful utopias and take you their in your mind, but as programmers we can create real utopias that effect real change. We can imagine self-sufficient systems or how things "should be" and make them real for others to benefit from. That's a powerful position to be in.
– Brandon Thorn at Fri, 02 May 2014 18:49:44 +0000
THERE IS A LEGO TOOL FOR PRYING BRICKS APART??
– brendangregg at Fri, 02 May 2014 19:12:57 +0000
Man you missed out.
– Ryan at Fri, 02 May 2014 20:00:59 +0000
Programming does not suck.
– geoFire Implementor at Fri, 02 May 2014 19:48:58 +0000
Have you ever worked late on a Thursday night on A Big Project with your boss constantly coming in and saying, "This has to get done, it needs to be done by Friday" and then follow it up with "Oh, but I don't like it like that, can we make it like this instead?"
No, you probably haven't. The last three months of my life were nothing but "Get it done by Friday" followed by the inevitable flood of change requests the following Monday.
– Draco18s at Fri, 06 Jun 2014 05:08:05 +0000
I love the programming to lego analogy, great theme for a post! Looking back there are a lot of similarities between the two, one pays much better though :)
– Ryan at Fri, 02 May 2014 20:04:58 +0000
"There are TV shows about lawyers, cops, even government officials.
However warped our impression of their day-to-day, we can relate to
these professions. TV depicts programmers as modern-day wizards,
socially aloof, hacking into systems or bringing the new algorithm
online just in time to stop the cyberterrorists — totally disconnected
from people’s experience of the software they use every day. Software
remains mysterious."
Interesting point, but I think you're being far too optimistic about the reality of other professions on TV. I've never seen a cop on any TV show that was in any way like any cops I've ever interacted with. (Same for medical dramas, legal dramas, and every other kind of show.)
If there's a Sonny Crockett, Lenny Briscoe, or Kate Beckett in my city, I've definitely never seen them. Seeing Magnum, P.I. drive around in a Ferrari is cool to watch on TV because he's the protagonist, but doesn't make it any easier to relate to cops I see in my city. Is there anything more "socially aloof" than cops driving around in Ferraris they don't own?
– Tubbs at Fri, 02 May 2014 20:28:34 +0000
You're right, of course - I'm sure the conceptions people have of cops and lawyers don't bear much resemblance to those professions' daily lives. Maybe the difference is I think people can still *relate* to the caricatures of cops and lawyers, and the problems and people they deal with; I don't think the same is true for the "hacker" caricatures. As for the "nerd" caricatures, those are usually so obviously negative portrayals that it's no wonder more people don't consider programming as a career.
– Sam Stokes at Sat, 03 May 2014 01:58:46 +0000
I entirely stooped playing games (computer and other) when I started programming. I'm too addicted to having something that didn't exist before when I finish. A mere game win is be a transient ego boost and people don't value the effort or learning of a game loss. Programming let's me challenge myself to any degree..and I (usually) have working code when I'm done.
– Dan S at Sat, 03 May 2014 02:13:33 +0000
Yes! I've had the "programmer/poet" quote on my office wall for over a decade. It never fails to cheer me up. Thanks for a great post.
– Oliver Gorwits at Sat, 03 May 2014 07:35:03 +0000
Loved it! Programming is in fact creating castles in the air, and then materializing them into amazing structures that people will use and enjoy. We do it because we love the sense of accomplishment that comes with it and because we take pride on bringing that intangible stuff into reality! Programming sucks, but it tastes good.
– Adrian Carballo at Wed, 07 May 2014 02:09:24 +0000
Nice post Sam! I wonder how long til we see a depiction of a 'cool' programmer in mainstream film /tv. I guess the depiction of Sean Parker in Social Network wasnt too far off... but since we've had cool doctors (ER), Traders (arguably! - Wall Street) maybe cool coders could be next!
– John O'Halloran at Mon, 26 May 2014 20:05:48 +0000
Hey John, long time! I think The Social Network was actually part of the problem. Sean Parker was portrayed as "cool", but he was also portrayed as an asshole. Ditto Zuck. I'd like to see a portrayal of a programmer that shows them doing their job, but also as a social person capable of sensitivity and friendship - like the real programmers I know!
– Sam Stokes at Mon, 26 May 2014 22:14:29 +0000