Summary Details for COMP_SCI 111
Term Fall 2025
Course COMP_SCI 111: Fundamentals of Computer Programming I
Prerequisites None
Instructor Prof. Connor Bain (connor.bain@northwestern.edu)
Lecture Time Section 1. Monday, Wednesday, & Friday, 1:00 - 1:50pm
Section 2. Monday, Wednesday, & Friday, 2:00 - 2:50pm
Lecture Location Tech Auditorium
Required Materials Zero Cost Course – (All course materials are open educational resources)

Please note that this syllabus is subject to change prior to Sep 17, 2025.

About the Course

This is an introductory course on the fundamentals of computer science. This class is meant to allow students to explore many of the core concepts of computer science (CS) and serves as the first course in core sequence at Northwestern. It is specifically designed to be open to students of all backgrounds and does not expect any computer science knowledge or prior programming experience.

This is not a software engineering course.

Please note that if you are looking to learn a specific programming language (i.e. “learn how to code in Python”), please consider registering for COMP_SCI 110 instead. While this course is certainly “an introduction to programming”, it is first and foremost an introduction to core CS concepts. We use programming as a means to understand and implement these concepts rather than simply learning a single programming language. The ideas we talk about in this class apply to all programming languages and set the basis for you to be able to quickly pick up new programming languages throughout your future studies in CS.

This course uses the Racket programming language, specifically two dialects designed to help students learn to program called the Intermediate Student Language with Lambda (ISL+) and the Advanced Student Language (ASL), and its associated Integrated Development Environment (IDE) DrRacket as its main programming tools.

The main goal in this course is to learn how to design and reason about programs.

The reasoning part matters because programs never work the first time. So you need to be able to figure what it’s really doing and why, then change it to do what you want. Programmers are first and foremost detectives and diagnosticians. We’re doctors trying to understand why our patients are sick.

The design part matters because the only way you’ll be able to reason about it is if you design it in a way that makes it easy for humans to understand, whether said human is your future self trying to add a new feature, or someone else who’s taken over the project and is now trying to understand your code.

Beyond this main goal, the course has a number of interwoven learning objectives. Students will work to understand:

  • Composition (literally “placing together”): algorithms and data are built up by joining simple components into more complex ones.
  • Abstraction: Complex arrangements can be reproduced and used as if they were simple components.
  • Metaprogramming: Programs can be used to aid the process of programming itself.
  • Programmability and universality: Computers are unique artifacts in that a single device can perform an infinite set of possible functions, including emulating other computers.
  • Programming as a psychological discipline: Programming is more about the limits of human intelligence than about memorizing bits of code.
  • Programming as an aesthetic discipline: Code can be beautiful; it can also be ugly. Those distinctions have real consequences in the world.

Programming is a powerful medium for creative expression. It can be a representational medium, a tool for thinking about problems, a way of amplifying and/or communicating ideas, a means of performing complex calculations over massive datasets, and more. Being a computer scientist is not a prerequisite for creating useful or advanced programs. In fact, most people who write computer programs are not computer scientists, but rather people who occupy a range of professions. Journalists, geographers, sociologists, scientists, artists, musicians, entrepreneurs, researchers, etc., use programming languages to accomplish diverse and specialized goals. And as data and computing increasingly influence and perfuse modern life, understanding the mechanisms (and risks!) that underlie these systems is a valuable modern literacy that is likely to serve you well.

Learning to program is not dissimilar to learning a new spoken/written language–first, you need to understand basic rules like grammar and syntax, then you need exemplar buildings blocks like adjectives, nouns, and prepositions, and only then can you use these ideas together to create computer programs. What this means is that you must dedicate enough time to practicing the basics in order to allow yourself to progressively move to more and more complex programming practice.

Taking this course means committing—for 11 weeks—to attending lectures, tutorials, and office hours, turning in assignments, practicing your programming skills, and most importantly, persevering when things get difficult. Asking questions throughout the class is not a sign of weakness. It shows that you are actively trying to understand what you know and what you do not know. We have an excellent staff of teaching assistants and peer mentors who are here to answer your questions, help you understand course material in different ways, and push you to your fullest learning potential. With your consistent and active participation in learning, you can navigate the material in the course and become a proficient programmer by the end of the quarter.


Course Format

