In this course, each voice in the classroom has something of value to contribute. Please take care to respect the different experiences, beliefs and values expressed by students and staff involved in this course. My colleagues and I support UMass’s commitment to diversity, and welcome individuals regardless of age, background, citizenship, disability, sex, education, ethnicity, family status, gender, gender identity, geographical origin, language, military experience, political views, race, religion, sexual orientation, socioeconomic status, and work experience.

View this syllabus as a guide to the course. It provides important information regarding the course, its assignments, policies, grading, and available university resources.

You should read it once, thoroughly, at the start of the semester. However, this document should be considered a working document. It is possible throughout the semester that a topic may take more time than expected, topics or assignments may change, or some material may be canceled or delayed due to a snow day or another emergency. If that is the case, the syllabus and schedule will be updated and a revised version will be posted on the course web site.

Course overview

Description: This course introduces foundational abstract data types and algorithms. The main focus is on the use of data structures in designing and developing programs to solve problems in a variety of domains. Specific topics include lists, sets, maps, graphs, stacks, queues, searching, and sorting. There will be weekly programming assignments, programming and written exercises in lab sections, regular self-assessments, and a cumulative final exam.

Prerequisites: C or better in COMPSCI 121 (or transfer credit, or appropriate score on the placement exam). This course is not a substitute for COMPSCI 187. If unsure of whether this course or COMPSCI 187 is more appropriate, contact instructor. 4 credits.

Objectives: COMPSCI 186 requires students to engage in extensive problem solving and critical thinking. In particular, through a project-based curriculum, students expand their ability to design, reason about, and implement non-trivial algorithms and data structures in a general-purpose programming language.

As the course progresses, project scope expands, and the amount of explicit guidance that students are given is decreased – to succeed, students must incrementally improve their programming ability. Thinking in abstractions, planning large (multi-file) programs, and learning to understand why a program does (or doesn’t!) work as expected are activities that require significant critical thinking and problem solving.

In addition to programming projects, students complete take-home problem sets, about six group POGIL exercises, about six half-hour self-assessments, and a final exam. Among other things, these activities serve to evaluate other aspects of critical thinking and problem solving that are better assess in a written format. For example, students might be asked to determine the asymptotic running time of a snippet of code; to show how a particular algorithm would operate on a given data set (such as a graph traversal algorithm); to identify logical errors in code; or to compare how operations defined by set theory and by a programming language’s set implementation differ.

Learning outcomes

After completing this course, students should be able to:

What, when, where, who

COMPSCI 186: Using Data Structures
Tuesdays and Thursdays, 2:30–3:45 in HASA 20
Labs meet synchronously online on some Mondays (see schedule)

Instructor: Marc Liberatore (please call me “Marc”)
Email: (though see note below about Campuswire)
Phone: 413-545-3061 (on campus: 5-3061)
Office: Computer Science, Room 318 (I will not be in my office much, if at all, this semester, due to COVID)
Office hours: Thursday at 9:30am (see Campuswire for links)

Graduate Teaching Assistants (TAs):
Mehmet Savasci
Office hours: (see Campuswire for links)
Mehmet has previously TAed this course several times and is a pro, ready to help you succeed!

Undergraduate Course Assistants (UCAs):
Grace Chang, Yan Chen, Veronica Gusev, and Isi Bernoff
All four of our UCAs are super friendly and helpful, and all aced this class in the past. They’re here to help!

Supplemental instruction is available from the UMass Library’s Learning Resource Center. Our SI leader is Lily Rosenbaum. Visit for schedule and other information.

Tutoring is also available from the LRC. Visit for more details.

Note that office hours end the last week of classes! Unless you hear otherwise, we won’t be holding regularly-scheduled office hours after May 4th!

Required and optional material

An Internet connection is required, since this is an online course.

A computer capable of running a recent version of the Java Development Kit is required. The ability to use Visual Studio Code is also strongly recommended, though not strictly required. As time permits, course staff may be able to help with minor technical issues, but we are not IT support staff; we cannot generally solve installation or configuration issues, especially remotely.

Most technical material will be presented in lecture or on the course website. Note that while we do an accelerated Java review in the first few weeks of the semester, it is expected you have the familiarity with Java that the prerequisite for this course assumes. If you do not, you are responsible for self-studying to that level.

For students who want additional references, I suggest several optional resources:

Code of conduct

Communication policy

