CS201J: Engineering Software, Fall 2002
Course Description. This course is about techniques and tools for constructing robust, complex and secure software.
Differences from CS201: Although this course does not cover everything in CS201, it counts equivalently to CS201 as a prerequisite and towards degree requirements. CS201J will cover many things not traditionally covered by CS201.
The main differences between CS201J and CS201 are:
Students who take CS201J may need to learn some things on their own that are covered in CS201 and expected background in CS216. In particular, we will not cover C++ in this course, so you may need to learn some details about C++ yourself.
- Lightweight Analysis Tools — CS201J will introduce tools for checking properties of software early in the course and use them throughout.
- Programming Languages — CS201J will use Java for most assignments, but may include some other languages (including C).
- Problem Sets — instead of closed labs, CS201J will have a progressive series of assignments that involve both individual and group work. These will involve substantial programming, in addition to non-programming questions.
Expected Background: Students are expected to be able to write and understand short programs. Students are not assumed to know any particular programming language. Students should have passed CS101 or CS200 or have equivalent experience.
Meetings: Tuesdays and Thursdays, 2:00-3:15 in Olsson 011.
Textbook: Barbara Liskov with John Guttag, Program Development in Java: Abstraction, Specification, and Object-Oriented Design, Addison-Wesley, 2000. Additional readings will be selected from other sources.
Web page: http://www.cs.virginia.edu/cs201j. 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.
StaffCoach: David Evans
firstname.lastname@example.org phone x2-2218 (office), 293-9688 (home) office Olsson, 236A office hours Wednesdays, 2:30-3:30pm; other times arranged by email or after class
Assistant Coaches:Sol Chea (email@example.com)Staffed lab hours will be posted on the course web site.
Serge Egelman (firstname.lastname@example.org)
Tiffany Nichols (email@example.com)
Mike Peck (firstname.lastname@example.org)
Email: Send mail to email@example.com to reach the whole course staff.
AssignmentsProblem Sets. There will be approximately eight 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 likely problem set topics and due dates are:
Actual topics and due dates are subject to change.
- Problem Set 1: Introduction (Game of Life) (Out: 29 Aug, Due: 3 Sep)
- Problem Set 2: Using a Data Abstraction (Trendy Names) (Out: 3 Sep, Due: 10 Sep)
- Problem Set 3: Implementing a Data Abstraction (Out: 10 Sep, Due: 17 Sep)
- Problem Set 4: Designing with Data Abstractions (Phylogeny) (Out: 17 Sep, Due: 1 Oct)
- Problem Set 5: Designing with Inheritance (Out: 10 Oct, Due: 22 Oct)
- Problem Set 6: Low-Level Programming (Out: 22 Oct, Due: 5 Nov)
- Problem Set 7: Concurrency (Out: 5 Nov, Due: 12 Nov)
- Problem Set 8: Snakes (Out: 14 Nov, Due 5 Dec)
Exams. There will be two take-home exams during the semester (Oct 3-10 and Nov 12-14) and a final. All exams will be open book and open notes.
Collaboration PolicyYour fellow students are your best resource. In general, students are encouraged to discuss readings and assignments in study groups. Some assignments may have a specific collaboration policy, which should be explained clearly on the assignment. If this is ever unclear, ask the instructor.
Students are also encouraged to consult outside sources, including human experts. Always list the resources you used (students, outside experts, papers, web sites) on your submission.
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.
EvaluationGrading will be based on approximately the following weighting:
Problem Sets 50 (40-70) Exam 1 15 (5-15) Exam 2 15 (10-20) Final Exam 20 (15-50) Class Contribution 0 (0-10)
Grades will be tabulated varying the weights assigned to each category in several different ways using the ranges above. Some of those weightings will drop the lowest problem set score. In general, the weighting that is best for you is used.
University of Virginia
Department of Computer Science
CS 201J: Engineering Software
Sponsored by the
National Science Foundation