I've been writing software for a long time. Nearly 30 years. While I had a bit of an introduction to programming as part of pursuing my undergrad in electrical/computer engineering, I really learned how to write software on my own. I'm no genius, I've stepped in every puddle there is to step in, but I knew enough to study how to go about the business of of writing software from others that came before me. The good ones, the guys that have also put in 30 years before my time and wrote books about their experience. Guys like SteveMcConnel, GradyBooch, RobertMartin, TheGangOfFour, etc. Lots of others. I used to have a bookshelf, floor to ceiling full of books on programming and I read them all, some more times than once, some I studied over and over. Topics on everything from requirements gathering and analysis, to programming, quality assurance, project management and every topic in between you can think of. I've spent countless hours studying such publications on top of actually writing software week after week, month after month, year after year for literally hundreds businesses. The vast majority of my career wasn't spent writing software for an hourly rate under someone else's direction. I spent most of my career meeting and listening to clients who are trying to solve business problems, writing proposals for solutions to those problems, winning those proposals and either writing the software myself or leading a team or some combination thereof to put a working solution in to production.
Software Developers in the Real World
What's really surprising about software development is the generally low level of skill of the average software developer that you meet yet has managed to make a career of it. It's both sad and scary.
The average software developer doesn't really know what's important about software development. They write some code, throw it over the wall to a QA team or the end user's themselves to test, maybe fix a few bugs and boom, they call it done. There is a lot of software out there that is just good enough to work and that's the worst kind of software. It's like a cancer to the businesses that have to support such software.
What Are The Really Important Aspects Of Software Development?
There are many, but I can tell you two of the most important. Structure and dependency management. These are the things that most software developers know little about and it's greatly hampering the business that have to live with code that is poorly structured and whose dependency structure has not been considered. These, in my experience, are the most important aspects of software design, and are the most often neglected.
I hope to have more to come soon. --cmedcoff