Syllabus

Course Structure

This course is organized around two main activities: lectures and labs:

  • Lectures introduce the central systems concepts, with frequent connections to implementation details.
  • Labs provide hands-on practice with course concepts, homework preparation, and implementation details.

In addition,

  1. A series of homework assignments (all in C) will test students’ ability to apply the course concepts in a set of programming assignments.
  2. A series of coding assessments will be conducted in the testing center—these assessments are closely linked to the homework (and important concepts in them).
  3. In-class weekly quizzes will test a student’s understanding of the concepts.

Learning Materials

Textbook

We mainly use this online textbook.

Other useful books and references:

  • The C Programming Language, 2/e, by Brian Kernighan and Dennis Ritchie
  • C Primer Plus, 5/e, by Stephen Prata
  • Advanced Programming in the Unix Environment, 3/e, by Richard Stevens and Stephen Rago
  • C is Fundamental
  • If you’re having trouble understanding what a specific declaration is in C, use the cdecl command, or, if it is not installed, you can use the cdecl webpage.
  • For those who want to learn how to write better C, check out Prof. Parmer’s Composite Style Guide.
  • The Linux/Unix man page (for manual page) is your best and often most comprehensive guide to C standard functions and Linux/Unix system calls. It is available at the command line and also online, though we strongly recommend that you get used to the command line versions, since it will also help you during the assessments when you are not connected to the internet.

Grading

Quizzes 30%
Homework assignments 30%
Lab Assessments 30%
In-class Participation 10%
Extra Credit 5%

Weekly In-class Quizzes (30%)

Each weekly in-class quiz takes 10 to 15 minutes at the beginning of a lecture. It includes multiple-choice questions and/or short answer questions to test your understanding of recent learnings.

Homework Assignments (30%)

There are three main take-home programming assignments, plus a warm-up homework 0 consisting of four subparts that get you up to speed with the main ones.

Lab Assessments (30%)

There are four programming assessments to enhance your learning of the material that you have practiced in the (3 + 1) homework assignments. After a homework submission, the very next lab session will be a coding assessment in the testing center (same room as the lab, TOMP 405). You will be provided with a problem that is closely related to the homework you just submitted. You will have 45 minutes to complete the assessment on the testing center machine (and not your own). All electronics (phones, smart watches, etc.) must be put away. You will be provided with a computer with a Linux environment and the necessary tools to complete the assessment. You will not have access to the internet or any other resources.

Note: After a homework submission deadline and/or assessment has passed, we may select (either randomly or based on other criteria) a group of students who must show up at TA office hours within a specified number of days and answer oral questions about their submission. If any selected student either (a) fails to show up or (b) cannot answer the oral questions satisfactorily, then they will receive a failing grade for that assignment if that is the first such failure! Any subsequent failures of the oral exam will result in the student being reported for academic integrity violations. This is regardless of their score from the grading scripts.

Important Note about Grading of Homework/Assessments:

We use automated grading scripts. If your code does not pass these scripts, then you will be penalized accordingly.

The grading scripts will use hidden test cases. While they are “hidden”, they still conform to the specifications of the assignment. It is your responsibility to consider all eventualities that meet the specifications and test your code accordingly.

Class Participation (10%)

Class participation is highly valued. Students are expected to ask and answer questions during lectures. Note that participation is not graded based on the quality of your questions or answers; you will earn points as long as your contributions demonstrate active thinking about the course material. The instructor may also randomly call on students during class to answer questions.

Extra Credit for Active Learning (5%)

Up to 5% extra credit is awarded for demonstrably active learning in this course. There are two main ways to earn it. First, you can earn this extra credit through substantial active engagement in lectures and office hours—including both the instructor’s and the TAs’ office hours—with thoughtful questions and answers.

Second, activities that demonstrate that you make extra efforts to explore related topics beyond what the course covers are also rewarded. For example, we use the C language in this course, but there are other programming languages for systems programming. What about them? You can demonstrate your exploration of such topics by asking relevant questions in class and discussing them with the instructor during office hours or via email.

Lateness Policy

The late policy for this class is strict. This is for two reasons:

  • We aim to be fair. Once we get into the business of making exceptions, we lose the ability to be fair, and can (sometimes rightfully) get accused of bias. Uniform policies, applied to everyone, are our means of ensuring fairness.
  • Falling behind in this class is a slippery slope. As deadlines fall every week in the class, missing a deadline means that you have more work in the following week, which makes it less likely that you will be able to do it all. To succeed in the class, the number one optimization is to not fall behind.

