Home Page for CIS 211
- Instructor: Amr Sabry
- GTF: Yolanda Reimer
- GTF: Tobias Brick
Homeworks and Grades
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
- Program Construction: Modern software systems are built by
composing independent components. (Think of Netscape Communicator and
its plug-ins, including all kinds of viewers, decoders, cryptography
packages, Java virtual machines, etc.) The most important factor in
the success of these systems is the ease with which their
functionality can be extended and their components upgraded. (Just
imagine the disaster if adding an additional MPEG viewer required
recompilation of the source code of Netscape Communicator.)
In this course, we will emphasize program construction techniques,
also called design patterns, that lead to flexible and
extensible software systems. For now, you can think of a design
pattern as a style of writing that leads to elegant code.
- Evaluation Model: It is impossible to become a good
programmer without having an understanding of how programs evaluate.
At the end of the day, programs execute on hardware machines with
physical limitations on the number of registers, the size of the
memory, etc, and programmers must understand the basics of these
machines and be aware of their limitations.
In this course, we will build a Java model of a simple hardware
machine, called the Duck Machine.
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:
- First it will explain the architecture and organization of a hardware
machine and the evaluation of programs at that level.
- Second it will serve as an example of a modern software system
that must be built to be flexible and extensible. Indeed we will
emphasize the use of sophisticated design patterns during the
- Finally, the organization of the course around the implementation
of a hardware machine leads to a natural overview of some of the most
important fields of computer science including computer organization,
operating systems, software engineering, programming languages, data
structures, algorithms, and user interfaces. More importantly, the
beauty of the course is that all these topics are presented in concert
to provide a coherent whole. It also illustrates why all areas of
computer science need to be mastered for even the simplest of
The lectures will cover:
- Programming concepts like abstraction, classes, objects,
inheritance, interfaces, recursion, exception handling, streams,
threads, and reflection.
- Design Patterns like the interpreter pattern, the visitor
pattern, and the model/view/controller pattern.
- Hardware Organization like the arithmetic and logic unit, the
central processing unit, the fetch-decode-execute cycle, etc.
| Date || Topic || Lab due
| || ||
| M 3/29 || Introduction ||
| W 3/31 || Data as objects: Abstract Classes; Basic Inheritance||
| F 4/2 || Duck Machine: Words ||
| M 4/5 || Duck Machine: ALU; Interfaces ||
Lab 0: CIS 210 Review
| W 4/7 || Data as objects: Object instances ||
| F 4/9 || Data as objects: Exceptions are objects ||
| M 4/12 || Duck Machine: Memory ||
Lab 1: ALU
| W 4/14 || Throwing and Catching Exceptions ||
| F 4/16 || Objects: Scope vs Lifetime ||
| M 4/19 || Review; Quiz ||
Lab 2: Memory
| W 4/21 || Duck Machine: CPU and IO ||
| F 4/23 || Streams (API) ||
| M 4/26 || Duck Machine: Instructions; Interpreter Pattern ||
Lab 3: IO
| W 4/28 || Advanced Inheritance: Types vs Classes ||
| F 4/30 || Midterm ||
| M 5/3 || Advanced Inheritance: Types vs Classes ||
Lab 4: Instructions
| W 5/5 || Visitor Pattern ||
| F 5/7 || Visitor Pattern ||
| M 5/10 || Duck Machine: Putting it Together; Quiz ||
Lab 5: Central Processing Unit, Interpreter
| W 5/12 || Review or Advanced Java Topic ||
| F 5/14 || Review or Advanced Java Topic ||
| M 5/17 || Recursion: Data as Objects again ||
Lab 6: Machine
| W 5/19 || Recursion: Mathematical Foundations; Puzzles ||
| F 5/21 || Recursion: Binary Trees ||
| M 5/24 || Recursion: Iteration ||
Lab 7: Advanced Machine
| W 5/26 || Recursion: Linked Lists ||
| F 5/28 || Recursion: Linked Lists ||
| M 5/31 || Memorial Day ||
Lab 8: Recursion
| W 6/2 || Summary; Perspective; Future ||
| F 6/4 || Final Review; Teaching Evaluation ||
| U 6/10 || Final exam from 1:00 PM to 3:00 PM
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 rarely 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.
- Lecture notes and code from lectures.
- Email assistance. Send email at any time to all of us.
- Office hours:
- Amr Sabry (M 11-12 and W 10-12 in DES 313):
- Yolanda Reimer (U 4-5 and F 1-2,3-4 in DES 341):
- Tobias Brick (U 12:30-2 and H 2-3:30 in DES 235):
- Reference books for Java: The text you have used in CIS 210 will do fine.
Java Software Solutions, Lewis and
- Design patterns. I 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
- Hardware Machines. I recommend: 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. You will also be using it in CIS 212.
- Sun's official site for Java.
- The JDK
- The Java
Language specification, HTML version.
All homeworks will be collected in class (on Mondays) and returned
during your lab period. Your grade will be computed as follows:
- Nine homeworks: 30%
- Quiz (April 19): 5%
- Midterm exam (April 30): 20%
- Quiz (May 10): 5%
- Final exam (June 10): 40%
- Extra credit problems: Up to 5%
times since December 15, 1997 (or the last crash).