Per the University Email Policy, you are expected to check your University email regularly – at least once a day. I will use your UMass email address as your primary point of contact in all online tools we use (Moodle, Campuswire, and Gradescope) and as my primary means to contact you individually outside of class. Group announcement will be posted to Campuswire, which can be configured to send you via email whenever an instructor makes a post.

For course-content related questions, especially questions that other students might benefit from seeing the answers to, please use Campuswire. For other questions, like unusual logistics stuff, private messages on Campuswire or email are both OK, but please check the syllabus and course web site before emailing the course staff. If you send the course staff email, please include “COMPSCI 186” in the subject line to make sure we answer them in a timely fashion.

Course staff typically respond to emails and Campuswire questions within one to two business days, but I (Marc) do not typically respond to communications after about 5pm or on weekends. Course staff tend to get a higher volume of messages when a deadline is approaching. If you contact the course staff (that is, at least one TA and the instructor) at least two full business days before a deadline, you are guaranteed a reply before the deadline. Otherwise we’ll do our best, but no guarantees.


We’ll be using Zoom for the remote meetings in this class, such as the Monday lab sections and office hours throughout the week. You have a University-specific Zoom account (accessed through your NetID) that you’ll need to use for this course. We expect that you’ll use Zoom courteously. In particular this means:


Campuswire is a online discussion management system. It will be used as the main hub for questions and answers in this course. Campuswire is a great tool but it can be misused. Please follow these guidelines in your use of Campuswire:

The course staff will monitor Campuswire and answer your questions in a timely manner (generally within a business day). But do not expect us to provide real-time answers on Campuswire, especially in the last few hours before an assignment is due!

If a question has already been answered in a previous post we may not respond to you, instead directing you to the previous answer. If a question does not follow the guidelines above we may not answer it. If we find that a private question is relevant to a larger audience, we may make mark it public to help others in the course.

Time management and what to expect

As a general guideline, the university suggests that students spend three to four hours of time on a class per credit hour. This is a four-credit course, therefore you should plan to spend twelve to sixteen hours a week on this class.

In a typical week, you will:


I expect you to attend lectures and lab, and to complete assignments by their due date. That is, I expect you will attend lab in person, to keep up with posted lecture material, and to attend (via Zoom) the scheduled synchronous lab you are enrolled in.

If you must miss a self-assessment or the final exam for an excusable reason, I will work with you to find an acceptable time for you to take a makeup. If you miss a self-assessment or exam without prior notice, I will require an explanation and clear written documentation in order to judge whether the absence is excusable. Self-assessments must be made up within three business days, unless there are documented exceptional circumstances (such as a hospitalization or extended jury duty), in which case they will be excused.

If you add the class late, I will excuse you from missed work, but you are responsible for both notifying me when you add in a timely fashion, and for completing the work on your own.


Incompletes will be granted only in exceptional cases, and only if you have completed at least half the course with a passing grade. Prior to that, withdrawal is the recommended course of action.


The course web site contains a week-by-week schedule. Approximately, it is as follows:

Week 1: Java review
Week 2: Testing and debugging
Week 3: Java review, continued
Week 4: The List Abstract Data Type (ADT)
Week 5: Generics and comparators; introduction to sets
Week 6: More on sets; binary trees; the Map ADT
Week 7: Multimaps; introduction to algorithms
Week 8: Searching, sorting, and introduction to graphs
Week 9: More on graphs; search and representation
Week 10: Implementing ADTs (stacks and queues)
Week 11: Introduction to recursion
Week 12: More on recursion
Week 13: Course review and wrap-up


I urge you not to focus on numeric scores and grades. Most students get good grades in this course. The median is typically between a B and a B+, and very few fail. So instead, focus on where assessments show that you can or need to improve. A decade from now the grade you got in this course will be irrelevant, but what you learned about programming might just be crucial.

Nonetheless, in the midst of a busy semester we all end up with moments of triage in which we need to understand where to concentrate our efforts. So to give you a sense of the relative importance of each form of assessment, we expect the breakdown for the final course grade to be as follows:

30% programming assignments
25% problem sets
10% group lab exercises
20% self-assessments
15% final exam

The numerical cutoff for final course letter grade assignment will be made after all grading is completed. As a rough guide, expect to require at least a 93 to get an A, a 90 to get an A-, an 87 to get a B+, an 83 to get a B, an 80 to get a B-, and so on.

