CMSC 14300 Systems Programming Summer 2026¶
In CMSC 14300 (familiarly known as CS143), students, building on their experience with applications programming and fundamental data structures in Python, develop a deeper understanding of a computer's operations when executing a program. In order to make the inner workings of the computer more transparent, we study the C programming language, with special attention devoted to bit-level programming, pointers and memory allocation, the stack/heap distinction, memory management, and file input and output. C is the lingua franca of computer programmers, and, though not without flaws and definitely not without quirks, it remains one of the great historic successes in the design of practical programming languages.
Unlike Python, where typing (i.e. assigning types to variables) is available but optional, C mandates that programs are correctly typed in order to compile them. We consider static typing and the role it plays in program development and memory layout. We revisit basic data structures including strings, arrays, lists, trees, and dictionaries (hash tables) and view them in closer detail and from a different perspective.
Students in CMSC 14300 will
- acquire a wide-ranging C programming toolkit, including control structures,
functions, enumerations, and
structanduniondefinitions; - use static typing to guide program development;
- employ recursion and iteration as complementary methods for repetitious computation;
- understand binary representations of data, and write programs operating at the level of bits and bytes;
- program with pointers, understand pointer arithmetic, and learn how to use indirection operators;
- learn to allocate memory directly and detect and correct memory leaks;
- weigh the advantages and disadvantages of linked and contiguous data structures as alternatives to one another;
- build dictionaries (hash tables) from scratch; and
- practice basic and advanced debugging techniques with lldb and valgrind.
Staff¶
Instructor¶
Suhail Rehman Office: JCL158 Office Hours: By Appointment
Course Logistics¶
Lectures¶
The lecture schedule is as follows:
| Day | Time | Location |
|---|---|---|
| Monday | 06:00 - 08:30 | RY277 |
| Wednesday | 06:00 - 08:30 | RY277 |
The breakdown of lecture topics will be as follows:
| Week | Topics |
|---|---|
| 1 | Basics, The Terminal, Control Structures, Functions, Loops |
| 2 | Operators, Bits, Binary Encoding |
| 3 | Pointers, Allocation, Arrays |
| 4 | Strings, Structs, Unions |
| 5 | Linked Lists, Hash Tables |
| 6 | pthreads, locks |
| 7 | trees |
| 8 | sorting, graphs |
Textbook¶
While there is no required textbook for this course, we recommend the "The C Programming Language" by Kernighan and Ritchie, (often referred to as "K&R").
Software¶
Students will need to have access to a computer running linux or MacOS, and
the first week of the course will contain instructions for setting up a local
development environment. We will be using clang as our compiler, and git
for version control. In addition, we will lldb for debugging and valgrind
for memory-use analysis. These are all free and open-source tools, and are
industry-standard for lower-level systems engineering. The skills you acquire
in using these tools will be directly applicable to future courses and internships
and jobs in systems programming and software engineering more generally.
Getting Help¶
I aim to meet students where they are and provide help in whatever form that is most effective for them. If you have questions about the material, please don't hesitate to reach out to me via Ed, or schedule a one-on-one office meeting.
Grading¶
Coursework will comprise of take-home programming assignments, weekly quizzes, and a final exam. The weekly quizzes and final exam will count towards 50% of your grade, and the programming assignments will be another 50%. We reserve the right to determine the final score to grade mapping at the end of the course, but you can expect that a 92% guarantees an A-, an 82 guarantees a B-, a 72 guarantees a C-, and a 65 guarantees a D-. The eventual grade boundaries may be lower than these, but they will not be higher.
Students that display an extraordinary discrepancy between their performance on the programming assignments and the quizzes and exams will be treated as special cases and may not be graded by the scale above.
Exams¶
We will have one in-class final exam which will be conducted during the last lecture of the class (Wednesday, August 5th). Further details about the exam will be provided later in the course.
Policies¶
Late Policy¶
You will be given a total of 3 late days for the programming assignments, which you can use at your discretion, and will be enforced using the gradescope submission time. You are free to use these late days as you wish, and they will be accounted for at per-minute granularity by Gradescope. If you exceed the late days, you will be penalized by 4% of the total course grade for each day, automatically enforced by Gradescope. No single assignment can be submitted more than 3 days late.
Extenuating Circumstances: If you have extenuating circumstances that prevent you from submitting an assignment on time, please reach out to me as soon as possible, and ensure that your academic advisor is aware of the situation. We have this policy in place to ensure that students are not penalized for circumstances outside of their control, and we will work with you to find a solution that is fair and reasonable.
Academic Integrity¶
You must adhere to The University of Chicago policy on academic honesty:
The above rules have the final say in all cases, but to summarize as it pertains to this course:
- Do not copy anyone's work.
- Do not allow your work to be copied.
- Do not submit work identical to another student's (this means more than just copying. Writing up detailed pseudo-code together can result in identical code that was not "copied").
- Document all collaboration.
- Credit all sources.
- Sharing work in advance of the deadline in any way, including posting to the internet, is expressly forbidden.
- If you use any source for a small question (e.g. how to loop through the keys of a hash map), please include the source as a comment in your code. For example:
Warning
We take academic honesty seriously and violations will result in serious consequences. If you are found in violation of our academic honesty policy, either through sharing or through copying, the effect on your grade will be severe. At minimum, your final course grade will drop one full step (letter). At maximum, you will receive an F in the course. Furthermore, please note that the instructors are required to report all infractions to the College. If you violate our academic honesty policy, you may be subject to further penalty or disciplinary action by the College.
Generative AI Policy¶
We recognize that the industrial present and future consists and will consist of a lot of machine-generated code. But this is irrelevant to those of you learning to write C code for educational purposes. We are of the opinion that delegating programming tasks to an LLM is fully detrimental to your learning, especially at the introductory level. Since even Google searches now answer queries with LLM-powered responses, it is not possible for us to have a blanket "no AI" policy, nor is it necessary. Our rules are as follows:
- You may not use an LLM to write code for CS143
- You may not pase your CS143 code into an LLM and ask for suggestions, improvements, corrections etc.
- You may not upload any course material to an LLM, including the course syllabus, homework assignments etc.
In short, make sure that your work is actually your work. These rules are entirely for your own good and you must commit to following them. We expect that you will do so and furthermore use discretion and good judgment generally about LLM uses we may not have thought to name.
Diversity¶
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 preferred gender pronouns you would like us to use, please let us know.
Accessibility¶
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 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 meet with me 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