COMP 211: Principles of Program Design
Instructors: | Staff: | ||
---|---|---|---|
|
| ||
|
| ||
|
|
| Mina Yao |
|
|
| Robert Brockman |
|
|
| |
Lectures: | Duncan Hall (DH) 1064 | Time: | MWF 10:00-11:50am |
Labs: | Ryon 102 | Times: | Monday 2:00-3:20 pm, Monday 3:30-4:50 pm, Tuesday 2:30-3:50 pm. |
Introduction
This course is an introduction to the fundamental principles of programming. The focus is on systematic methods for developing robust solutions to computational problems. Students are expected to have experience writing interesting programs in some credible programming language (e.g., Python, Java, Scheme, C#, C++, Visual Basic .NET, PRL, Scheme, Lisp, etc.) but no specific programming expertise is assumed. The course is targeted at potential Computer Science majors but mathematically sophisticated non-majors are welcome. We expect students to be comfortable with high-school mathematics (primarily algebra, mathematical proofs, and induction) and the mathematical rigor and vocabulary of freshman calculus. Success in the course requires a deep interest in the foundations of computer science and software engineering, self-discipline, and a willingness to work with other people on programming projects. Topics covered include functional programming, algebraic data definitions, design recipes for writing functions, procedural abstraction, reduction rules, program refactoring and optimization, object-oriented programming emphasizing dynamic dispatch, OO design patterns, fundamental data structures and algorithms from an OO perspective, simple Grapical User Interfaces (GUIs), and an exposure to the challenges of concurrent computation.
...
- Principles of Object-Oriented Programming by Zung Nguyen and Stephen Wong. An online self-contained introduction to OOP in Java roughly corresponding to the former Comp 212 course. It is reasonably complete, but still under construction.
- Index to online Java Tutorials by Sun Microsystems The Sun tutorials refer to the full Java language not the Elementary and Intermediate language levels supported by DrJava. Nevertheless, they cover many important language details in depth, such as the complete collection of primitive operators on primitive data types.
- Java Basics by Fred Swartz is a clearly written traditional introduction to Java that focuses on Java mechanics rather than OO Design. It can be helpful in learning the {\em mechanics} of writing full Java code. Please ignore what he says about program design.
- Java Notes by Fred Swartz is a reasonably comprehensive Java reference that is a good supplement to the official Sun documents.
DrJava: Please download and use the DrJava pedagogic programming environment available from drjava.org. You must install either the Java 5 or Java 6 JDK on your machine for DrJava to work. If you machine is running some flavor of Windows or Linux, go to the \[Sun Download Site for the Java SE 6.0 (http://java.sun.com/javase/downloads/index.jsp\]). Make sure that you download the JDK not the JRE. If you have a Mac, a Java JDK is available from Apple. In fact, it is part of the standard Mac OS X software package. DrJava will run on either a Java 5.0 or Java 6.0 JDK.
Entrance Survey
Please fill out this survey.
Pick a Lab Section
Every student must attend an assigned lab section each week. Lab sections meet M 2-3:25pm, M 3:30-4:55pm, and T 2:30-3:55 in Ryon 102 (the CLEAR lab room on the ground floor of the Ryon Building). If you have not already contacted Dr. Nguyen (dxnguyen@rice.edu), immediately send him an email message stating your preferred lab sections (first and second choices).
Computing Environment
All Comp 211 programming assignments will be run and graded on the new CLEAR educational computing facility. For instructions on how to use CLEAR, see the CLEAR web page.
Errata
The Confluence wiki for Comp 211 is new and presumably full of broken links and typos. If you notice an error in the wiki, please send email to the Comp 211 staff.
Course Schedule
Note that future date schedules are only guidelines. Future homeworks and slides may contain materials from previous Comp 210 and Comp 212 classes. New material will be provided before the corresponding class. There will only be two exams in the course: one given on functional programming during week 7 and one on object-oriented programming given during in the last week of the course. Both are take-home exams. There is no final examination.
| Day | Date(2009) | Topic | Reading | Lectures | Problems | Due(2009) | Lab | Supplements | ||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Mon | Jan 11 | Introduction |
| W Jan 13 | ||||||
2 | Wed | Jan 13 | Scheme primitives; function and data definitions | F Jan 22 |
|
| |||||
3 | Fri | Jan 15 | Inductive data, conditionals, and the design recipe |
|
|
|
| ||||
- | Mon | Jan 18 | School Holiday |
|
|
|
|
|
| ||
4 | Wed | Jan 20 | Data-directed design I |
|
|
| |||||
5 | Fri | Jan 22 | Data-directed design II | Fri Jan 29 |
|
| |||||
6 | Mon | Jan 25 | Mutually Referential Data Definitions |
|
|
| |||||
7 | Wed | Jan 27 | Local definitions and Lexical Scope |
|
|
|
| ||||
8 | Fri | Jan 29 | Functions as Values | Fri Feb 5 |
|
| |||||
9 | Mon | Feb 01 | Functional Abstraction and Polymorphism |
|
|
| |||||
10 | Wed | Feb 03 | Lambda the Ultimate |
|
|
|
| ||||
11 | Fri | Feb 05 | Generative Recursion | Fri Feb 15 |
|
| |||||
12 | Mon | Feb 08 | Generative Recursion Illustrated |
|
|
| |||||
13 | Wed | Feb 10 | Complexity and Accumulators |
|
|
|
| ||||
14 | Fri | Feb 12 | Accumulators and Tail Calls | Fri Feb 19 |
|
| |||||
15 | Mon | Feb 15 | Clever Programming With Functions | Review prior readings |
|
| 210 Exam 1 | ||||
16 | Wed | Feb 17 | Review and First-Class Functions Vectors and Iteration | Review prior readings |
|
|
|
| |||
17 | Fri | Feb 19 | Exam Review | Review prior readings | HW 6 (optional) | Fri Feb 26 |
|
| |||
18 | Mon | Feb 22 | On to Java | OO Design Notes Ch 1.1-1.4 |
|
| |||||
19 | Wed | Feb 24 | Java Design Recipe | OO Design Notes Ch 1.1-1.4 |
|
|
|
| |||
20 | Fri | Feb 26 | Defining Inductive Data in Java | OO Design Notes Ch 1.5 |
| ||||||
- | M-F | Mar 01-05 | Spring Break |
|
|
|
|
|
| ||
21 | Mon | Mar 08 | Static Class Members and the Singleton Pattern | OO Design Notes Ch 1.6 |
|
| |||||
22 | Wed | Mar 10 | Polymorphism and Interfaces | OO Design Notes Ch 1.8 |
|
|
| ||||
23 | Fri | Mar 12 | Handling Exceptions and Errors | OO Design Notes Ch 1.9-1.10, 1.12 | Fri Mar 13 |
|
| ||||
24 | Mon | Mar 15 | The Strategy and Visitor Patterns | OO Design Notes Ch 1.9, 1.11 |
|
| IntList.dj1 (https:wikiriceedudisplayCSWIKI211IntListdj1) | ||||
25 | Wed | Mar 17 | Visitors, Visitors, Vistors ... | OO Design Notes Ch 1.11 |
|
|
|
| |||
26 | Fri | Mar 19 | Full Java, Arrays, Mutation | OO Design Notes Ch 1.13 | Wed Mar 25 31 |
| |||||
27 | Mon | Mar 22 | Visibility, Type-Checking, and Generics | OO Design Notes Ch. 1.10, 1.13 |
|
| List.java (https:wikiriceedudisplayCSWIKI211Listjava) | ||||
28 | Wed | Mar 24 | Generics with Discretion |
|
|
|
|
| |||
29 | Fri | Mar 26 | Mutation : Succumbing to the Dark Side? and Bi-Directional Linked Lists | OO Design Notes Ch 1.13 |
|
|
|
| |||
30 | Mon | Mar 29 Arrays | as Bounded Sequences Graphical User Interfaces | OO Design Notes Ch 2.1 3 |
|
|
| ||||
31 | Wed | Mar 31 Mutable Linked Lists | Anonymous Inner Classes and Task Decomposition | OO Design Notes Ch 2.1 |
|
| BigBiList.java (https:wikiriceedudisplayCSWIKI211BiListjava) | ||||
- - | Fri | Apr 2 | School Holiday |
|
|
|
|
|
| ||
32 | Mon | Apr 5 | Mutable Trees | OO Design Notes Ch 2.1 |
|
| TreeMap.java (https:wikiriceedudisplayCSWIKI211TreeMapjava) | ||||
33 | Wed | Apr 7 Designing OO Data Structures | Review: Confronting the Reality of Full Java |
|
|
| OOTreeMap.java (https:wikiriceedudisplayCSWIKI211OOTreeMapjava) |
|
| ||
34 | Fri | Apr 9 | Efficient Representations of Maps and Sets QuickSort Revisited |
|
| FunctionalQuicksort.java | |||||
35 | Mon | Apr 12 OO Design Retrospective | Graphical User Interfaces II | OO Design Notes |
|
|
| ||||
36 | Wed | Apr 14 | Fast Searching Methods I | OO Sorting Algorithms | OO Design Notes |
|
|
|
| Design Patterns for Sorting | |
37 | 37 | Fri | Apr 16 | Fast Searching Methods II with Balanced Trees | OO Design Notes |
|
| Red-Black Trees | |||
38 | Mon | Apr 19 | Fast Sorting Methods Searching and Memoization | OO Design Notes |
|
| MyHashMap.java (https:wikiriceedudisplayCSWIKI211MyHashMapjava) | ||||
39 | Wed | Apr 21 | Graphical User Interfaces | Parallel Programming Tradeoffs OO Design Notes Ch. 3 |
|
|
|
|
| ||
40 | Fri | Apr 23 Concurrency | Exam II Review |
|
|
|
|
Grading, Honor Code Policy, Processes and Procedures
Grading will be based on your performance on homeworks (worth
50%) and exams (20% for first exam, and 30% for the
second exam).
Take-home exams, which are pledged under the honor code, test your individual understanding and knowledge of the
material. Collaboration on exams is strictly forbidden.
...
- comp211-discussion-l@mailman.rice.edu
(subscribe here (https:mailmanriceedumailmanlistinfocomp211discussionl)):- This is where important announcements related to the class will be posted.
- Students are required to sign up to this list.
- You may use this list for open discussions relating to the course. \
Postings are expected to abide by standard \
Netiquette.
- Any questions relating to the course can be sent to this list.Specific questions about homework problems and grading can be directed here.
Postings are expected to abide by standard Netiquette.
- cs-events-l@mailman.rice.edu:
- Announcements relating to talks and other interesting events hosted by the CS departments.
- Subscription to this list is optional but highly recommended
Questions
If you have a question about homework-you're not sure what is expected for a given problem, you haven't received feedback from a previous assignment, or you don't understand or agree with the assessment of your work, for example-you , you can raise the question with a TA in lab or on the teachers mailing list (questions of general interest may alternately be raised on the the discussion mailing list). If, after doing so, you don't feel that your concerns have been addressed, you may wish to contact Prof. Cartwright or Prof. Taha Sarkar directly.
Homeworks:
Homeworks help you verify your understanding of the material and prepare you for the exams. You are encouraged to discuss the homework problems with the instructors and staff. Help from other students, including Comp 211 graduates, is also encouraged (but should be cited), although that does not include giving or receiving complete answers. All homework partners are responsible for knowing all the submitted material. If you fail to understand the homework solutions, you won't succeed on the exams.
...
- Practical matters:
- Special interest groups:
- CSters
- Computer Science Club
- ... (please send in suggestions!)
Additional References
Here is a nice article about the basic approach taken in this course.
...
The New Turing Omnibus, A. K. Dewdney | QA76 .D448 1993 |
Algorithmics: The Spirit of Computing, David Harel | QA76.9 .A43 H37 2004 |
Computers Ltd.: What They Really Can't Do, David Harel | QA76.5 .H3575 2000 |
Great Ideas in Computer Science, Alan W. Biermann | QA76 .B495 1997 |
Computer Science: An Overview, J. Glenn Brookshear | QA76 .B743 1997 |
G�delGödel, Escher, Bach: An Eternal Golden Braid, Douglas Hofstadter | QA9.8 .H63 1980 |
Metamagical Themas, Douglas Hofstadter | Q335 .H63 1985 |
...
The Connexions Curriculum for the former Comp 212 course | |
The Java Programming Language, Arnold & Gosling | Gosling was the principal designer of Java 1.0 |
Thinking In Java, Bruce Eckel | The 3rd edition is available free. |
Design Patterns: Elements of Reusable Object-Oriented Software, Gamma, Helm, Johnson & Vlissides | The "Bible" of OO software design. |
Head First Java, Bert Bates & Kathy Sierra | A fun read while you get introduced to Java and learn how to think like a Java Programmer. |
Head First Design Patterns, Freeman & Freeman | An accessible introduction to Design Patterns. |
More on Data Structures and Algorithms
Introduction to Algorithms: Book written by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. The authoritative reference on algorithms. |
|
...
Accommodations for Students with Special Needs
Students with disabilities are encouraged to contact me during the first two weeks of class regarding any special needs. Students with disabilities should also contact Disabled Student Services in the Ley Student Center and the Rice Disability Support Services.