Our class will be partially flipped. While some of our reserved class periods will be used for interactive lectures where new concepts will be introduced, other days will be reserved for in-depth tutorials where students will be expected to review course materials (recorded lecture videos, slides, and notes) before the class period and during class we will work in small groups to complete an in-depth programming assignment.

The rough schedule of the course will be (there are some exceptions):

  • Mondays - Lecture Day
  • Wednesdays - Tutorial Day
  • Fridays - Practice+ Day

For lecture days, we’ll have interactive lectures where we introduce a new topic and focus on building a core understanding. For Tutorial days, you’ll work in your tutorial groups to complete an assignment during class time. On Practice+ days, we’ll do a little more practice along with previewing the next components of the course.

When we assign a pre-recorded lecture, students must watch the video before coming to lecture. Organizationally, some topics/modules span multiple lectures.

Office Hours

Office hours are a crucial component of this course. Everyone on our course staff is here to help you to be successful in the course and find your own power as current and future programmers. That said, it’s up to you to take the initiative and cultivate a weekly / bi-weekly practice of going to office hours that works for you and your schedule. This looks different for everyone: some people go to 1-2 office hours sessions per week and finish their homework with a TA or peer mentor nearby (if needed). Other students never go to office hours (though this is rare, as the exercises are challenging). Also, different people connect with different TAs/peer mentors, so do shop around to find a person with whom you work well.

Office hours are meant to be a time where you can ask questions that you need answered. That being said, we ask that you come to office hours having already thought about the assignment or issue you have been having. Please try your best to come to office hours prepared to ask questions like:

  • I didn’t understand X idea in lecture / tutorial this week. Can you explain it to me?
  • I’m having trouble finding a good place to start in this week’s homework. Can you help?
  • My laptop won’t run this code from class. What am I doing wrong?
  • My program is returning this error which I’ve tried to fix. What am I missing?
  • What courses should I take next after CS 111?
  • What kinds of CS-related careers and opportunities are out there?

Course Staff

This is a very large class and in order to better support each of your learning goals, we have 33 course staff members. Visit the Course Resources page for a Staff Directory of all our amazing course staff members!

Peer Mentors

Our Peer Mentors (PMs) serve as your first point of contact in the course. PMs will be assigned to tutorial groups so that you can build a relationship with them over the course of the quarter. They will also host office hours each week that will be open for all students. That means that there will be more than 60 office hours offered per week for our course. Please note that you are welcome to attend any office hours that work for your schedule and you’re not limited to your assigned PM’s hours.

Graduate TAs

You can think of our Graduate Teaching Assistants as “Super PMs!” Not only can they serve as meaningful course resources, but they can also provide broader context to our pedagogical approach, talk more about research opportunities in the field of Computer Science, and address concerns you may not feel comfortable with talking to a peer about.


Grading

Your course grade will consist of 5 weighted components: Tutorials, Exercises, Mini-Quizzes, Ethics Modules and Quizzes. The weights of each component are below:

Assignment Group Weightings
Tutorials (~10) 7%
Exercises (~10) 25%
Mini Quizzes (~2 per module) 7%
Ethics Modules (3) 6%
Quizzes (4) 55%

Your final grade will be the weighted average of all the above assignments. Final grades are assigned on a fixed scale which is set by the registrar’s office and shown below. Final course grades are not rounded or curved:

Letter Grades
A 94 - 100
A- 90 - 93.99
B+ 87 - 89.99
B 84 - 86.99
B- 80 - 83.99
C 70 - 79.99
D* 60 - 69.99
F 0 - 59.99

Note: The Graduate School does not recognize D letter grades meaning if you are enrolled in the class as a graduate student, the range for the F grade is 0-69.99.

Mini-quizzes

These will be short quizzes for each module of the course that serve as a check of your attendance and/or asynchronous participation in the course. For those that complete the Mini-Quiz in class, you will receive full credit for your attendance and full participation. If you choose to complete the Mini-Quiz remotely, you will need to complete the Canvas version of the quiz within 48 hours of your scheduled class time.

Tutorials

The idea of the Tutorials is to provide you with opportunities to both practice your own programming skill as well as learn to communicate with and help other programmers. As such, these Tutorials will be held on Wednesdays (with one exception) during our scheduled class time during the quarter.

These will start the second week of class and you will sign up for a particular Tutorial group at the end of Week 1.

By completing the tutorials, you will become familiar with the types of strategies you might use to approach problems , push you to write lots of programs, and help you assess what you know and don’t know so that you can know when to ask for more help in lecture or in office hours.

