An online, always up-to-date version of this syllabus can be found online.
- Prof. John Foley (email@example.com)
- 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.
- Always by appointment; Drop me an email if you want to meet outside of class.
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
- 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.
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).
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.
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.
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
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.
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 - firstname.lastname@example.org - 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 repl.it. This kind of access to Python will be far less convenient than having it on your personal computer but may be the best choice.
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.
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!
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.
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:
- Email or Talk to me
- Report it to our anonymous CS departmental climate feedback form
- Fill out a Bias Incident Report which goes to the Middlebury Community Bias Response Team
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.)
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||Meeting||Lecture Topic|
|1||14-Sep||T||What is CS? Expressions|
|16-Sep||R||Variables & Function Calls|
|2||21-Sep||T||Conditionals & Functions|
|14-Oct||R||Immutable vs. Mutable|
|21-Oct||R||Aliasing & Memory|
|11-Nov||R||Catch-up / Review|
|10||16-Nov||T||Classes & Objects|
|18-Nov||R||More Classes & Objects|
|30-Nov||T||Complexity & Sorting|
|2-Dec||R||More Sorting & More Lists|
|9-Dec||R||Catch-up / Review|