CS201 Data Structures F25 Syllabus
- Quick Facts
- Overview and Learning Goals
- Course Expectations
- Types of Engagement and Collaboration Policies
- Assessment
- How to Succeed
- Inclusivity and Universal Learning
- Academic Honesty and Collaboration
- Pedagogy
Quick Facts
Fall 2025
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:
TBD
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 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 helpdesk@carleton.edu. 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
Attendance is expected in this class and, therefore, it is one main way that you are able to earn “engagement credits,” which are a portion of your final grade (see below).
Types of Engagement and Collaboration Policies
We’ll have lots of different ways of engaging with the course material:
- Readings, 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.
- Exams that assess where you are with the learning objectives of the course.
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.
Assessment
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:
-
Engagement credits There is a great benefit to you to fully and authentically engage with the course content in and out of class time. To encourage this engagement while providing some flexibility, the course has an “engagement credit” system. You will need a specific number of engagement credits to earn a specific grade (shown in the list below). You can earn these credits in many ways, but the main way is through completing the preparatory work and attending (and engaging with class). You may earn 1 credit for completely preparatory work satisfactorily and 1 credit for attending and engaging effectively in class. There may be additional ways to earn engagement credits during the term as well.
-
Homework deliverables There will be weekly(ish) homework assignments during the term, some of which you’ll complete individually and some with a partner. The homework deliverables allow you to practice 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 exams Some of the learning objectives for the course can’t be measured through programming assignments. Instead, your mastery of these objectives will be assessed via in-class exams (dates specified on the schedule). There is a specific list of learning objectives that you should demonstrate your mastery of on these quizzes, and most objectives will appear on at least two exams, 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 exams, so we’ll discuss this more in class and throughout the term. There are also more details below.
Grading Scale
I’ll be using a version of standards and specifications grading this term for the programming assignments and exams. Each assessment that you hand in will receive narrative feedback and be marked on the following scale:
-
IE: Insufficient evidence (basically nothing turned in)
-
RR: Revise or retake (does not meet the core requirements yet)
-
S: Satisfactory (meets the requirements)
Learning objectives (exams) and requirements (programming homework) will be in one of two categories:
-
CR: Core
-
AD: Advanced
How this translates to course grades
Your final course grade will be based on how many advanced and core requirements/objectives you have satisfied (from the exam learning objectives and the homework requirements) as well as how many engagement credits you earned. The table below show the minimum requirement for each letter grade for each category. To calculate your grade, I will find the highest letter grade for which you have met all requirements. For example, if you satisfied 23 advanced objectives, 36 core objectives and had 55 engagement credits, you would receive a B+ due to the missing core objective. Note that a “-“ is due to not having all the required engagement credits and a “+” is due to having more advanced requirements satisfied.
Grade | Advanced Satisfied | Core Satisfied | Engagement Credits |
---|---|---|---|
Total | 15 (Exam) + 8 (HW) = 23 | 29 (Exam) + 8 (HW) = 37 | >54 |
A | 22 | 37 | 50 |
A- | 22 | 37 | <50 |
B+ | 17 | 36 | 45 |
B | 12 | 36 | 45 |
B- | 12 | 36 | <45 |
C+ | 6 | 35 | 40 |
C | 0 | 35 | 40 |
C- | 0 | 35 | <40 |
D+ | 1 | 27 | 35 |
D | 0 | 27 | 35 |
D- | 0 | 27 | <35 |
F | 0 | 0 | 0 |
Homework revisions
An important aspect of specifications grading is revision. You may revise any homework deliverable up until the last day of classes. 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 (linked here), 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.
Exam retakes and revisions
If you get “Retake” on an exam question, that means that you didn’t demonstrate sufficient understanding. You will have the opportunity to try a question on that learning objective again up until the final exam. When you get the question correct, you will get S for that objective, regardless of how many attempts it took you to get there.
Sometimes an answer on an exam is close but has a small error that makes it unclear if you understood the learning objective completely. In these cases, I will indicate that you can “Revise” your answer. To revise an exam answer:
- Print out your exam question from Gradescope
- Figure out what the error is (with help from anyone)
- Come to drop-in hours with the print out and explain to me the error and the fix
- If I am convinced that you do understand the objective, I’ll ask you to email me to update you to S
- Note that I’m happy to help you understand the error, but there must be 24 hours between my helping and you officially revising
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 exams cannot be made up because missing one exam with not impact your grade. If you fall behind on learning objectives, there is the possibility of demonstrating your understanding outside of class. If you’re worried about where you are on the learning objectives, get in touch and we can make a plan. If you know you will miss an exam, you might be able to take it ahead of time, but I don’t guarantee it.
Preparation work cannot be submitted late. If you miss the submission for a given day, you cannot earn the engagement credit for that work.
All work must be submitted by the end of the last day of classes 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 Kotlin. 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 disability@carleton.edu 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 aztechs@carleton.edu or visit go.carleton.edu/aztech.
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: https://www.carleton.edu/sexual-misconduct/.
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.
AI-Assistance
In this new age of AI assistants everywhere, we need to cautiously navigate their relationship with academic honesty together. There are many many (many) ways that generative AI is (sort of) helping you and some are more clearly acceptable or unacceptable than others. I can’t make an exhaustive list of what is allowed and isn’t, because there is just too much and something new is going to pop up within the ten weeks of this term. I will do my best to guide you, but you also are going to need to use good judgement at times (and don’t rely on the AI’s judgement!).
Clearly unacceptable:
- Pasting the entire assignment prompt into anything (even if you don’t use the code that comes out)
- Using GitHub Co-pilot extension in VSCode (If you already have it, you must disable it for all course work.)
- Submitting for credit any code that you did not write yourself (and wasn’t from the starter code). This class is about learning to write the code yourself after all!
Clearly acceptable:
- Asking gen AI to give you practice exam questions to study
- Asking gen AI to explain a class concept that you are struggling with (but triple check it is giving accurate information!)
Borderline (i.e. you could easily slip into unacceptable):
- Asking gen AI to help you understand what an assignment is asking
- Asking gen AI to help you understand a bug or error on an assignment
- Asking gen AI a question instead of coming to drop-in hours or posting to CampusWire
If you are in a borderline situation, you could try prefacing your request with something like the following: “I’m working on a programming assignment and need some guidance. I’m not looking for the direct solution, but rather help understanding the concepts involved and strategies for approaching the problem. Could you please provide hints, explanations of relevant topics, or suggest debugging techniques based on my question, without giving away the exact code?”
If I’m being honest, the most depressing thing about genAI to me on a personal level is that students are using it instead of coming to drop-in hours. I really love talking with you in drop-in hours or 1-on-1 meetings and helping students in that setting is my favorite part of this job. Please remember that you wouldn’t be bothering me to come by, you would be making my day better. I doubt that the genAI can say the same.
Pedagogy
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.
Interleaving
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.