Syllabus

Meetings & Materials

Class meetings: 4th or 5th period, four times per week: Mondays, Tuesdays, and Fridays, as well as the full 75-minute period on Thursdays.

Book: In the latter half of the course, you may find the Litvin & Litvin Java Methods book a useful reference. Both the second and third edition are fine.

Course Goals & Content

This course is about organizing data in canonical ways so that both client code (the part of the program using the data) and provider code (the part that organizes the data) can work predictably and efficiently. We’ll learn:

The course is structured in three phases, each of which will be driven primarily by frequent homework assignments, which we'll spend a lot of time working on during class. These phases concern themselves with:

  1. a variety of ADTs: lists, graphs, stacks, queues, dicts, sets, priority queues, and trees;
  2. computational efficiency, recursion, sorting, and hashing; and
  3. a variety of implementations for the above ADTs, as well as lower-level ADTs such as heaps.

You may find it useful to examine my overview diagram, which shows all the ADTs and implementations we'll talk about this term (plus a handful of extras). Amazingly, you'll understand this diagram by the end of the term!

Work Expectations

Please bring to class each day both a computer and tools to take notes. We will primarily be relying on class notes in this course, rather than a textbook, so it's important that you take notes every day. In addition, your notes will involve drawing pictures, so be sure your note-taking setup allows for this.

This class is designed to be manageable for a hard-working and focused student with a clear understanding of the material covered in the first two terms of Comp 500. It will be more work than Comp 500, with assignments that will each take several hours. They are paced throughout the term in such a way that you should be able complete each one by devoting about an hour each day outside of class time. However, there are two important things to note:

It’s inevitable that variations in prior experience will affect how much extra work needs to be put in by each individual student. I try to do a good job aiming the course at a level that’s achievable for everyone, but for some people that may involve a pretty tremendous effort, while others can do it fairly readily.

If you are struggling in this class, please come talk to me as soon as possible. I'm always here to support you, and I know everybody comes in with different background. In addition, the schedule for this course is not set in stone, and if many people are struggling, it can be modified to keep it manageable for the majority of students.

Whom (and How) to Ask for Help

If you need help with anything, you can post to Piazza, consult with other students, consult with a teddy bear (really! It works!), search online, or meet with me. Piazza will be the class's main medium of communication outside of class time. Please follow these guidelines:

I try to answer questions promptly on Piazza, though I generally don't answer late in the evening or on weekends.

If you'd like to talk with me in person, I'm available in Morse 103 during conference period each day, as well as my office (Morse 102) during advising period. You are always welcome (and encouraged!) to drop by unannounced in conference period or advising period — no need to check with me in advance.

If you'd like to meet with me outside of conference period, please email me about a day in advance. I'm often free during 3rd, 6th, and 7th period, since I don't teach then.

Attendance

Please ask by email at least 15 minutes (but preferably 15 hours) in advance if you would like to request Personal Time. Requests will generally be approved but I do have the right to decline any request.

Please get to class on time. Three unexcused tardies count as one unexcused absence. If you're wondering about your status in this regard, please ask. Being off-task during class time is distracting and will count as an unexcused tardy.

Grading

Every assignment in the course is worth some number of points, typically about 25. There will be four quizzes throughout the term, each worth about 40 points. There will be one final exam, worth something like 150 points. All points are equivalent, and your final grade will be computed as the percentage of total points earned out of all points possible. Here's the mapping to the PA grade scale:

PercentageGrade
[93–∞)6
[84–93)5
[76–84)4
[68–76)3
[60–68)2
[45–60)1
[0–45)0

Late work will incur a penalty of 10 percentage points per 24-hour period by which it is late. (For example, a submission half an hour after the due date incurs a 10-percentage-point penalty; a submission 24.5 hours late incurs a 20-percentage-point penalty.)

A set of assignments near the end of the term will be designated as leave-one-out assignments; from this set, you are free to not turn in one assignment of your choice.

Unless stated otherwise, everything is due 15 minutes before class time on the due date specified.

Document Authority

There are a variety of sources of information about assignments in this class. They should all agree, but sometimes these systems get out of sync by accident. If you find a discrepancy between two sources of information, please email me immediately (or post to Piazza) and let me know; I'll resolve it right away. Once you've alerted me, you should proceed in the meantime with the most authoritative source of information. Here are a few, listed from most to least authoritative:

Baseline Assignment Requirements

Unless explicitly specified otherwise, all of the following expectations apply to every assignment you do for this class:

Working Together

Learning and coding are both collaborative arts. However, any work you turn in must be your own work (or, in a group assignment, the work of you and your partners together). You are free to consult with any of the resources mentioned above, but you are required to credit any assistance you receive, in writing, in what you turn in. You should be prepared to explain any part of anything you submit, without the assistance of anyone else, even partners. It is your responsibility to make sure that you fully understand the work that you create, alone or in a team.

There are two kinds of working together: Collaboration and Plagiarism. The former is usually encouraged; the latter is forbidden. But when you're starting out, it can be hard to tell the difference between them. The two essential distinctions have to do with transformation and attribution:

Transformation
The artifact (writing or code) that you submit must be entirely your own work (every last word of it). Copying someone else's work and making surface-level changes to it (like renaming variables or rewriting comments) is not acceptable. Learning from online or book sources, or from working through related problems with a friend, is accepted and encouraged! The point is to get the ideas into your brain, to understand them, and then transform them into work that is all your own. It's no good to bypass your brain and just copy things
Attribution
If any ideas embodied in your work were provided or inspired by someone or something other than yourself (or your team), you must cite this source. In written work, this belongs in a footnote or citation; in code, this belongs in a prominent comment.

Examples of positive collaboration, which is encouraged!

Examples of negative collaboration, which is prohibited:

Plagiarism, which is prohibited by school policy:

Plagiarism is the process of (intentionally or unintentionally) presenting the work of someone else in such a way that a reader might assume it was your own. Directly copying someone else's work and performing only surface-level modifications to it is plagiarism, even if you credit your source. Here are some examples of plagiarism, which is prohibited by the school — note that this list is non-exhaustive:

Penalties for plagiarism or cheating include formal disciplinary action, a zero for the relevant assignment, and possibly more significant impacts on your grade for the course.

If you have any uncertainty about a particular instance of working together, make sure to check with me first.