Individual grade items are not curved, so you should not get stressed about means, standard deviations, etc. related to particular scores you receive. What matters is your weighted average; we do not give favorable (or unfair) treatment by raising or lowering individual students’ letter grades.

There are no unannounced opportunities for extra credit in this course; please do not ask.

Also: It’s 2021. Storage and bandwidth are virtually free. Back your work up, store it in the cloud, whatever. “My computer crashed” won’t be acceptable as an excuse in this class.

I will retain all graded materials for this course until the end of next semester. If you wish to review them, please come to see me during office hours (or make an appointment).

You are responsible for monitoring your grades. Grades will be available through Moodle and you should check them regularly and review any provided feedback. If you encounter any issues with your grades, you will have one week past the first posting of a particular assignment’s grade to Moodle to contact the course staff so that we can investigate. Please contact us via the regrade request system in Gradescope. We will not generally accept questions about an individual assignment’s grade beyond this one week, so you must be prompt.

Programming assignments

I will post programming assignments about once a week, and you will typically have about one week to complete them. They will be posted to the course web site’s assignment page and must be submitted through Gradescope. Programming assignments may be completed individually or with a partner! See the course honesty policy, below, for more details.

You are responsible for submitting your work to the autograder. Email submissions, whether late or on time, will usually not be accepted, regardless of whether the autograder or Moodle appeared to be online or not. If either did truly go down for an extended period, I will find out by the next workday, and the entire class will get an extension.

You are responsible for verifying that you have submitted the intended versions of your files. Similarly, you are responsible for ensuring that the final submission you make in either Gradescope or Moodle is the one you wish to have graded. Requests to substitute another version may be granted entirely at the instructor’s discretion, and may incur a penalty.

You are responsible for submitting code that compiles and runs on the autograder; if you submit code that does not compile or that gets stuck in an infinite loop, you will receive no credit. You should expect to receive the grade that Gradescope produces; in particular, “It runs fine on my computer” will not serve as the basis for an appeal. If you are seeing a discrepancy, you must ask us about it before the assignment deadline to receive a chance of consideration!

You are responsible for uploading your submission before the deadline. The deadline for an assignment is not the time by which you must finish writing a solution; rather, the deadline is the time by which you must successfully upload your solution files and confirm the system has recorded the correct versions of those files. We recommend that you upload your files at least one hour before the deadline, in case Gradescope or Moodle happens to lag or go down near the deadline. File system timestamps on your local hard drive or in a Github repository or the like are never acceptable as evidence of existence of a file prior to the deadline, because you are under complete control of that timestamp. Requests to submit after the late submission deadline will be handled as described in “Extensions and late policy.”

Attempts to manipulate, game, or otherwise incorrectly use the autograder will be treated as academic dishonesty.

Problem sets

There will usually be a collection of short exercises (“problem sets”) due each week. They will be generally posted to Gradescope at the start of the week and will be submitted through either Moodle or Gradescope, as indicated.

You may work in a small group with your classmates on problem sets, though you must clearly indicate in your submission with whom you worked.

Lab exercises

There will be six or seven small group exercises given during lab section meetings (over Zoom). These will be POGIL-style exercises, where each team member has a defined role. A series of questions will guide you through a cycle of exploration, concept invention, and application; your teaching assistant will facilitate the exercise. Groups that make a reasonable effort to complete the exercise will receive full credit.

Note that there are 13 scheduled lab meetings, but only six or seven group exercises. On the other weeks you will engage in self-assessments and lab will not meet (though your TA will be available).

Self-assessments and the final exam

There will be about seven self-assessments given over the course of the semester. They will be announced, and will be given in lieu of a lab section meeting. Each will consist of a few programming questions, and they may include a few other short-answer questions as well.

Unlike other elements of the class, these must be completed on your own, without collaborating with your peers or performing Internet searches or the like. It’s critical that you (and we) be able to evaluate your own learning progress.

There will also be a cumulative final exam, given on our scheduled exam day (Thursday, May 6th, at 4:30pm, in our regular classroom). It will be in the style of the self-assessments, but it will be significantly longer. You must achieve a passing grade on the final exam to pass the class. Like the self-assessments, the final exam is an individual assessment.

Please note (from the Academic Rules and Regulations):

…it is University policy not to require students to take more than two final examinations in one day of the final examination period. If any student is scheduled to take three examinations on the same day, the faculty member running the chronologically middle examination is required to offer a make-up examination if the student notifies the instructor of the conflict at least two weeks prior to the time the examination is scheduled. The student must provide proof of the conflict. This may be obtained from the Registrar’s Office, 213 Whitmore.

You are responsible for clearing your schedule at the beginning of the semester to take exams. The Registrar announces exam dates before the beginning of classes. If you cannot commit to taking the final exam during the exam period, you should drop this class immediately. Makeup exams will be offered only in those cases where required by university policy.

Extensions and late policy

Problem sets and programming assignments are due at the time specified in Moodle or Gradescope, and we strongly suggest that you always submit before that deadline, even if your solution is incomplete. That at least shows us that you are making progress.

But life happens: you miss the deadline because of other courses, illness, events in your personal life, and so forth. Rather than the burden of you having to ask for an extension in those circumstances, we will configure Gradescope to accept late submissions of programming assignments and problem sets (but not self-assessments) usually up to 48 hours after the deadline. There will be no penalty for these late submissions. They are an automatic extension you may choose to grant yourself. We trust you to do so wisely – often, making use of them will result in you having less time to work on the next assignment. The purpose of automatic extensions is to give you a tool to manage the demands of life, including the following:

Be aware that after Gradescope decides that the late submission deadline has passed – even one second past it – no further submissions will be accepted.

Beyond those automatic extensions, we will grant exceptional extensions in truly exceptional circumstances. Those require accompanying documentation: a letter from a professor, advisor, or coach requesting the extension on your behalf; notice of a death of a close friend or family member; a letter on official letterhead from a medical provider explaining a major illness or injury; or official DS letters. Contact the instructor to request such an exceptional extension.

A message from Student Success

Your success in this course is important. Your instructor has partnered with Student Success and your academic advisors to assist you in better understanding course material which can aid you on your path to success. Resources available to students include: Supplemental Instruction, ExSEL Group Tutoring, and 1:1 Tutoring. Visit the Learning Resource Center online at

Throughout the semester, your instructor will communicate with Student Success & academic advisors regarding your progress in the course. If you are contacted, please consider scheduling appointments such as tutoring or academic advising and talk with your professor. Referrals are not punitive and are meant to assist you in connecting with resources at UMass. Please email if you have any questions or need assistance connecting with resources.

Academic honesty

General academic honesty statement

Since the integrity of the academic enterprise of any institution of higher education requires honesty in scholarship and research, academic honesty is required of all students at the University of Massachusetts Amherst. Academic dishonesty is prohibited in all programs of the University. Academic dishonesty includes but is not limited to: cheating, fabrication, plagiarism, and facilitating dishonesty. Appropriate sanctions may be imposed on any student who has committed an act of academic dishonesty. Instructors should take reasonable steps to address academic misconduct. Any person who has reason to believe that a student has committed academic dishonesty should bring such information to the attention of the appropriate course instructor as soon as possible. Instances of academic dishonesty not related to a specific course should be brought to the attention of the appropriate department Head or Chair. Since students are expected to be familiar with this policy and the commonly accepted standards of academic integrity, ignorance of such standards is not normally sufficient evidence of lack of intent.

In addition, you should read the UMass Academic Honesty Policy (ignorance of the policy is no excuse).

Course-specific academic honesty policy

Investigating academic dishonesty is an unpleasant experience for both the instructor and the student. Please help me by avoiding any questionable behavior.

Academic dishonesty is usually the result of other problems in school. Please come see me or the other course staff if you are unable to keep up with the work for any reason and we will do our best to work something out. I want to see you succeed, but I will not tolerate academic dishonesty.

Be aware that if something looks like academic dishonesty to us, we will treat it as such, unless you can provide strong evidence to the contrary. When in doubt, it is your responsibility to contact the course staff about whether a potential action would be considered academic dishonesty.

What is permitted and what is not?

You may discuss material with others, but when collaboration is forbidden (specifically: on the self-assessments and the final exam), your submission (code and prose) must be entirely your own. On self-assessments, you may refer to course material, but you may not seek any other external help or resource. The final exam is entirely closed-book.

More generally, you may not get help with your work from anyone who is not a current COMPSCI 186 course staff member. “Help” includes designing algorithms, writing code, debugging, developing test cases, and so on.

You may not receive code from anyone except your partner(s), or the course staff, on a particular assignment.

You may not provide your solutions to others, either directly or via some sort of public or private posting, except when collaboration is explicitly permitted and when both you and the other person(s) are currently enrolled in this course.

You may not copy code from online sources – except for the current semester website. Copying and pasting code from another student or a third party is a violation of academic honesty, and we will endeavor to detect this by any means available to us, including automated similarity analysis of submitted assignments.

You may not use third-party online forums such as StackOverflow to ask for specific help on assignments, nor third-party course “notes” sites that traffic in solutions to assignments, nor may you search for solutions online.

When you ask for help, either in person or on Campuswire, it’s good practice to ask your question by describing the problem you’re having, or using a small synthetic example that illustrates your difficulty. If you must include a large chunk of your code to ask your question on Campuswire, mark it as a “private” question, and only the course staff will be able to see it.

Group work policy

Programming assignments permit a single partner (a partner means one other person, besides yourself). Lab group work and problem sets permit groups of up to four people in total.

Having a partner is optional for programming assignments. A group is mandatory for lab exercises, and optional for problem sets.

For lab exercises, your partners must be from your lab section.

For programming assignments and problem sets, your partner(s) may be from any lab section. It does not have to be your own section.

You are free to work with different partners on each assignment. Especially for programming assignments, make sure to acknowledge any past partners whose work might have influenced your own in the Authors section.

If you work with partner(s), you must do all the work together. It is against the rules to split up the work, or to have one person do it and another person “check” it, or to have one person write the code and another person write the tests, etc. When you submit as a partnership or group, you are asserting that all the work was done together.

The above rule has implications for academic honesty policy violations. If one of you is guilty, all of you are guilty. Consider that carefully. If your partner went off and implemented a lot of code “on their own,” how do you know they wrote it? More often than I’d like, it turns out somebody actually copied the code or solution from elsewhere. You will be culpable if your partner does this, because by submitting as a partnership (or group) you are claiming the solution to be jointly written by all of you.

Nonetheless, much like exceeding the speed limit on the highway, if you’re going to violate the rules, there are norms. On the highway, that means speeding in the left lane, and sticking to the speed limit in the right lane. In this class, we likewise know some people will violate the rules and split the work anyway. So if you do that, make sure to detail in the Author section who did what work. That is your best defense should a violation of the honesty policy be detected.

Other academic regulations

The Office of the Registrar publishes Academic Regulations yearly. You should be familiar with them. Particularly relevant are the policies on attendance, absences due to religious observance, and examinations.

A word about putting your solutions on GitHub, GitLab, BitBucket, etc.

Per the course-specific academic honesty policy, you are not permitted to make your solutions to the assignments in this class available to others. This includes reposting them to public GitHub repositories (or other service where another student might plausibly see them).

A word about copyrights

Most of the material (lecture notes, lectures, assignments, and so on) in this course is original work created by the instructor (Marc Liberatore); exceptions are clearly noted. These works are protected by U.S. copyright laws and by university policy. I am the exclusive owner of the copyright in materials I create.

You may take notes and make copies of course materials for your own use in this class. You may also share those materials with another student who is registered and enrolled in this course.

You may NOT reproduce, distribute, upload, or display any lecture notes or recordings or course materials in any other way – whether or not a fee is charged – without my express written consent. If you do so, you may be subject to disciplinary action under the UMass Code of Student Conduct.

While you are welcome to use the material for your own personal and educational use, you may not redistribute them to others outside the class. In particular, selling or otherwise redistributing your notes (or mine!), making or selling audio, video, or still recordings of course material, is not allowed without express written permission from me.

I make this stuff available on the web for you to use easily and without the hassle of sign-ups, logins, and the like, not for you to abuse for a buck. As Carol Barr (Senior Vice Provost and Dean of Undergraduate Education) and Enku Gelaye (Vice Chancellor for Student Affairs and Campus Life) noted at the start of the Fall 2018 semester, usage of notes or in-class recordings without the faculty member’s permission is a violation of the faculty member’s copyright protection.

Accommodation statement

The University of Massachusetts Amherst is committed to providing an equal educational opportunity for all students. If you have a documented physical, psychological, or learning disability on file with Disability Services (DS), you may be eligible for reasonable academic accommodations to help you succeed in this course. If you have a documented disability that requires an accommodation, please notify me within the first two weeks of the semester so that we may make appropriate arrangements.


Some material taken from the Rust Code of Conduct.

Some material taken from the Cornell CS 3110 syllabus and related policies.