This course is meant to a be a learning community which requires the dedicated participation of all members. Attendance is required for the first Tutorial, but you may choose to submit future tutorials remotely.

If you attend the Tutorial session in-person and make a legitimate attempt (up to the discretion of your Peer Mentor) at completing the assignment, you will receive full-credit. If you choose not to attend in-person, then your assignment will be reviewed for completion and accuracy meaning you may nor may not receive full credit. Remote tutorials will be graded via the same autograding mechanism as the Exercises.

We will not accept late tutorial submissions.

Note: For mini-quizzes and tutorials that are attendance-based credit, you will be asked to complete some in-class activity to mark you as present. If you attended class but for some reason were marked absent, you can fill out this Attendance Petition form.

Exercises

The Exercises serve as larger programming assignments that build upon the content we discuss in lecture and work on in Tutorials. The 10 weekly Exercises will be spread across our 11 weeks of class and will be submitted on Canvas and generally due on Mondays before the start of class.

It is up to you to verify that:

  1. You have submitted the correct file.
  2. That your program runs without intervention (except those assignments that ask for human input).
  3. That your program is NOT dependent on running on your specific computer.

These exercises will be graded via an autograder (computerized grading machine) as well as checked for plagiarism against other students’ (including from past quarters) solutions, online solutions, and a large database of course content.

You may submit these assignments up to 48 hours late with a 10% (edit: changed from 12.5% to 10%) penalty per 24-hours.

Ethics Modules

Given the role of CS111 as the first course for all CS majors and many others with an interest in CS, the course also aims to develop core skills in critical analysis of ethical issues with an emphasis on self-reflection, finding purpose, and intersectionality. Students are asked explore different “topic modules” that introduce broad topics in ethics.

Students must engage in 3 ethics related activities during the quarter:

  • One introductory module which covers the ethics of social media and introduces a framework for thinking about the impact of certain technologies.
  • Attendance at one topic module that students will select based on topic interest and availability. They will complete a short reading beforehand in order to be ready to discuss the topic and complete a short reflection after attending.
  • One final reflection module which asks students to reflect on their engagement with ethical issues and their relationship to technology by producing a short write-up comparing and contrasting the topics that students learned in topic modules.

Quizzes

There will be four cumulative assessments of your knowledge and practice of the course material administered in-person during our assigned class time (50 minutes). Please see the Class Schedule for the tentative dates of those quizzes. They will each have a different focus topic: Q1 (Fundamentals), Q2 (Recursion), Q3 (Imperative Programming), and Q4 (Summative).

Grading Equity

The course is specifically designed to be academically equitable to all students when it comes to assessment and has two special policies related to grading: 1. An emergency erasure policy; 2. A late penalty waiver.

These two policies are provided to accommodate the myriad situations that students encounter over the life cycle of the class (e.g. student org travel, sickness, etc.). This built-in leniency means that there will be no other exceptions to the course syllabus without prior authorization from the Dean of Students at Northwestern. I cannot offer any other leniency, make-up assignments, extensions, etc., outside these policies.

Late Penalty Waiver

The late penalty waiver applies ONLY to Exercises and is meant to accommodate students who may have a particular week during the quarter where they are unable to complete the assigned Exercise on-time. Students may apply (using a Google Form included at the bottom of each assignment) to have the late penalty waived for a particular assignment with two restrictions:

  • Students must request the late penalty waiver via the form at least 24 hours in advance of the Exercise deadline.
  • Students may request extensions on 2 assignments throughout the quarter.

The policy is deliberate in that you, as a student, must actively consider at least 24 hours in advance of the deadline that you will need extra time to complete this assignment. If you find yourself needing extra time on consecutive assignments, this is a good sign that you need to reach out to someone on the Course Staff for help.

There will be no exceptions to this policy. Once you are granted a waiver, it cannot be voided.

Emergency Grade Erasure

The emergency grade erasure policy acknowledges that often times life situations occur that make it impossible to keep up in a course. Do not use this a planning or scheduling device. This is specifically meant to take care of emergencies that happen in your life during the quarter.

  • Your lowest quiz score (including 0s) is dropped
  • Your lowest tutorial score (including 0s) is dropped (excluding the final tutorial assignment in Week 11)
  • Your lowest exercise score (including 0s) is dropped (excluding the final exercise in Week 11)
  • Your two lowest Mini-Quiz scores (including 0s) are dropped

