Term: Spring 2025
Instructor: Aline Normoyle
-
Welcome to systems programming!
-
Assignment 01 is Posted! Assignment 01: Due January 24
-
Our first lab will be on January 21st about using github
Course Info
Welcome to CS223: Systems Programming!
Systems programming is the foundation of all software and toolkits that serve as infrastructure for other software, such as compilers, operating systems, networking APIs, and graphics engines. Systems programming directly interacts with machine characteristics and low-level data types. Class topics include pointers, bit representations of data, x86_64 assembly, memory management, processes, and threads. In this class, students will gain hands-on experience implementing low-level algorithms and data structures using C. Additionally, students will build technical skills related to makefiles, interactive debugging, version control, and command-line shell interaction. C++ and STL will be introduced at the end of the course.
Meeting Times
Activity | Location | Time |
---|---|---|
Lecture |
Park 337 |
Tuesday and Thursday 10:10 AM - 11:30 AM |
Lab |
Park 231 |
Tuesdays 2:40 PM - 4:00 PM |
Office Hours - Prof. Aline Normoyle |
Park 200B |
Tuesdays, 4-5 PM |
Office Hours - Tianyun Song |
Park 231 |
TBD |
Schedule
The syllabus may change during the semester. Please check here every week for updates on lecture content, worksheets, and assignments.
Week | Date | Agenda |
---|---|---|
1 |
Introductions, Hello C
|
|
2 |
More C, Introduction to Pointers
|
|
3 |
Pointers, malloc/free
|
|
4 |
Pointer-based data structures. Debugging.
|
|
5 |
Binary and Data Representation
|
|
6 |
Assembly
|
|
7 |
The operating system, Processes
|
|
8 |
Spring Break
|
|
9 |
Threads I
|
|
10 |
Threads II
|
|
11 |
Threads III
|
|
12 |
Threads IV
|
|
13 |
Malloc
|
|
14 |
Memory
|
|
15 |
Code Optimization, C++
|
Text and Tools
-
Dive into Systems by Suzanne J. Matthews, Tia Newhall, and Kevin C. Webb. Available free online from Dive into Systems
-
Github Account Please go to github.com and register. You will be using github to submit assignments.
-
Slack Please go to slack.com. Our workspace is BrynMawr-CS223-S25. You can ask questions and request one-on-one help over zoom using this course’s slack channel.
Unix, Bash, Makefiles
Grading Policies
All graded work will receive a grade, 4.0, 3.7, 3.3, 3.0, 2.7, 2.3, 2.0, 1.7, 1.3, 1.0, or 0.0. At the end of the semester, final grades will be calculated as a weighted average of all grades according to the following weights:
45% |
Final Exam |
15% |
Assignments |
35% |
Code jams and quizzes |
5% |
Lab practice and class participation |
Labs, quizzes, exams
Labs and Quizzes are mandatory. No credit is possible for missed quizzes. If you must miss a quiz, you must make arrangements to take the quiz at another time BEFORE the scheduled quiz. If you miss a quiz for medical reasons, you must provide a doctor’s note.
Labs will consist of hands-on practice in teams, alternating each week between written exercises and timed coding sessions. Coding sessions will be graded and count towards your quiz grade. Worksheets count towards your participation grade.
There will be one final exam for the semester. Details and dates will be released during the semester. Please read the section on accommodations if you are in need of extra time. You must inform us of accommodations or conflicts at least 2 weeks in advance of the exam.
Quizzes and exams will be closed book. You may bring a single, hand written cheat sheet with you.
Homeworks and exercises
This course features weekly lab exercises and assignments which are an important component of the class.
Lab exercises will be passed out in lab. These exercises are intended to be short and will typically ask you to reproduce demos from class or tackle concepts you will need for your assignment. Lab exercises should be handed in at the end of lab.
Class exercises will be passed out in class. These exercises are intended to be short and will typically ask you to practice concepts from lecture.
Assignments will be posted Saturdays and due Friday before midnight. You are strongly encouraged to start early so that you can ask questions. See the syllabus for links to the assignments.
You will submit your assignments electronically using git.
Late Policy
Because practice is so important for learning skills, we will do frequent exercises, assignments, and quizzes throughout the term.
The purpose of this work is to give you hands on experience with the topics from class. Most of this work will be due in lecture or labs. The weekly time commitment for this course is aimed to be approximately 10 hours per week, including lectures and labs.
Assignments will generally be due on Fridays. However, you may request up to one late day (until Saturday) if necessary. No submissions beyond Saturday will be accepted. This allows us time to grade assignments. And it helps prevent you from falling behind. Note that with weekly assignments, you can miss a week or two without losing much credit on a final grade.
If you require an accommodation for exams and quizzes, this must be submitted to the instructor within the first two weeks or class.
Academic Integrity
At Bryn Mawr, we assume students are trustworthy and work with honesty and integrity. Look here for information about Bryn Mawr’s Honor Code.. Obviously, quizzes and exams must be your own work. However, you will be allowed to work with others on assignments; although everyone must still submit their own work.
Programming is a creative skill that takes practice and effort to develop. It’s essential that you develop your own skills for developing algorithms and implementing them through programs.
Quizzes and exams will be closed book. You will be able to bring a single cheat sheet with you.
The goal of assignments and labs is to help you prepare for quizzes and exams. The goals of quizzes and exams are to help you internalize the material (and provide feedback on how well you understand the material) so that you can grow towards your full potential as someone who can solve technical problems and who can create their own systems and devices. If you can sit down, focus, and answer questions within a time limit, you understand the material and can communicate that understanding to someone else. If you are doing worksheets and assignments but not doing well on quizzes, you need to re-think how you are approaching assignments. You can assess whether you’re effectively using assignments to learn if you can do the following after completing it:
-
Explain how your code works to someone else, without looking at your code
-
Explain the system calls necessary to complete your assignment without looking them up online
-
Write a similar program within a few minutes, without looking up help online
Here is advice that has worked well for me.
-
Most beneficial: writing my own programs from scratch, followed by stepping line by line using a debugger to make sure it worked as intended
-
When stuck, debugging the program with the help of a more experienced developer
-
Comparing my solutions with others after I finished my own solution
I do not recommend relying on stack overflow, copying old solutions, and using Chat-GPT. The absolute worst way to program is by cutting and pasting code you don’t understand, guessing your way to something that kind of works.
I am not going to police how you study and develop skills. If you’re not doing well, you need to figure out how to work differently.
Do’s:
-
DO discuss ideas and approaches with your classmates.
-
DO discuss ideas and approaches with your TAs and instructor.
-
DO search for documentation and sample programs for built-in C functions and C syntax.
-
DO use code from our text books and class (with attribution).
Don’ts:
-
DON’T use Chat-GPT (or other LLMs) to generate solutions.
-
DON’T copy full solutions, from online tutorials, previous students, etc
-
DON’T use functions and C syntax that is disallowed by the Makefile. We are deliberately using simple and portable C.
-
DON’T modify any basecode that comes with your assignment.
-
DON’T ever share your code with other students.
It’s ultimately up to you to learn from your assignments! No one is going to hire you to do work that they can easily do themselves using a search or AI program generator. You can only build expertise with experience and practice.
One final point: we will be using open-source repositories for homeworks in this class. Thus, it will be possible to see what other students (and previous students) have submitted. If you copy from others' repositories, it will be obvious, including potential employers! Only look at other solutions after you have finished your own first!
Academic Accommodations
Classes will be recorded and close-captioned. Links to lectures will be posted on the class slack.
To receive an accommodation for a course activity (such as more time on quizzes and exams), you must have an Accommodation Letter from the Office of Student Disability Services and you need to contact us to work out the details of your accommodation at least two weeks prior to the activity. Forms can be emailed to me, the instructor.
You are also welcome to contact us privately to discuss your academic needs. However, all disability-related accommodations must be arranged, in advance, through Student Disability Services. Also note that accommodations are not retroactive and require advance notice to implement. More information can be obtained at the Access Services website. (http://www.brynmawr.edu/access-services/)
Covid Policy
Lectures and labs will have a mask-friendly policy. All are welcome to wear a mask if they so wish, but no one is mandated to wear a mask.
If you are symptomatic (coughing, sore throat, or running nose), please either stay at home or come into campus with a mask. Lectures will be recorded so they can be watched later. Missed lab activities and quizzes will have their grade credit transferred to the final.
Academic support
Title IX
Bryn Mawr/Haverford College is committed to fostering a safe and inclusive living and learning environment where all can feel secure and free from harassment. All forms of sexual misconduct, including sexual assault, sexual harassment, stalking, domestic violence, and dating violence are violations of Bryn Mawr/Haverford’s policies, whether they occur on or off campus. Bryn Mawr/Haverford faculty are committed to helping to create a safe learning environment for all students and for the College community as a whole. If you have experienced any form of gender or sex-based discrimination, harassment, or violence, know that help and support are available. Staff members are trained to support students in navigating campus life, accessing health and counseling services, providing academic and housing accommodations, and more.
The College strongly encourages all students to report any incidents of sexual misconduct. Please be aware that all Bryn Mawr/Haverford employees (other than those designated as confidential resources such as counselors, clergy, and healthcare providers) are required to report information about such discrimination and harassment to the Bi-College Title IX Coordinator.
Information about the College’s Sexual Misconduct policy, reporting options, and a list of campus and local resources can be found on the College’s website:
-
This site was generated with asciidoctor t cheat