Recently Joel Spolsky of Joel on Software wrote an article on capstone projects at school. There are a lot of things he mentioned in his article that I find to have a lot of truth in them. I can not agree with everything he says but I think his main point on the importance of a well run capstone class is something I can truly get behind.
I know that many people at Missouri S&T have a problem with the capstone class, myself included. I do not hate the idea of taking a capstone class itself but rather how the school currently runs its capstone program. According to Joel’s article many schools don’t ever give you development skills at all. I guess this says something about our school since it actually gives you two separate classes, Software Engineering, and then the capstone. I think the Software Engineering class does a good job of introducing you to different planning styles and methods for running a project while getting you started in working with documentation, a small group, and a fairly easy to manage program. The capstone should most likely be an expansion on this class to go more in depth, get your hands in on a real world project while having real world expectations of students.
The current senior capstone class feels like a repeat of Software Engineering, which to a point, can’t be helped since it should be an expansion on it. However, after only a few weeks into the class it seems like there is hardly anything different about the class other than the teacher itself. One of the largest reasons for this is that they do give you a larger scale project to work with but not any more time to do it in. This causes your documentation period to take up 2/3 of the semester and giving you almost no real work time. Many other majors have a year long capstone allowing them proper time to plan and implement their project. I think that the Computer Science department could learn greatly from t his. If the CS Capstone was a full year course you would be able to take an entire semester to get planning and documentation completed and have an entire semester to implement scheduling and development.
The only points in his article that I really take any argument against is that too many school are stuck teaching subjects from the 80′s such as linear algebra. To an extent many of these classes need to be taught and exposed to students. If we were to only teach students how to pump out code that worked as fast as possible the market would be flooded with even more bad code than it already is. It is important for a programmer to understand how the inner workings of what he is creating works and how to make it more efficient. Too many schools these days are making a move to teaching Java as a primary language which can be dangerous. While Java is a powerful language it doesn’t teach you a lot of fundamental basics that a lower level language will teach you. This is why I am glad that Missouri S&T still teaches using C++ as a starter language. It is a high enough level language to teach you newer programming practices and Object Oriented Programming with out losing touch with the importance of some of the lower level management that is sometimes required. I do however think that the school does need to offer a larger selection of languages to learn because once you attend school here you are pretty well pegged into using C++ or C for the duration of your education.