Requests for extensions will be considered, but each request must be submitted via email before the deadline. The only acceptable excuses for late submissions are medical and family issues (or other exceptions like sports/athletics but need confirmation from your coach/athletic department).

Generally unacceptable excuses include:

  • your computer failing
  • lots of midterms/other assignments
  • forgetting to git add necessary files, or forgetting to git push (Proper git usage is a requirement for the class.)
  • you worked very hard and put a lot of time and effort in, but still are not quite there yet.

Homework assignments are due every week or every other week, so it is very harmful to get behind on them, or to add more work to your schedule. Thus, our late policy is quite strict to discourage procrastination.

Please note that in terms of academic honesty, you cannot share your code with your peers even after it is due.

Learning and Assignment Advice

Testing your implementation

You are required to test your own code. Our tests will attempt to test every edge case in the implementation. If you do not write code to test the edge cases of the specifications, then you will lose credit. This is the largest reason why students get lower grades than they believe they deserve.

If you believe that an error was made in grading, then please explicitly address why you believe your test cases are sufficient to test all cases. See the discussion about testing and debugging below.

Style and Code Craftsmanship

You must adhere to the class style spelled out in the lecture notes.

It is very important that you not only get your code working, but view your work as fine code craftsmanship.

As mentioned in the Learning Materials section, if you want to understand a more complete set of style guidelines, see the Composite Style.

Collaboration and the Honor Code

You are encouraged to work together. You may discuss the homework with other people to understand the problem and reach a solution. However, each student/group must write down the solution independently, without referring to written notes from others. Hence, you must understand the solution well enough to articulate it yourself. In addition, each student/group must explicitly mention the names of the people with whom they collaborated. As mentioned in the Lab Assessments section, if a student is asked to explain their code to the instructor or TAs but fails to do so adequately, this is regarded as a violation of academic integrity.

The purpose of problem sets in this class is to help you think about the material, not just give us the right answers. You are encouraged to use online resources for learning more about the material covered in class; however, you should not look for or use found solutions to questions in the problem sets. Specifically, you must not look at any code that has been created to solve the assignment, including solutions found on the internet to questions in the problem sets, code created by a student in a previous class or code created by a current classmate.

Note: We will regularly run a code analysis tool that will check for similarity among (a) all submissions in the current class and (b) submissions from previous years. If we find any similarities (the tool is very comprehensive) then you will be reported for academic integrity violations.

Academic Integrity

The George Washington University has a Code of Academic Integrity which we will follow in this class. Violations of the code, depending on severity, may lead to any (or all) of the following actions within this class:

Use of generative AI: AI tools such as ChatGPT and Claude are permitted for learning purposes, e.g., generating explanations for concepts. However, they are strictly prohibited from generating content for your assignments. Failing to follow this rule is a violation of academic integrity.

Consequences for Violating Any of the Above Policies

If we find violations of academic integrity (cheating, sharing code, use of unauthorized tools as mentioned above, or additional violations as decided by the teaching staff), then the following actions will be taken:

  • If this is the first violation in this class, your grade for the entire assignment (all parts) will be set to zero.
  • If a second violation is detected, your grade for the course will be set to F, and you will be reported to the academic integrity office.

Disability Support Services (DSS)

Any student who may need accommodations based on the potential impact of a disability should contact Disability Support Services (or call 202-994-8250) to establish eligibility and to coordinate reasonable accommodations.

Wellness

If any issue arises that may limit your ability to participate in class, for example, personal illness, family emergency, etc., please be sure to discuss these matters with your instructor as soon as possible and accommodations will be made available to you as appropriate.

Feelings of being overwhelmed are unfortunately quite common in the university environment and something we have all dealt with. You are not alone, and there are a number of resources available to provide support in those moments. Learning to ask for help is an important part of the university experience, and if you or anyone you know experiences any academic stress, difficult life events, or feelings of anxiety or depression, you are strongly encouraged to seek support. GW offers counseling services, and also consider reaching out to a friend, faculty member, or family member you trust for help getting connected to the support that can help.

If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night:

  • Student Counseling: 202-994-5300.
  • National Suicide Prevention Lifeline: 1-800-273-8255