If you choose to drop an assignment early in the quarter only to find yourself in an emergency situation later in the quarter, you will need to reach out to your Dean of Students in order to arrange for flexibility across all of your coursework.

This policy will be automatically applied at the end of the quarter for all students. No action is required on your part.


Course Materials and Resources

This is a zero cost course meaning that you are not required to purchase any additional materials to complete the course outside those required by the university as a whole. All required course materials will be distributed to registered members of the class directly via Canvas.

Course Software

We will be using some free software programs and libraries in order to write, debug, and run ISL+/ASL programs. Installing and configuring this software can be a huge hassle, but it is part of the process of developing your computing proficiencies. Please note, you will need a computer capable of running Racket 8.14 in order to participate in this course. Any Windows/Mac/Linux computer from the last decade should be fine, however, you may encounter difficulties using a Chromebook, iPad, or other non-standard operating system.

If you do not have access to appropriate computing hardware, please let the course staff know as soon as possible so that we can help you make other arrangements either a computing loaner program or arranging for you to use a computer lab on campus.

edSTEM

Ed (sometimes called edSTEM) is a Question-and-Answer site that allows students to ask questions that can then be answered by either Course Staff or other students in the course as well as create discussion areas about both related and unrelated topics.

Check out out the Course Resources page for the registration link.

Auxillary Texts

While we will not follow any textbook exactly, we will use two auxiliary texts which can serve as an excellent resource both for students looking for different perspectives on the course content as well as students looking for additional content outside our syllabus (note, both are free to access online):


Academic Honesty

In the past, there have been incidents in which students have presented work other than their own. This course (and our department and school) take Academic Integrity very seriously and report all instances of Academic Integrity Violations to the Dean’s Office. Many of each violation type below were reported to the Dean's Office last quarter alone.

Every student submission is subject to an in-person audit/interview by course staff. If there is any part of your program, both its function and the process by which you designed it, you cannot explain–up to the satisfaction of the instructor–it will be considered a violation of Northwestern’s Academic Integrity policy and you will receive an automatic 0 on the assignment.

For the programming assignments, you are allowed (encouraged, even!) to discuss general approaches to solving problems, but all work you submit must be your own. Working “together” and presenting variants of the same file is not acceptable.

Here are some specific guidelines:

  • Other than during in-class Tutorial assignments, you should never look at another student’s code.
  • The only code you should look should either have been posted / created by the Course Staff or included in one of our auxiliary textbooks.
  • Do not exchange programs or program fragments in any form with other people (students, peers, family members, or strangers) – on paper, via e-mail, or by other means.
  • Do not copy solutions from any source, including the web or previous CS 111 students. Even having a copy of these solutions from a previous quarter will be considered a violation.
  • Do not attempt to turn in code that has been generated, in-part or in-whole, via any computational means.
  • If you turn in code that you yourself did not both conceive of and type into your computer, you have committed a violation of Northwestern’s Academic Honesty Policy.
  • You may not use programming primitives not introduced in the course.
  • Uploading materials from this course to any repository/page is prohibited by Northwestern’s academic integrity policies, and may also put you at risk for violating copyright policies in Northwestern’s Student Conduct Code.
  • Do not attempt to claim attendance for class periods in which you did not physically stay in the classroom for the entire class period. If you are found to have incorrectly reported your physical attendance at lectures, tutorial sessions, or quizzes, you will be immediately referred to the Dean of Student’s Office and you will be assigned a grade of 0 for all such instances.

Contact Prof. Bain if you have any questions about what is appropriate. Please note that all suspected incidents of violating the Academic Integrity of the course will be reported immediately to the Dean of Students.


Statement of Inclusivity

This course strives to be an inclusive learning community–respectful of those with differing backgrounds and beliefs. As a community, we aim to be respectful to all learners in this class, regardless of race, ethnicity, socio-economic status, religion, gender identity, or sexual orientation. There will be an optional survey administered at the beginning of the quarter asking you to provide the name and pronouns that you use. This information will be shared with all members of the instructional staff. You are welcome to correct us on your name or preferred pronouns if a mistake is made. If you have concerns, please contact Prof. Bain.


Northwestern University Syllabus Standards 

This course follows the Northwestern University Syllabus Standards. Students are responsible for familiarizing themselves with this information.