So it came as a surprise to me when I first learned that there were real-world programming languages that were not Turing complete. Why would somebody design a serious language that was, in a very real and absolute sense, inferior to a Furby? Well, I've been working quite a bit with those languages recently, and now I understand their appeal.

The most popular non-Turing language is called SQL, which is used for doing wicked-fast manipulations of spreadsheets. If you want to apply some operation to every row in a table, select only the rows that have "foobar" in the fifth column, or add all the numbers in the second column, then SQL is your friend. But what SQL can't do is loops. There's no sense of "repeat this operation until X criterion is met", and that open-endedness is the key to being Turing complete.

What I've discovered though is that for a huge class of problems you simply don't need loops. The SQL approach (which is called relational algebra) is tremendously more concise and elegant, it's easier to implement efficiently, and certain pathologies (like infinite recursion, a major headache in functional programming) simply can't arise. Some problems will always require a Turing machine, but in other cases a less powerful paradigm is often the best way to think about a problem.