Syllabus
This is an introductory computer systems course, designed to expose students to a broad set of fundamental concepts in computer systems and their practical applications. It is best suited for students who have completed the intro sequence, and to those who may want to deepen their understanding of systems concepts. Programming languages used in assignments include C and C++.
Lectures | 1:00pm-2:20pm on Tuesdays and Thursdays |
Sections | Saturday through Wednesday during section weeks. |
Room | MacMillan 117 |
Lecture Notes | Published after each class on the schedule page. |
Textbook | None |
Prerequisites | CSCI 0200, CSCI 0160, CSCI 0180, CSCI 0190; or instructor permission. |
Instructors |
Nicholas DeMarinis (malte@cs.brown.edu) Malte Schwarzkopf (malte@cs.brown.edu) |
Office Hours | Malte: Tuesday 2:30p-3pm and 4-5pm; and Thursday, 2:30-3:45pm CIT 525. Nick: Monday, 1-2pm. |
Head TAs |
|
UTAs |
|
STAs |
|
Assignments | Six individual programming projects, several smaller labs, and post-lecture quizzes. Additional assignments for graduate students (see below). |
Incompletes | We expect everyone to complete the course on time. If unforeseen circumstances prevent you from doing so, please discuss with the instructor. Full incomplete policy see below. |
Late Policy | 144 late hours for use with projects (no more than 72 per project). The full late policy is described below. |
Grading | Projects: 48%; labs: 10%; mid-term exam: 13%; final exam: 16%; post-lecture quizzes: 10%; SRC project: 3%. |
Collaboration | We encourage collaboration, but require students to submit their own, individual solutions. The full collaboration policy is described below. |
Course Time | Students will spend approximately 3 hours per week in class (40 hours), and 3 hours per week doing labs or attending section (40 hours), and 8-15 hours per week on projects (110-200 hours). Assignment work for projects will vary; the total time commitment for the course is in the range of 190-280 hours. Time expectations are the same for those in the remote/asynchronous section: remote students watch the recorded lectures on their own schedule, attend sections (virtually, but still synchronously), and complete labs and projects on their own time. |
Remote Students | Students taking CS 300/1310 remotely will have access to TA hours via Zoom, to the EdStem discussion forum, and to the instructors' Office Hourse via Zoom (by appointment). They will also participate in synchronous sections. |
Course Details
- Course Description
- Requirements
- Assignments
- Grading
- Collaboration
- Diversity and Inclusion
- Late Policy
- Accommodations
- Mental Health
- Incomplete Policy
Course Description
CSCI 0300 covers fundamental concepts, principles, and abstractions that underlie the design and engineering of computer systems. You will learn how a computer works, how to write safe and performant systems software, and what systems abstractions support today's complex, high-performance systems developed in industry. Specific topics include machine organization, systems programming and performance, key concepts of operating systems, isolation, security, virtualization, concurrent programming, and the basics of distributed systems.
The course format is a combination of lectures, labs, and several hands-on projects involving programming exercises in C/C++.
Requirements
CSCI 0200 or CSCI 0160 or CSCI 0180 or CSCI 0190, or permission of the instructor.
Time Commitment
In addition to three hours per week in class, you will spend three hours per week doing labs or attending section and 8–15 hours per week on projects. The project times will vary: systems programming comes with bugs that sometimes are time-consuming to find. In general, earlier assignments will take less time than later ones.
Attendance at weekly sections is mandatory, although we give you one free pass to miss a section. If you miss additional sections, your course grade will be negatively affected by the equivalent of a missing lab for every section missed.
Assignments
Projects are due at 6pm (5:59:59pm Eastern time) on the Friday due date. There will be five projects handed out at two to three week intervals. We encourage collaboration among students (subject to the collaboration policy below), but all assignments will be graded based on individual solutions.
Post-lecture quizzes are due at 11:59pm Eastern time the day before the next lecture (i.e., Monday for a Tuesday lecture; Wednesday for a Thursday lecture). Owing to the small amount of credit they contribute individually, there will be no late submission. If you do encounter particular, unexpected hardships however, contact the course staff.
Lab checkoffs are due on Tuesdays at 8pm. You should complete the full lab assignment, and you will receive credit if your solution passes the tests; if it does not, but you demonstrate that you have made a reasonable effort, you will get partial credit. There is no late submission for labs, and you cannot use late hours on them. We will discard one (your lowest) lab grade, and all others will count.
Grading
Grading breakdown:
- Projects: 48%;
- Labs: 10%;
- Mid-term: 13%;
- Final exam: 16%;
- Post-lecture quizzes: 10%;
- SRC project: 3%.
For graduate students taking CSCI 1310, we will separately communicate the expectations for extra assignment work and our grading criteria will be included on each individual assignment.
Collaboration
CSCI 0300 projects require every student to turn in a separate code repository that contains their own code. Learning benefits from discussion, so you are welcome to discuss approaches and solution ideas with your classmates, but you must write your own solution code and answers to conceptual questions. Here's what that means and why we're doing it this way.
Collaboration is an important part of both CSCI 0300 and real-world software engineering. Talking through your code with other students leads to less stress and loneliness and to easier debugging.
But collaboration can hurt your learning, too. We want every student to have worked on every project, and to have encountered the intellectual challenges it poses. Simply asking your classmates to show you their solution and copying it hurts your learning, and constitutes academically dishonest behavior (i.e., plagiarism).
We seek a middle ground in which you don't feel isolated and form productive collaborations with your classmates, but still reason through your own code. We therefore ask every student to hand in separate code for each project. You may discuss this code with classmates and help your friends debug, but every piece of code you submit must be written by you and you must not submit wholly identical solutions. A good way to ensure this is for you to type in your solutions individually, even if you are discussing your approach with your friends and you help each other debug.
Collaboration is encouraged on all aspects of the course except exams. You are welcome to communicate with your classmates about strategies for solutions and about specific bugs, and you are welcome to use Internet resources for general information. However:
- You must not ask questions on Stack Overflow, paper.camp, or any similar site. Of course, if you search for some C/C++ problem, Stack Overflow answers may come up – just don't ask questions about the assignment code yourself.
- You must not use AI tools to write text or code for you. Consulting AI tools (such as ChatGPT, or others) to ask your own conceptual questions about course material is fine, but you cannot use their output in submissions for our assignments. In other words, treat AI tool like a fellow student in the course: you can talk to them, but not copy their output into your own work.
- You must not use solutions from past (or future) years.
- Acknowledge help from others. If a classmate, other collaborator, or online resource helps you, acknowledge this in your assignment submission. Name the helpers and briefly describe how they helped, including AI tools you used. (You do not need to cite help from course staff or resources directly linked from this site.)
- Do not post your code or solutions in a public place or make them available to future CSCI 0300 students.
Diversity and Inclusion
CSCI 0300 welcomes a diversity of thoughts, perspectives, and experiences, and seeks to avoid stereotypes. The class staff respects students' identities, including but not limited to race, gender, class, sexuality, socioeconomic status, religion, and ability, and we strive to create a learning environment where every student feels welcome and valued. We can only accomplish this goal with your help. If something is said in class or at TA hours (by anyone) or you come across instructional material that made you uncomfortable, please talk to the instructor about it or fill in our anonymous feedback form accessible under "Resources" in the navigation bar.
Late Policy
Each student has 144 total late hours for projects. These hours are designed to help you cope with unexpected emergencies, and only apply to project submissions. In other words, you can hand in your projects late, but the total amount of lateness summed over all the deadlines must not exceed 144 hours. For the purpose of calculating late hours, we exclude hours between midnight and 7am. This means that you can get a good night's sleep before you continue working on your assignment without losing extra late hours while you sleep.
If you don't hand in an assignment by the last day of classes, we'll give the assignment a zero (i.e., no credit whatsoever). However, if you hand an assignment in late, and your total late time (including the late time for that assignment) exceeds 144 hours, and you hand it in by the last day of classes, then we'll give it a D or an F depending on whether it seems to basically work. Therefore, it's better to complete and hand in a project even if you have already used your late hours.
You can divide up your 144 hours among the projects however you like; you don't have to ask or tell us, but you cannot use more than 72 hours per project. Finally, can only use the 144 hours for the projects, and not for post-lecture quizzes or labs. If you want an exception to these rules, you will need a Dean's note.
Finally, if you find yourself struggling, please contact the instructors as soon as you feel able; and if you have a health condition that affects your learning or classroom experience, please contact us so we can seek accommodations. We do not generally make exceptions to the late policy, but we work hard to help all our students complete the course without overwhelming stress.
Accommodations
Brown University is committed to full inclusion of all students. Please inform the instructor if you have a disability or other condition that might require accommodations or modification of any of these course procedures. You may email the instructor, come to office hours, or speak with the instructor after class, and your confidentiality is respected. We will do whatever we can to support accommodations recommended by SEAS. For more information contact Student and Employee Accessibility Services (SEAS) at 401-863-9588 or SEAS@brown.edu.
Mental Health
Being a student can be very stressful. If you feel you are under too much pressure or there are psychological issues that are keeping you from performing well at Brown, we encourage you to contact Brown’s Counseling and Psychological Services (CAPS). They provide confidential counseling and can provide notes supporting extensions on assignment for health reasons.
Incomplete Policy
We expect everyone to complete the course on time. However, we certainly understand that there may be factors beyond your control, such as health problems and family crises, that prevent you from finishing the course on time. If you feel you cannot complete the course on time, please discuss with the instructor the possibility of being given a grade of Incomplete for the course and setting a schedule for completing the course in the upcoming year.
Thanks to Robert Morris, Eddie Kohler, James Tompkin, and Tom Doeppner for providing policy text that we have adapted for CSCI 0300.