As much as software is a complete pain in the ass to write, it truly is an amazing medium in which to work. To date, it is the most direct way we have to get our thoughts into executable form. As with any creative endeavor, there is the interdependence of idea & execution. For example, a movie with great special effects + a crappy script == crap. Same goes for software, every piece of which someone thought enough of to struggle through developing, but along the way the crappy ones lose their way (a battle with which I’m struggling with in this very post) and become useless.

One of software’s charms is the shortened cycle between idea -> implementation is such that you can quickly confirm or deny the utility of an idea. Some would add that it’s the only true validation of the idea itself.

Because so much of software requires purifying one’s thoughts, developers spend a lot of time thinking, in particular thinking about how their intended users will be thinking as they use the software. That’s a lot of thinking and meta thinking. When developers work together, arguing about whose thoughts are most accurate, egos can come into play and when they do, logic breaks down. You see the results in unclear, non-cohesive software. That’s a shame when it happens. Being able to win an argument doesn’t always make you right. Reality, which I’ll define here as repeatability over time, makes you right.

Anyway, that’s all I have to say about this for now…