The design and implementation of programs which provide robust and efficient services to users of a computer. Macro processors; scripting languages; graphical interfaces; network programming. Unix and X are emphasized.
This course will help you develop a deep knowledge of the Linux/Unix userspace programming environment, and how a userspace process interacts with the operating system kernel. Specifically, you will:
This course is programming-intensive: you will develop several projects that incorporate the above topics. You will primarily use the C programming language to implement these projects. The course also includes short crash courses in shell scripting and Rust programming.
We will use gradescope for project submissions, and Blackboard for any online discussions, for posting any lecture recordings, as well as for tracking grades. Otherwise, the course materials will be published via this website.
You are free to develop the projects using whatever setup you like. The official setup is of course the gradescope environment, which is a standard Ubuntu Linux 22.04 system. The projects themselves have very few dependencies, so any recent Linux distribution will likely suffice.
If you wish, you can develop your projects on the CS department's Linux lab, which allows for remote access. If you do not already have an account, please follow the instructions for requesting access.
The course textbook is:
I will also include "crash courses" in shell scripting and the Rust programming language.
For shell scripting, I will reference:
For Rust, I will reference the official online book
If you need to brush up on C programming, the following books may be useful:
The course has six programming assignments and a final exam. The programming projects account for 70% of your grade, and the final exam the remaining 30%.
Each programming assignment is scored out of 100 points and carries equal weight. I will count only your four best assignments. If a student submits more than this required number, then the student's lowest scoring assignment(s) will be counted as extra credit at 50% of their value.
For instance, if a student submits five assignments with scores of:
and earns an 87 on the final exam, then the student's total final score is:
Your final numeric grade will be mapped into a letter grade "on the curve." Generally, 90 and above is an A; 80 to 89.99 is a B, and so on. I will adjust this scale downward as necessary.
There are no project extensions: every project is due on its due date. If you received a score of less than 80 points on a project (or simply did not submit), then you can resubmit the project by 11:59pm on December 13th to receive up to 80 points. In other words, even if a resubmission passes all of the unit tests, its final score is capped at 80. Resubmissions can also count as one of the "extra credit" projects.
Nearly every project will have extra credit points. I also plan to post one or two smaller assignments which are purely for extra credit toward projects.
While this is the initial grading plan, I reserve the right to adapt this plan throughout the semester to best meet the needs of the class.
William & Mary has a significant tradition in its honor code, stated below:
As a member of the William & Mary community, I pledge on my honor not to lie, cheat, or steal, either in my academic or personal life. I understand that such acts violate the Honor Code and undermine the community of trust, of which we are all stewards.
For this course, programming assignments must be completed on your own. The operative rule is that you may consult with your classmates on general issues about an assignment, but code remains private. You should neither show another your program source code, nor look at another's source code. Beyond that, you should adopt an "empty hands" attitude toward collaboration: talk about the project as you wish, but leave the conversation with nothing written.
There are three corollaries to this rule:
I reserve the right to use an automated service to screen project submissions for cases of code sharing.
I do not take attendance: attendance and classroom participation are not a component of your final grade.
William & Mary accommodates students with disabilities in accordance with federal laws and university policy. Any student who feels they may need an accommodation based on the impact of a learning, psychiatric, physical, or chronic health diagnosis should contact Student Accessibility Services staff at 757-221-2512 or at sas@wm.edu to determine if accommodations are warranted and to obtain an official letter of accommodation. For more information, please see www.wm.edu/sas.
As per the university's guidance, if you have a religious observance that conflicts with a deadline, please notify me as soon as possible so that I can attempt to make an appropriate adjustment.