Instructor: Aline Normoyle

Course Info

Welcome to CS223: Systems Programming!

Systems programming provides a foundation for the implementation of programs and toolkits that serve as infrastructure for other software, such as compilers, operating systems, networking APIs, and graphics engines. 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. Furthermore, 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.

Course Preview

You will write C programs for most of your assignments, working with linked lists, arrays, bitwise operators, and files. We will also work at the bit-level with images in PPM format. Below are several examples.

With steganography, we can hide secret messages inside images.

monalisa

Rock, paper, scissors game
$ make rps
gcc rpc.c -o rps
$ ./rps
Welcome to Rock, Paper, Scissors!
How many rounds do you want to play? 2

Which do you choose? rock, paper, or scissors? paper
AI chose paper
AI score: 0, Player score: 1

Which do you choose? rock, paper, or scissors? paper
AI chose rock
Paper covers rock
AI score: 0, Player score: 2
Player wins!
Computing the Mandelbrot set using multiple processes

mandelbrot jitter

Computing the Buddhabrot probability distribution using multiple threads

buddhabrot 2000 1650142988

Meeting Times

Activity Location Time

Lecture

Park 245

Tuesday and Thursday 12:55 PM - 2:15 PM

Lab

Park 231

Thursday 2:25 PM - 3:45 PM

Office Hours - Prof. Normoyle

Park 231/Park 204

Thursday 4 PM - 5 PM

Office Hours - Trang Dang

Park 231

Wednesday 8-9 PM

Office Hours - Yitian (Zoey) Cao

Park 231

Thursday 7-8 PM

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-S22. You can ask questions and request one-on-one help over zoom using this course’s slack channel.

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

Jan 18,20

Hello C

2

Jan 25,27

Pointers

3

Feb 1,3

Debugging

4

Feb 8,10

Binary and Data Representation I

5

Feb 15,17

Binary and Data Representation II

6

Feb 22,24

Computer architecture

7

March 1,3

8

March 8,10

Spring Break

No meetings this week!

9

March 15,17

Memory I

10

March 22,24

11

March 29,31

12

April 5,7

Inter-process communication, Threads I

13

April 12,14

Threads

14

April 19,21

Code Optimization

15

April 26,28

Code Optimization, C++

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:

30%

Final Exam

30%

Assignments

25%

Quizzes (Code Jams)

10%

Lab participation

5%

Participation

Exam and Quizzes

There will be one final exam for the semester. Details and dates will be released during the semester. Please read the section on accomodations 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 open book. You will be given sample questions beforehand to help you study. Warning! Do not rely heavily on your notes for quizzes. You will need to have concepts memorized in order to finish within the time limit.

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 execises 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. Class execises should be handed in at the end of class.

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

Late Policy

Because practice is so important for learning how to program, 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 10 hours or less per week.

Assignments will generally be due on Fridays. However, you may request a 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.

If you need to miss a quiz, let the instructor know and alternate arrangements for taking it will be arranged if possible.

You may need to provide a doctor’s note if you need special accomodations due to a medical emergency.

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.

As you progress in this course, you will see that programming is a creative process, similar to writing. The same problem can be solved in multiple ways. It’s essential that you develop your own skills for developing algorithms and implementing them through programs.

Discussing ideas and approaches to problems with others on a general level is fine (in fact, we encourage you to discuss general strategies with each other), but you should never read anyone else’s code or let anyone else read your code. All code you submit should be your own with the following permissible exceptions: code distributed in class, and code found in the course text book. In these cases, you should always include detailed comments that indicates on which parts of the assignment you received help, and what your sources were.

  • Please don’t hesitate to ask the awesome teaching assistants (TAs) for help. They provide TA hours most week nights and are excellent mentors!

  • Please discuss the readings and associated topics with each other. Work together to understand the material. Reading groups to discuss the material are highly recommended — we will explore many ideas and it helps to have multiple people working together to understand them.

  • It is fine to discuss the topics covered in the homeworks, to discuss approaches to problems, and to sketch out general solutions. However, you MUST write up the homework answers, solutions, and programs individually without sharing specific details, mathematical results, program code, etc.

  • Under NO circumstances should you share computer code with another student. Similarly, you are not permitted to use code found on the internet for any of your assignments.

  • Exams, of course, must be your own individual work.

Academic Accommodations

All classes will be recorded and close-captioned. Links to lectures will be posted on the class syllabus.

Any student who has a disability-related need to record this class first must speak with the Director of Access Services, Deb Alder, as part of university policy. Class members need to be aware that this class may be recorded.

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.

Students needing academic accommodations for a disability must first register with Access Services. Students can call 610-526-7516 to make an appointment with the Director of Access Services, Deb Alder, or email her at dalder@brynmawr.edu to begin this confidential process. Once registered, students should schedule an appointment with the professor as early in the semester as possible to share the verification form and make appropriate arrangements. Please 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/)

Links that are related to the course may be posted here. If you have suggestions for links, let us know.