Home Page for CIS 211


Instructor: Amr Sabry
GTF: John Fiskio-Lasseter
GTF: Chris Heino
Grades are online. I apologize for being late, but John and Chris had exams and projects of their own. The distribution is:
A+ *********
A  ************
A- ******
B+ ******
B  ********
B- ****
C+ *********
C  ****
C- ******
D+ *
D- ****
F  ************
Y  *

I have your last homework and final exam. Stop by if you want them.

General Information

Online help desk

Study Guide

About exceptions
Code from lectures
Review Problems for Final
Exam Solutions

Homeworks and Grades

Lab 8 Instructions
Lab 7 Instructions
Lab 6 Instructions
Lab 5 Instructions
Lab 4 Instructions
Lab 3 Instructions
Extra Credit Problems

What is CIS 211 about?

The goals of this course are:
  • to teach programming as the fundamental skill that you should master and use in your day-to-day communication, and
  • to familiarize you with the field of computer science, its main subject areas, and its recurring concepts.

    To achieve both goals, the course will be organized around writing a program to model a simple hardware machine. This task will require us to, not only understand the basics of computer organization, the fetch-execute cycle, and the machine language program structure, but also learn how to use programming constructs such as classes, objects, interfaces, arrays, exceptions, streams, threads, reflection, etc, to express our understanding concretely and precisely in the form of executable programs.

    Getting Help

    Send email, at any time, to all of us simultaneously. I am pretty good at answering it. Alternatively, you can use the online help desk. We also hold the following office hours:


    The lectures will cover: The code that I use in the lecture is available.


    The lab component will apply the concepts you learn in lecture to one project. We will write a Java program to simulate a simple hardware machine. Each lab will address one part of the machine and will be self-contained. In other words, each lab can be done without reference to previous or later labs so there should be no problems if you miss or don't understand a lab. At the end of the term, all the labs can be combined to get a complete simulation of the machine. All homeworks will be collected and returned during the lab (except the first because of the MLK holiday). Other than the brief period during which this happens, you don't have to attend the labs. However I encourage you to attend the lab to get insights and help about your homework. The notes are still terse, and you will probably need extra help!

    My complete implementation is around 3700 lines of code. You will obviously not write this much code, so for each assignment, I will provide you with some help files. Also the documentation of my implementation is available online. You can even download the bytecodes of my implementation to get a feeling for the final product.


    Here is a preliminary schedule of lectures and labs:

    Date Topic Lab due
    1/5 Introduction
    1/7 No lecture
    1/9 Data as objects
    1/12 More data as objects; Exceptions
    1/14 More data as objects; Exceptions
    1/16 More data as objects; Exceptions Memory Unit (Chapter 3)
    1/19 MLK holiday
    1/21 Lecture by John F-L about ALU lab
    1/23 Benefits of OO (I)
    1/26 Inheritance ALU (Chapter 4)
    1/28 Inheritance
    1/30 Inheritance
    2/2 Visitor Pattern CPU and IO (Chapters 6 and 7)
    2/4 Visitor Pattern
    2/6 Visitor Pattern
    2/9 Abstract Classes; Interfaces Instructions (Chapter 5)
    2/11 Midterm
    2/13 Recursion
    2/16 Recursion Machine (Chapter 8)
    2/18 Recursion
    2/20 Recursion
    2/23 More Visitors Execution; Tracing; Debugging
    2/25 More Visitors
    2/27 Graphical User Interfaces
    3/2 AWT Textual shell
    3/4 AWT
    3/6 Threads
    3/9 TBA Graphical shell
    3/11 TBA
    3/13 Conclusion
    3/17 Final exam at 3:15


    Your grade will be computed as follows:



    Books are great but you will never learn programming by reading about it. So apply what you read.


    You will need to install the JDK version 1.1 or higher and some documentation on your home machine. If you have a Mac, you will not be able to test parts of the homework on your home machine. Sorry!

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