I have spent over forty-five years in the operating systems business, as a developer, architect, manager, and in a variety of staff roles. I have been very active in the development and refining of engineering tools and processes. I have always loved teaching. I teach this course because it is critical material, and I care about helping the next generation of engineers master it.
Software is, in one way or another, what most of us are going to do for a living. Anybody can cob-together a few hundred lines of code that does more or less what (s)he wants. Figuring out what a complex system has to do, how to structure it to meet a myriad of today's (and tommorow's) requirements, organizing and managing the construction to reliably deliver it, creating a testing regime to meaningfully assess its correctness, and being able to measure all of the above is more difficult.
Large software projects are among the most complex things that human beings have ever constructed, and organizing and controlling them is a hard problem. The problems are far too complex to have closed-form solutions ... but there are tools and techniques that can make them more tractable. This is a course in the concepts, issues, and techniques surrounding modern software construction. It is material you will definitely use, and I hope you will find it interesting.
General Administrative Information
Information on the course goals, contents and administrative procedures for the course can be found in the slides for the first lecture.
Lecture and Assignment Schedule
Lecture Notes
You are free to print off and study slides for any lecture any time, but it if you print out slides well in advance of the associated lecture you should recheck them shortly before the lecture, as I try to improve lectures each time I give them.
Quizzes and Examinations
I do not grade on a curve, but I try to calibrate my assignments and standards, and the breaks usually wind up within a few points of 90/80/70/60.
I am always willing to explain why I scored an answer in a particular way, to fix arithmetic errors, and to regrade questions where I misunderstood your answer (but not where your answer was confused or you misunderstood the question). If I make a mistake in a question (making it too hard to answer correctly), I try to find a way to compensate you for my mistake. Other than that, you get the grade you earned.
I never change grades in response to excuses or hardship stories. If you need a good grade in this course, you need to earn it.