Foundations of Computer Systems
This course will provide a broad, programmer-oriented introduction to how modern computer systems execute programs, store information, and communicate. We examine the hardware and software abstractions and implementations required to go from a program expressed in a high-level programming language like C to the computer actually running the program. Topics include concepts of program compilation and assembly, machine code, data representation and computer arithmetic, caching and the memory hierarchy, processes, and system-level I/O.
Primary course goals include:
CSCI 2101 (Data Structures). Prior knowledge of C is not required or expected.
Instructor: Sean Barker
Office: Searles 220
Office Hours: Tues/Wed 1:30-3, Thurs 11-12:30, or by appointment.
Learning Assistants (LAs):
Sundays 7-9: Joshua Lin
Mondays 8-10: Lilly Armstrong
Tuesdays 6-8: Braden Fisher
Thursdays 6-8: Nhi Nguyen
Mondays, Wednesdays, and Fridays, 11:40 AM - 1:05 PM
Classroom: Searles 223
Course requirements include attendance and participation during class and lab sessions, completion of roughly 6 lab assignments, and 2 exams (midterm and final). Evaluation will be as follows:
Labs will be a mix of individual and group assignments and will be evaluated on program correctness, sound design, and proper coding style.
Lab assignments in this class will demand a significant time commitment on your part, and it is critical that you budget your time accordingly. To provide reasonable flexibility with deadlines, you are allotted three flex days for the semester, each of which may be used to submit an assignment up to 24 hours late (up to 72 hours late if all flex days are applied at once). For group projects, applying a flex day uses a flex day from each group member's allotment (but can be applied as long as at least one group member has a flex day remaining). Beyond the use of flex days, assignments will not be accepted after the posted due dates unless alternate arrangements have been approved in advance of the deadline. If you have an unusual situation that you foresee impacting your ability to meet a deadline, please let me know as soon as possible so that we can make a plan.
Some assignments include checkpoints, which are intermediate deadlines at which time part of the assignment is due. Checkpoints are designed to help you work steadily and seek out assistance early if needed. If you will not meet a checkpoint, you should contact me in advance of the checkpoint to indicate (1) where you are in the assignment, (2) what difficulties you are experiencing, and (3) what your plan is to catch up. Checkpoints are not formally graded. However, if you are not able to complete a checkpoint successfully, this is an indicator that you should reach out to discuss how things are going and how we can get you back on track. If you miss checkpoints without reaching out, I am not likely to accommodate difficulties in meeting the final deadline should such difficulties arise.
It is recommended that you acquire the following textbook:
R. Bryant and D. O'Hallaron. Computer Systems: A Programmer's Perspective, 3rd edition (2015). Available at Amazon or elsewhere.
The textbook covers most of the core topics of the course, and relevant sections of the textbook will be noted as we progress through the class. However, it is up to you whether you want to purchase the book yourself, and sharing/renting/borrowing/etc. may be a suitable alternative.
Note: we will be following the 3rd edition of the textbook; earlier editions are substantially different and should be avoided.
In addition, you may wish to acquire a good reference on the C programming language. As one example, below is the gold standard of C programming books (concise but fairly dense):
B. Kernighan and D. Ritchie. The C Programming Language, 2nd edition (1988). Available at Amazon or elsewhere.
We will use Slack to facilitate communication and discussion outside of class. In general, you should prefer messaging me on Slack (aka sending me a DM) over sending me email, as it is faster, more convenient, and likely to result in quicker responses. For this class, Slack will serve as an email replacement as well as a general-purpose discussion board and a repository of important class information.
Here is the CSCI 2330 Slack.
Collaboration is important and valuable in computer science, and some assignments in this course will permit working in a group. This section describes expectations and requirements for completing group work in this course.
For all group work, a single copy of the assignment will be submitted. Group members are expected to fully collaborate on the work, and all group members are responsible for understanding all parts of the assignment. In other words, it is not acceptable to simply split the work between the group members and complete the parts independently. For programming assignments completed in groups, most or all programming should be done with all group members working in front of a single (physical or virtual) computer. Group members should take turns ‘driving’ (writing code) and ‘directing’ (looking at the code, discussing, and offering suggestions).
Note that this requirement means that you should choose your group members carefully and deliberately. In particular, you should consider both your working styles and schedules; you cannot be an effective team if you cannot find suitable chunks of time to collaborate synchronously.
Forming a group: Each assignment that permits group work is given a "group deadline", which is the date by which groups must be determined (typically a few days after the assignment is released). To form a group, DM me on Slack with your group members. If you want to work in a group but don't have a partner in mind, let me know and I can try to match you. If I do not hear from you and you previously worked in a group, I will assume that you are working in the same group as before. You may also opt to dissolve a group and work solo, even if you worked in a group on a prior assignment. Group changes following the group deadline are not permitted without prior approval.
In the event that your group is not working smoothly for any reason and you do not believe it will be resolved, you should let me know as soon as possible. I can't address a problem that I don’t know exists!
Group reports: Each student working in a group is required to send me an individual group report at the conclusion of each group assignment. Your group report must (1) identify your partner(s), (2) summarize your own contributions to the assignment, and (3) summarize your partners' contributions to the assignment. The purpose of these reports is to provide mutual accountability within your group and to ensure that groups are functioning well. These reports do not need to be overly detailed and are often of the form "I worked with my partner on the entirety of the project together at the same time." Note that I reserve the right to adjust individual grades up or down from the group grade in cases of clear inequity, although this is not done routinely. Group reports should be DM'd to me on Slack and are due at the same time of the assignment itself. Your assignment will not be considered submitted until both the assignment and your group report is received!
Please review the Computer Science Collaboration Policy. You are responsible for reading, understanding, and adhering to this policy.
Group work follows the standard guidelines described above, with the exception that collaboration between members within the group is unrestricted and does not need to be cited. Any collaborations outside of the group must follow the standard guidelines.
Feedback is welcome on all aspects of the course as we go, either by DM on Slack or by using the anonymous feedback form. All forms of feedback are welcome (and the sooner that feedback is provided, the more likely it is that adjustments can be made in response).