It often seems that much of programming involves shooting yourself in the foot. Sometimes this is what you set out to do; other times it's what happens despite your best efforts.

Some years ago, I made my living teaching Unix classes. In my first lecture of the introductory courses, I tried to get the students to understand that Unix has a somewhat different view of the world. To illustrate this, I often gave the following example:

Unix is not a system that asks questions. When it does ask questions, they're something like this …

You: I'd like to shoot myself in the foot.

Unix: What caliber gun would you like to use? Would you like help with your aim?

Around that same time, one of my fellow instructors told me the following anecdote as an explanation of the difference between the C and C++ programming languages:

C is a language that lets you shoot yoursef in the foot, but C++ lets you reuse the bullet.

Since there are many more languages than just C and C++, here is a guide to shooting yourself in the foot in a long list of programming languages.

So, just how do you choose a programming language? Instead of guns, bullets, and feet, here's a guide to a guide to selecting a programming language that uses cars (and trucks and buses) as an analogy.

Fortunately, Henry Spencer offers us a way to avoid shooting ourselves in the foot. Here, then, are Henry's Ten Commandments for C Programmers. There's also an annotated version for those wanting more explanation.