We run a 3rd year project for 20+ students (teams of 3) which lasts 4 weeks and lets them choose how to fulfill the task. To make it more fun we modify the requirements a week before the deadline, the hope being that if their work is well structured, the modifications won't be too onerous.
We also offer 4th year projects for individuals which last half their final year where there's considerable scope for flexibility - within reason they can come up with their own project titles. Here are 3 examples -
Other places (computing departments in particular) offer more project coursework - e.g.
- iPod Touch development (podcasted lectures are online)
- Producing add-ons for free-ware (GIMP, Mozilla, etc)
Such projects often appeal to students (and in retrospect are thought to be very useful). Students mention projects in CVs and they're a popular interview topic. They bring together many issues at the heart of Software Engineering but present difficulties to staff
- Project acceptance - how carefully should the student's suggestions be assessed?
- Evaluation - how can dissimilar projects be compared fairly?
- Copying - how much copying is there in an adaption? Should suspicions be raised if the source of a very similar product appears during (or just after) the student's project?
- Staff Workload - if the students have freedom of language, platform, etc, help is going to be hard to provide.
- Student non-productive work - if the student is trying to contribute to a big project there might be required procedures, packaging, version control, documentation, etc that take up too much time
In our situation we would like to bring some aspect of engineering into the project (for years 1 and 2 anyway) but WebApps are so prevalent nowadays that one could almost consider them as examples of basic programming so one option might be to use GoogleApps Engine as a platform. The online documentation tells people how to download the software and has a staged example which is easy to work through (Java and Python are supported). The resulting web-page + database back-end can be run on the user's machine. Students could then work on their own ideas and upload the result to the GoogleCloud. A set of standard project titles could be offered for the less ambitious.
- Using open-source solutions to teach computing skills for student research (David Allbritain - "In conclusion, a course on programming and Web development designed specifically for psychology students provides students with technical and problem-solving skills that they are then able to apply to their own work and research. An open-source operating system and open-source software contribute significantly to the feasibility and success of the course, both technically in the implementation of the course and pedagogically as well")
- Evaluating Student Participation in Open Source Software Development with an Annotation Model (Robert Charles and Yonglei Tao - "A primary goal for computer science instructors is to prepare students for the real challenges they will face in professional software development. ... As technologies evolve, future developers are more likely to work from existing or partial systems in order to build new ones. Hence, it is important for students to gain experience with complex programs they cannot possibly redevelop from scratch ... We have also demonstrated how this model can be used to evaluate the participation of student/user in a collaborative program development.")
- FOSS 101: Engaging Introductory Students in the Open Source Movement (Ralph Morelli and Trishan de Lanerolle - "Course content was divided between technical topics related to the development of free and open source software (FOSS), including programming in PHP and MySQL, and readings and assignments related to broader issues about the societal impact of the open source movement")
- Student participation in open source projects (A professor's perspective) (Heidi Ellis - "When two groups collaborate, they typically do so to accomplish common goals or to work together towards goals for both groups. In this case, the goals of the two environments differ. The open source environment seeks to create a product that meets user needs. The academic environment seeks to produce students with a certain knowledge and skill set. ... ")
- Teaching Software Evolution in Open Source (Maksym Petrenko, Denys Poshyvanyk, Václav Rajlich, and Joseph Buchta - "Our students have practiced perfective software evolution on open source projects with sizes up to 68,000 lines of code without difficulty ... We assign each project to a team of four to six students. Each team has a project manager, a PhD graduate student assistant responsible for the change requests and supervision of team members. Project managers also act as customers when change requests need clarification, and they resolve team member disputes. ... At the beginning of the course, we select several open source software systems written in either C++ or Java. ...After the course infrastructure was in place, each project team required roughly six or seven hours of the manager’s time in an average semester week and around 10 to 12 hours in the weeks when build releases were due. ... Students’ grades are based on individual effort, group interaction and communication, and the extent to which they follow the required SC process. ... Our experience with teaching software evolution over a two year period shows that it is possible to use large-size open source software in course projects. After being introduced to the systematic methodology of software evolution, students can effectively plan their efforts and make high-quality evolutionary changes.)
- Computer project Management
- "Good practices for Educational Software Engineering Projects", van der Duim, L. et al, Proceedings of the 29th International Conference on Software Engineering, May 20-26, 2007.