Programming Sucks


I’ve been a software engineer for more than six years now, and if you can’t guess it from the title, I’ve concluded that programming sucks. Now don’t get me wrong, I love my job. I love having the ability to look to swing my keyboard at a problem and have a piece of software after it all that makes my life easier. I’ll even say I love the fact that I’m making a very decent living doing this professionally. I’m highlighting that programming sucks as an admittance that I enjoy punishing myself, and I believe this is a trait I share with many of my colleagues.

Why does it suck so much?

Programmers are some of the craziest perfectionists you’ll come across. They spend a lot of time organising millions or characters into a program that does something, even if that something isn’t useful. - I think Uncle Bob but could be various other people as well.

I’ve often found that a layperson looking at code can quickly think it’s a jumbled mess of familiar and strange characters alike. I can easily understand that someone looking at code for the first time would think it’s some magical incantation. It’s one of the first things I’d highlight about programming sucking so much. Breaking down code to individual characters is meaningless, but there’s still an immense amount of effort going into using all these characters to form a coherent piece of software that does what you want it to do.

“Every year. though we apply massive effort, we make less progress than the year before; because every year we get closer and closer to the asymptote.” - Uncle Bob 1

There’s also the side of the job that makes it feel like “knowing enough” is a moving target. There’s a constant influx of new stuff to learn, and it has the side-effect of leading to a poorly supported development process. I’d assume a company like Jetbrains is making a killing out of building an IDE2 for every new thing in the world of programming. One of the biggest gripes in my day-job is that the IDE options for doing iOS development lack essential features compared to what I’ve used to develop for the web and Android before. I can rant about anything that bothers me about Xcode and AppCode alike, but the reality is that it comes with the territory. To make things worse, Swift isn’t even that young of a programming language anymore. Still, compared to the decades languages like C# and Java have been in use, it’s easy to understand why supportive tooling is lacking.

Why do we love it so much then?

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” - Martin Fowler

The very exact things that make it suck is what makes it so interesting to do. You spend a lot of effort fiddling with naming things and organising seemingly random characters so that the computer can make sense of it. That’s only half the battle. Writing code that you can come back to and make sense of is a challenge on its own, and it can be gratifying when you get it right.

There are other “noble” reasons people do this thing called programming, and I’m sure it’s a topic explored by many others. Still, I think the reality is that I know I’m making good money doing this from personal experience, so it’s keeping the motivation up to keep soldiering on. Trying to push the money aspect to the side, I want to delve a little into a mad thing I was doing recently.

Some mad things I do?

In my current day-job, I’m involved in a team that’s building the mobile app for a major financial institution in South Africa. I don’t consider myself the best mobile developer, and I’m still not 100% sure how I ended up on the iOS side, but it has been somewhat of an uphill battle. I’m not going to delve into the detail about the issues, but some of the problems were self-inflicted, and some are just lacking elements in Xcode & AppCode.

Contrast that to a small WPF application I built using .NET 5 and Rider. I had many of the same issues I had while working on this, but I was so engrossed in getting a working application. I looked at the clock every hour and would identify “just one more” challenge to complete. Once I felt comfortable with what I had made, I saw it was about 04:00 in the morning. I had to be up for work in a few hours again. .NET and C# has been the framework and language I started my professional career in, so I have a special place in my heart for these tools.

Reflection

I listened to a recent No Dumb Questions3 podcast episode titled “How to Land on The Moon”. The hosts interviewed someone who made a fantastic website where you can view archive footage, images and audio from the Apollo 11, 13 and 17 missions4. They asked why he never monetised this project, and his answer was relatively simple.

He’s a software engineer who was building applications for clients by day, which brings a lot of stress. He’s passionate about the missions NASA has undertaken. He thought of a way to document the Apollo 17 mission to make it immersive to follow along. It was his creative outlet that allowed him to recharge mentally, and that was compensation enough. He goes into a bit more detail on this in the podcast, and I’d highly recommend giving the episode a listen.

Contrasting this with my experience, I realised the application I was building was to support something that was also recharging me mentally: sim racing. I’ve joined the admin team of a local league, and we’d identified a process that was in dire need of automation. I don’t receive monetary compensation for the effort I put into administration for the league and doing commentary or live streams on race night. It’s just fun knowing that I’m part of something bigger here, and I don’t have to tie a monetary value to it.

This mix of creative fulfilment and having a soft spot for .NET and C# was what made me work on this application into the early morning hours. I’m glad I did it, the experience was great, and I’d exchange it for nothing in the world. It’s also made me realise I can apply this to my game-making as well.

Game development has fallen by the wayside for me, and a big part of it has been fear of failure. I’m trying to get fulfilment from publishing a game and not from just making it. It’s improbable that I’ll be involved in a big hit, but it doesn’t mean it should stop me from creating.


  1. https://blog.cleancoder.com/uncle-bob/2016/07/27/TheChurn.html ↩︎

  2. Integrated development environment https://en.wikipedia.org/wiki/Integrated_development_environment ↩︎

  3. https://www.nodumbquestions.fm/ ↩︎

  4. Website is called “Apollo in Real Time”. You can basically follow along with an entire mission while having access to various audio tracks to listen to as the mission progresses. Check it out on https://apolloinrealtime.org/ ↩︎