On this page:
1 People and communication
2 Meetings
2.1 Lectures
2.2 Labs
2.3 Exams
3 Assignments
3.1 Lecture exercises
3.2 Labs
3.3 Problem sets
4 Grading
4.1 Corrections
4.2 Ordering
4.3 Getting and giving help
5 Contents
5.1 Readings
5.2 Software
6 Policies
6.1 Cell phones
6.2 Academic integrity
6.3 Sexual misconduct
8.14

Syllabus🔗

This course is about computing, programming, and how they go together. Its major goal is to introduce students to the principles of systematic problem solving through programming and the basic rules of computation.

The course does not assume any prior programming experience. It is therefore suitable for all students—majors and non-majors alike—who want to learn more about computing and programming. We will assume basic familiarity with arithmetic and algebra, and the course requires curiosity, self-discipline, and willingness to work with others for everyone.

Prerequisites: This course has no official university prerequisites, just high school precalculus math.

1 People and communication🔗

Welcome to computer science at Indiana University! We are the course staff of C211 and H211:

Name

Email

Position

Carlo Angiuli

cangiuli@iu.edu

Lecturer

Chung-chieh Shan

ccshan@iu.edu

Lecturer

Sam Tobin-Hochstadt

samth@iu.edu

Lecturer

Deo Akiode

dakiode@iu.edu

Undergraduate Instructor

Bo Basker

bbasker@iu.edu

Undergraduate Instructor

Salim Belhaj

sbelhaj@iu.edu

Undergraduate Instructor

Tanisha Chandrasekaran

tchandr@iu.edu

Undergraduate Instructor

William Hoffman

wiahoff@iu.edu

Undergraduate Instructor

Elizabeth Jiang

elijiang@iu.edu

Undergraduate Instructor

Jun-Hao Lei

junhlei@iu.edu

Undergraduate Instructor

Kyle Li

kyleli@iu.edu

Undergraduate Instructor

Anshul Mangalapalli

ankmanga@iu.edu

Undergraduate Instructor

Shreyas Menon

menonsh@iu.edu

Undergraduate Instructor

Mallory Miller

millemal@iu.edu

Undergraduate Instructor

Joey Myers

myersnj@iu.edu

Undergraduate Instructor

Shane O’Neill

shamonei@iu.edu

Undergraduate Instructor

Harmony Palmer

wirpalm@iu.edu

Undergraduate Instructor

Niyati Ramanathan

nramanat@iu.edu

Undergraduate Instructor

Aidan Vonderahe

apvonder@iu.edu

Undergraduate Instructor

Sujin Woo

woosuj@iu.edu

Undergraduate Instructor

Use Indiana University email (@iu.edu) to reach any of the course staff. Addresses are given in the table above.

Check your Indiana University email (@iu.edu) daily. We sometimes send you private messages there.

The primary way we post information about this course is on this Web site here. We use Canvas only to record your grades.

2 Meetings🔗

Every week, there are two lectures and one lab for you to attend in person. There will also be two evening midterm exams during the semester, and one final exam during final exam week.

2.1 Lectures🔗

There are 3 lecture sections. Each lecture section has 2 lectures per week:

C211

A591

H211

Time

Place

Instructor

34879

3670

Monday & Wednesday 9:45–11:00am

GY 1050

Sam Tobin-Hochstadt <samth>

5463

5462

Monday & Wednesday 3:00–4:15pm

SW 119

Chung-chieh Shan <ccshan>

1474

Monday & Wednesday 1:15–2:30pm

SW 220

Carlo Angiuli <cangiuli>

Your attendance in person is required. However, if you cannot attend (for example, if you are sick), contact your professor as soon as possible to find out how you should do the work so that your skills stay on track with this course.

CSCI-H211: Students enrolled in H211 will cover similar material and use the same Web page, submission server, and Discord discussion. However, H211 has separate lectures and labs, and students in H211 will also have additional homework requirements, lab exercises, and exam problems. All instructors are able to help with both H211 and C211 problems, but the H211 instructors are able to provide more specific assistance for H211 students. Corrections for H211 students must be presented to H211 instructors.

CSCI-A591: For graduate students enrolled in A591, the course will be identical to C211.

2.2 Labs🔗

There are 8 lab sections. Each lab section has 1 lab per week:

Letter

C211

A591

H211

Time

Place

Instructors

A

5312

Thursday 9:10–11:05am

BH 308

Anshul Mangalapalli <ankmanga>,
Niyati Ramanathan <nramanat>

B

5956

5949

Thursday 1:50–3:45pm

BH 118

