In 7th grade my computer lab teacher discovered that he could write basic on the Commodore 64s we had in the lab. He decided to teach us to type by having us program simple games. From that point on I was hooked.I moved from Basic to C after a few years. I think the early beatings I took from C made me a better programmer. I spent hours debugging programs before I really understood what I was doing. By the time I got to college I was well versed in tracking down bugs. In college I had to switch to Pascal for a while but I convinced my professors to let me do my work in C after my first semester. Around that same time Linux 0.99 was finding its way on to some of the PCs in the main computer lab. A number of students who had friends at other colleges had started to play MUDs and they installed Linux so they could host dungeons. I happened to be in the lab one day while someone was trying to get a MUD compiled and I thought “Wow, the source for all of this is just out there for anyone to see and change?” Looking around for MUD source led me to the open source world. I was soon looking at the source for UNIX tools and at the time it was a great match for my C background. I learned a lot by just looking at the tools and trying to figure out why things had been done one way and not another.
I start a lot of projects and then don’t have time to come back to them but there are a number that I focus on. A couple of those projects are my HTTP live streaming segmenter and Google Analytics Dashboard for WordPress.The HTTP live streaming segmenter implements the pantos http live streaming spec. I used ruby for the project and it heavily leans on FFMpeg which is an awesome open source project. I created the project because Apple published a great spec for it but didn’t release any source to actually implement it. This is a good example of a project that I started with no goal outside of building something and learning but later found use for in business projects. Over time a few commercial businesses have sprung up that implement the same spec, Transloadit and Zencoder to name two, but plenty of people still find my open source project useful. The Google Analytics Dashboard plugin is something I started because I got tired of having to log into multiple places to see blog stats. It embeds a partial view of your Google Analytics stats inside your WordPress dashboard using the Google Analytics data export API. These days maintaining the project helps me keep my PHP knowledge from completely atrophying. This is a project I thought would die when Automattic introduced their own stats collection and display system but interestingly enough it became even more popular.
The first and most important advice is to do something, anything really. I help evaluate potential employees for my company and if a candidate hasn’t pointed us to something like github or Google code I go searching. If I can’t find code I search for any other contribution they may have made to a project even if that is just helping someone on a mailing list or on StackOverflow. The primary thing I’m looking for is love of the game and you don’t spend hours working on or helping with an open source project without some of that.My first contribution to an open source project was to Apache Tomcat in 1999. Back then I had to walk up hill both ways to get a commit! Today I don’t like to hear any excuse about getting involved because it is so much easier for most projects. Github, Google Code, Codeplex, StackOverflow, etc have made the interaction effortless enough that there is really no good reason to not be involved in some way no matter how small it is. If you are completely new then participation is probably the best starting point. You can participate by answering questions or providing opinions. It can be hard to get an out of the blue commit accepted into a project. I see a lot of people complain that they tried to contribute code and it was rejected or just ignored. That happens to everyone, right now I have two pull requests to large projects on github that have been sitting for months. Being part of the community around a project before trying to contribute code can help so it is a good place to start. If you can make the time then participating in something like rails rumble or node.js knockout can be great. Coming up with something to do for the contest can help you think of ideas to hack on. Some of those ideas can turn into longer running projects and on top of that you will probably learn something new. If you just can’t bring yourself to interact with people you can always start your own project. Fill a need you have, even if there are other projects filling the same need. There are at least two major WordPress plugins that do a lot of what mine does but plenty of people still find mine useful. If you can’t think of a need then find a spec and implement it or find an idea that someone else has and make it happen or expand on it. Just do something.