Computer Science II: Data Structures and Algorithms

CMPU-102
Vassar College, Spring 2012
Syllabus / Course Wiki

Our course syllabus is a wiki. It is subject to update throughout the semester.

Professor: Marc Smith
Office: OLB 122
Office Hours: Mon/Wed 10:30-11:30; Mon 2:00-3:00
Phone: 437 7497
Email: mlsmith (best way to contact me!)
Lectures: Mon/Wed 9:00-10:15am, OLB 105
Labs: Fri 9:00-10:30am, OLB 105




Text:

  • Barnes and Kölling. Objects First with Java: A Practical Introduction Using BlueJ, 5th Edition. Copyright © 2012 Pearson. Required (available in the Book Store).
  • Felleisen, Flatt, Findler, Gray, Krishnamurthi, and Proulx. How to Design Classes. Data: Structure and Organization. MIT Press. Draft: May 20, 2008. (available electronically)

Overview:

Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won't usually need your code; it'll be obvious.

—Eric Raymond, The Cathedral and the Bazaar, 1997

This course begins where Computer Science I leaves off. This semester we formally introduce the computer scientist’s tools for data abstraction and problem-solving: data structures and algorithms. This semester, we will learn new design recipes for class design, which augment the design recipes we learned in 101 for designing functions. You will find that object-oriented programming languages (like Java) permit problem solving at higher, more natural levels of abstraction, and that in many cases, the programming language itself directly supports elements of the design recipes for designing functions.

Course Description:
This course emphasizes the development of data structures and algorithms in an object-oriented programming language. This means learning how to design classes and class hierarchies. Topics include hierarchic program refinement, preconditions, postconditions and invariants (testing); data encapsulation and fundamental data structures (e.g., lists, queues, trees, sets, maps, heaps, search trees, hash tables, and graphs); fundamental algorithms (e.g., searching and sorting) and analysis of algorithm complexity.

Course prerequisites are completion of CMPU 101, or permission of the department. The course web page will be updated regularly throughout the semester with assignments, deadlines, and other important information. Please check it frequently. You will also need to check your email regularly for important class announcements.

In lectures, labs, and programming assignments, we will use the Java programming language to describe the data structures and algorithms we study. There continues to be nothing special about our choice of Java. This course is not about learning to program in Java.

To reinforce the concepts we will be studying, you will construct programs of increasing complexity and sophistication throughout the course. In a weekly 90 minute lab session we will cover practical issues, such as how to use the computing environment and development tools, and work on practical programming exercises designed to reinforce concepts. The weekly programming assignments will rely on the concepts we’ve learned to date–and practiced in the labs–to test your ability to solve larger and more complex problems.

Attendance:
We are a community of learners, but you must be present to help one another. You provide a unique and valuable contribution to every class. The questions you ask help us all understand better the course material. Missing class deprives this community of your insights and understanding. So, please notify your professor before any classes or labs you know you will miss. We worry about you when you’re not present. More practically, part of your grade (5%) is based on participation, and you must be present to participate. Excessive absences tend to hurt one’s overall performance in this class.

Advice:
Keep up with the reading and assignments. Topics tend to build on one another. Missing one lecture or lab may preclude fully understanding the next, so do your best to attend every class meeting. Make arrangements with a classmate to copy material you miss when you can’t attend. Please contact or visit your professor if you have any questions, or if there is anything you would like to discuss. If you can’t make it to office hours, let us know and we can arrange another time. Email is generally the best way to reach us. We will strive to answer emails quickly. Our e-mail addresses are given at the top of this page.

Elements of Style:
Writing a program to solve a problem is in many ways analogous to writing an essay. In fact, both acts share the notion of composition and involve a problem-solving process. Therefore, just as you would in other classes, in this class we will strive to write elegant code. One reason for this goal is because, over time, we need to read more code than we write, and so we write code with this realization in mind.

Coursework and Grades:
To assess your understanding of the topics presented in this course, there will be frequent written or programming assignments, weekly labs (no lab the first week, or during spring break), two midterms (dates already set–see below and schedule), and a final exam (during the final exam period). If you are unable to attend class on the day of an exam, it is your responsibility to notify the instructor in advance to make other arrangements. Late assignments will be penalized, and will not be accepted once solutions have been discussed in class. Your final grade for the course will be calculated according to the following distribution of coursework:

25% Weekly Assignments
10% Weekly Labs
5% Participation
20% Midterm 1 (Feb 17)
20% Midterm 2 (Apr 6)
20% Final Exam (May 10)

Based on the weighted average of your graded coursework, your letter grade will be determined according to the standard 90, 80, 70, 60 cutoffs. For example, 90% or above is an A; 80% or above, but below 90%, is a B; etc. Pluses or minuses may be added at the instructor’s discretion.

Academic Integrity:
Don’t cheat. Read Originality and Attribution: A guide for student writers at Vassar College. It should come as no surprise, after reading the “Language usage and elegance” section of this syllabus, that what we learn in this course is another form of composition: the art of programming computers to solve problems at a meaningful level of abstraction. Since we are concerned with composition, the guidelines that apply to writing in general, apply equally to the writing of computer programs. Copying someone else’s code without attribution amounts to plagiarism. Likewise, give proper attribution for the help you receive. School policy dictates instructors must report all suspected incidents of cheating to their department chair. Did you read the previous sentence? Please don’t put yourself or your professor in that position. When in doubt, ask your professor before seeking any help from another source.

Students with disabilities:
Academic accommodations are available for students with disabilities who are registered with the Office of Disability and Support Services. Students in need of disability accommodations should schedule an appointment with me early in the semester to discuss any accommodations for this course which have been approved by the Office of Disability and Support Services, as indicated in your DSS accommodation letter.

courses/cs102-201201/top.txt · Last modified: 2012/05/07 23:29 by mlsmith
VCCS Top Events Extended Site Search Login Vassar Science Web Vassar Home Driven by DokuWiki Valid XHTML 1.0