Syllabus

Note

This is a tentative syllabus and subject to change.

Introduction to Computer Science II is the second course in a three course sequence (CMSC 15100-15200-15400) designed for students who intend to take more advanced courses in computer science. This course introduces imperative programming using the C programming language. Topics include program design, control and data abstraction, pointers and memory management, and data structures including lists, trees, and graphs.

NOTE: Non-majors may use this course to meet the general education requirement in the mathematical sciences; students who are majoring in Computer Science are required to complete either CMSC 15200 or CMSC 16200.

Prerequisites: Students must have completed CMSC 12100, CMSC 15100 or CMSC 16100 with a quality grade of higher than an F or with a P.

Course Staff

Instructors

Teaching Assistants

  • Sumaiya Ahmed

  • Zhe Heng Eng

  • Henry Hale

  • Samuel Shatzkin

  • Allison Zhang

Course objectives

The specific goals of the course are these:

  • to learn imperative programming techniques,

  • to build an understanding of the memory usage of computer programs, including an awareness of the stack/heap distinction, fluency with pointers and dynamic memory allocation and deallocation,

  • to design a variety of useful data structures including lists, trees, maps, and graphs, and

  • to analyze the efficiency of certain algorithms.

These goals will be reached in part by reexamination of techniques learned in the previous quarter in a new light. Broader, more technical treatments of these topics, in particular algorithm analysis, are presented in later undergraduate courses.

Course Structure

This class will meet three times a week for lectures, and once a week for for labs. Graded work includes homeworks, labs, projects, and exams.

Please see the Calendar - Spring 2022 more details on what happens on a day to day basis.

Lectures

Lecture Section #1

MWF 9:30am-10:20am

Morgan

Rosenwald 011

Lecture Section #2

MWF 11:30am-12:20pm

Rogers

Cummings Life Sci Center 101

Lecture Section #3

MWF 1:30pm-2:20pm

Morgan

Rosenwald 011

Absent any extraordinary circumstances, we expect students to attend all lectures and labs. That said, we do not keep track of attendance in this class and no part of your final grade is computed based on your attendance to lectures or labs.

Labs

Labs will be held on Tuesdays in the Computer Science Instructional Lab (CSIL) on the first floor of John Crerar Library (JCL).

Lab #1

T 2:00-3:20 PM

CSIL 3

Ahmed

Lab #2

T 2:00-3:20 PM

CSIL 4

Shatzkin

Lab #3

T 3:30-4:50 PM

CSIL 3

Ahmed

Lab #4

T 3:30-4:50 PM

CSIL 4

Hale

Lab #5

T 5:00-6:20 PM

CSIL 3

Zhang

Lab #6

T 5:00-6:20 PM

CSIL 4

Hale

Lab #7

T 6:30-7:50 PM

CSIL 3

Eng

Lab #8

T 6:30-7:50 PM

CSIL 4

Zhang

Lab materials will be released on Tuesdays and due on Wednesdays. The Tuesday lab sessions are intended to provide support as students work through the lab materials.

The grading for labs will be fully automated.

Homeworks

There will also be weekly homeworks, released Thursdays and due the following Monday. Homeworks will be graded for correctness, using automated tests, and for code quality.

We will drop the lowest homework score.

Project

In the latter part of the course, a multi-phase, multi-week project will have you writing the largest program of the quarter. Projects give you more experience with the kinds of considerations that come up when working on a large and sustained programming task.

Exams

There will be two exams: one held during fifth week and one held during finals week. The dates, (evening) times, and locations of these exams will be announced as soon as we have secured rooms from the registar’s office.

Grading

Your final grade will be based on the following:

Homeworks

25%

Labs

15%

Project

20%

Exam #1

20%

Exam #2

20%

The grade boundaries will be set based on class performance.

Late submissions

We will not be accepting late submissions, instead we will drop the lowest homework score.

If extraordinary circumstances (illness, family emergency, etc.) prevent a student from meeting a deadline, we may grant extensions on a case-by-case basis. Whenever possible, the student must inform their instructor of these extraordinary circumstances before the deadline.

Please note that having a heavy workload in a given week does not qualify as an extraordinary circumstance. The purpose of the dropped homework is precisely to give you some flexibility in weeks when you are busier than usual.

Regrades

We sometimes make mistakes, and are happy to review any incorrect grading decision. It is your responsibility to make these requests in a timely manner. Requests for regrades must be submitted no later than one week after a graded piece of work is returned to you. After that time, we will not consider any requests for regrades, regardless of whether the regrade request is reasonable and justified.

Please note we will only entertain regrade requests for actual grading mistakes. We will not consider requests simply because you are unhappy with the amount deducted for an error. Here is an example in which is would make sense to make a regrade request: suppose you receive a deduction that says “Incorrect: Function X did not check that parameter Y is greater than zero”. If function X in your code did perform this check, and the grader missed this fact (and erroneously took that deduction), you can ask us to review this decision.

Books

We recommend the following books as useful for learning to program in C.

  • C Programming Language, 2nd edition, Brian Kernighan and Denis Ritchie, 1988, ISBN: 978-0131103627

  • The Practice of Programming, Brian Kernighan and Rob Pike, 1999 ISBN: 978-0201615869

  • 21st Century C: C Tips from the New School, Ben Klemens, 2014, ISBN: 978-1491903896 (This book is a good second book to have on C. It is not a good first book.)

Policies

Policy on academic honesty

We take academic honesty very seriously in this class. Please make sure to read our Academic Honesty page.

Diversity statement

The University of Chicago is committed to diversity and rigorous inquiry that arises from multiple perspectives. We concur with that commitment and also believe that we have the highest quality interactions and can creatively solve more problems when we recognize and share our diversity. We thus expect to maintain a productive learning environment based upon open communication, mutual respect, and non-discrimination. We view the diversity that students bring to this class as a resource, strength and benefit. It is our intent to present materials and activities that are respectful of diversity: gender, sexuality, disability, socioeconomic status, ethnicity, race, religious background, and immigration status. Any suggestions as to how to further such a positive and open environment in the class will be appreciated and given serious consideration.

If you have a preferred name different from what appears on the class roster, or specific gender pronouns you would like us to use, please let us know.

Accessibility statement

The University of Chicago is committed to ensuring equitable access to our academic programs and services. Students with disabilities who have been approved for the use of academic accommodations by Student Disability Services (SDS) and need a reasonable accommodation(s) to participate fully in this course should follow the procedures established by SDS for using accommodations. Timely notifications are required in order to ensure that your accommodations can be implemented. Please contact your instructor to discuss your access needs in this class after you have completed the SDS procedures for requesting accommodations.

Phone: (773) 702-6000 Email: disabilities@uchicago.edu