Elizabeth Jiang <elijiang>,
Joey Myers <myersnj>

C

14173

Thursday 3:00–4:55pm

IF 3111

Jun-Hao Lei <junhlei>,
Mallory Miller <millemal>

D

1464

1453

Thursday 6:30–8:25pm

ED 2015

William Hoffman <wiahoff>,
Kyle Li <kyleli>

E

5069

Friday 9:10–11:05am

I 109

Bo Basker <bbasker>,
Tanisha Chandrasekaran <tchandr>,
Shane O’Neill <shamonei>

F

6507

6506

Friday 12:40–2:35pm

LI 503

Shreyas Menon <menonsh>,
Harmony Palmer <wirpalm>

G

14955

14956

Friday 3:00–4:55pm

SB 221

Aidan Vonderahe <apvonder>,
Sujin Woo <woosuj>

H

1475

Thursday 1:50–3:45pm

BH 107

Salim Belhaj <sbelhaj>

Your attendance in person is required. However, if you cannot attend (for example, if you are sick), contact your lab instructors as soon as possible to find out how you should do the work so that your skills stay on track with this course.

2.3 Exams🔗

There will be two midterm exams and one final exam.

The first midterm will be on Tuesday, September 24, at 7:00–9:30pm, in WH 100.

The second midterm will be on Tuesday, October 29, at 7:00–9:30pm, in BH 013.

The final exam will follow the campus-wide schedule:
  • If you’re registered for the Monday & Wednesday 9:45–11:00am lectures of C211 (34879) or A591 (3670), you must take the final exam in the same room (GY 1050) on Wednesday, December 18, at 8:00–10:00am (not 9:45am).

  • If you’re registered for the Monday & Wednesday 3:00–4:15pm lectures of C211 (5463) or A591 (5462), you must take the final exam in the same room (SW 119) on Monday, December 16, at 3:00–5:00pm.

  • If you’re registered for the Monday & Wednesday 1:15–2:30pm lectures of H211 (1474), you must take the final exam in the same room (SW 220) on Monday, December 16, at 12:40–2:40pm.

We will provide more information to help you to study as each exam approaches. To accommodate exam schedule conflicts and disabilities, please contact us as soon as possible.

3 Assignments🔗

The assignments of this course build on each other—to solve harder problems, you first have to solve easier ones. There are several different kinds of assignments:
  • The evening before each lecture, you will submit some lecture exercises to confirm that you are keeping up.

  • During lab each week, you will work on lab exercises to reinforce your understanding with the help of your classmates and lab instructors.

  • Most weeks, you will submit a problem set that tests your mastery of the content.

Posted assignments are listed by due date in the Due dates section of this Web site, and the grading policy is described in the Grading section below.

The following diagram shows how you should study on each day of a typical week.

3.1 Lecture exercises🔗

To prepare you for each lecture, we will post videos and exercises on this Web site—under Lectures always, and under Readings sometimes. Watch the videos and submit the exercises by midnight on Tuesday and Sunday before each lecture (except the very first lecture, and right after the midterms).

If midnight rolls around and you’re not done yet with some lecture exercises, keep working on them and reviewing the videos. See Ordering below.

3.2 Labs🔗

We will post the instructions for each lab on this Web site under Labs. You don’t need to read those instructions before you show up to lab, but you can if you want. We will grade your work at the end of the lab session to give you friendly feedback. The lab grade also includes a quiz, staying on task, and working with partners.

3.3 Problem sets🔗

There will usually be a problem set due every Wednesday by midnight. We will post the instructions for each problem set on this Web site under Problem sets. We will grade your work in a week to evaluate your learning and give you feedback in a shared Google Drive.

Before you tackle each problem set, first make sure you have finished the preceding lecture exercises. See Ordering below.

To help you with problem sets and answer any questions, the instructors will conduct Tutoring, both in person and online. Your attendance of tutoring is optional but highly recommended. You can come to tutoring and hang out even if you don’t have a specific question but just want to study!

4 Grading🔗

