An online, always up-to-date version of this syllabus can be found online.

  • Instructor:
  • Course Website:
  • Lectures / Discussions:
    • A - 75SHS 224 - Tuesday/Thursday - 9:30a-10:45a
    • B - 75SHS 224 (or online) - Tuesday/Thursday - 11:00a-12:15p
  • Lab Sections
    • W - Online - Friday - 8:00-8:50a
    • X - 75SHS 203 - Friday - 9:05-9:55a
    • Y - 75SHS 202 - Friday - 12:30-1:20p
    • Z - 75SHS 202 - Friday - 1:45-2:35p
  • Office Hours
    • Office Hours or "Student Hours" are times when I am available for you to discuss aspects of the course, Computer Science, Middlebury, your plans, your questions about college in general, or really anything else I might be able to help with.
    • I will discuss the best modality for regular office hours with students during the first week.
    • IRL; My Office - 75 SHS 218 - Tues/Thurs 2-4pm.
    • MWF - Zoom by appointment; via Calendly
      • Drop me an email if you want to meet outside of business hours.

Course Description

In this course we will provide a broad introductory overview of the discipline of computer science, with no prerequisites or assumed prior knowledge of computers or programming. A significant component of the course is an introduction to algorithmic concepts and to programming using Python; programming assignments will explore algorithmic strategies such as selection, iteration, divide-and-conquer, and recursion, as well as introducing the Python programming language. Additional topics will include: the structure and organization of computers, the Internet and World Wide Web, abstraction as a means of managing complexity, social and ethical computing issues, and the question "What is computation?" (Juniors and Seniors by waiver) (formerly CSCI 0101) 3 hr. lect./1 hr. lab

CSCI 0145 Middlebury Course Catalog

Course Modalities

  • Lectures will be available "Hyflex", that is: in-person and remotely. We will have lectures consisting of presentations, discussions, and in-class exercises / questions.
  • Labs will be run in-person, except for lab W with a focus on supporting the weekly independent programming assignments ("projects"). In a way, they will be like focused, mandatory office-hours.

Masking Policy

As of the start of the semester, Middlebury College is requiring masks for all indoor events. Since our class is an indoor event, we will all be wearing masks under that policy. While the college may lift this restriction at some point this semester, CS145 will maintain a mandatory mask requirement throughout the semester. Anyone wishing to attend without mask restrictions are encouraged to join via Zoom instead of in-person (link available on our Canvas site).

Attendance Policy

While participation is part of your grade, in-person participation being mandatory is not a great idea for public health and safety. Following best guidelines, one should stay home if they have any symptoms.

Stay home if sick. It won't ever hurt your grade.

Exercises will be structured so that participation is available remotely as well as in-person, for both sections of lecture, even if CS145B is the only one listed as true hyflex.

TA/Tutoring Sessions

Information about the tutors can be found at go/cstutors.

Temporary: There is usually tutoring every day from Sunday-Thursday, i.e., every night except Fridays and Saturdays. Tutors are your near-peers: Middlebury students who have completed this course in the past and are available for you to talk through ideas, problems, and technology.

Course Topics

This is an introductory computer science class and no prior experience is expected or required. It is one of a few different entry points (CS10x, CS150) into the CS major. We will do a lot of programming, and you will learn and practice a fair amount of Python, but this is an introduction to computer science, not a "Python" class. There is a lot of Python that we will not cover. Topics that we will cover include:

  • Abstraction, algorithms, and program design
  • Basic Python programming: variables, conditionals, loops, functions, and classes
  • Fundamental programming paradigms: functional, imperative, object-oriented
  • Data representation and storage
  • Computer architecture
  • Program complexity

Course Content

The primary mode of content delivery will be through lectures and the activities during lecture, which is designed to highlight and encourage discussion over particular aspects of the topics under discussion.


There is no required textbook for this course. A textbook I will likely be referencing is the free "Foundations of Python Programming" which has online activities.

Online Resources

There are probably hundreds of introductory Computer Science and Python courses available online (free or paid) and so at various points we have the opportunity to supplement our knowledge with online resources.

