Looking 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.