| CPS 310 Operating Systems | |||||||
|
|||||||
Who should take this course. Undergraduate and graduate students with an interest in systems and networking. The course covers core topics in operating systems and networked/distributed systems.
Preparation. You should be familiar with undergraduate-level computer architecture and consider yourself a strong student and a good programmer. We will ask you to program in C and in Java. You should be familiar with basic data structures, e.g., lists, queues, stacks, hash tables, trees, graphs, DAGs. We will also talk a little about probability distributions and queuing theory in relation to computer system performance. You should also know the basics of the Unix command line: see the CSL tutorials.
Readings. There is no text for the course. We will have some web reading, and a few papers, but the core material will be presented in lecture and notes (including almost 1000 powerpoint slides!). Students may improve their understanding by looking at one or more of the optional texts.
Base workload. In addition to the readings, there will be assigned projects or labs (done in teams of 2-4), two midterms, and a final exam. Students report spending at least 10-15 hours on each lab. Many groups spend more time and a few spend much more time: as with all software development, debugging time is effectively unbounded. The more bugs you create, the more time you will spend hunting them down. It is worth taking the time to plan and write solid code from the start. You will spend less time if you work out your high-level design on a whiteboard first. If you have to debug, use a debugger.
Late work. Graded work has deadlines. To keep things fair no extensions can be granted to individuals or groups. We may occasionally grant extensions to the entire class, or grant "free passes" for late days that all groups may "spend" as they choose. Late work receives a penalty of between 15% and 80%, depending on circumstances. It is much better to do the work and hand it in late than to receive a zero on any assignment.
Policy on collaboration for CPS 310. Please see the statement in the formal syllabus.
A Note on grades, pressure and all that. I try to focus on serving students who are smart and interested and motivated and honest. That's what I enjoy, and it's where I can have the most positive impact. If you are in that group, I want to give you a world-class educational experience. Among other things, that means I spend a certain amount of time talking about stuff that's useful and interesting but is "not on the test".
It is a practical reality of being a professor in the real world that many students are less than fully committed and/or are struggling in some way. Some students are in over their heads, some students have health problems or external demands on their time that they are not able to control, and all of us make difficult choices about how we allocate time over many activities. We do our best to value your time, maximize the learning value of the time spent, make the minimal expectations clear, and work to resolve problems individually if necessary. If you feel that you are in trouble, please come to me sooner rather than later. We can't always tell who needs help.
Most students feel grade pressure. This is a difficult and important course and many students are understandably anxious about grades. I try to give grades that measure fairly a student's achievement, and reflect that most of our Duke students are strong, many are very strong, and a few are exceptional. We take grading very seriously. But in the end we will assign a grade and stick to it. You should always feel free to ask questions about your grade, but please do not ask for an "upgrade".
How do I assign semester grades? In this course your lab/project grades and exams are roughly equally weighted. All members of a project group receive the same grades for the projects. Projects also figure into your exam score, because I often ask questions about the projects on the exams to get a better reading on who is pulling weight in the project groups. As for the exams: there are generally two midterms (200 points each) and a final exam (300 points) and another 100 exam points derived from your "best" exam, as a mechanism to give more weight to your best exam. I add up all the points, sort, and assign grades in rank order, according to natural breaks. I also make some allowance for outliers, trends of improvement or decline, and other factors. These may result in adjustments of up to half a letter grade.
I generally reserve failing grades for students who know for themselves that they deserve it. Examples of behavior that leads to failure are: not showing up, not doing the work, and not bothering to learn anything. But there are many students who do not succeed, but also do not fail. Students who are in over their heads for whatever reason rarely if ever receive failing grades if they are open with me about the challenges they face and make a solid effort to address it.
The flip side of this philosophy is that I reserve A and A+ grades for students who distinguish themselves among their peers in a clear way. If you receive an A grade from me I will be happy to write you a strong letter of recommendation. I also give a lot of A- and B+ grades. Students who are getting by but are clearly behind most of their peers will generally receive grades in the C to B range.
Cheating. Cheating is a very serious offense. I used to say: "I do not expect it to occur in this class." However, after more than 20 years of teaching at Duke blissfully unaware of any cheating, I lost my innocence recently. So: I fear that some students will be tempted to cheat. Please don't do anything you will regret later. In particular, we have automated tools to watch out for copied code, including various web sources and code from previous semesters. These tools are known to be effective. If you cheat and get caught, please just confess and take the plea deal from the dean. It's a good deal.