Your grade in this class will be determined by the following:
  • Online lecture exercises (10%). These exercises are automatically graded, and due by midnight before each corresponding in-person lecture.

  • Reading exercises (5%). These exercises foster discussion, and are also due by midnight before a corresponding in-person lecture.

  • In-person lectures and participation (10%). This is considered broadly, including helping and being helped by others in person and on Discord. This grade is not just for attendance, so it might be increased if you are extra helpful, or decreased if you are extra unhelpful.

  • Labs (10%). This includes your lab submission and your engagement in the lab activity. Helping and being helped by others is an essential part of computer science and of each lab.

  • Weekly problem sets (30%). C211 students get full credit for finishing at least 80% of each problem set, but are encouraged to complete all problem sets.

  • Exams (35%). The three exams are weighted roughly equally. However, to encourage you to persevere in the course, we will replace a portion of your first midterm grade by your second midterm grade or your final exam grade (whichever is higher). Similarly, we will replace a portion of your second midterm grade by your final exam grade (if higher).

    How big a portion will we replace? It is proportional to your grade for in-person lectures and participation (see item above). For instance, if your semester grade for in-person lectures and participation is full, then we will replace your first midterm grade entirely by your highest exam grade, and we will replace your second midterm grade entirely by your final exam grade if higher. In contrast, if your semester grade for in-person lectures and participation is half, then we will average your first midterm grade with your highest exam grade, and we will average your second midterm grade with your final exam grade if higher.

Final letter grade in the class will be determined as follows. Everyone who gets at least 90% will get some form of A, everyone with at least 80% will get at least some form of B, and everyone with at least 70% will get at least some form of C. If you have questions about your grade, please see your instructor.

4.1 Corrections🔗

If you receive a grade less than 9/10 on a problem set, you can raise your grade up to 9 by correcting your work and presenting it to one of us during tutoring or a scheduled appointment. Present your correction during the two weeks following the week in which your graded problem set becomes available back to you. We will ask you to explain your work.

We encourage you to get help from us as you prepare your correction, and to consult our feedback on your problem set, which you can find in a shared Google Drive. Partial corrections are welcome, and if you present your partial correction to us, we will give you additional time to finish your correction.

Exceptions: Grades of 0 cannot be corrected, except for the first problem set. A grade of 9 or above cannot be promoted to a higher grade. The last problem set cannot be corrected. The second-to-last problem set can only be corrected for one week.

Similarly, if you receive a grade less than 90% on an online lecture assignment, you can raise your grade up to 90% by resubmitting it through Handin. You can do this at any time, but the sooner you do it, the sooner you uncap your problem-set grades—see “Ordering” below.

4.2 Ordering🔗

The assignments of this course build on each other—to solve harder problems, you first have to solve easier ones. In particular, you should master lecture and lab exercises before tackling problem sets. To encourage you to build up your skills in this order, we will cap your grade on each problem set by your grade on the relevant lectures. The relevant lectures are listed at the top of the problem set. You can resubmit them at any time.

For example, Problem set 3 lists Lectures 2–4 at the top. If your average grade on Lectures 2–4 is 50% when you submit the problem set, then your grade on the problem set cannot exceed 50%. To lift this cap, you should redo Lectures 2–4 to perfection, and that will also prepare you to do the problem set.

4.3 Getting and giving help🔗

Tutoring is a great way to get help. Hours are listed on a separate page. Tutoring begins with the second week of classes, so there won’t be tutoring during the first week of classes. There also won’t be tutoring on the Wednesday after each midterm, and during final exam week.

Even when we don’t have tutoring scheduled, you can come to Luddy 0121 or Discord to talk with the other students (without sharing solutions).

We encourage you to look for help and to help each other on Discord, but you are not allowed to post or share homework code there. If you would like an instructor to look at your code, don’t post it in a public channel, but first type /breakout (with a forward slash at the beginning of the message) then hit Enter. This should create a “breakout channel” that only you and the staff can see. You can post your code and concern there. If that doesn’t work, send the staff an email or a DM (direct message: right-click on their name and choose “Message”).

5 Contents🔗

The topics of this course build on each other, so to understand later topics, it is crucial that you first master earlier ones.

A great way to study is to do from scratch the exercises we provide in lectures, labs, and problem sets, rather than merely reading or watching. This practice is important whether you are encountering a topic for the first time or reviewing it; the course staff is happy to answer questions not just about current homework but also about past homework. To help you find the material relevant to a topic, here is a list of topics and where they are taught in this course:
  • Arithmetic: lecture 1, lab 1, problem set 1

  • Definitions: lecture 2, lab 1, problem set 2

  • Design recipe: lecture 4, lab 2, problem set 3

  • Enumerations: lectures 5–6, lab 3, problem set 4

  • Structures: lectures 7–9, lab 4, problem set 5

  • Unions: lectures 10–11, lab 5, problem set 6

  • Recursion: lectures 12–14 and 18 and 20, labs 6 and 8, problem sets 6–7

  • Abstraction: lectures 15–17 and 19, labs 9–10, problem sets 8–9

  • Mutual recursion: lecture 21, lab 11, problem set 10

  • Generative recursion: lectures 23–25 and 27, lab 12, problem set 11

  • Accumulators: lectures 26–27, lab 13, problem set 12

