The purpose of the semester project is threefold:
- Provide you the opportunity to work in a team on a non-trivial problem in a distributed, asynchronous fashion
- allow you to make use of the techniques being covered in lecture related to requirements, design and implementation
- as well as tackling issues of concurrency using both the traditional threads, locks and shared data approach common in languages like C, C++, C#, Java, python and ruby as well as one non-traditional model of concurrency such as Scala's agent model, go's goroutines or the new concurrency primitives found in Clojure.
The first step in this process is to form a team and send Prof. Anderson an e-mail message listing the members of your project team. Do this as soon as possible. To help with this process, you can make use of the wiki located here: <http://epic.cs.colorado.edu/groups/5828projectteams/>. Desired Team Size: 3 to 4 people; CAETE students, who will be working alone, can skip this step. (If you're a CAETE student who would like to work with an in-class team, use the wiki to find a team!)
The second step is to discuss among the team how you will work together and what tools you will use to coordinate your design/development activities. For instance, you may want to take a look at the tools provided by assembla.com, the community edition of RallyDev's tools, the Student and Startup Edition of FogBugz, or even 37signals BaseCamp. (If you have other suggestions, let me know and I will point to them here.). Regardless, pick a system and get all of your team members signed in and then use the system to complete the third part of this assignment.
The third step in this process is to select a project idea. In particular, you need to develop an idea for a system that can be developed by a team of three to four people over the course of roughly eight to nine weeks. The major constraint is that the project must make use of at least two different threading models, the traditional threads/locks/shared data model and one non-traditional model (such as those used by Scala, go and Clojure). You should pick a project idea that has some form of concurrency that is part of the application domain, such that you will be able to model the requirements of that concurrency using the techniques we've discussed in lecture; you will need to make use of at least two programming languages that support the two different models of concurrency that you have selected.
You should include as much detail in your proposal as possible: basic information about the problem domain, why concurrency will be needed to solve the problem, how you envision splitting the work of the project across the team, and anything else you think is relevant to "selling" the idea. In addition, as we will be applying techniques from Head First Software Development during this project, you will want to find an idea that you will be able to generate user stories for; for an N person team, you will want to be able to generate at least (N*2) ± N stories.
Example project ideas include information systems that have the ability to spawn and monitor long running computations of some kind, information systems that monitor multiple streams of real-time data, games in which multiple entities may be performing actions at the same time, social network websites that provide their users with information about the activities of other users logged into the site at the same time, etc.
The topic proposal is due for teams of in-class students and in-class plus CAETE students on Friday, March 5th.
The topic proposal is due for teams consisting only of CAETE students on Friday, March 12th.
Teams that do not provide enough detail in their topic proposals may be asked to work on a revision of their proposal with tight deadlines. The basic goal, however, is to ensure that all teams have an approved project idea by the Monday of the 9th week of class (or by the Monday of the 10th week of class for CAETE-only project teams).
Any questions? Send them to Prof. Anderson.