It may be replaced with an updated version later this semester. [Permalink to this version]
Meetings Tuesdays and Thursdays, 11am-12:15pm in Olsson 120
Teacher David Evans
Office Hours (in Rice 507) Tuesdays, 4-5pm; Fridays, 3:30-4:30pm; Tuesdays and Thursdays after class.
Course Site http://rust-class.org/ All course materials will be posted here.
IRC We will use the "cs4414" chat room at irc.mozilla.org for real-time chat. (See IRC for more on IRC.)
According to the COD:
Analyzes process communication and synchronization; resource management; virtual memory management algorithms; file systems; and networking and distributed systems.
That description describes some of the topics we will cover in cs4414, but doesn't capture why anyone would want to take a course on these topics, or what you should hope to get out of it.
The primary goal of this course is to understand what underlies the core abstractions of modern computer systems.
We want to do this because:
Understanding how these abstractions are designed and implemented will enable you to use them more effectively.
Exploring these abstractions will get at some of the most intellectually interesting concepts in compter science, in the context of making practical systems.
Being able to modify computer systems at a lower level gives you powers that mere application programmers can only envy.
Most programming today is done at a very high level. For example, you can implement a simple web server in Python using one line of code.
Of course, writing one line of code that uses a provided library method isn't enough to understand much about what is going on with a web server. If you want to develop a better web server, figure out what is going on when the web server performance is too low, or distrubte your server over a global network, you need to understand more. In this class, we will enter the black boxes that most programs use as abstractions and understand how they work and how to implement them efficiently and robustly.
By understanding how to implement network protocols, manage memory, use multiple threads, and design file systems we can develop
The other main goal of this course is to provide experiences and knowledge that will help you develop as professional programmers and computing system designers. This includes:
- Experience working with larger and more complex programs (than you have encountered in previous classes).
- Experience working in a team, both as a leader and contributor.
- Experience learning to use a new programming language mostly on your own, without much guidance or available documentation.
- Experience using tools commonly used by productive developers (including git and Make).
Students entering this course are expected to be comfortable reading, designing, and writing complex programs that involve thousands of lines of code distributed over many modules. You should be comfortable learning how to use new programming language features and APIs by reading their documentation and available examples, and not be surprised when solving programming assignments requires you to seek documentation beyond what was provided in class.
Some specific things I would expect of students entering this course:
You should have some experience programming in C or C++ and some exposure to assembly language programming (at least as much as is covered in cs2150).
You have written at least one program with over 5000 lines of code.
You should be able to explain the difference between inheritance and subtyping.
You should know why the time it takes to read the value of different variables can vary greatly.
You should understand why it is impossible to determine if an arbitrary program will fail to run to completion (e.g., exit with a run-time error), but why it is often possible to reason about correctness of a given program.
You should be able to explain why an algorithm whose worst-case asympotitic running time is in Θ(N log N) may be preferred to one whose worst-case asymptotic running time is in Θ(N).
As a student at Mr. Jefferson's University, you are trusted to be honorable.
We take advantage of this trust to provide a better learning environment for everyone. In particular, students in cs4414 are expected to follow these rules:
I will not lie, cheat or steal. If I am unsure whether something would be considered lying, cheating or stealing, I will ask before doing it.
I will carefully read and follow the collaboration policy on each assignment.
I will do what I can to help my fellow classmates learn. Except when specifically instructed not to, this means when other students ask me for help, I will attempt to provide it. I will look at their answers and discuss what I think is good or bad about their answers. I will help others improve their work, but will not give them my answers directly. I will try to teach them what they need to know to discover solutions themselves.
I will ask for help. I will make a reasonable effort to do things on my own first (or with my partners for group assignment), but will ask my classmates or the course staff for help before getting overly frustrated. There are many ways to ask for help including the class discussion forum, IRC, and office hours.
I grant the course staff permission to reproduce and distribute excerpts from my submissions for teaching purposes.
I will provide useful feedback. I realize that this is the first time this course has been taught this way and it is important that I let the course staff know what they need to improve the course. I will not wait until the end of the course to make the course staff aware of any problems. I will provide feedback either anonymously or by contacting the course staff directly. I will fill out all course evaluation surveys honestly and thoroughly.
Assignments and Exams
A tenative and (continually) updated schedule is available here.
The main assignments are:
- Problem Set 1 Simple web server (Due 10 September) - Introduction to Rust and preview of several main concepts in class
- Problem Set 2 Shell (Due 24 September) - Processes
- Problem Set 3 Web server (Due 10 October) - Synchronization, Memory Management
- Problem Set 4 (Due 5 November)
- Project (Due 5 December)
Except when noted otherwise, assignments are due at 11:59pm on the due date.
In addition to the problem sets, there will be several web quizzes.
There will be a midterm exam on 10 October. (Depending on responses to surveys and how the class is going, this will either be an in-class exam or a take-home exam.)
We will not use the registrar scheduled in-class final (which would be on December 17), but students will have an opportunity to schedule an optional oral final exam.
I prefer to spend my time, as well as the TAs time, focused as much as possible on teaching, and as little as possible on grading. The assignments in this class are designed to maximize learning, rather than primarily for assessment.
That said, I understand that students do need to be assigned grades at the end of the semester, and sometimes grades can be a powerful and effective motivator. Grades will be determined based on your performance on the problem sets, project, exams, and class contributions (including in the discussion forum). For most of the problem sets and projects, you will work in small teams. Except in unusual circumstances, all members of a team will receive the same grade, although students will be expected to provide honest and confidential feedback on their teamates.
Grades will be determined based on your performance on problem sets, web quizzes, exams, and any other contributions you make (including in class and to the discussion forum). There is no set weighting among these things, and in general, if there is some combination of the above that demonstrates that you have gotten what I hope out of the class then you'll receive an A grade. You will receive guidance as to your earned grade near the end of the semester, and have an opportunity to do an oral final exam to adjust this grade (either up or down) if you feel the quoted grade does not fairly reflect your efforts and understanding.