Time and Location
Zoom Link
Section A: MW: 2-3:15 pm ET
Section B: MW: 3:35-4:50 pm ET
Faculty Info
Shelby Kimmel
Please call me "Professor Kimmel" or "Professor"
Pronouns: she/her
Office: 75 Shannon, Room 210 (but I will not be holding any in-person meetings here)
skimmel [at] middlebury (dot) edu
Office Hours
Location: Zoom Office Hours Link
  • Drop-in: Wed: 9:30-10:00 am, 11-12 am, Thurs: 3-4 pm , 9-9:30pm.
  • Individual Appointment: go/KimmelHours. (Use office hours Zoom link, not google hangouts link.)
  • If these options don't work, please send me an e-mail.
Peer Tutors
Sunday 7-10 pm and Thursday 6-8pm. See CS Tutoring Site for links
  • I will use Teams for all communication - you should get an e-mail when I post. You should also use Teams to communicate with each other to meet up or discuss problem sets rather than personal chat apps.
  • You can always e-mail me, but I will not answer problem set questions via e-mail, except for logistical or typo questions. Instead, come to office hours or schedule an appointment.
  • I will keep the Calendar up-to-date with our schedule and lecture notes. Assignments can be found on the homepage.
Important Sites
Department Wiki
Department Wiki


  • Develop strategies to become a better learner and collaborator.
  • Describe, design, and implement algorithms using the following paradigms: Divide and Conquer, Dynamic Programming, and Greedy.
  • Prove correctness of algorithms using inductive proofs and exchange arguments.
  • Analyze the runtime of algorithms. Analyze expected runtime of randomized algorithms using linearity of expectation and indicator variables.
  • Describe ethical implications of algorithms.
  • Create reductions from one problem to another and explain why reductions are important.
  • Understand the importance of NP-completeness, and be able to prove a problem is NP-complete.
  • Explain commonly used graph algorithms and their analyses, and design graph algorithms.

  • Environment

    It is important to me to create an inclusive learning environment where diversity and individual differences are respected and recognized as a source of strength. However, this is by nature a team effort, and I expect you to join me in fostering such an environment.

    You deserve a learning environment free of comments or assumptions that are based on race, ethnicity, national origin, accent, religion, sexual orientation, gender identity/expression, body size/type, disability, socioeconomic status, age, or any other part of your identity or perceived identity. I am continually working to recognize and unlearn my own biases and to keep them from causing harm. I expect you to do the same, and to be willing to have a dialog about these biases as needed.

    If you experience or witness any behavior that opposes the creation of an inclusive learning space, it would be helpful for me to know so that I can address it, but I recognize that this is additional work that may be difficult. If you are comfortable reporting such incidents, there are a few ways you can do so:

    You belong in this class and in the computer science department. Thank you for being here and for contributing to this course.

    Office Hours

    Office hours are a time for you to come and talk to me. For drop-in hours, you do not need to have an appointment - just join the zoom call. During office hours, you can ask me for help related to the course or assignments, or we can chat about how the course is relating to your life more broadly, or we can discuss anything else you want to talk about. You do not have to have a question to come to office hours - you can just pop-in for a quick hello, or listen to other students' questions. Here are some suggestions for what to talk about at office hours if you don't know where to start, or would like to expand your office hours conversations. If you have a conflict with a drop-in session, or if you have something you want to discuss privately, you can schedule an appointment at go/KimmelHours, or e-mail me with alternative times in order to set up an appointment. I look forward to meeting with you!


    I will use the name you go by, and pronouns if used, and I expect you to use the names and pronouns your classmates go by.

    Academic Accommodations

    Students who have Letters of Accommodation in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. For those without Letters of Accommodation, assistance is available to eligible students through the Disability Resource Center. Please contact ADA Coordinators Jodi Litchfield and Peter Ploegman in the DRC at for more information. All discussions will remain confidential.

    Laptop Loaner Program

    If you ever find yourself temporarily in need of a laptop, the Computer Science department has 10 rotating Dell laptops available to our students. These come pre-installed with software for most of the courses in the major. They are available to be loaned out short-term or long-term based on your need (as determined by you). Feel free to ask your professor ahead of time if you think you need one for just a class period, or you can send an e-mail to rlichenstein [at] directly.

    On Long-Term Use: College policy has changed recently to include the expectation that every student have a laptop available. The college provides laptops to those who need them where “need” is based on Student Financial Services calculations. If you anticipate needing a laptop for the whole term, we encourage you to inquire with Student Financial Services and the library first due to our smaller pool of equipment. However, our department commits to meeting the needs of every student, so do not be afraid to reach out if you believe you need one of our laptops for any length of time.

    Title IX

    You deserve a community free from discrimination, sexual harassment, sexual assault, domestic violence, dating violence, and stalking. If you experience or know of a Title IX violation, you have many options for confidential support and/or to report your experience. At go/titleIX you can read more about how to get help and support. Note that I am a mandatory (non-confidential) reporter.


    Learning happens when you develop new neural pathways. You do this by repeatedly practicing new skills. This takes time, patience, and perseverance. My role is to facilitate your learning by providing guided practice with feedback, and to help you structure the pace of your learning.

    Based on your past learning experiences, you may already have the neural pathways in place to quickly learn certain topics, while you may have to work harder on others. This has nothing to do with your ability to learn this material. You all have the capacity, with sufficient practice, to rewire your brains to become experts in this subject.


    Your being in class helps your classmates to learn, just like their presence will help you to learn. If you become distracted, whether through digital devices or analog daydreams, it not only affects your learning but hampers the learning of those around you; it can distract them, or it can make you unprepared to engage with your group. If your behavior is disruptive or distracting to the learning of your peers, I will give you a warning. If it continues, I will ask you to leave.

    Honor Code

    All work you turn in should be your own. However, collaboration on problem sets and programming assignments is encouraged. Please adhere to the following guidelines:

    For problem sets, you must acknowledge your collaborators, and write up your solutions on your own, using your own words. I recommend practicing solving some problems on your own, since this is what you will have to do for quizzes and exams.

    For programming assignments, you may work with others to understand the project and sketch out an approach. Then, when you are ready, without the notes you used while working with others, write your own program. You may also discuss debugging approaches with a peer, but you should make changes to your code on your own. You may use code snippets that you find online to implement specific functionality, if you make a note in a comment about where you found the code, but you should not try to find code online that implements the full assignment.

    First attempts at exams and quizzes must be entirely your own work, and should be completed only with the resources specified. Revisions can be discussed at a conceptual level with a peer or with me, after both students have completed the exam/quiz in question. If you discuss with a peer, please do not look at their submission, instead, you can discuss the concepts with them generally, or you can go over similar problems in more detail. Please do not post questions about quizzes to Teams Channels. Again, the actual revision should be completed on your own and in your own words.


    Your grade in this class will be based on a combination of effort and demonstrated skills. Most assignments will be credit/no-credit (but with revisions encouraged in the case of no-credit). This means you won't get a letter or number grade for any individual assignment or assessment. Instead you will get feedback. I've made this choice to increase equity and learning. Grades have been consistently shown to hamper learning, and they also often are correlated with your previous experience, rather the effort and learning you put into a given class.

    Effort Based Assessments

    Problem Sets (44 points)

    The problem sets provide you with low-stakes opportunities to practice problem solving, to make mistakes, and to make new neural connections before demonstrating skills in quizzes and exams. You will often have to transfer knowledge from a problem you've seen before to a new context. The only way to develop this skill is to practice. If you need additional practice beyond the problem set, see these textbooks.

    There are three components to problem sets, and all parts are submitted through Canvas:

    Participation (11 points)

    To get the most learning out of this class, you should actively and critically engage with the material through interactions with me and with your classmates in a consistent way. To get participation credit for a week, you should write an exit ticket within 24 hours after each class, and participate in some other active way with the course. You will self-report your participation at the end of each week (1 pt/week). There are no revisions for participation credit, but it is not necessary to get participation points to achieve a good grade. If you are dealing with extenuating circumstances that make it difficult for you to participate in the ways I've laid out, please alert me as soon as possible so that we can discuss alternatives.

    Reflections (30 points)

    Metacognition (thinking about how you learn) not only will help you to learn this material, but will help you develop strategies to be a better learning. The reflection, which you will complete in OneNote, should give me insight into you learning experience and process. See reflection instructions. (5 pt/reflection)

    Group Work (12 points)

    One of the most important skills I want to help you to develop is the ability to foster inclusive and productive problem solving teams. You will self-assess your effort and progress in this skill in your reflections, and I will provide feedback on how you can improve and further develop this skill. (2 pts/reflection)

    The goal of group work is not to get to the correct solution (in fact I will rarely give you enough time to fully solve the problem) but to learn from each other. Explaining your thoughts solidifies your thinking, hearing other people's perspectives broadens your conceptions. Additionally, working with other students will help you to build a community within the computer science department. Finally, practicing working in groups will help you to become a better team member no matter what you do after Middlebury.

    The following are some suggestions to participate in group work:

    Skill Based Assessments

    Quizzes (27 pts)

    Each week you will complete a quiz in Canvas (for many students the quizzes take under 30 minutes, but they are not timed) that asks you to demonstrate a skill similar to what you've practiced in that week's problem set or in-class problem-solving. You will receive feedback on your response, and if you have not demonstrated sufficient understanding/skill, you can revise until you do. (Often, one revision is sufficient.) If you revise, in order to get credit, you must also write a mini reflection discussing how your understanding of the concept has evolved. See revision instructions . (3 pt/quiz)

    Large Assessments (30 pts)

    There are two longer, cumulative assessments (15 pts each), that I provide several days to work on and that you submit to Canvas. (I do not expect you to spend multiple solid days working on them - instead you can work on them a bit each day that they are available.) Like the quizzes, you will receive feedback and can revise/reflect. I will give credit on a problem by problem basis based on whether you have demonstrated sufficient understanding/skill.

    Combination Assessments

    Programming Assignments (21 points)

    There will be three programming assignments. You will get partial credit for a good-faith effort to complete the assignment. To get full credit, you should create working code that satsifies any specifications of the assignment, is well organized, and is easy to read. See instructions. (7 pts each)

    Lateness and Absences

    Deadlines are primarily for your benefit. They will help you from falling behind, as this class moves quickly and assignments pile up fast. If you turn work in on time, you will also receive feedback in a timely manner and so can revise if needed. I might not have time to provide feedback for work that is turned in at the end of the semester, and so you might not have time to revise before the final day to turn in work.

    I expect you to attend class regularly and be on-time, in order to contribute to your learning and the learning of your peers. If you have to miss a class, please let me know as early as possible; you are still responsible for the missed material.


    Your final grade will be determined by the number of points you earn:


    There are no required texts; lecture notes are posted on OneNote. However, you may find the following textbooks useful for finding practice problems. In addition, you may find SensusAccess helpful, a service which converts pdfs into mp3 or ebook format.

    The following e-books are available through the Middlebury library or open access. If you find another resource that you is helpful, please let me know. If you would like to review topics from CS200, see these texts and several pdfs posted filed on Canvas Files Resources By Topic:
    Topic Chapters
    Divide and Conquer
    • ItA: 4
    • Algs: 1.1-3
    • ItA: 7
    • Algs: 1.5
    Dynamic Programming
    • ItA: 15
    • Algs: 3
    Greedy Algorithms
    • ItA: 16
    • Algs: 4
    Shortest Paths
    • ItA: 24/li>
    • Algs: 8
    NP and Reductions
    • ItA: 34
    • Algs: 12
    Randomized Analysis
    • ItA 5
    Creative Commons License
    This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.