Hi, This is an ad for this course I am teaching this fall quarter that should be of interest if you want to develop high-quality software, See: http://www.stanford.edu/class/cs249a Some background ... In the late 80's, I was thoroughly frustrated with the poor quality of software after working for years on operating systems, compilers, distributed systems and networking, and spent a sabbatical getting my head beat in by C++ feature interaction, and exploring ideas in large-scale OOP. I then came back and started teaching this course, integrating a number of ideas from research papers, experience of others and my own. Since then, I have been involved with several research efforts and several startups that have used the ideas, plus a group at Cisco who has used the ideas, plus lots of feedback from students and others about what works and what doesnt, leading to a hefty course reader which now defines the course. (I have even used this approach in some of the ideas in commercial ASIC design.) In my experience, real software is large, complex, evolving, and needs solid structure as well as serious selective optimizations. While no claim to perfection, I believe I have made serious progress is how to produce far higher quality real software. In brief, the course covers a software development methodology, plus approaches to structuring interfaces, module implementations, memory management, event handling, naming, exceptions, abstract data types, reference management, etc. for constructing large-scale systems and applications. I think the ideas are foundational to distributed systems, network protocol design, operating systems, middleware frameworks, and to being a competent software engineer. You will be expected to do some programming assignments in C++, as well as a midterm and final. So, if you are interested in the challenge of serious high-quality large-scale programming with performance demands, show up at 11 am on TTh in Thornton 102 and check it out. It will be broadcast on SCPD. David Cheriton