Recently, I had an interesting conversation with a non-programmer. Yes, I know – it is sometimes hard to believe, but such creatures still do exist. I’m not sure how many of them are still out there, but by my last count it is definitely more than seven. It quite ordinarily, as these things do. Upon learning that I write software for living (among other things) this person, let’s call him Rupert, told me all about his computer being slow and infested by viruses. You know – the usual.
How would one describe Rupert? Well, it is rather difficult to describe amorphous shapes. He was vaguely toad shaped, bulbous and waddling. His body mass was shushing around in the confines of stylish suit, accessorized with an ultra tacky tie. When talking his mouth would open very wide, and loud noises would spill out in an unbridled cascade. He was that kind of a person. A talker, not a listener.
Eventually Rupert’s amphibian brain, managed to figure out I write code for living. He quickly put two and two together and decided I must be making mad money selling iPhone apps. Because programming is either fixing computers or making phone apps, right? What else could it be. And since apps are cool these days, I must totally be making a killing selling them.
Here is the thing though – I have never actually sold any software. Most of the stuff I have done professionally was back end web work while on salary of hourly pay. The rest of my projects were open source or freeware apps. I never actually released anything I would be willing to slap a price tag on. Nothing was ever good enough I guess. If I had something I was really proud of, maybe I would try to sell it but then again I have no idea how to price software. Besides the whole idea of selling software seems a bit unnatural to me. I’m much more comfortable just slapping my half-assed source code online, and letting the internet to have it’s way with it. As I was trying to articulate this Rupert’s indignation hit critical level, and he suffered an uncontrollable verbal overspill.
He was baffled, appalled and outraged by the very concept of open source software. He could not believe that anyone could willingly give their work away for free. The idea of me sitting at my desk, coding for say six hours and then throwing the code on github made him forth at the mouth. How could I willingly waste my time and talent like this? Why would I want to throw hours of work out the window.
It’s not that I don’t understand this attitude – I see it all the time, and I get where they are coming from. But I don’t think I ever sat down and thought about why so many of us in the software industry don’t subscribe to it. Why do open source ideas have such a strong pull on so many of us. It’s not that we are naive and easily swayed by some pandering philosophies – or craft requires us to be analytical, and used to abstract and lateral thinking.
Perhaps there is a simple explanation – Open Source and Free Software movements are a genuinely Good Thing™. It gives people free, platform independent alternatives to expensive proprietary applications. It promotes open standards. It lets us stand on the shoulders of the giants instead of reinventing the wheel all the time. It spurs innovation. It allows collaboration and intellectual exchange across national and cultural divides. It is beneficial in more ways than one. That’s just it. We all recognize it, and we all throw in our two cents to contribute.
But perhaps another factor is how we view our work. You see, for most of us what we do is a life long passion. It is intellectually stimulating, fulfilling and rewarding work. I have talked with many people who tried to break into our field but got discouraged by long fruitless debugging sessions – when it is just you, your code and an intangible, infuriating bug you cannot find. And it’s true – those situations do suck, and they happen all the time. It’s part of the job. But the elation of solving one of these makes it all worth it. I always tell those failed coders that they are missing out on something great. When you solve a difficult, overwhelming project – when you finally build something, and it works – it feels great. You do a little victory dance in your chair, and for a brief moment you feel like a god. You have just won a wrestling match against your own flaws and your own sloppiness – you have conquered your weaknesses and you have bent the machine to your will. It is amazing. I wouldn’t say it’s better than sex, because it’s not – but it is up there in the hierarchy of awesome experiences that make life worth living.
Think about that? Who else out there gets this kind of fulfillment from their day jobs? Definitely not clerks, bean counters, paper shufflers and other menial office workers. Definitely not most manual laborers. Of course most jobs can be fulfilling in a way – there is the pride form a job well done, there is the satisfaction from helping other people, etc.. But few professions give you this kind of overwhelming euphoric gratification day in and day out. In that, programming is probably closest to art – in that it exerts a creative pull on the creators. It absorbs us, int mystifies us and drives us. And just like artists we are never, ever happy with our creations.
But is programming an art? Or is it science? We do classify it as one of sciences after all. For most of us – well those of us with day jobs outside the academia – it is more like an applied science though. We take existing theory, apply it to problems and solve them. It is rewarding, fulfilling and interesting. Hell, it is more than that because the results of our work are much more immediate. We compile it, and it works or it doesn’t.
Most people don’t get that. For them a job is something you do in exchange for money. For us, programming is just something we do for fun. Work is just a place where you go to get new projects when you run out of ideas. And for some strange reason there are folks there willing to pay your for coding. Which is great. Unless their projects are boring and they suck, in which case many of us will be perfectly willing to take a pay cut to work on more exciting stuff.
Of course not all of us work this way. There are people out there who think more like Rupert. When they come home, they don’t have side projects (not even neglected vaporware ones), and they never code just for fun. And that’s fine. But whenever I meet those people I have this strange feeling that they are not one of us, really. That they are just passing for one – they have somewhat learned programming by rote, but they have neither the drive, nor the passion we all share. I find these people hard to relate to – their minds work in strange alien ways, and despite the appearances they seem to be are user-folk on the inside. I find them strange, and disconcerting – especially the competent and knowledgeable ones.
Most of us though feel the need to share, discuss, collaborate and show of our work. We value appreciation of our peers more than monetary recompense we could potentially get from few dozen probable users. Or perhaps it’s just me.
How do you feel about this? What is your philosophy? Do you release your code, or do you prefer to keep it closed and proprietary? How do you respond to people such as Rupert? How do you explain this wonderful thing that we have going on with open source to non-programmers?