If I find resources I find particularly helpful, I will be sharing them via Canvas. Please do the same, if you find resources that answer your own questions.

Inclusivity in Python Materials

While the internet has a wide variety of Python and other programming materials, often, the examples leave much to be desired -- creatively, many examples, even in official python documentation, are drawn from the comedy routines of the British surrealist comedians "Monty Python" ...

To someone who's never seen any of their material (like me, the instructor!) that means that some examples you will find are often filled with gibberish (e.g., many references to "spam") that I don't find particularly helpful or funny for a general audience.

Course Equipment & Software

Since this course will be run virtually we will need to use software in addition to the course-specific software we would ordinarily setup and use.

Computer / Laptop Access

If you have any questions about computer access, please don't hesitate to contact me ASAP - - there are options through both the College and Department. Some more details are below, but I'm happy to help you navigate these systems.

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. Please get in touch ahead of time if you think you might need one. Due to COVID-19, short-term loans may be trickier than usual.

On Long-Term Use: College policy has changed recently to include the expectation for every student to 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.


Our course lectures will be 'broadcast' over Zoom, so that missing class for any health concerns is encouraged. If you feel under the weather, participate remotely, and follow college guidelines on testing.

Python via Thonny

We will install Thonny - a program to help us learn to write Python in the first week and use it throughout the course. There are installers for Mac, Windows, & Linux.

If you have any trouble getting this installed, reach out to me in lab or in Tutoring hours.

Online Python Access

If you have a Chromebook or cannot install Thonny (please consult with the instructor if this is the case), you will also be able to access Python through a website like This kind of access to Python will be far less convenient than having it on your personal computer but may be the best choice.

Course Structure

CS145 has two officially scheduled lecture sessions A & B, but you will have been enrolled in a lab section: W, X, Y, or Z. Please only attend the sessions for which you are enrolled.

Weekly Project Dates

In order to simplify our management of the course, the goal is for us to have consistent days each week to expect new material and projects.

Tuesdays & Thursdays:

Every Tuesday & Thursday (for the most part) we will have lecture, discussing not only ongoing work, but new ideas. Class time is meant to be interactive, and you should feel empowered to ask questions if information is not clear to you. We will be going over a large number of exercises during class time.

Fridays: Projects Due & Available

The project for the week will be released Friday mornings (or sometimes late Thursday evenings) and we will discuss the assignments during lab sessions, and be due the following Friday at midnight.

Deadline Conflicts

While projects are formally due every Friday, if you have recurring family or work responsibilities on Fridays, please let the instructor know as soon as possible, and we can work out a more feasible deadline for your situation. The value in a schedule is not usually the exact hard deadlines but rather in ensuring that our learning proceeds together, at a reasonable pace. The other importance of deadlines is ensuring that the graders and myself can get you timely and helpful feedback!

Grading Information

The following grading structure is meant to emphasize the importance of participation and projects while also including the midterm and final exams. Midterm and Final exams will likely include questions and ideas drawn directly from the homework and projects.

Section Weighting
Participation 10%
Projects 50%
Midterms 20%
Final 20%

Academic Honesty at Middlebury

As an academic community devoted to the life of the mind, Middlebury requires of every student complete intellectual honesty in the preparation and submission of all academic work. Details of our Academic Honesty, Honor Code, and Related Disciplinary Policies are available in Middlebury’s handbook.

Middlebury College Syllabus Template retrieved 18 August 2020.

Academic Honesty & CS

Work in computer science may often feel like a strange mix of art, language, mathematics, and logic. What sets this course apart from some of these other domains is the ability to instantaneously consult a "gold standard" for most of your work.

Does your python program work? A lot of the time, you can run it immediately, and find out. When we go to assess homework and projects, often we can only tell whether or not it works -- we can't tell if you understand it.

Do you understand your work? Especially in introductory CS courses, where the solutions are usually not that long, you can often land on a solution by making a small change, and not fully understand why it works now and it didn't before. You must take charge of your personal learning. Do not settle for "it works" if you do not understand why -- ask a question!

