cs205: engineering software?
25 August 2006
[PDF version for printing]


Course Description. Covers tools and techniques used to manage complexity needed to build, analyze, and test complex software systems including abstraction, analysis, and specification.

Prerequisite: CS150 (for fall 2006, exceptions will be granted for students with sufficient background)

Expected Background: Students are expected to be able to write and understand short programs. Students are not assumed to know any particular programming language.

Meetings: Mondays, Wednesdays, and Fridays from 1-1:50pm in Olsson 011.

Textbook: Barbara Liskov with John Guttag, Program Development in Java: Abstraction, Specification, and Object-Oriented Design, Addison-Wesley, 2000. Students are also encouraged to get a good Java reference book. You can choose any book you want that provides a good reference for the Java 2 programming language. One good book is: The Java Programming Language, Fourth Edition by Ken Arnold, James Gosling, and David Holmes.

Additional readings will be selected from other sources.

Web page: http://www.cs.virginia.edu/cs205. This page is updated often and students are expected to visit it regularly (almost every day). All lectures, notes and assignments for the course will be posted on the web site.


Coach: David Evans

email evans@virginia.edu
phone x2-2218
officeOlsson, 236A
office hours Thursdays, 10:30am-noon; other times arranged by email or after class

Assistant Coaches: Drew Abbot and Daniel Marcus. The assistant coaches will hold scheduled lab hours in Small Hall to provide help on the assignments.


The University relies upon and cherishes its community of trust. We firmly endorse, uphold, and embrace the University's honor principle that community members will not lie, chear, or steal. Everyone in the class is responsible for preserving this community of trust, and ensuring that they, their classmates, and future students, will continue to benefit from the being members of a trustful and trustworthy community.

Your fellow students are one of your best resources. In general, students are encouraged to discuss readings and assignments with other students. Some assignments may have a specific collaboration policy, which should be explained clearly on the assignment. If this is ever unclear, ask the instructor. Exams must be done alone.

Students are encouraged to consult outside sources, including human experts (except where explicitly prohibited, such as on exams). Always list the resources you used (students, outside experts, papers, web sites) on your submission. You may not consult problem sets from previous courses without express permission.

All students are required to sign the course pledge. Individual assignments and exams do not need to have signed pledges — students are implicitly assumed to be honest and honorable.


Problem Sets. There will be five problem sets that involve both written questions and programming problems. Some problem sets will be done in teams. We expect doing the problem sets will be the best way to learn the course material. The expected due dates for the problem sets are on the course schedule: http://www.cs.virginia.edu/cs205/schedule.html.

Project. For the last 6 weeks of the course, students will work on a software project in small groups (ideally, 3 people, but different size groups will be allowed when justified). The project topic is fairly open ended — it should be something useful and interesting, that relates to the goals and content of the course.

Quizzes. There will be six short quizzes in class. See the course schedule for quiz dates. Quizzes will usually be done without consulting notes or other resources.

Exams. There a mid-term exam (handed out on September 29, and due on October 2) and a final exam (handed out on December 4). Both exams will be take-home, open resources exams.


Grading will be based on approximately the following weighting:

Problem Sets 1-530 (20-50)
Project25 (20-50)
Quizzes10 (5-20)
Midterm Exam15 (5-15)
Final20 (15-50)
Class Contribution0 (0-10)

Grades will be tabulated varying the weights assigned to each category in several different ways using the ranges above. In general, the weighting that is best for you is used.

Regardless of these weightings, all students who put an honest effort into all the assignments and convince me it would be reasonable to trust them to design and implement an important program will receive an A in the course.