When you're nested deep within the call-stack, a dozen function calls and dereferences away from home, and you discover the API now needs a gxCultureInvariant object. A what? Why the hell does it need one of those? Oh, but there it is: right at the bottom of the call stack in a class that's four levels of abstraction away from you. It's as unreachable as the soap dispenser from a bathroom in a neighboring skyscraper, and yet there you stand with wet and dirty hands.
This first headache is the cause of ghetto plumbing in programs. I've personally committed such atrocities as:
I've said that ".Net" is Microsoft's way of hiding their best tools from reasonably phrased search queries. Some might say the same about programming languages with unhelpfully generic names like J, D, and Factor. (At least "G" changed its name to "Deesel"--wouldn't it be fun to search Google for "G string class" when your boss is watching?)
Programmers encounter blindness when they intuit that a function must be available in their tool-chain, but it's difficult and laborious to hunt down the documentation for it. How many times have you:
This blindness results in needless programming and duplication of functionality that already existed. It even leads to projects abandoned in frustration.
The third headache belongs to programmers who know what they want but don't know how to do it, nor do they know how to find out. They have some sense of what should be done, but the problem itself is tricky, complicated, and hard to solve in general. Sometimes the problem has been solved by computer scientists, but the programmer isn't aware of it or hasn't got the education to understand it. Sometimes the problem just isn't solvable at all and both the programmer and his customer are unaware. In the last category we find the unhappy and unwitting pursuers of problems that are NP complete.
These problems are infuriating because it seems like it should be simple. In fact, your boss is standing over your shoulder, waving his arms and saying "well, this is easy, you just... I don't know... do it!". Problems like: