Quick Facts

Winter 2024

Instructor: Anya E. Vostinar

Class Room: Olin Hall 310

Anya’s Office: Olin Hall 323

Prefect: See Moodle

Course materials:

All materials are freely available and will be linked through the schedule.

Drop in student hours:

M: 1-2pm W: 2-3pm Th: 2:30-3:30pm All drop-in hours in Edge Lounge, Olin 306

Remember that you are always welcome to schedule an appointment with me outside of these times. To schedule an appointment, please see my calendar, find a time that isn’t marked ‘Busy’ within 9-5 M-F and either send a calendar invite to an event or email me.

Overview and Learning Goals

Welcome to Data Structures! In this course, you’ll be learning about how to work with data, how to design solutions that are efficient for a particular application, and developing more complex programs than in the introductory CS course. Whether or not you’re interested in taking future computer science courses, this class should help you to develop your problem solving and analysis skills as well as learn coding skills that you can apply in a variety of domains. If you are interested in more computer science courses, data structures will prepare you for the upper level courses and give you a foundation in some of the ideas underlying much of the field.

By the time you complete this course, you’ll be able to do the following:

  • Read a problem description and think through the pros and cons of different data representations and implementations.
  • Work with basic programming building blocks (data structures and abstract data types), including lists, arrays, stacks, queues, trees, maps, and graphs.
  • Analyze the efficiency of an algorithm to understand how the time and space the algorithm needs varies with the size of the data it’s working on.
  • Create non-trivial Java programs.

Prerequisites: CS111 (Introduction to Computer Science) or an introductory computer science course completed elsewhere. Please talk to me if your background is something other than CS111 or AP CS in high school.

Course expectations

I have done my best to design the course so that everyone can be successful, regardless of personal circumstances. Communication is key; please keep me updated about your situation in addition to reaching out to the other relevant offices on campus. If you experience significant technological problems that limit your ability to participate, please contact the ITS Helpdesk at 507-222-5999 or For announcements of known technical issues, visit the Helpdesk portal. If your personal situation (due to illness or other circumstances) begins to impact your ability to engage with the course, please contact the Dean of Students Office and also let me know.

I expect you to attend every class session and log in to Moodle every day for updates on activities and assignments. I will show you civility and respect and expect you will do the same to me and each other in both in-class and out-of-class interactions.

All out of class written communication will happen via the CampusWire announcement forum. Please make sure you are reading your emails regularly and have your CampusWire settings allowing email. Each class day will have activities for you to complete before class in addition to longer assignments. All materials will be released at least 48 hours before they are due.


Attendance is not strictly required in this class, though I believe that you will do much better if you attend every session and there are consequences to missing class on Mondays and Fridays. Because much of the classtime is spent working with partners on lab activities, if you miss class, you will miss out on that opportunity. This is particularly important on Fridays, when you will usually have time to get started on the homework assignment. If you are absent on Friday and your homework partner is in class, you will be split up so that your homework partner can start on the homework assignment. This means that if you miss class on Friday and haven’t made prior arrangements with me and your homework partner, you will likely need to do that week’s homework individually.

On Mondays there will typically be a quiz in the first half of class. If you do not attend on a Monday, you will not be able to make up that quiz, though you will be able to demonstrate your understanding on the learning objectives on subsequent quizzes still.

Types of Engagement and Collaboration Policies

We’ll have lots of different ways of engaging with the course material:

  • Readings written by me and from the textbook, which will introduce ideas and provide details.
  • Interactive lectures at the start of class that will include discussions to check your understand of the reading and give you a chance to ask questions.
  • Labs for writing somewhat longer code with significant guidance from the instructions in order to make ideas from readings more concrete.
  • Homework where you complete more extended projects to provide opportunities to design solutions and see the ideas from class applied in real contexts.
  • Weekly in-class quizzes, that provide you with a check on whether you’ve understood the key ideas from the previous week and are summative.
  • Final project, where you pull together everything you’ve learned to create something that interests you.

I believe each of these types of activities will give you a different lens on the core class ideas and help you to deeply learn and understand the material. In many of these activities you’ll have the option to work collaboratively, and throughout the course you’ll have assigned programming partners who you will complete the labs and homework with. You are required to work with your assigned partner to complete these assignments using pair programming. Please see the Collaboration guidelines for more details.


One of my goals for you in this course is for you to continue to develop as an independent programmer and independent learner. I’m much more interested in what skills and understanding you have mastered by the end of the course than the exact pace at which you master them. However, it isn’t healthy for you or me if you leave everything to the last minute. It also isn’t fair to your partners on an assignment or in class if you haven’t prepared as much as they have. Therefore, my goal with the following evaluation metrics is to balance providing you flexibility to learn at your own pace while also making sure to spread your learning out over the entire term.

Towards that end, your performance in this class will be evaluated in the following ways according to the learning goals for the course:

  • Programming deliverables There will be weekly(ish) programming homework assignments during the term, some of which you’ll complete individually and some with a partner. You will also complete a final programming project at the end of the term. The programming deliverables allow you to demonstrate mastery of some of the key learning objectives in this course – particularly those focused on writing and organizing larger programs. These contribute to your final grade according to the specifications grading scale outlined below. You will have the opportunity to revise these individually (regardless of whether they were originally individual or paired assignments), as detailed below.

  • In-class quizzes Some of the learning objectives for the course can’t be measured through programming assignments. Instead, your mastery of these objectives will be assessed in weekly in-class quizzes, generally on Mondays. There is a specific list of learning objectives that you should demonstrate your mastery of on these quizzes, and each objective will appear on at least two quizzes, though often more. This means that you have multiple chances to demonstrate your understanding, and where you are with each objective at the end of the term is what will matter for your grade. I realize this is different than how you are probably used to having quizzes, so we’ll discuss this more in class and throughout the term. There are also more details below.

Programming Grading Scale

I’ll be using a version of specifications grading this term for the programming deliverables. Each programming assessment that you hand in will be evaluated against a checklist or rubric related to one or more of the course learning objectives. I will distribute the rubrics and checklists I’ll use to assess each assignment so that you know exactly what constitutes each of these levels. I will rank the overall submission according to a four-level scale:

  • Insufficient evidence (basically nothing turned in)

  • Does not yet demonstrate proficiency (something was turned in but it did not completely fulfill the criteria)

  • Demonstrates proficiency (the submission provides evidence of proficiency in the learning objective(s))

  • Demonstrates mastery (the submission provides evidence of mastery of the learning objective(s))

An important aspect of specifications grading is revision. You may revise any programming deliverable up until the end of exams. Learning is not a linear process, and it involves making mistakes and learning from them. You may individually revise and resubmit a deliverable at least once, within a week after its assessment has been released. I will keep the higher of the {original, revised} levels (though if you end up with a revised submission at a lower level than the original, we should meet to discuss it). You may individually further revise that deliverable before the end of the term and request additional feedback via a form (link TBD), however I make no guarantee of how quickly the resubmission will be assessed; it might not happen until the end of the term. Even if an assignment was initially a paired assignment, all revisions should be completed individually.

Quiz Assessment

Each weekly quiz will have a subset of learning objectives that can be demonstrated on that quiz, which you will know ahead of time. Each of the ‘quiz’ learning objectives will appear on at least two quizzes, so that you will have multiple chances to demonstrate your understanding of the material. Answers on quizzes will be assessed on the same four-level scale:

  • Insufficient evidence (basically nothing written down)

  • Does not yet demonstrate proficiency (something was written down but it did not demonstrate proficiency of the learning objective)

  • Demonstrates proficiency (the answer provides evidence of proficiency in the learning objective(s))

  • Demonstrates mastery (the answer provides evidence of mastery of the learning objective(s))

How this translates to course grades

To earn a C in the course: you must show that you are proficient in all the learning objectives of the course by having all programming deliverables and quiz objectives at ‘demonstrates proficiency’

To earn a B in the course: you must show that you are proficient in all the learning objectives of the course and have mastered half of the learning objectives by having all programming deliverables and quiz objectives at ‘demonstrates proficiency’ and half of programming deliverables and quiz objectives at ‘demonstrates mastery’

To earn an A in the course: you must show that you have mastered all of the learning objectives in the course by having all programming deliverables and quiz objectives at ‘demonstrates mastery’

(Yes, I do also give +/- grades. They follow the logical distribution where if you’re closer to an A than a B, you get an A-, if you’re closer to a B, you get a B+.)

Late work and extensions

In this course, we need to balance flexibility for individuals with structure for partners, the class as a whole, and a reasonable workload for the grader and me (your instructor). I also want to help you avoid procrastinating to the point that you can’t get everything submitted by the end of the term.

All programming deliverables have a 1-hour grace period after their posted due date and time to account for slight delays in submission while allowing assessment of submissions to start soon after the due date. If you miss that cutoff, you will still be able to submit something during the revision period. I highly recommend you aim to submit something in the original submission window, even if it isn’t complete, so that you can benefit from feedback and revision.

In-class quizzes cannot be made up because missing one quiz will not at all impact your grade. If you fall behind on quiz objectives, there is the possibility of demonstrating your understanding outside of class, and there will be extra assessment opportunities towards the end of the term. If you’re worried about where you are on the quiz objectives, get in touch and we can make a plan.

Preparation work does not specifically contribute to your grade, and so a late work or extension policy doesn’t make sense for it. It is expected that you complete the preparation work ahead of the class period that it is associated with, however if you aren’t able to, I recommend you complete it as soon afterward as you can.

All work must be submitted by the end of the last finals period as per College policy. All that said: If you’re staring down a deadline that you know you can’t meet, or if you’ve fallen behind, get in touch with me immediately and we’ll work something out. While I need to put boundaries in place for my own health and wellness, and for fairness to everyone in the class, I also want to make sure you are progressing in your learning.

How to Succeed in this Class

  • Keep trying and ask for help: Learning a new topic can be challenging, and one of my hopes for this class is that you’ll struggle at times and learn more because you had to really work to understand something. That means you’re expected to be willing to try again when things don’t work the first time, and to seek out help when you’re truly stuck. (See below for more on seeking help!)

  • Work consistently: For all learning engaging with the material in shorter, more frequent sessions is likely to be helpful. Set aside time each day to work on the course, and make sure that you’re keeping up with the daily activities.

  • Take notes: Research has shown that writing things down in your own words helps you to remember and understand it better. Take handwritten notes when in class and reading from the textbook. Research has also shown that handwritten instead of typed notes help you retain the information better.

  • Pay attention to longer-term homework assignments and start early: When I’ve asked students what advice they’d give to future 201 students, the most common thing they said was to start the homework early! The homeworks are likely slightly longer than you experienced in intro, as the goal is to help you learn to create more complex programs and make design decisions. By starting early, you have more opportunities to work through problems that come up and time to ask for help! Even if you can’t immediately start on the homework, read over the prompt so that your brain can start thinking about it in the background; it really does help!

  • Test your code: One of the key parts of writing successful code is debugging it - testing whether it works, finding where it doesn’t, and fixing it so it does. The assignments in this class are likely more complex than what you saw in intro, so you’ll need to spend more time making sure that your code works. Learning to debug your code is essential for any later coding projects you may do.

  • Ask questions and reach out for help: If you have a question about something, chances are other people do too. By asking questions in class, on the forum, and in office hours, you’ll keep up with the course and gain a deeper understanding of the concepts.

All grading questions should be directed to me and not to the grader.

How to Get Help

I want to see all of you succeed in this class, and I believe you can succeed if you engage with the class material and activities consistently and reach out for help when you’re confused. To learn computer science, you’ll need to be willing to try new things and experiment with different solutions. Cultivating persistence to keep trying will be helpful not only in this course, but in any other problem solving activities. Sometimes, you may need assistance - here’s how you get it:

  • Take a break: Often, taking a break from homework will help you to regroup and you’ll be able to succeed when you come back to it. Leave yourself enough time to be able to take breaks!
  • Prefect sessions: This course has a prefect. The Prefect Program offers in person tutoring and/or optional collaborative learning sessions for participating classes. Prefect sessions review course concepts and often focus on critical thinking and problem-solving exercises centered on the course material. Our course prefect(s) will use email or CampusWire to inform everyone in the class about upcoming sessions and availability for 1:1 tutoring.
  • Q&A CampusWire Forum: You’re welcome to post questions about readings and labs on the forum, as well as about homework. You shouldn’t post much homework code, but you can post code related to other assignments. If you’re unsure if a question contains too much detail about the homework, mark the question as for Instructors and TA’s only.
  • Talk to me: I have both drop in student hours and student hours that are by appointment (for one on one conversations). See links at the top of this document for more details. Talking to students is literally my favorite part of this job, please talk to me!
  • Other Carleton resources: There are lots of resources to help you at Carleton. Lab assistants are available on a regular basis; see the top of Moodle for details. They can help you with debugging and making progress on your homework, or if you’re having trouble understanding something about Java. The Academic Skills center is a wonderful resource for helping you develop study skills, improve your ability to prep for exams, or manage procrastination. Oscar Alarez is an academic skills coach in the office with whom you can make individual video conferencing appointments.

Inclusivity and Universal Learning

I strive to create an inclusive and respectful classroom that values diversity. Our individual differences enrich and enhance our understanding of one another and of the world around us. This class welcomes the perspectives of all ethnicities, genders, religions, ages, sexual orientations, disabilities, socioeconomic backgrounds, regions, and nationalities.

My goal is that everyone should be able to learn from this class and feel comfortable asking questions and participating. In class, on the forums, and when working with one another, be respectful and inclusive. If something makes you uncomfortable or you’re concerned about an interaction, please come talk to me!

Carleton College is committed to providing equitable access to learning opportunities for all students. The Disability Services office (Henry House, 107 Union Street) is the campus office that collaborates with students who have disabilities to provide and/or arrange reasonable accommodations. If you have, or think you may have, a disability (e.g., mental health, attentional, learning, autism spectrum disorders, chronic health, traumatic brain injury and concussions, vision, hearing, mobility, or speech impairments), please contact or call Sam Thayer (’10), Accessibility Specialist (x4464) to arrange a confidential discussion regarding equitable access and reasonable accommodations. If you’ve already arranged accommodations, please let me know if there’s anything you want me to know beyond what’s in the accommodations letter or if there are particular challenges for your specific circumstances. If you do not have official accomodations, I am still happy to discuss with you ways in which I can help you succeed in this class.

The Assistive Technologies program brings together academic and technological resources to complement student classroom and computing needs, particularly in support of students with physical or learning disabilities. Accessibility features include text-to-speech (Kurzweil), speech-to-text (Dragon) software, and audio recording Smartpens. If you would like to know more, contact or visit

Carleton College urges you to make yourself –- your own health and well-being –- your priority throughout this ​term and your career here. It is important to recognize stressors you may be facing, which can be personal, emotional, physical, financial, mental, or academic. Sleep, exercise, and connecting with others can be strategies to help you flourish at Carleton. If you are having difficulties maintaining your well-being, please contact me and/or pursue other resources, such as Student Health and Counseling or resources on the Office of Health Promotion website. Student Health and Counseling is currently offering telehealth services.

Carleton is committed to fostering an environment free of sexual misconduct. Please be aware all Carleton faculty and staff members, with the exception of Chaplains and SHAC staff, are “responsible employees.” Responsible employees are required to share any information they have regarding incidents of sexual misconduct with the Title IX Coordinator. Carleton’s goal is to ensure campus community members are aware of all the options available and have access to the resources they need. If you have questions, please contact Laura Riehle-Merrill, Carleton’s Title IX Coordinator, or visit the Sexual Misconduct Prevention and Response website:

Academic Honesty and Collaboration Policy

As noted in Carleton’s policy on academic integrity, violations of academic honesty are dealt with at the college level. If I suspect academic dishonesty, I will refer the case for appropriate action to the Academic Standing Committee (ASC) via the Associate Dean of Students or the Associate Dean of the College. Please familiarize yourself with Carleton’s academic integrity policies and make sure that you have read the collaboration and academic honesty policies for this course. A possible penalty for academic dishonesty in a course is an F in the course. It’s not worth it – please seek help using the resources above instead.


In this new age of AI assistants everywhere, we need to cautiously navigate their relationship with academic honesty together. In general, only use an AI text/code generator if the assignment explicitly calls for it or allows it, and follow specific assignment guidelines to disclose which text comes from the AI. Most assignments (probably all) in this course will NOT allow the use of an AI text/code generator, since you need to learn how to write the code yourself. If you already have the GitHub Co-pilot extension in VSCode, you must disable it for all course work.

We may explore some use cases for generative AI, but I’ll also emphasize and demonstrate how it regularly produces quite horrible solutions. You can write way better code yourself, trust me!


This section discusses some of the pedagogical principles that you’ll see in this class. If you are interested in why the class is structured how it is, you might find an answer here (and I’m also happy to discuss it with you). If you aren’t interested in pedagogy, you can skip this.

Active Learning

Research has shown that active learning in the classroom leads to better retention of material for all students, but especially those from historically marginalized groups. Computer science classes are well-suited to active learning, because we can practice ideas in class by programming and writing out algorithms, for example. In this class, a large portion of in-class time will be spent with you grappling with ideas and trying to solve problems that I’ve given you while I and the prefect circulate to answer questions. This requires that you’ve read the assigned reading ahead of time, so that I don’t need to lecture and we can spend more time learning how to actually use the ideas. Active learning can feel less effective or productive in the moment, because you are struggling to figure things out instead of me just explaining things to you. However, that process of struggling is exactly what is needed for you to learn the material most effectively for long-term retention.


There are two main ways that content can be organized in a course: block and interleaved. Block learning is the idea of first learning all about topic X, taking a test, and then forgetting all about it to learn about topic Y. Interleaving is the process of learning a bit about topic X, a bit about topic Y, a bit more about topic Z, being tested on all of them, then learning more about all of them and being tested again.

Again this is a situation where block learning feels the most effective and efficient in the short term, and you’d do best on the tests in the short term. However, copious research shows that interleaving is the most effective in the long term. It is again the very process of struggling to recall something you learned a while ago that triggers your brain to then store that information into long term memory. Interleaving also leads to higher transfer abilities, where you are able to apply what you know to a new problem. (If you want to learn more about this, there are several excellent books, but one I recommend currently is Range: Why Generalists Triumph in a Specialized World by David Epstein.)

Pair Programming

Pair programming is a very common practice in computer science industry, where two programmers sit at a shared computer and both engage in the process of writing a program. One is the ‘driver’ at the keyboard for a block of time while the other is the ‘navigator’ that is watching and thinking through the overall program, as well as spotting typos. You switch roles regularly (every 10-15 minutes or whenever the navigator has an ‘aha’ moment) and are both fully engaged in the task for the whole time. This method of programming has been shown to be highly effective in producing better code (not necessarily in a shorter period of time though) and leading to a better understanding of the problem for both programmers. We’ll use pair programming a lot in this course for several reasons: 1) as I said, it is very common in industry, so it’s good for you to get comfortable with it; 2) it is used in many upper level courses at Carleton, so again good for you to be comfortable with it; 3) ultimately it improves the learning and understanding of the people involved; and 4) when you are struggling with new concepts, it can feel a lot more doable when you have someone else there who is struggling with you.

This syllabus is based heavily on the syllabus from Anna Rafferty.