In my opinion, the homework assignments are the most important aspect of the course. They are time-consuming and challenging, and should never be left until the last minute.
I have designed the homework assignments to be difficult, but manageable. Some of the problems are straightforward, but others require considerable thought and perhaps a touch of inspiration to solve. I make mistakes, however- sometimes an assignment is much harder or easier than I have anticipated! If you find yourself struggling for days on a single problem, please let me know so I can clarify the problem, restate it, or possibly omit it. At the same time, if you find that there are other problems that you can do effortlessly in a few minutes, let me know so I can challenge you with problems you will find more interesting and educational.
The assignments are time-consuming, but not all of that time is productively spent in front of a computer. I personally find that it is most effective for me to read over the assignment as soon as possible, and then ponder each over a period of several days, until all the pieces from lecture and the readings fall into place and I've got a good idea how to solve them, and then start coding.
Starting early also gives you an opportunity to discover that you might need a little extra help from me or a TF to understand some topic related to the assignment.
If something seems too hard (or too easy), ask about it. There are no intentionally misleading or tricky questions, Please let me know if you find any, so I can clarify them.
Don't spend all your time working on one very hard problem. Along the same lines, don't spend all of your time gold-plating your answers to the easier problems.
In addition to your grade, your TF will give you feedback about your work. Word for word, these are probably the most important things you will read all semester- so study them carefully!
The assignments usually include several questions that do not require any coding, but instead require written answers. These questions specify the name of the file where you should write your answers.
Please write your answers in clear English or pseudo-code, with tables or diagrams when appropriate or requested. Use complete sentences.
Ordinary text and legible hand-drawn diagrams are sufficient- please do not feel that it is necessary to spend time and energy making your answers into works of art.
At this point in your programming career, I don't expect this to be a problem.
We will test and grade your assignments on the course HP-UX machines, so it is in your best interest to test your programs there as well. Code that doesn't work on the HPs is wrong, whether or not it works properly anywhere else.
In general, I don't care what platform you do your programming on. For some problems, however, we'll give you libraries or sample executables, and unfortunately these libraries and programs usually function properly only on the course machines. For these problems, you must use the course machines to compile and test your code.
Some of the code that we'll give you should not be changed. Don't change it.
The code we want you to write or edit should be clearly marked. Look for instructions like WRITE THIS FUNCTION in the code or consult the assignment (and when in doubt, ask).
You may notice that, in some cases, some functionality of the code that we ask you to write doesn't seem to ever actually be used by the examples or sample programs- but taking advantage of this fact (either implicitly or explicitly) is a very bad idea, because we grade against the spec.
In many programming courses, there are deductions for code that doesn't match specific consistency and style guidelines. This course does not have any specific guidelines, except that the grader should be able to figure out how your code works by reading it- it should be abundantly obvious from the organization of the code and the comments you write.