Project Ideas for a Master’s in Software Engineering?
I’m enjoying the A/C and faster-than-South-African Internet access here at Makerere University in Kampala, Uganda. I’m would like to ask for help from the readers of this Weblog in coming up with a set of projects that will lead a master’s in Software Engineering student through all of the relevant theory and practice.
The goal is to design a program that addresses the problems identified in http://philip.greenspun.com/teaching/undergrad-cs , a notable excerpt from which is the following:
All student work should have the character of an engineering project: client talks about a problem; student team prepares a written plan for solving the problem; student team discusses the plan with the client; student team builds a prototype; student team tests the prototype with the client and users; student team refines the prototype in response to the testing; student team documents its results. Everything in a standard engineering curriculum can be taught with this process. For example, students building a flight simulation game might need to refer to a Physics textbook and do some practice Physics problems in order to learn enough to build their prototype. This makes it a bit tough for the faculty, who need to be clever enough to weave such courses as Physics, Calculus, and Biology into engineering projects. The payoff is that by the time the student graduates he or she will be completely comfortable with the engineering process of listen, design, discuss, implement, test, refine, and write up.
I’ve come up with some project ideas but would like to get more from other folks. Here are some as a starting point for discussion:
- Set up server, RDBMS, and HTTP server
- Build Web-interface/database-backed personal information manager (like MSFT Outlook) for a businesswoman, providing more limited access to her husband, children, secretary, including capabilities such as spamming a subset of the contacts to invite to a party (touches on data modeling, security, human-computer interaction and interface design)
- Collaboration environment for computer science literature, where a paper can be represented locally as a PDF or HTML in the database. Build full-text index of papers in the database. Support registration of multiple users and discussion of each paper. Add a way to mark up or annotate or discuss specific paragraphs (hard for PDF, maybe not too tough for HTML). Example of completed student project in this area: http://philip.greenspun.com/seia/gallery/spring2002/chip/ (touches on full-text indexing for first time)
- Web site for a department or a research group within the university. http://philip.greenspun.com/seia/gallery/spring2002/cwnonline/ (touches on collaborative content management)
- Web site for uploaded geo-coded photos and videos, mostly from mobile phone cameras, a bit similar to http://philip.greenspun.com/seia/gallery/spring2000/poa/ but with phone browser, MMS interfaces in addition to standard Web interface. Also integrate with Google Maps and other services to enable browsing by location.
- Web site for a small local business that also wants to be able to serve customers via Web/mail. (touches on ecommerce for the first time; security becomes a more serious concern if credit card numbers are processed).
Some additional smaller projects that don’t require an external client:
- Build own simple HTTP server (maybe in Java, which eliminates the need to implement threads), implementing CGI but not username/password authentication. Also leave out advanced features such as keep-alive. This is an assignment that students at other schools are generally able to do within 10-20 hours, but if we insist on strict implementation of the HTTP standard, it could take a full week.
- Build a load tester for Web sites that they can then use on their own servers. This should be built in Perl, Ruby, or some other scripting language with powerful libraries for requesting Web pages. The load tester should be capable of fetching SSL-encrypted pages and also following links that require filling out forms (so that it can simulate a user accomplishing a task). This should be a one-week project (full time).
Thoughts?
Full post, including comments