Why Open Source?

I’ve always held the belief that in order to learn something, books and theory should only be the very first steps, and only for a very short time. In order to stay motivated to really understand something, you need to get your hands dirty and try things out. If you wait until you feel “ready”, or worse, wait for the “perfect” moment to start, I can ensure you this moment will never come.

I have found myself stuck there more often than I’d like to admit. Starting yet another book about topic X, or solving even more toy programming exercises in language Y until I just lost interest and dropped the whole idea again. Starting to contribute to open source software means that you (a) immediately join a group of peers and (b) work on something that actually gets used out there. These two facts provide you with an immense devotion to stay on track and continuously improve.

So, in order to sharpen my programming skills, I have decided to dive into the world of open source programming. This should get me up to speed with many technologies I have missed so far:

  • Python in general
  • GitHub
  • Working in a team distributed around the world
  • Design patterns in object oriented programming
  • Software testing / continuous integration
  • Code style

Joining the open source community has moral reasons too, but additionally, it develops your coding skills on the fast lane, because it comes with the following invaluable benefits:

  • You will work with and learn from programmers far smarter than yourself
  • You will broaden your horizon by reading code, good and bad, written by many different programmers, in many different languages and styles
  • Instant reviews of your own code. The feedback directly improves your skills
  • Relationships across the globe

I recently read Cal Newport’s book “So good they can’t ignore you”, which has the central message that in order to find a satisfying job, you have to first build rare and valuable skills to offer in exchange. You acquire these skills by (a) deliberate practice, which means always stretching yourself beyond what’s comfortable, and (b) instant feedback while practicing.

Joining an open source project provides these two building blocks better than any other alternative I can think of.

Of course, this world is big and scary for new guys, but luckily, there are large and small existing projects, and it’s not hard to find a welcoming community that can offer guidance during your first steps.

I, for example, have found the Open Study Room, a repository for a website that offers a league system for the Asian board game Go. It is maintained by a small team of developers who welcome any help, and were very friendly and willing to respond to questions.

Steps to take before

Since the open source community relies heavily on git and GitHub, it is almost indispensable to become familiar with these tools to be able to collaborate effectively.

After that, it might make sense to proceed on two tracks in parallel: Choose both a personal project and an existing community project, so that you can experiment “in private”, as well as learn how to code in large, distributed teams. Simultaneously, it might make sense nonetheless to read a book or two that came recommended.