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: cs1120 or cs150. If you do not satisfy the prerequisite, but believe you have the expected background for this class in some other way, you may still be permitted to take cs2220, but should meet with me first.
Expected Background: Students are expected to be able to write and understand short programs. Students should be able to create and reason about recursive definitions and programs that pass procedures as parameters and produce them as results. Students should be familiar with asymptotic operators and how to analyze the asymptotic running time of a simple procedure. Students should be comfortable with replacement grammars.
Students are not expected to have any previous experience with Java.
Class Meetings: Tuesdays and Thursdays, 3:30-4:45pm in Thornton Hall D222.
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/cs2220. This page is updated often and students are expected to visit it regularly (almost every day) and/or to subscribe to the RSS feeds (posts, comments). All lectures, notes and assignments for the course will be posted on the web site.
Teacher: David Evans
|office hours||Mondays, 1:15-2:30pm and Thursdays 11am-noon (subject to change based on registration surveys)|
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, cheat, 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.
Except where explicitly prohibited, such as on exams, students are encouraged to consult outside sources including human experts. 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 and one larger project. The problem sets 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.
Project. For the last five 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. Students with particularly ambitious ideas for their project may be able to start the project earlier in place of one of the problem sets.
Quizzes. There may be a few short quizzes in class. These will usually (but not necessarily) be announced in advance and will usually be done without consulting notes or other resources. Quizzes are not a major part of your grade, but provide a quick way to measure how well the class is understanding certain concepts.
Exams. There will be two take-home exams. Exam 1 (take-home) will cover material in Problem Sets 1-3, and Classes 1-8. It will be handed out on Thursday, 23 September and due on Tuesday, 28 September. Exam 2 will cover material in Problem Sets 1-5, and Classes 1-17, emphasizing material since Exam 1. It will be handed out on Thursday, 28 October and due on Tuesday, 2 November.
Final Interview. The final will be a oral interview covering the entire course. These interviews will be scheduled individually, between December 8 and 14. Although an oral final may sound frightening, it should not be an unpleasant experience. It is designed to give you the best possible opportunity to show me what you know and can do by the end of the class. If you do well throughout the semester, you should expect to do well in the final. A handout the last week of class will give you a good idea what to expect in the final interview.
The goal of this course is to teach students the skills and concepts needed to successfully design, manage and execute complex software development projects. 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.
In cases where I am not convinced that a student deserves an A based on this expectation, grading will be based on approximately the following weighting:
|Problem Sets 1-5||30 (20-50)|
|Quizzes||5 (0-10)||Exams||20 (5-30)||Final||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. In general, the weighting that is best for you is used.