
Analyzing Open Source Projects as a Computer Science Class
January 25, 2009Looking back at my time studying computer science I remember I learned a lot from the operating system class. The professor implemented his own variation of Xinu (http://en.wikipedia.org/wiki/Xinu) and then discussed parts of the implementation with us and left some things as an exercise for us to implement. It was one of the harder classes since there was a lot of lab work to actually complete the assignments but I still think about what we did in that class a lot and it gave me a good insight that I still use today.
Since I graduated a lot happened in our industry – as everybody knows, there are more open source projects than one can count. The lessons I learned from Xinu – looking at an architecture and analyzing an implementation – could also be learned from analyzing multiple open source projects and comparing their architecture and design, judging their quality, elasticity (how easy is it to extend and advance them and in what areas), appearance and complexity (complexity of code compared to functionality and overall learning curve complexity to start work on the project).
Analyzing existing code in such a way can be a good entry point into understanding projects and preventing the ‘can not fix because not written by me/it’s not good we have to redo this’ attitude a lot of developers have and would help giving a developer a better feel when a project can not be saved anymore.
I therefore suggest to add a class to computer science studies where the students take apart a set of open source applications and write a paper on their findings. It would be great if those findings should then also be published and available to everybody on the Internet in some public form.
Brilliant idea! Aside from experience, picking apart other people’s projects & code is definitely one of the fastest ways to learn. Thankfully modern tools can help with this effort, but there needs to be code next to the tool pictures to see what’s actually going on, otherwise it’s just a picture.
There’s no end to the more practical stuff that should be added to CS courses. I wonder if there shouldn’t be two different CS degrees: one for “architect/CS” types, and another detailing practical software construction for coder types. In the real world there are a lot more of the later and very few of the the former, probably because to build largescale software you *need* a lot more of the former than the later.
That really poses the question to me if one can be an architect if he never was a developer. Also, is it better to start with assembler and work your way up so you can apply low level concepts if necessary or is it better to enter with an OO mind?
Well, as a non-CS student I don’t think that one can learn software development or even architecture in classes.
So, I would rather see that students would join forces and start working on a particular open-source project. That will give them on-hands experience in coding but also experience in Software design in a real world because coding in OSS also means that one need to design and then integrate the code.
It would be really great if students actually start working on the open source projects they looked at afterwards. I agree that would be very good for them.
I am recently graduated… I think that’s the most natural way to learn. Babies learn to speak by trying to reproduce the sound they here. And they discover how to move there lips to reproduce the sound.
I am trying to re-learn what I mis-learn in CS courses by getting involved in open source projects and some readings.
I think students need a big picture (assembly, C, OO language, model driven) of what exists and then try themselves. But most importantly a deep understanding of an intermediate level of abstraction. That will lead to understand lower an higher levels.
North Carolina State University offered a course on OSS back in 2002 or 2003. I think it was a one shot deal, but we had people from Red Hat in the class and one of the lead developers for Pidgin (Gaim at the time) was in the class as well. We didn’t go quite as far as you suggest, but we certainly learned about the various licenses and then broke into teams with the goal of making a practical contribution to existing open source projects. By the end of it I had a pretty good feeling for the internals of Gaim; I probably could have written a paper on its strengths and shortcomings.
If you mind asking – what was the reason they canceled the class?