Wednesday 26 May 2010
I got an email this morning from an ASIHTTPRequest user to say thanks. Many thanks Jamie, I always appreciate these!
At the bottom of the email was this question:
“I have a buddy who is very jaded working in IT - that is what 15 years at *** (i) will do to you - and he cannot understand why anyone would make their code freely available. If you can let me know what motivates you it would be appreciated.”
Here is a slightly edited version of my response:
In my case, I think it’s partly about maximising the value I get out of work I’ve already done.
All the projects I’ve open sourced started as parts of larger, closed source projects. By the time I first release the source code, I’ve already done a huge amount of work - hopefully as part of something I’ll get paid for. By giving away code I’ve already written, I’m not really losing anything - often, it’s the opposite.
I’ve worked on so many projects in the past where I was very happy with the technical implementation but the end product was a flop (not always my fault, but anyway...). If I’ve put a significant amount of time and effort into something, and it didn’t work out the way I hoped, giving away the parts that did work is a way of recouping some of that investment. After all, the most important part of any creative endeavour is that other people get something out of it, otherwise, why did I spend the time on it?
Actually, when people use my open source software, they find bugs, make suggestions for improvements, and often teach me things I’d never have found out myself. I get lots of different perspectives on the problems I’ve tried to solve, lots of little windows into how other people think. It’s very easy when you’re working in relative isolation to end up with a fairly narrow view of a problem. Often, someone coming from the outside can spot a simpler solution easily. Think of it as having a giant, globally-distributed code review team. Something like ASIHTTPRequest is a thousand times better than it was when I first released it - so many smart people have contributed code, fixed bugs, and suggested things I would never have thought of.
All the projects I’ve open sourced have been things I found very difficult to write myself. Sometimes, the difficulty is coming up with the best overall approach to dealing with the problem. Sometimes, it’s struggling with hard to understand or poorly documented APIs. And sometimes, it’s solving a tricky problem in a performant fashion. Something like my path finding code for games represents months and months of work. It isn’t that I’m an expert (in many cases, I’m a total beginner in the area the code relates to), or that the stuff I release is a perfect implementation. It’s that if I find something difficult or time consuming, someone else probably will too. It doesn’t matter if my solution is imperfect, because if people see some value in it, they’ll probably make suggestions for improvement.
Writing software is something I enjoy doing, and I want to get better at it. I think I’ve learned more about writing software since I started putting my code on GitHub two years ago than I have at any other time in my career.
Relatedly, your friend should watch this:
(Video via: Ken Collins)
- Company name obscured to protect the innocent
Posted by Ben @ 11:14 AM