When you get the opportunity to discuss your work with other students, ensure that everyone leaves the group discussion with the same level of understanding. A working solution you do not understand has no value to your learning.

Because the solutions to our projects (in this course) are short, and there are limited intro-style problems to choose from, it is likely you will be able to find partial or full solutions to problems using online resources such as google or stack-overflow. A working solution you do not understand has no value to your learning.

Universal Access & Accommodations

The Disability Resource Center (DRC) at Middlebury provides for student accommodation in courses.

The DRC provides support for students with disabilities and facilitates the accommodations process by helping students understand the resources and options available and by helping faculty understand how to increase access and full participation in courses. The DRC can also provide referrals for students who would like to undergo diagnostic testing. Students who are on financial aid and have never undergone diagnostic testing can apply to the CTLR for support to cover the cost of off-campus testing. DRC services are free to all students.

If you have any accommodations through this office, please notify the instructor as soon as possible at the start of the semester so that your accommodation can be supported as quickly as possible.

I try to create course materials with "Universal Design" in mind: that is, I try to make it so that all materials can be accomplished fairly by all students: for example, I schedule double the expected time by default on all exams.

If there is any change that can be made to the course materials that would improve your learning, don't hesitate to ask or suggest such changes.

Student Expectations / Learning Strategy

I will often be comparing this course to a foreign language course. Learning about computers via a computer language like Python is quite similar to learning a second or third language; if you do not read, write, and speak the language, it will be difficult to make sense of concepts or to get the ideas to stick in your head.

To guide and demonstrate good learning practice, each of our lectures will be accompanied by a handful of (mostly) multiple choice questions. These questions will be more difficult than those designed for exams, because the goal of them is to drive experimentation and discussion, rather than to check knowledge. I will freely discuss the correct answers to these questions at any time.

Inclusivity & Discussions

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 must be a team effort so I expect you to join me in fostering such an environment. This class will represent a diversity of individual backgrounds and experiences, and every member is expected to show respect for every other member so that everyone can learn in this space. If you experience or witness any behavior that opposes this idea, it would be helpful for me to know so that I can address it, but I do recognize that this is additional work and 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.

Pronouns and Identity

I will use your preferred gender pronouns and name, and I expect you to use the names and pronouns your classmates prefer. (I understand that some students may be in the process of exploring their gender identity, may not feel comfortable sharing a gender pronoun, or may not go by gender pronouns; you can let me know if you do not want to share a gender pronoun.)

Preliminary Schedule

This is quite a strange semester and time in the world -- this schedule represents my best guess about the future -- something will likely require some changes. Check the online version of the syllabus for the latest.

Remember that Tuesdays and Thursdays (T/R) are lectures and Fridays are labs.

Week # Date DOW Lecture Topic
1 14-Sep T What is CS? Expressions
16-Sep R Variables & Function Calls
17-Sep F Proj. 1
2 21-Sep T Functions
23-Sep R More Functions & Conditionals
24-Sep F Proj. 2
3 28-Sep T Turtle; Loops
30-Sep R More Loops
1-Oct F Proj. 3
4 5-Oct T Strings
7-Oct R Lists
8-Oct F Midterm 1
5 12-Oct T Files
14-Oct R Immutable vs. Mutable
15-Oct F Proj. 4
21-Oct R Aliasing & Memory
22-Oct F Proj. 5
7 26-Oct T Sets
28-Oct R Dictionaries
29-Oct F Proj. 6
8 2-Nov T Recursion
4-Nov R More Recursion
5-Nov F Proj. 7
9 9-Nov T Application: HMM
11-Nov R Catch-up / Review
12-Nov F Midterm 2
10 16-Nov T Classes & Objects
18-Nov R More Classes & Objects
19-Nov F Proj. 8
11 23-Nov T Hardware
30-Nov T Complexity & Sorting
2-Dec R More Sorting & More Lists
12 3-Dec F Proj. 9
13 7-Dec T Application: Website
9-Dec R Catch-up / Review
10-Dec F Review
13-Dec Reading Day
14-Dec Finals Start
17-Dec Finals End