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

  • Instructor:
  • Course Website:
  • Slack Workspace
  • Lectures:
    • 100% asynchronous and remote
  • Discussions / Lab Sections
    • W - Thursday - 10-10:50am
    • X - Thursday - 2-2:50pm
    • Y - Thursday - 3:15-4:05pm
    • Z - Friday - 10:20-11:10am
  • 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.
    • Always by appointment:
      • Schedule a 15, 20 or 30-minute meeting with me. Calendly is a service that lets you drop a meeting on my calendar whenever I'm free. I will guarantee I can make anything with 24 hours notice, but I will try my best with anything sooner.
      • Message me in Slack and we can find a time to chat if those normal business hours don't work for you.

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 delivered asynchronously (with homework or "reading quizzes" replacing traditional labs).
  • Labs will be run remotely, but synchronously with a focus on discussing the homework and supporting the weekly programming assignments ("projects").

Waiver Policy

Juniors and Seniors are by waiver in this course in order to prioritize those using it as a gateway to the Major. Anyone with interest will be allowed to take the course, limited only by not wanting to overwhelm the course staff (ASIs, TAs, etc.).

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 (CS105, 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 readings and the homework, which is designed to highlight and encourage discussion over particular aspects of the readings.

Textbook: Think Python (2e)

We will be reading primarily from the free "Think Python" Textbook which is available both as an Online Web Page and as a downloadable PDF.

I have a paper copy, but you do not need to purchase a copy unless you prefer to read a physical book.

Inclusivity in Think Python

While the content and ordering of this textbook are both great, the examples leave much to be desired -- nearly every single example is 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 their examples are often filled with gibberish that I don't find particularly helpful or funny.

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 on Slack. Please do the same, if you find resources that answer your own questions.


Given the textbook and a variety of online materials that are available, the primary content I will be creating for this course will videos demonstrating hands-on use of our software "Thonny" as well as material to summarize and guide discussion, like our homework "quizzes".

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.

From Robert Lichenstein (rlichenstein@), lightly edited.

Zoom (emphasizing synchronous audio)

Our synchronous lab times will be conducted over Zoom, where we will occasionally use breakout rooms or share screens but we will focus on getting started with and having real-time discussions about the new projects each week. It is likely Zoom will be required for many of your other courses.

Look for the Zoom link for your lab in your lab-channel on Slack!


Slack is an online, real-time chat service used by a lot of businesses and other organizations. We will be using our free slack workspace to:

  • Provide a space for asking questions that is less formal than email and doesn't require a good Zoom connection.
  • Provide a long-lasting chat space, since Zoom chat disappears at the end of a call.
  • Provide the opportunity for students to have one-on-one or small group conversations given the course exists in virtual space this Fall.

I will be manually inviting students who are enrolled in the course to the Slack workspace in September.

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 in Slack 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.


Later in the course, we will explore how computers are constructed out of electrical logic gates and transistors. Logisim is software that will allow us to "build circuits" on our computers and test them. We will learn to install & use this software together, later in the course.

Course Structure

CS145 has no officially scheduled lecture session, but you will have been enrolled in a lab section: W, X, Y, or Z.

You are expected to attend our synchronous "lab" times each week. We will cover a lot of material asynchronously through the week (expect materials to be posted by Monday morning).

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.

Mondays: Readings & Homework

Video Content & Weekly Homework "Quiz" will be made available so you can begin reading, discussing, and trying examples whenever you start every Monday.

Wednesdays: Projects Due & Available

The project for the week will be released by Wednesday -- if you feel comfortable with the readings for the week you may begin early.

The project for the previous week will be due Wednesday at Midnight.

Thursdays/Fridays: Lab Session

Lab sessions are scheduled on Thursdays & Fridays. It is important that you come to the beginning of the lab section even if you feel you have managed to complete the weekly project and readings independently.

Deadline Conflicts

While projects are formally due every Wednesday, if you have recurring family or work responsibilities on Wednesdays, 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 weekly readings, homework, 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
Readings & Homework 20%
Projects 40%
Midterm 20%
Final 20%

Because homework may be perfected and resubmitted through our lab sections, it may be fair to characterize "Readings & Homeworks" as discussion or participation.

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 readings 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 in our synchronous labs, after which you will have the opportunity to update your answers.

I imagine that a successful strategy to learn from the homework & readings will be to:

  1. Read the chapters and take some notes.
  2. Attempt the "homework quizzes".
    • Try to assess your knowledge/notes: keep the book "closed".
    • Guess on questions that ask "What does this code do?"
  3. Use your experience of homework to guide your learning:
    • Re-read any sections on which you do not feel you know the correct answers.
    • Type in and run any code from the homework to verify whether your guesses are correct.
  4. Review the homework again, updating your answers based on your closer reading.
  5. Ask questions and share knowledge on Slack.
    • I will be fairly quiet here (focusing on clarifications, and giving thumbs-up to good discussions).
  6. Ask questions synchronously in lab.
  7. "Perfect" your homework answers & notes after lab.

When projects become available on Wednesdays, you'll want to be wrapping up your knowledge from the readings so that you will be ready to work on the new assignment in the second half of lab.

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.

Discussions should be Respectful

We will be using slack for the majority of course communication, as well as discussion of homework and reading questions. It is often difficult to convey tone -- especially with sarcasm or jokes -- in writing. We should all strive to be clear, welcoming, and respectful of others at all times.

Everyone is coming to this course with different backgrounds, and there is definitely no such thing as a "silly" question. If you are sharing your knowledge with others, or seeking their knowledge you must do so respectfully.

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.)

You will notice that I have my pronouns listed in my slack display & full names. I encourage you to do the same if you feel comfortable.

If you are communicating about another student and do not know their pronouns, go ahead and use their whole name to refer to them e.g., -- "I agree with @johnf.". You will notice that I also use they/them when referring to a hypothetical student.

Preliminary Schedule

This is quite a strange semester and time in the world -- this schedule represents my best guess about the future -- something will have to change. Check the online version on Canvas? for the latest.

Note especially the dates for the online midterm -- you'll want to make sure you have at least 2 hours of focus on the weekend of 23-25 of October. Contact me ASAP if there is an issue that weekend.

Week Start Discussion Topics Readings Projects Topics
0 8 Sept What is CS? Languages Ch1: Languages P0: Slack, Thonny
1 14 Sept Variables, Strings, Functions Ch2: Variables; Ch3: Functions & Modules P1: Variables & Arithmetic
2 21 Sept Conditionals & Recursion Ch5: Conditionals & Recursion P2: Decisions/Recursion
3 28 Sept Recursion & Loops Ch6: Return Values; Ch7: Iteration P3: Recursion/Loops
4 5 Oct Strings, Lists & Loops Ch8: Strings; Ch10: Lists and Loops P4: Loops
5 12 Oct Dictionaries, & Tuples Ch11: Dictionaries; Sets; Ch12: Tuples P5: Data Structures
6 19 Oct Midterm Review Practice Midterm Electronic-Midterm
- 23-25 Oct Electronic-Midterm: Fri/Sat/Sun Cumulative -
7 26 Oct Files & Data: Images, Sounds Ch9: Files "WordPlay"; Files & Data P6: Files
8 2 Nov Logic & Circuits Logic, Circuits, Architecture P7: Logisim
9 9 Nov Assembly Language; Objects Assembly; Ch15: Classes and Objects P8: hmmm
10 16 Nov More OOP Ch16: Classes and Functions, Ch17: Classes and Methods Final Project Begins
- 25 Nov Thanksgiving; Go Home - ...
11 30 Nov Complexity TBD Finish Final Project
Finals 7 Dec Final Exam