If you follow technology news, most of the sex is about startups that come up with some idea that they think is novel, get millions of dollars in funding, and then the demise of the company is a footnote that's barely covered. Every once in awhile, one of these things gets some traction, some dudes get rich, and then the company flames out. Just one time, you end up with Facebook.
But the fact is that there are hundreds of huge companies that hire more software developers and produce more code, each of them more than all startups combined. I wouldn't be surprised if the math worked out that there were tens of thousands of smaller to medium sized companies, where technology is not their core business, that are in the same boat. As someone who has worked in most of those situations, I can tell you that the quality of the work being done is mostly awful. These projects result in stuff that is brittle, hard to change, prone to failure and impossible to debug.
I've assumed that things aren't really this way, but I think I might be the victim of my own bubble. I read a lot of blogs by smart people, consult with a network of really good developers, and have had the chance to work with excellent people. Even the less experienced developers I worked with at Microsoft were good. I suppose I've been lucky, but I've had enough gigs in between to fully appreciate how bad a lot of stuff is in the wild.
This is an interesting problem. As I've said before, I feel that the vast majority of development work compares favorably to the manual trades that dominated the workforce prior to the rise of computers. I don't think you need to be a math genius, and some of the best developers I've worked with didn't go to college. I theorize that a greater amount of attention to mentoring and teaching people the craft of software development will ultimately strengthen the profession.
I think there are two huge opportunities out there. If you want to work inside of a large company, I think you can make a compelling case for a more specific mentoring and education program. In the .NET development universe that I primarily inhabit, there is no question that unit testing alone forces so many fundamental principles (loose coupling, dependency injection, single responsibility, etc.), that there are obvious gains leading to a higher level of supportability and maintainability. There is research to back this up. The challenge is to find champions (i.e., managers or other people with fiscal responsibility) for your cause. Then you have to alter your culture to embrace it. If your company buys into this, you could be a hero.
If you're more the independent type, the second opportunity is to push for the very same thing with more of a long-tail approach, servicing the smaller and medium sized businesses that can't really afford to start their own internal schools and mentoring programs. There's apparently even a market for this among individuals who want to learn, as evidenced by The Starter League in Chicago.
In both cases, I'm starting to slowly see self-awareness about code quality problems in organizations of all shapes and sizes. It's like there are lightbulbs turning on, where people are thinking, "Gosh, so many of our software projects fail. Perhaps we should do something about that."