You are expected to take them when they are scheduled.
Homework
There will be a veritable plethora of homework assignments.
The homework will consist of problems and/or programs. Some will be larger than others, but they will all be equally weighted.
Programs are always due no later than 8:30am on the due date.
Please review the relevant sections of the Policies
page for additional details about my expectations for homework assignments. Also, see below for more details about how programming assignments are graded.
Project
There will be one ongoing project throughout the semester in addition to the homework assignments.
You will construct an application in several stages, adding functionality and features at each stage.
You are expected to complete each stage by the deadline. In other words, projects cannot be submitted late.
Projects are due at 8:30am on the due date.
Quizzes
There will be somewhere between 9-11 quizzes during the semester.
They may or may not be announced ahead of time. Some of these quizzes will be given on the
day a Homework or Project is due, and will cover the relevant details from the given
assignment. This is to help ensure that you understand what you are turning in.
Miscellaneous
You must attend at least 75% of the
Computer Science Department Colloquiums or your final course grade will be lowered by a third of a letter grade (e.g. a B+ becomes a B).
Programming assignment grades
Program grades are usually based on the following criteria, as specified on each assignment.
For each criteria, I give a list of the sorts of questions I am thinking about as I grade.
The lists are by no means exhaustive, but should give you an idea of what I am looking for.
Some assignment may give additional criteria.
Correctness:
Does it compile?
Does it run properly?
Does it do everything according to the specification?
If specified, are the classes/methods/functions named properly?
Are the parameter types, etc. correct?
Is the input/output correct?
Did you follow all of the instructions?
Design:
Is each of your classes cohesive—that is, does each class represent one
specific and well defined thing, and does each method do one well defined thing?
Does your code involve a low level of coupling?
Is your GUI separate from the main program logic?
If applicable, is your code extendable?
Did you utilize inheritance where applicable?
Are you utilizing the appropriate data structures?
Documentation:
If a specific guide was given for documentation (e.g. use Javadoc comments),
did you follow it?
Does each file contain the filename, author, class, date,
and an overview of what is in the file?
Are pre/post conditions given for each method/function?
Is each class and segment of code documented?
Is each variable/parameter/field described?
Style:
If you were given a specific style guideline to follow, did you follow it?
Are functions/classes used when appropriate, including proper and
intelligent use of variables, return values, and arguments?
Do the class functions make sense?
Are the names for variables/functions/classes descriptive?
Are loops indented properly?
Is the code neat and organized?
Has any extraneous code been removed?
Is your code understandable and as simple as possible?
Are errors dealt with in a sensible way?
Do you use complicated and/or long code when short and simple would suffice?
Write-up or Analysis:
Is it in the specified form (README file, Word document, Text document, HTML)?
Does it have the required information (charts/diagrams/examples)?
Is a complete analysis performed as specified?
Did you fully answer all questions?
Is it well written (organization/grammar)?
Performance/Efficiency:
Is each function implemented as efficiently as possible, both in terms of running time
and code length?
Is the overall runtime as it should be?
Did you utilize the proper data structures and algorithms for each given task?
GUI/Interface:
How easy is it to use? Does it look good? Is the input/output clear?
Is the GUI user-friendly? Is it clear how to use it?
Are all inputs handled properly? Are errors dealt with in a way that
allows the user to fix their mistakes, including error messages
where appropriate?
Learning Gains:
Does your code/program demonstrate that you learned something new? Did you do the bare minimum or did you go above and beyond to learn new things? Does your code/program "wow" me?