Home Page for CIS 211
- Instructor: Amr Sabry
- GTF: Joshua Madden
- GTF:
Pulumati Laxman Rao V.
Study Guide
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
programming:
- Program Construction: Modern software systems are built by
composing independent components. The most important factor in
the success of these systems is the ease with which their
functionality can be extended and their components upgraded without
having to rewrite or even recompile previously written code.
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
implementation.
- 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, all
these topics are presented in concert to provide a coherent whole,
which illustrates why all areas of computer science need to be
mastered for even the simplest of projects.
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.
Resources:
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.
Grading
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%
- Midterm I (April 17): 10%
- Midterm II (May 12): 20%
- Final exam (June 8): 40%
- Extra credit problems: Up to 5%
Lectures
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 | 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).
sabry@cs.uoregon.edu