Learning from Open Source

In all of my passed years in university and development teams, I was wondering if our style of software development is correct or not. I was comparing ourselves with those development teams in well-known companies and universities in industrial countries specially in United States (I live and work in Iran). There was no direct way to learn from or contact them.

The situation was continued till days that open source spread more widely and internet connections get more accessible in my area of study/work. While I was a Delphi developer and while in first years of C#/ASP.NET, the only open source projects I could find was Linux kernel and other similar projects. These projects was almost written in C and were very large to me to understand and compile.

Fortunately open source projects in C#/ASP.NET has after then increased rapidly and people like me find the chance to get familiar with them. This is exactly the time that I begun to learning software development lessons from famous .Net open source projects like NHibernate, log4net, NUnit, Cuyahoga and so many other ones.

After then I started to download, deploy, use, collaborate in community, build and understand them. By doing each activity I learned a new thing, One of the best learner projects I ever encountered is Cuyahoga. Cuyahoga is an open source CMS that is based on C#/ASP.NET MVC and NHibernate. It works fine with Mono and MySql too. By Cuyahoga I got introduced with Git, a decentralized SCM. Cuyahoga project itself uses some other nice open source .Net projects either internally like NHibernate or for its website and community. For example it uses YetAnotherForum.NET as its forum software, ScrewTurn Wiki for wiki, NAnt, NUnit and finally NHibernate.

Which OSS to contribute?

My first and only contribution in an open source software was OTRS. In there I translated, helped in localization, tested, answered to questions in mailing lists, and write some blog posts about it. My progress in OTRS was good but the problem was that OTRS was written in Perl in Linux platform but I was a C# developer in Windows platform. So I will never could contribute in its development. Additionally OTRS could not help me to increase my C# and .Net skills.

Consequently I decided to contribute in a C# open source project. As I thought learning a CMS could be fascinating, started to work on Cuyahoga. Cuyahoga is an open source ASP.NET MVC and C# project that utilizes NHibernate as its ORM. Installing and using Cuyahoga for a while learned me that Cuyahoga is an ASP.NET MVC project and will force me to learn ASP.NET MVC. Because I was going to deepen my C# skills and didn’t want to hang with ASP.NET MVC and its deployment issues, I decided to find another OSS to contribute.

Many folks at StackOverflow believes that best open source project to contribute is a project that you use it in daily tasks. Some of OSS that I use regularly are Firefox, ScrewTurn Wiki, NHibernate, Ajax Control Toolkit and Pidgin. Among them just NHibernate and ScrewTurn Wiki are almost based only on C#. So I’m going to take a closer look at their contribution state and their community to find out which of them is better to me to contribute.