5.1 Readings🔗

Our textbook is How to Design Programs, Second Edition by Felleisen, Findler, Flatt, and Krishnamurthi. It is available in print and freely online. You are not required to read the textbook, but you may find it useful to consult it occasionally.

This course will require you to read and discuss papers (and a talk) about computer science:
We will discuss and analyze these readings using Hypothesis, a service that lets us talk to each other as we read.

5.2 Software🔗

We will use DrRacket version 8.9–8.14 (not 8.2 or 8.3), a programming environment for a family of programming languages. We will stick to DrRacket’s student languages plus a small number of libraries.

DrRacket is freely available on the Web for you to install on your own computer. It runs on most popular platforms (Windows, Mac OS X, Linux, and other *nixes). Programs behave similarly on all platforms, so you do not need to worry what kind of machine you use when you run your programs.

We provide instructions for installing DrRacket on the Software section of this Web site.

6 Policies🔗

6.1 Cell phones🔗

Research has shown us that even having our cell phones on the table in front of us diminishes our ability to learn well. Checking texts, emails, and messages is also unprofessional and disrespectful to our class community. Please silence and store your phones during class. We will do so as well.

6.2 Academic integrity🔗

Like with a musical instrument or a sport, practice is the only way to learn the material in this course, and it can only be done by yourself. That is why we will strictly enforce the university’s academic integrity policy.

All homework assignments must be completed strictly by you. You are free to discuss an assignment with other people, so long as you acknowledge them by name in a comment in the homework you submit. However, you may not share code in any way, whether by voice, by writing, by print, by phone, by computer, or by any other way. Sharing code violates the University’s Code. Violations of academic integrity will be reported to the Office of Student Conduct and will hurt your grade.

One way to avoid sharing code is for each person who talked to erase everything afterwards. Then, each person who talked should do something unrelated to this course for 30 minutes, such as taking a walk or watching a show. Finally, each person who talked should redo the assignment from scratch without talking to anyone. This is not the only way to avoid sharing code.

It is academic misconduct both to receive shared code and to send shared code. Therefore, it is academic misconduct to submit any code received from outside the course Web site. Similarly, it is academic misconduct both to ask someone else to submit work in your name and to submit work in someone else’s name, no matter whether that work is an exam, a lab, a quiz, a problem set submission or correction, an online lecture exercise, a lecture worksheet, signing in at a lecture, a Canvas or Discord message, a Hypothesis annotation or reply, a conversation with course staff, a letter or email or message to course staff, or any other work.

Similarly, online code generating tools like ChatGPT or GitHub Copilot should be treated just like another person. Submitting code written by them is academic misconduct, just as for code written by another person. As with other people, asking questions of a service like ChatGPT is allowed, but you can’t share code. If you copy code from ChatGPT and paste it into DrRacket, that is almost certainly academic misconduct.

We don’t want this policy to stop you from getting and giving help. If you’re not sure whether it is ok to share something in public, just ask first! You can always talk to any instructor (listed under “People” above), and you don’t need to acknowledge them by name in the homework you submit. You can share code with any instructor, whether by voice, by writing, by print, by phone, by computer, or by any other way. In particular, to share anything with instructors on Discord, you can first type /breakout (with a forward slash at the beginning of the message) then hit Enter. This should create a “breakout channel” that only you and the staff can see. You can post your code and concern there. If that doesn’t work, send the staff an email or a DM (direct message: right-click on their name and choose “Message”).

6.3 Sexual misconduct🔗

One of our responsibilities is to help create a safe learning environment on our campus. Title IX and our own Sexual Misconduct policy prohibit sexual misconduct in any form, including sexual harassment, sexual assault, stalking, sexual exploitation, and dating and domestic violence. If you have experienced sexual misconduct, or know someone who has, the University can help. Visit http://stopsexualviolence.iu.edu/ to learn more. If you are seeking help and would like to speak to someone confidentially, you can make an appointment with the IU Sexual Assault Crisis Services at (812) 855-8900, or contact a Confidential Victim Advocate at (812) 856-2469 or cva@indiana.edu.

It is also important that you know that federal regulations and University policy require the professors to promptly convey any information about potential sexual misconduct known to us to our Deputy Title IX Coordinator or IU’s Title IX Coordinator. In that event, those individuals will work to ensure that appropriate measures are taken and resources are made available. Protecting student privacy is of utmost concern, and information will only be shared with those that need to know to ensure the University can respond and assist.