In the final month of the semester, you will design and implement a project of your own. This is a free-form assignment that we will negotiate as you continue through it. Basically, if you have been thinking that there are some particular programs that you think would be interesting, this is your chance to complete one of them — and get credit for it.
There are two technical restrictions, neither very restrictive, for your project concept.
It should use Java's Swing user interface library, including at least some components or features of Swing that you haven't used for previous assignments. Basically, realistic programming involves figuring out how to do new things based on documentation, and so I want your project to include this.
It should use at least one Map or Set structure (either the binary tree implementation or a hash table implementation). This isn't a major deal — any major program is bound to need a Map or Set somewhere.
The biggest hurdle in selecting a project is bound to be one of
determining the appropriate scope. One guideline in this is the point
value assigned: While most assignments are worth 30 points each,
this project is worth 150, five times as much. You are likely to be
tempted to be overambitious, striving to implement something that can't
be done within a semester. On the other hand, if you overcorrect for
this tendency, you will end up with something too simple to merit the
project. Ensuring that your project is appropriately
difficult will be my primary concern as we discuss your plans.
The project has four major checkpoints for monitoring progress.
Wed 12 Nov: I will meet with you individually to discuss your project plans. You should have at this point at least TWO alternative project ideas ready to discuss with me. (You do not need anything on paper at this point.) We'll look at both possibilities and determine which project is more worth pursuing. (Although this is unlikely, if none of the possibilities look promising, you'll be sent back to the drawing board, and we'll schedule another appointment to discuss others.)
Please come up with an idea for a project that you'll enjoy doing! You'll be spending a lot of time working on your idea: You don't want to spend that time on something you find to be drudgery. There is a plenty of freedom in this assignment to find some project that you will enjoy working on.
In this, as in the future checkpoints, it is your responsibility to have completed the checkpoint by the appointed time. Note that your discussion with me may reveal that you have further work to do; you will still be responsible for completing the work by the deadline listed on this handout. For this reason, I suggest that you talk to me well before the deadline, rather than waiting until the day of the deadline.
Note that whenever you have an appointment scheduled with me in
connection with a deadline, missing or being late for the appointment
will count against your
attendance/participation grade for
Wed 19 Nov: I will meet with you individually to discuss your project design. Your design includes both the user interface (including some mock-ups — probably hand-drawn — of important windows to be created by your program) and the class structure (including a list of the classes you intend to include and some illustration of their relationship).
Do not start coding until you have discussed your design with me. We may decide during this meeting to alter the scope of your project, and also I may suggest some major design revisions for improving the program structure.
Wed 3 Dec: At this point, the programming process should be halfway complete (or more). Your program should be in working order; it may have huge gaps in functionality, but running it should demonstrate how it will work at least in outline.
I will meet with you to review your progress. You should not bring anything to the meeting, except to be prepared for code review (electronically, not on paper), and to give an informal demonstration of your program running — though probably only partially complete.
Tue 9 Dec (reading day): You will demonstrate your working project as part of the computer science program's projects day. You will have a computer set up where you will demonstrate your program to any students or faculty who stop by your station.
By the time of the demonstration, you should also send all the components of your project to me as attachments to an e-mail. If there are many components, feel free to bundle them together into a ZIP archive.
Your grade will be based on the following criteria:
The project works correctly.
The project's user interface is well-designed.
The code underlying the project is well-written, including comments where appropriate.
The project is of an appropriate level of difficulty.
You come to each appointment well-prepared with good evidence of having made the progress appropriate for that checkpoint.
You present the demonstration in a professional and informative manner.