While I've been categorically a geek for all of my life, I've only really been a software engineer for about 10 years now, starting with an online profile creator I created for a person using Perl and flat files. [ahh the memories]
From time to time I like to sit and reflect from time to time about technologies old and new, patterns and practices I used in my programs, and projects that have succeeded and failed. In doing this I've noticed that a lot of things that I've done in "programmer land" also seem to apply to life. For example:
Life is a "1.0" Application
In the realm of programming, your 1.0 application is a significant first step, full of potential and features, but often full of bugs and desired functionality. That's why you'll find a lot of professionals snark that they'll wait for the service pack or the 1.1 release of the application before using it.
The thing to realize though, is that if you waited until you had all the bugs out of the application, had all the perfect features in the application, you'd NEVER get it released. Nobody would get to see the awesome app you've released, and you would have any feedback on how to make it better and to fix what went wrong. In addition, no amount of code tests, usability tests, and coding standard can prepare an application for the permutations and nuances of "real world use." This metaphor gets a little skewed nowadays with the massive amount of applications that are great, but keep the "beta" or "release candidate" status (see Gmail or Windows 7), but these are really exceptions and not the norm. If your application is to be taken seriously, you put it out there at 1.0 status and move forward.
This applies to life as well. There's no amount of preparation, book reading, and "testing" that would fully prepare me for marriage, kids, and life in general. You do your best to prepare, focus on your fundamentals or semantics (see an old post of mine) and then you get out there and live! Sure you have bugs/flaws in your life, and additional features/characteristics about you are yet to be discovered and implemented, but you won't discover those with out some real world experience to expose them.
As you live, and the "bug fixes" and "feature enhancements" come in, you eventually get to 1.1, status and slowly move forward. Sometimes a new "version release" of you removes some features you found non-essential or undesired, but that's the beauty of it. You're still the 1.0 "core" you, but with a lot of improvements along the way. I'm not sure if we ever reach a 2.0 status this side of the grave. Typically 2.0 releases represent a complete rewrite of the system, or a wide variety of features that weren't available in the original system. But that's probably a topic for another time.
There's a second idea I have that ties nicely in with this one, but I'm saving it for another entry, since there is plenty to chew on here for now.
What about you? What parallels or "microcosms" do you see in your career that apply to your life as a whole? I want to know.