I was just hit by a Deep Thought.
I was thinking back to the way I used to think about programming when I was in high school and college. Everywhere I looked, I could envision a new software creation that would make things better for people. I’d stop at a convenience store for a Coke, and I’d think, “Wow, a software system could automate their cash register, track their sales, and know when to order more inventory.” (That was before every convenience store had such a system, and in fact, I wrote one and sold it to a few).
I’d look at movie theaters, restaurants, and bookstores the same way. I imagined a little computer you could carry around in your pocket that could contain all your favorite songs, letting you hear them whenever you want (waaaaaay before Apple finally did it right and made it pervasive).
The point I want to focus on is this: Every time such a “vision” comes, it comes with one overwhelming, predominant emotion — Joy. You are seeing an opportunity to create something new that will solve problems and make things better, and just seeing that is *thrilling*. Excitement, passion, joy, borderline euphoria.
My Deep Thought is that Software Development, in its essence, is built upon and inseparable from this Joy. It is the joy of seeing in your mind that new thing which could exist that leads you to decide that the thing damn well should exist and further, leads you to decide that, so help you God, that thing is going to exist — and that drives software development.
I’m saying the two cannot be separated. Is that really true?
Imagine a great painter, who can create works that inspire and move people. Now, put him on a 20-hour a day schedule and *force* him to produce new paintings non-stop. Could you rationally expect the same kind of results? No, because you have removed the joy from his creative process and in essence turned him into a machine. And for all Watson can do on Jeopardy, I don’t think he can make world class paintings.
Can you take a great writer of love songs, and demand her to produce 30 new songs in the next week? Yes, but the songs will suck. I realize my logic here is not air-tight. I’m not exactly proving my case, but hopefully I’m clumsily articulating it, which is enough for now.
It comes down to this: Certain human acts of creation are driven by Joy. If you separate the creation process from the Joy, what you get is only a shadow of what could have been. And Software Development is one of those acts.
Yet, most Software Development jobs are for corporations, and most such jobs don’t allow any place for Joy. Why? Not for any pre-meditated, evil reasons. Simply because a corporation’s role is to continually increase its revenues and profits. A corporation is not human and cannot experience joy. But it does demand relentlessly improving quarterly numbers.
But the corporation cannot get the software it wants effectively and efficiently if it inhibits the engine that produces that software. And that engine is joy. There’s no way around it. Some corporations get this, some don’t. But it remains a fact of life.
Hell, sometimes, while working in the salt mines of some joy-sucking corporation, I have forgotten it myself. I have operated as a machine for some pretty long stretches. But I’m glad I remember it now, and I’m going to try to keep it ever-present in my mind. I’ll have a hell of a lot more fun, and it’s going to allow me to produce more software, faster, and that software will be a better fit for its users, and it will make things better for the humans who work with it.