This sort of module level variable abuse morally offends me! This is a comment I had to add to some code I was reworking today.
When I went to work for the summer, I ending up in charge of a program that had been written by some consultants that didn't understand the problem they were supposed to solve. As a result, they fumbled around and spent a lot of money, and made a horrible little program that was totally unusable. Even the database design on the backend was (still is) screwed up. I had to get this thing working as soon as possible; people were itching to use it.
I read through it. What did I find? Global variables. GOTO's. Module level variables that belonged in the local scope. Incorrect error handling. Bad user interface design. The three or four people who wrote the thing didn't seem to have a clue about the language they were using, relational database design, or the problem they were trying to solve.
These are professional programmers! It's not like the company I work for hired some bums off the street or some high school student. Professionals! WTF! The consultants have done other work for my company before, and we've never really been satisfied with it, although it has been passable. The initial analysis was good for this one, but they just couldn't follow through. This sort of thing is an excellent way to go out of business.
jimbeam asked in the chatterbox what language the bad programmers were using. Visual Basic 6. The BananaMan Visual Basic writeup pretty much parallels how I feel about VB. It's not the language that makes a bad programmer though; it's just as easy to be a bad programmer in C++ or C as in VB.