Home Page for CIS 211

Instructor: Amr Sabry
GTF: Joshua Madden
GTF: Pulumati Laxman Rao V.

Study Guide

Midterm I Solution
Midterm II Solution
About Visitors
Code from lectures
Java 1.2 API

Homeworks and Grades

Lab 1 Instructions
Lab 1 Solution
Lab 2 Instructions
Lab 3 Instructions
Lab 4 Instructions
Labs 2-4 Solution
Lab 5 Instructions
Lab 6 Instructions
Lab 7 Instructions
Lab 8 Instructions
Lab 8 Solution
Lab 9 Instructions
Extra Credit Problems

What is CIS 211 about?

The goal of this course is to introduce the field of computer science, its main subject areas, its recurring concepts, and its mathematical foundations. The central activities of the course relate to programming:

The Duck Machine

The lab component will apply the concepts you learn in lecture to one project, the Duck Machine. Each lab will address one part of the machine and will be self-contained. At the end of the term, all the labs can be combined with the supporting code that I provide to get a complete simulation of the machine.

The exercise of building the Duck Machine will serve several purposes:

Study Guide

This will be a difficult course. There will be a lot of material to help you but ultimately, the only way for you to learn is to work hard and for long hours to figure out solutions to problems by yourself.

A word of warning: This course does not follow one textbook. Instead there are three main sources of information: the lectures introduce programming concepts; the books are references for you to consult about specific points you want to understand in greater detail; and the labs put these concepts into practice.

I will not always hand out complete solutions to homework problems. Instead I am always available for questions: I will explain the underlying concepts as many times as needed, give hints to the solution, and encourage you to develop your own solutions.


Reference books for Java:

The text you have used in CIS 210 will do fine. Java Software Solutions: Foundations of Software Design, Second Edition, Lewis and Loftus, Addison-Wesley.

Reference books for design patterns:

There are several good books out there. The classic book is Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Addison-Wesley, 1994. It is probably too much at this point, but it is a classic.

A smaller and more recent book by one of the authors of the classic above is Pattern Hatching: Design Patterns Applied, John Vlissides, Addison-Wesley, 1998. It tries to present design patterns in a real context of use.

A book that focuses on Java is Patterns in Java (Volume I) A Catalog of Reusable Design Patterns Illustrated with UML, Mark Grand, Wiley, 1998.

I also recommend A Little java with Patterns, Matthias Felleisen and Dan Friedman, MIT Press, 1998. This book will really teach you about recursion and the interpreter and visitor patterns. It is a somewhat radical approach to teaching programming, but you will learn a lot from it ... if you have the patience.

Reference books for hardware machines:

You should probably buy: An Invitation to Computer Science, G. Michael Schneider and Judith L. Gersting, West Publising Company, 1995. This book has the design of the hardware machine on which the Duck Machine is based. You will also be using it in CIS 212. After I ordered the book, they came up with a Java version that you might be interested in.


All homeworks will be collected in class (on Mondays) and returned during your lab period. Your grade will be computed as follows:


The lectures will cover:

Date Topic Reading Lab due
M 3/27 Introduction
W 3/29 Data as objects: Abstract Classes; Inheritance LL 7.1, 7.2, 7.3
F 3/31 Boolean Logic, Circuits SG 4.3, 4.4
M 4/3 Machine words SG ch. 5 Lab 1: Boolean Logic
W 4/5 ALU SG 5.2.3
F 4/7 Interfaces LL 5.4, 7.6
M 4/10 Memory SG 5.2.1 Lab 2: ALU
W 4/12 Data as objects: Exceptions are objects LL 8.1
F 4/14 NO CLASS or guest lecture
M 4/17 Midterm I Lab 3: Memory
W 4/19 Streams LL 8.2, 8.3, 8.4
F 4/21 CPU and IO SG 5.2.2, 5.2.4
M 4/24 Data as objects: Design Patterns Lab 4: CPU; IO; Machine
W 4/26 Machine Instructions; Interpreter Pattern SG 5.2.4, 5.2.5
F 4/28 Machine Interpreter SG 5.2.4, 5.2.5, 6.3.1
M 5/1 Polymorphism LL 7.4, 7.5 Lab 5: Instructions; Interpreter
W 5/3 Inheritance: Types vs Classes LL 7.4, 7.5
F 5/5 Inheritance: Types vs Classes LL 7.4, 7.5
M 5/8 Visitor Pattern Lab 6: Inheritance
W 5/10 Review
F 5/12 Midterm II

Last day to withdraw from classes

M 5/15 Recursion: Data as Objects again LL ch. 11 Lab 7: Revised Interpreter; Debugger
W 5/17 Recursion: Mathematical Foundations; Puzzles
F 5/19 Recursion vs Iteration
M 5/22 Data Structures LL ch. 12 Lab 8: Recursion
W 5/24 Data Structures
F 5/26 Data Structures
M 5/29 Memorial Day
W 5/31 Data Structures Lab 9: Data Structures
F 6/2 Final Review; Teaching Evaluation
H 6/8 Final exam from 3:15 PM to 5:15 PM

Visited times since December 15, 1997 (or the last crash).