next up previous
Next: Freezing the Specification Up: Introduction and General Overview Previous: Introduction and General Overview

Warning and Encouragement

This is a large project that has been carefully designed over several years to provide a challenge to every level of programmer in the class. Each part will take the full time you have been allotted to complete. (In all honesty, many of you will feel that we have not given you enough time-yes, even you hot shots.) But don't panic! There are plenty of ways to complete each part on time for full credit.

Here's the secret: start early and start by spending a few days sketching out what objects/classes you will use and how these objects/classes will fit together. You are encouraged to discuss your ideas with classmates (but don't write any code together!) and to bring your design ideas to the TAs during office hours, or on Piazza, for comments/suggestions. The most successful students have spent time carefully planning their projects. Those students who do not devote any time to design are the one most likely to receive a poor grade.

Many of you have probably been able to sit down and do many of the projects in the lower level classes in an evening or two with little or no planning. Well the honeymoon is over. If you don't start early and spend time carefully planning each part, you will be very hard pressed to get a fully working solution. Good design and testing, not Mountain-Dew-Code-A-Thons the night before the due date, is the key to surviving 420.

Despite the quantity of work required to implement these projects, most students, when finished with CMSC420, agree that the experience made them better programmers. The rest of your projects this semester will be implemented in the Java programming language. It is possible to go from having almost no Java knowledge to adding `professional-level Java developer' to your resume in a single semester by a single course. Not only will you learn to exploit the Java API data structures you'll be implementing, we'll be providing some tips, tricks, and general advice about how to write not only good Java code but how to develop good object-oriented design in general. So, don't let the programming component of the course scare you off; it will be worth it in the long run-we promise.

Each part will typically involve two major components: coding a functional data structure and actually putting it to use. For example, in the past we have had students implement a Fibonacci heap, and use it as the priority queue component of Dijkstra's algorithm. The first project will require that you write what has come to be known as a command parser, which will allow us to pass input to your program as a series of commands (e.g., ``add (x,y) to your B+ tree''). Each part will introduce a new set of commands you will need to handle, so updating your command parser will be another component of each of your projects.


next up previous
Next: Freezing the Specification Up: Introduction and General Overview Previous: Introduction and General Overview
MM Hugue 2019-05-28