In my experience, the biggest thing programmers do that normal people don't is imagine {all possible scenarios} and then design a system that's tolerant of them.
If you can funnel things into a well-defined state before turning it over to non-programmers (e.g. data warehouse), you get better results.
> In my experience, the biggest thing programmers do that normal people don't is imagine {all possible scenarios} and then design a system that's tolerant of them.
In my experience programmers don't do this any more than other people called on to design systems, and in fact frequently leverage the fact that software is updatable to avoid imagining failure scenarios until they occur, and only then making software resilient against that particular failure.
There are absolutely bad programmers, but it seems to be a fundamentally different way of thinking.
Simple example: Go find a business analyst. Someone who's performing a process daily, over a large number of items. And has done so for 2 years+. Ask them to list all the different types of items (i.e. require a different or modified process).
In my experience, ~10% of them will be able to give you a comprehensive list. And only ~5% will bring up anything approaching exception handling for unknown cases.
If you can funnel things into a well-defined state before turning it over to non-programmers (e.g. data warehouse), you get better results.