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?
Luke, the United States Pirate Party (defunct, but the movement itself is still alive) has been putting together a book to kind of explain who we are through a series of stories like this.
What kind of copyright/creative commons do you use on your stories?
Thankfully I’ve never talked to someone like that, because I don’t know how to react to something like that. I guess I participate for the same reasons my elderly neighbor makes and offers pie: far from being an OSS thing, I think humans in general inherently feel good about helping others.
It has also to do with feeling the (again, I’d think inherently human) need to “pay forward” for the countless hours of joy and satisfaction that projects like GNU, Linux, Mozilla, etc gave me through the years.
In a rationally economic view, I think it can probably be explained by game theory, although I’m very ignorant about it; by fostering open source, I benefit from it much more than I give, and so does everyone else. So in a way, I’d actually have to be stupid not to do it.
@ Travis McCrea:
Just for you I put Creative Commons 3.0 Attribution license on it. :)
@ icebrain:
Ah, very true. Perhaps this is not a programmer thing but a people thing. And folks who rage against open source simply have moved themselves away from peoplehood. :)
I don’t think this always applies.
Maybe it’s just Most of the time we don’t want to sell our software,
but Some of the time we may want to. If we spent a lot of time on it.
But I would sell it for almost nothing. Because CTRL C is a powerful thing.
Open source gives a great power. What other activity can you think of, that gives anyone the power to collaborate with the rest of the world to create and improve something that anyone across the globe could use.
If you don’t make time to code “for fun,” you’re killing yourself. I don’t even have time to code for fun, but I manage to procrastinate in side projects long enough to get the fun stuff done.
That’s why pancake theorem gets a redesign whenever I’m supposed to be finishing up a big project the next week :D
@ Andrew Zimmerman:
Yeah, I am not against selling software. If I had something worth selling I probably would – it’s just that most of the stuff I make isn’t sales worthy.
@ Liudvikas:
Honestly, none. I can’t think of anything else this powerful. :)
@ Jenn:
Hehe, that’s exactly how I do it. Most of my side projects consist of vague ideas or perpetual vaporware that I constantly procrastinate about. In the past my side-project productivity would usually spike up 300% right before a big exam I was supposed to be studying for. Then it would drop off immediately after.
@ Luke Maciak:
This may be really bad on my part, but a friend was once telling me that he had “no time to code anything cool” because of how much work he had to do in his GenEds. I told him that I “sacrificed” a microeconomics course by skipping every other week or so and used those days to code on my own. I got a C+ in the course because of poor attendance, but I would have never done as well in my grad school courses were it not for those truant-study-sessions back then. Sorry, Business School ;)
Isn’t programming better described as engineering? Use the theory to solve a practical problem? It isn’t the pursuit of new knowledge that drives the work here, but more of the fact to use what you know to accomplish a goal, no matter how hard.
@ Jenn:
Damn… My only good “I cut classes to do something geeky” story revolves around me and my friend blowing off high school to see Star Wars Special Edition. We didn’t know George is going to become a destroyer of childhood nostalgia back then.
@ Jakob:
Yes, very good point.
haha.. funny that you mention it.
i DO write Android/iOS-Apps for a living (not like selling them personally to the user, more like my boss signs contracts alá “Foobar needs an ‘App’ to sell his products” and then producing something ‘free’)
That dosn’t make me any fitter when it goes about selling something codelike, then you are. I still get told “write something that does X and looks Y”, i do this and then someone else makes possibly some money with it.
I have to admit that I have never done anything more than a couple thousand lines long. But still, every time I sit down and code something for myself I throw a WTFPL header on it and let it run around whatever tiny little space it might see use in (maybe up to 4 friends).
I think this is a great post, and it reflects a lot of what I enjoy about programming.
As long as you dont end like this guy ;)
http://profy.com/wp-content/blogs.dir/1/images/cyndy/code4food.gif
I get paid to drink coffee! (Incidentally, my brain is a chemical factory. It devours sugar and caffeine, turning out code as a by-product. My employer are happy to take away that cruft as well! Win-win :))
Open-source, Good Thing. I’d contribute more, but I’d be ashamed to show my poor coding skills to the world.
And projects? I got loads. I’m just not any good at motivating myself enough to get anything to a state resembling “done”. Once in a blue year I contribute enough to an open-source project that fills some need I have, and it so happens that people are happy with my help.
I probably should do that more.
Oh, and open-source and sharing is not about money, but about motivation. Motivation and gratification. Our two main goals in giving away code are Motivation, Gratification and Karma. I’ll come in again :)
I don’t think I ever could take money for a program I’d written. It would feel wrong, some way. I can get paid to write code, possibly accept donations – but somehow, charging for the finished product feels wrong, somehow. Oh…
I guess it is that + motivation. I’m not sure anything I sit down and write in my spare time is worth paying for. My employer is happy with my work, our customer(s) is happy with my work… Why can’t I? Because I enjoy hacking away at small problems, motivation leaving me when the interesting stuff is done, but before whatever it was is usable.
Better I donate the interesting bits to someone who can make something I can use out of it, rather than it collecting dust on my computer. I don’t lose anything by giving [the code] away, and I might gain some goodwill, and/or a nice android app to complement what I use for a todo-list on my computer.
I totally should do more about that. If I just could find the motivation.
This resonates well with a thought of mine. What does Google do? Search? Business solutions? Video sharing? Yes, but ultimately they’re an applied mathematics company. Efficient implementation of algorithms is what made them a giant.
I have a Github and have been actively trying to put stuff up on there. For me writing open software has a two-fold benefit. First it lets me practice my programming chops while also producing stuff that I can point to and say “Look what I made! Isn’t that cool?”. Second it’s a resume drop-in. I’m not in the job market but if the time comes I can point someone to my Github and website and let them judge for themselves.
Also I’ve given up really caring about whether programming is an engineering discipline, a science or a craft. I actually think of it as a way of life. There’s a whole mindset in there that I think is a good way to live your life. Solve useful problems, reinvent the wheel only to learn how it works, do not waste, be as simple as possible but no simpler. Hmm… I should get around to codifying those sometime :-)
Shrutarshi Basu wrote:
Coding Katas :)
@ Dr. Azrael Tod:
I mostly mentioned phone apps because that’s one of the things I haven’t really been working with, but people assume I do, or that I should. :)
@ Mitlik:
WTFPL – the most polite and articulate of licenses. :)
@ Tormod Haugen:
Yeah, I have trouble self motivating too. Although in my case it may just be plain laziness. Sometimes I sit there and go “should I work on that thing I was thinking about lately? Nope, video games.”
@ Shrutarshi Basu:
Yes, it is a way of life. Perhaps we should call it “code-do” instead of “code-fu” then. :P
@ Tormod Haugen:
Coding Katas == Algorithms, no?
Luke Maciak wrote:
Yes, and no.
http://thecleancoder.blogspot.com/2010/10/craftsman-62-dark-path.html
Some of us* even read your blaaaaaaaaarg. :P
I think this is the big thing, and not just for those in various programming-related fields. I’ve done CAD at home / after hours for fun.
I have quite a few CAD projects I’d like to “open-source,” but the same thing keeps happening; they get far enough along to no longer be interesting and / or serve their purpose, but never become quite “polished” enough that I want them out there as they are. *Sigh*
I’m so glad CAD monkeys don’t get that the way computer monkeys do. ;)
* Well, of course I’ve written some code simply for fun or because the workplace had no one else capable… but that’s normal, right?
@ Tormod Haugen:
Ah, ok. Got it. :)
@ StDoodle:
If you willingly wrote code then you are irreversibly contaminated. One of us now. :)
No seriously, I knew kids in college who somehow got roped into taking introductory Java class and would pass it without ever writing a line of code (all projects being borrowed, stolen or “outsourced” to the internet). Some people can’t and won’t write code, ever.
Answer to all of the above
I honestly feel Free and Open Source Software is good for the job market. When a company decides to rely on software due to the low software cost, they can either foolishly choose to believe that they can hire a nephew to set up Debian to run it on, and just leave it be because they think Linux is just that reliable, or they can have “gurus” in-house.
@ Lucas:
TLDR; No, just kidding. Thanks for the link.
@ Shane Simmons:
Well, yes but the nephew with Debian CD route is just a temporary cost saving. Eventually they will have to hire a real sysadmin to un-foobar their environment or eventually it will collapse upon them.
Then there is the other side of the coin: if you are a proactive sysadmin who is really doing his job well then everything works seamlessly and never ever breaks. Eventually your employer will start thinking you are unnecessary. I mean, there were no major malfunctions in years, so there is no point keeping you full time, right?
So they fire you, and they bring in the nephew. Fast forward few months and they go back to you, just this time you can ask for like double the salary.
This actually never happened to me, but I heard more than one story like this from other folks.
It’s not always like that, as might also be indicated by Jenn’s
.I find it actually hard to find acceptable workplace where you can code “for fun” – mostly they hire you to code “for profit” and that means doing as bad job as a programmer as is acceptable for a product not to fall apart immediately.
Guess that’s an eternal art of compromise we call “engineering”, but I don’t see it half as fun as doing something without these “min time/money” goals as primary, something you do for the awesome end result.
That, and the fact that I’ve yet to see a local employer who’d like the idea of making anything opensource. The only two reactions on such idea that I’ve received was “do it in your own time, and not if we’ll catch you doing that” and outright hostility.
So that leaves work as a necessary, although tolerable, because at least I don’t really hate what I do, chore to support doing what I really like in whatever little spare time it leaves.
And from that perspective, I’d rather not go to work at all, since running out of ideas don’t seem to be even a distinct possibility.
what Mike said!
“Coding” (i don’t even want to call some things here that) php-foo for advertising-purposes, creating sites that noone really would miss if they weren’t there, isn’t allways fun. It tends more to beeing repetitive and dull.
Doing the same thing with iPhone/Android-Foo isn’t that much better. Still: it pays the rent and food.
Interesting stuff can be done in spare time. (If you got any)
So just call me ‘codemonkey’!