What is computer programming?

As this blog post on needing a programming language for regular folks is making the rounds, I realized that most people don’t really understand what computer programming is. Computer programming is about creating clear instructions. You would think that with 50,000 years of communication under our belts, we’d be pretty good at that. But, it turns out we aren’t.

Think about the last time you tried to explain something to someone, like a cooking technique. You probably demonstrated it to the person, because as humans we learn very well by example. And we should, we have an entire class of brain cells dedicated to that. Computers don’t learn by example.

You may also have tried to teach them by analogy, by explaining that this is like something else they’ve done before. Computers don’t learn by analogy.

The thing you probably did not do is write down detailed step by step instructions and leave them to their own devices. And even if you did, that’s still not quite computer programming, because computers don’t have judgement. You can follow a simple recipe because there are many things that are understood, like cut out the bad parts of the tomato, or don’t burn yourself when taking the dish out of the oven.

A computer is not a mind, even though we can make them intelligence of a sort. It takes very careful forethought to make a computer do something specific. Over time, like with any skill, it becomes second nature. But to people from the outside, it’s not. It seems like magic and mysticism.

Plenty of people think they want programming to be in English, and I can assure you that you don’t. We already have it, it’s called the Legal Code. If you’ve ever glazed over 30 words in to a legal agreement it’s because you ran head long into the challenge that English, like all natural languages, was never meant to stand on its own. Removing the ambiguities that make English a great spoken language, take a lot of care and craft, like defining the meaning of the word “is”, and using terms like heretofore. And, even all of that, still doesn’t provide something that really stands on it’s own. Legal Code can only be understood in the context of Legal precedence, and anyone that thinks they can find a loop-hole in a license without knowing the case law, doesn’t understand how the law works at all. This is why we have very specialized languages in computer programming that are very good at being explicit, and ensuring you don’t hand ambiguities to the computer.

Computer programming is a skill, like any advanced skill, that takes a long time to develop. I have friends who have deep and wondrous skills in woodworking, which amaze me. But just like computer programming, their skills were not learned in a few weekends, it was a life long love of a medium that made them the master craftsmen they are today. If you are diving into this space, rejoice, as you’ll be able to do amazing things. But just don’t throw up your hands early and complain that this is too hard. That “feeling stupid” moment means you a learning, and that your brain is expanding. And, in the 21st century, computer programming is a skill that will take you far.

Update (6/14): My friend Nick has a good complementary piece to this over on his blog.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s