I've seen a lot of really bad code lately. Not just bad code, but poor design, heavily coupled architecture and general anti-patterns. It's kind of a drag.
This is a pretty serious problem in my profession. With the pretentious sounding "software engineer" title slapped on jobs everywhere, you'd think that would imply great attention to detail and precision. That's definitely not what's going on.
It is absolutely true that, especially for folks like me who are self-taught, it's pretty easy to get started as a developer by hacking together something that barely works. I would even argue that if code never had to change, barely works would be an acceptable outcome. But real life, and this is more true than ever in a Web-based world, dictates that nothing is ever truly "done." It is destined to evolve and change.
The industry is suffering from a lack of people to fill the jobs for software development, and what people there are tend not to be great at what they do. That's not the end of the world, though. It can get better, but only if we as an industry get our shit together. There are plenty of things to do...
- Volunteer to teach. I don't care if it's at a community college or an after school program. If you're good at what you do, get the kids hooked.
- Share what you do. This is the biggest problem, in my view. Put yourself out there in a blog, walk through your code with junior devs at work, contribute to an open source project. Just do something that spreads your knowledge.
- Stop using consultants and off-shoring important, core stuff. You think you're saving all kinds of money, but what you're really doing is building "technical debt" (I hate that term), pushing off problems to a later time by getting substandard product that the author doesn't own. Do you think that consultant cares about his hacks when he'll be doing something else next month?
- Read, participate, seek out knowledge. You don't have to kill yourself to keep up, or neglect your family. Spend an hour a day skipping on Facebook and instead reading blogs, forum posts or StackOverflow. Do it on-the-clock, as it were. If you're employer thinks you shouldn't, you should go to a new job.
- Do something in your spare time. Anything. I'm always surprised by the fact that developers have nothing to show you in interviews, because everything they do is owned by their former employer. Really? Just whip something up in your spare time, even if it's something mundane like a blog engine or online photo album. Who cares if it has been done thousands of times.
- Mentor and be mentored. Show people how to correctly unit test, or if you don't know how, find someone to show you.
You can be a part of the solution to the craftsmanship problem in the software industry.