CSE 332: Data Abstractions
Programming Guidelines

Platform

You should use Java 6 and the Eclipse IDE (Integrated Development Environment), which will be particularly important in later assignments. All the software you need for the course is available for free and is pre-installed on the machines (Windows or Linux) in the department's undergraduate computing labs.

Robustness

Your primary task is to create a working, robust program. This means that your program should produce correct answers on all legal input and produce comprehensible error messages on invalid input. Keep in mind that (unless otherwise mentioned) unreasonably long running time is probably an error.

How should you ensure robustness? At a minimum, complete these steps without problems before submitting your program:

This doesn't guarantee robustness, but it's a very good start.

Coding clearly

You should always make an effort to write code that is easy for other people to read. In the real world, this is an important skill that is valued higher than cleverness or using the least number of lines/characters possible. In this class, it is important so that we can understand your program and grade it fairly. By reading through your program and comments, we should be able to figure out how your program is organized and why it works (or fails). If we can't, we will likely deduct points.

Commenting: One aspect of writing clear code involves commenting your program so that it is clear what it does without reading it line by line. Comments should be used: (a) at the top of each file to tell what code it contains, (b) at the top of each method to tell what it does, (c) at the declaration point of important variables, (d) on any lines whose purpose is not obvious.

Variable names: Variable names should conform with Java conventions (e.g., myVariableName, MyClassName, MY_CONSTANT_NAME) and should give a good idea of what purpose that variable serves in your program.

Coding simply: Although Java allows it, there is no benefit to writing overly complicated statements such as:

    if ((i = myfunc(counter++)) < num_iterations) {
       ...
    }

when they could easily be rewritten in a clearer manner:

    i = myfunc(counter);
    counter++;
    if (i < num_iterations) {
      ...
    }

Coding should not involve grandstanding or distracting cleverness. It should be like writing English sentences that you truly want someone to understand (including yourself, a few months later).

Speed

As long as your program takes a reasonable amount of time and your data structures and algorithms have the expected time and space complexity, we are less interested in small constant-factor differences in speed. Robustness and clarity come first.

Using Java Class Libraries

Unless specifically approved or directed to, you should not use Java class libraries in your programming assignments to implement data structures and algorithms that are your responsibility. This rule is admittedly in direct contrast to the real world, but a large goal of this course is to fully understand core data structures that are so widely useful that Java provides them in its standard library. Often such understanding comes from implementing them yourself.