Due:
Points: points
Grading: Auto-graded (Can Resubmit)
Summary Details for COMP_SCI 111
Term Summer 2026
Course COMP_SCI 111: Introduction to Computer Programming
Prerequisites None
Instructor Prof. Connor Bain (connor.bain@northwestern.edu)
Lecture Time Asynchronous
Required Materials Zero Cost Course – (All course materials are open educational resources)

Note about Summer COMP_SCI 111

A reminder that this is normally intense 10-week course which has been squished down to 5 weeks. We’re trying to closely match the content / logistics of a “normal” academic year session which means this 5-week period will be very intense. While we have tried to build in flexibility in the course using the asynchronous format, you can expect to 1-2 hours per day (excluding the weekends) on the course every day during the 5-week summer session.

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 or COMP_SCI 150 (Note that the pre-req for a prior programming class has been removed starting in Fall 2026). While 111 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 to watching lectures and actively engaging, 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

This course is being offered asynchronously. However, it will still have deadlines to enforce pacing throughout the session. There will be 5 main sections of the course (roughly 1 week at a time)

  1. Introduction (Week 1)
  2. Function Abstraction (Week 2)
  3. Recursion (Week 3)
  4. Imperatives & Object-oriented Programming (Weeks 4 and first half of Week 5)
  5. Future Directions (second half of Week 5)

While there will be a suggested pacing for each of the individual components of each section, the end of each section of the course will be the “final” deadline for each of the components. Each section will be posted all at once and be open until the end of that scheduled section. Modifications to this flow will be announced via Canvas.

Content and Communication

All of the course content (lectures, slides, recordings, files, etc.) will be available via Canvas.

Course communication will be done via Piazza. Details on how to join will be available on the Canvas home page. All communication about the course should take place on Piazza rather than via email.

There will be synchronous office hours offered via Zoom. These will be scheduled on a week-to-week basis with the schedule available on our Canvas page.


Grading

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

Assignment Group Weightings
Tutorials 10%
Exercises 25%
Mini Quizzes (~2 per module) 10%
Quizzes 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: All grades for assignments prior to each Quiz will “lock” as soon as the quiz begins. Students must notify the instructor of any discrepancies prior to the start of any quiz. Grades will not be changed for any reason after this lock-in date (e.g. Any assignment that had a grade posted prior to Quiz 1 needs to be addressed prior to the beginning of Q1).

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 participation in the course. These will either be in the form of embedded quizzes inside lecture videos provided on Panopto or as standalone Canvas quizzes. All of these assignments will be submittable an unlimited number of times with the highest grade being the one that is “recorded” for the final grade calcuation.

Tutorials

Tutorials are programming assignments that are designed to take roughly 30 minutes. These can be viewed as “practice” or “warm-up” assignments for the following Exercise (more on those later).

These will be RKT files (programs) that are submitted via Canvas and then graded automatically (around 5 minutes after your submission posts to Canvas you will receive a grade). You may re-submit this assignment as many times as you would like with the maximum grade being the one that is “recorded” for the final grade calculation.

Because these are meant to be practice assignments, any grade above an 70% will be moved to a 100% (70 -> 100; 95 -> 100) at the end of that section of the course. While we recommend submitting until you receive a 100 from the autograder, it is ultimately up to you how much practice you want before moving on to the related homework.

Exercises

The Exercises serve as larger programming assignments that build upon the content we discuss in lecture and work on in Tutorials. Exercises are designed to take 1-3 hours of programming time. You will only be able to submit these assignments twice. This is because a goal of the course is to learn to test your own code. If you are only relying on the autograder to check your code for you, then you are not meeting this objective of the course.

This means 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.

Quizzes

There will be three closed-note / closed-resource cumulative assessments of your knowledge and practice of the course material administered via the Lockdown Browser with Respondus Exam Monitoring software. We understand that these testing monitor softwares are imperfect. Any violations detected by the system will be manually reviewed by a human.

Each Quiz will be partially autograded and then reviewed by the instructor (you can expect to receive your grade within 1 business day of your submission). Once your grade is posted, you will have 1 additional chance to re-take the Quiz. Your final grade for that quiz will either be a weighted average of your two attempts (60% first attempt; 40% second) or, if you only use one attempt, just that grade.

The second attempt must be completed by the following Wednesday of class.

The three quizzes will occur at the end section 1, section 2, and section 3. There will not be a quiz directly associated with section 0 and section 4.


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.

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.

Keep in mind that because the goal of this course is to understand the fundamental building blocks of programming, you are not allowed to use special (syntactic) forms that aren't introduced directly by the instructor.

Here are some specific guidelines:

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

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.