I have spent almost thirty 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 am now retired, and 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 extremely difficult.
Large software projects are some of 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
When I have taught at UCLA, the format was relatively one-way, and as such the slides came to approximate another text. I have not yet worked out how I will adapt my slides to the more interactive style at Claremont ... so there will surely be some evolution in this area.
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. I occasionally update slides durring the quarter.
Quizzes and Examinations
Homework
I am still trying to figure out what my homework strategy is going to be. I do not assign homework to keep you busy or give me something to grade. I assign homework to force you to engage key subjects where I do not expect the lecture treatments and project work to give you an adequate understanding. This is a new course format and subject treatment, and it is not yet clear to me what those areas will be. It is, however, likely that I will be giving 3-6 homework assignments. All homework assignments and the dates they are due are posted posted on-line. The answers are posted after the assignments have been turned in. Late assignments will not be accepted after the answers are posted.
Grades and Grading
The particular formula varies, from one class to the next. This Semster's formula.
I do award final grades on a curve, but I try to calibrate my assignments and standards so that the curve tends to fall 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 don't work hard enough, and then contact me after the course is over to tell me that you are going to lose your scholarship, or your place in grad school, or get kicked out, I will explain to you (in great detail) how you earned the grade you received, and then give you a stern lecture on personal responsibility. You get the grade you earn. If you need better than a D in this course, you will need a plan to earn a better grade.
Last updated: January 12, 2007