Programming is Easy? No. It’s Really, Really Hard

When I was a greenhorn programmer I felt like a programming superhero.

Every programming task seemed so easy.

Until I started the coding.

Need a form for entering customer addresses? No problems, I’ll have that done by lunchtime. Oh wait…it has to cope with addresses for people who live overseas with different address structures…? AND it has to cope with “care of” addresses…? AND some people in rural areas only have the town pub as their address with a note to ask the publican to “keep this under the bar until you next see Graeme”…? AND some people have multiple addresses because they spend six months of the year in Melbourne and six months in Brisbane…? AND we need to note if something we send to a customer comes back as “undeliverable”…?

Instead of hours that takes weeks.

Now every programming task seems too difficult.
 
I’ve learnt to spend far more time reflecting and designing than coding. I assume any programming task is pretty close to impossible but that with some assumptions and constraints I can produce something kind of useful to some people. When coding I feel most of the time like I am overlooking big potential problems. Sort of like that feeling you have when you can’t remember if you turned off the oven.

Which is why I love Patrick McKenzie’s Falsehoods Programmers Believe About Names article. It captures perfectly how difficult the most common – and seemingly simple – programming tasks can be.

Computer programmers need things to be orderly. But human society is unorderly, full of exceptions and oddities.