CSCI 235 Spring 2018
Data Structures and Software Design
Archived Class
Charles Cusack
Computer Science
Hope College



CSCI 112
CSCI 125


Grade Distribution

  • There will be a midterm and a final exam.
  • The exams are equally weighted
  • You are expected to take them when they are scheduled.
  • 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.
  • 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.
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.
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?