The title is a bit inaccurate. The folks we see normally are programmers, who can write code to get a problem solved. That's it. Not many go to the next level of doing it right by optimizing or ensure usage of right programming constructs.
Some 10 years ago, the quality wasn't this bad. The reason may be, VB wasn't there or wasn't popular then. With the advent of VB and Power-Builder, people who can drag a mouse to draw a button can be a software developer.
My project guide discouraged me from using debugger. That was a good 14 years ago. Then, the intention was to write clean code on paper before we sit in front of the terminal. There are still Java and VB developers who do not use debugger (for they do not know how to debug a program loaded by an app server like JBoss or COM+ package), but debug using print statements or MsgBox respectively. Getting them to use Log4J or trace statements is a big task.
And there are developers who would log every line of code and make it impossible to infer anything from a super-bloated log file. More than once I had setup scheduled tasks to clean out the log files created by bad programmers.