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



CSCI 112
CSCI 125


Grade Distribution

  • Exams
    • There will be a midterm and a final exam.
    • The exams are equally weighted
    • 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 11:59pm on the day before 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.
    • Some of the stages will be graded, others will not. I am still working out the details, but most likely I will grade a fraction of your submissions each time, ensuring that I grade the same number of times for each student.
    • I will grade everybody's final project.
    • I may decide not to separate the project grades from the homework grades. If I do this, the Homework will be worth 40% and the exams worth 30%.
  • Worksheets
    • We will do various activities during class. Some of these activities will be graded as worksheets.
    • The worksheets will vary somewhat in format and method of grading. For instance, some will be actual worksheets and others will involve me checking your name off a list after completing something.
    • If you have not completed the reading for a given class, you will not be allowed to work on group activities with anybody who has completed the reading. You may choose to work with others who have not done the reading or on your own.
  • Quizzes
    There will be somewhere between 5-10 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
    There are five main criteria, not necessarily equally weighted:
    1. Preparation. I expect you to prepare for every class, usually by reading one or more sections from the textbook. If I get the impression that you are not doing so, points will be deducted.
    2. Classroom discussion and activities. This includes attendance, how engaged you are during class, whether you are contributing to a positive learning environment or causing distractions, etc.
    3. Getting help when needed (Office Hours, etc.). Contrary to what some students may believe, it is a good thing to ask your professors questions when you get stuck. Thus, I want to encourage you to do so. If you are struggling with the material, whether or not you come to get help will be reflected in this part of your grade.
    4. Colloquium attendance. You must attend at least 75% of the colloquiums to not get marked down.
    5. SALT. If you do not complete the SALT by the Friday before exam week you will lose points.

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?