Tuesday, October 03, 2006

[Misc] Learning from and with Open Source Projects

Diomidis Spinellis writes in the recent IEEE Software Journal an article "Open Source and Professional Advancement" which I can highly recommend to all students.

In short, his argument is, that the best way (but for sure not an easy one) to improve skills in software engineering and programming is to try to participate in (prestigeous) Open Source projects. I personally can only support this point of view. First of all, students can learn the dynamic of a project of considerable size, learn how communication is done, how sourcecode is managed, how releases are planned, how bugs are tracked and so on. And this on a "real scale".

When they go deeper, they have to learn to read sourcecode from other developers, which is an invaluable skill. They can learn how very good developers program by seeing the results, but also how certain bad designs can affect the quality of code, and they can try to help fixing that.

Besides these skills, working in an Open Source project can be a very satisfying experience. Particularly considering the fact, that the work done for the project (if it is good) is actually used for probably thousands of production systems and not "dumped" like the typical projects during study.

Of course I do not want to give the impression that it is kind of an easy route to just jump in as rookie and develop some extensions for Tomcat. It is not fast money. It is not. Most probably it will taks considerable time to understand prominent OS projects from the user point of view, not to speak of the developers point of view. Even so, the first efforts will probably be rejected by the community, probably it is very hard to understand the sources of the project.

So we speak of a procedure that has a time frame of years, not months and is only recommended for the talented and spirited student deeply interested in producing first-class software. But for those it is probably the best way to get insights and skills that can be hardly acquired otherwise.

However, even if eventually the motivation is not strong enough to actually contribute code, it pays off to go the step beyond beeing "simple user" and going in-depth of a project. The learning effect is still significant and also other ways of contribution are typically highly appreciated (help in forum/wiki, writing tutorials, ...).


Anonymous said...

i strongly agree with the value of open source projects for learning how to develop good software. unfortunately many of the os projects lack documentation for programmers and architects which makes it very hard to get started. this helped me to get started:

- start with a small project where you can easily browse the whole directure structure and get a feeling about how software releases are managed, the software is structured, and not get completely frustrated with subversion.

- participate in projects (like firefox or typo3) where an extension system is build on top of the systems core. try to write your own little extensions but look even more at the source code of the extensions others did.

- go on to the core: to understand a project it helps me normally a lot to do kind of a revers engeneering. try to make a documentation of the system architecture by your own (eg. by using good uml tools). this will give you many insights of the system and often shows areas where things could be improved.

- now your're a master guru.


Alexander Schatten said...

Well, I am actually not sure, if you are a "master guru" afterwards :-)

But I sure think that the recommended steps here are a very good trail towards this goal...