CS 100: Principles of Computer Science is being taught by David Eck in the Fall term of 1997 at Hobart and William Smith Colleges, using the book The Most Complex Machine and a set of lab worksheets and Java applets. This is the main information page for that courses. The course handout and Information about previous terms are also available.
Students in the course are expected to check this page weekly.
The class for Monday, November 10 was a showing of the video "Giant Brains" from the series "The Machine that Changed the World." The quiz on Wednesday will have a few questions about this video. The remainder of the quiz will cover Section 11.1 from the text and the xModels program that was used in last week's lab. This will be the last quiz of the course.
The final exam for this course will be on Sunday, November 23, from 7:00 to 10:00 PM. It will be in our usual classroom. The exam will include all the material we have covered in the course, but there will be some emphasis on material covered after the second test (that is, on recursion, computer graphics, and artificial intelligence). The last question on the test will be a full-page essay on structured complexity.
Friday, November 14, at lab, is the last day to turn in lab reports (unless you get an explicit extension from me, with a very good reason).
The lab for this week is xModels Lab 2: Adding the Third Dimension. I will not collect a lab report for this lab. The grading for the lab will be as follows: 12 points for being there (or less, if you are significantly late); 1-1/2 points each for finishing two exercises from the lab worksheet (I will announce which ones at the lab).
The final reading for the course is Chapter 12, on artificial intelligence. However, you will not be tested on Section 12.3. Here are some important terms and ideas from this Sections 12.1 and 12.2:
The Turing Test
Physical Symbol System Hypothesis
Brute force search
Heuristics
Microworld
Expert system
Knowledge representation
Specific programs: GPS, SHRDLU, CYC
Hubert Dreyfus: Intelligence cannot be based on facts and rules
John Searle: The Chinese Room argument against AI
The problem of consciousness and "solipcism"
There is a test in class this Wednesday. For more information, look below at last week's listing.
The lab for this week is xModels Lab 1: Two-D Graphics and Animation. For your lab report, you should turn in a short essay (about a page) about what you did and what you learned in the lab. You should also do the following exercises from the lab: Exercise 1, Exercise 2, Exercise 4, Exercise 6, Exercise 7, and Exercise 8.
The reading for this week consists of Chapter 11, through Section 11.1. We will not cover the details of Section 11.2, but you should be aware of the general idea of rendering of graphical images and of some of the issues involved. For the quiz next week, you should also be familiar with the scene description language used in the xModels program.
Important ideas from the reading and from the lab include:
Painting programs vs. drawing programs
Computer animation
Rendering
Attributes (color, lighting, etc.)
Geometric models
Geometric transformations
Scaling, translation, and rotation
Wireframe models
Basic objects in xModels
Transformations in xModels
Animation in xModels
Object definitions in xModels
The quiz this week is on Chapter 6. Next Wednesday, November 5, there will be a test. It will cover: Section 4.1, Section 5.2, all of Chapter 6, Section 7.1, and Section 7.2. Note that it does not cover Section 7.3 (on recursion), even though that section is on the reading list for this week.
The lab for this week is xTurtle Lab 3: Subroutines and Recursion. For your lab report, you should turn in a short essay (about a page) about what you did and what you learned in the lab. You should also do the following exercises from the lab: Exercise 1, Exercise 6, Exercise 8, Exercise 9, and Exercise 10.
The reading for this week is Chapter 7, Sections 1, 2, and 3. (Section 3 is not on next week's test.) We will not cover Section 4. Note that I will also not expect you to know about "reference parameters," which are covered in Subsection 7.1.2. Note also that we will skip Chapters 8, 9, and 10 entirely (although you should, by all means, read them at some point to make yourself a better person).
Important ideas from the reading include:
Writing new subroutines (SUB and END SUB)
Dummy parameters (also know as formal parameters)
Actual parameters
Local variables
Modules
Software Life Cycle: Specification, Analysis and Design,
Coding, Testing and Debugging, Maintenance
Recursion
The quiz this week will be on Chapter 5 only. It will not include any questions on the most recent lab.
In lab this week, you will continue working with xTurtle. The lab worksheet for this week is xTurtle Lab 2: Thinking about Programs. For your lab report, you should turn in a short essay (about a page) about what you did and what you learned in the lab. You should also do the following exercises from the lab: Exercise 1, Exercise 5, Exercise 9, Exercise 10, and Exercise 11. (For exercise 10, see some of the advice given in Exercise 6.) Any program that you turn in should include some comments to explain how the program works! The lab report is due next Friday, October 31, in class.
The reading for this week is all of Chapter 6. However, you will not be tested on BNF, which is covered in Subsections 6.2.2 and 6.2.3. The quiz next week will be on Chapter 6.
Important ideas from the reading include:
Programming
The importance of names
Syntax and Semantics
Built-in subroutines
Basic xTurtle subroutines:
forward, back, turn, penUp, penDown, move, moveTo
Subroutine call statements
Parameters
Variables
DECLARE statements
Assignment statements
Input/Output statements: AskUser and TellUser
Control structures
LOOP statements
IF statements
Preconditions
Postconditions
Processes and states
Comments in a program
For the quiz this Wednesday, don't forget to read the Web Publishing Lab worksheet, as well as the material from Section 4.1 in the text.
The lab this week is xTurtle Lab 1: Introduction to Programming. The lab introduces some of the basic ideas of high-level programming languages. It uses a language called "xTurtle" which lets you draw pictures on the computer's screen. For your lab report, you should turn in a short essay (about a page) about what you did and what you learned in the lab. You should also do the following exercises from the lab: Exercise 1, Exercise 5, Exercise 6, Exercise 7, Exercise 8, and Exercise 9. (Exercise 1 is, in some ways, the hardest of these!) The lab report is due next Friday, October 24, in class. Note that you should be able to copy-and-paste the programs that you write for this lab into your lab report, so you don't have to retype or rewrite them. You might want to open a Notepad document where you can save the programs as you write them.
Warning: There are some problems with the xTurtle applet that you will use in this lab. You might find that sometimes part of a picture is not drawn until the xTurtle program ends. This seems to be a bug in the implementaion of Java in Netscape. It seems that the problem is less likely if you make the turtle invisible.
The reading for the week consists of Chapter 5, omitting the material from page 139 to 146. (We will come back to this omitted material later, towards the end of the course, when I plan to show a video called Giant Brains in class.) We will probably not talk much about Section 5.3 in class, but it should be fairly easy reading. Note that the lab this week is related to Chapter 6 rather than to Chapter 5. However, the quiz next week will only cover Chapter 5. You will read Chapter 6 next week, with a quiz on that material the following week.
Important ideas for this week include:
integrated circuit
microprocessor
graphical user interface
memory-mapped I/O
video memory
interrupt
interrupt handler
bus
ports
expansion slots and expansion cards
device driver
operating system
application programming interface (API)
ROM
system startup and configuration
processes and states
multitasking
The test on Wednesday, October 8, covers material listed for Weeks 1 through 4, below. The material listed here, for Week 5, will be on the quiz next week, October 15.
The lab this week is Publishing on the Web. In this lab, you will learn how to use the Web-authoring component of Netscape Communicator to create and publish your own "home page" on the Web. I have made an account for you on the computer escher.hws.edu. You will publish your page in this account. I'll tell you your username and password at the lab.
For your lab report, you should, as usual, write a one-page essay discussing what you did and what you learned in the lab. Aside from this, the only exercise is to create and publish a Web page. I will look for your page on the Web; you don't have to print it out. The page must include some colors, two or more links, a list of items, and at least one image. Your grade for the page will depend on how good a job you do on it. You can work with a partner on your page if you want.
The reading for this week consists of Section 4.1 in the text. I will not ask you to read the rest of the chapter. You should also know the basic ideas of the halting problem and of "computationally unsolvable problems" in general. This was covered in class and is not in the assigned reading.
Important ideas for this week include:
Computational universality
Simulation of one computer by another
Compilers
Interpreters
Virtual machines
The Java Virtual Machine
Church-Turing Thesis
Halting Problem
Computationally unsolvable problems
Publishing on the Web
HTML (HyperText Markup Language)
Hypertext
Web server
There will be a test next week, on Wednesday, October 8. It will include all the material through Chapter 3 in the text and in the first four labs. (It will not include any new material from Chapter 4, which we cover in class next Monday.) You are reminded that the online Information about previous terms includes sample tests and quizzes, with answers.
The lab for Friday is xComputer Lab 1: Introduction to xComputer. (This is the only lab that you will do using the xComputer applet.) For your lab report, you should turn in a short essay (about a page) about what you did and what you learned in the lab. You should also answer the following exercises from the lab worksheet: Exercise 1, Exercise 3, Exercise 4, Exercise 6, Exercise 7, and Exercise 10. The lab report is due next Friday, October 10, in class. There are no pictures in this lab report, so you can turn it in by email if you want.
The reading for this week includes parts of Chapter 3. Finish reading section 3.1, if you have not already done so. Read the introductory material in Section 3.2 on page 82 through the top of page 84. You don't need to know all the details from the remainder of Section 3.2, about the execution of individual machine language instructions. You will, however, need to know what the most common assembly language instructions do. (See the list below.) Section 3.3 is important, and you should read it carefully. We will not cover section 3.4.
Here are some important terms and ideas from the lab and reading:
Assembly language
Basic assembly language instructions:
LOD LOD-C JMP INC
ADD ADD-C JMZ DEC
SUB SUB-C JMN STO
The steps that make up a fetch-and-execute cycle
How control wires are used to carry out the fetch-and-execute cycle
How the control circuit works
How the clock drives the fetch-and-execute cycle
Registers in the CPU of xComputer, and the roles they play:
COUNT register
PC (program counter register)
ADDR (address register)
IR (instruction register)
AC (accumulator register)
Black box
The lab for Friday, September 26 is xLogicCircuits Lab 2: Memory Circuits. For your lab report, you should turn in a short essay (about a page) about what you did and what you learned in the lab. You should also answer the following exercises from the lab worksheet: Exercise 1, Exercise 3, Exercise 5, Exercise 6, Exercise 7. (You might want to think about exercises 8 and 9 when you write your introductory essay!)
The reading for this week is Chapter 2, Section 3 through Chapter 3, Section 1. You can skip the material from the last paragraph on page 71 to the end of Subsection 3.1.1. Also, for this week, you won't need to know the details about all the different registers covered in Subsection 3.1.2. For those of you who like to read ahead, note that I will not ask you to read the bulk of Section 3.2. (The lab and reading for this week are a departure from the tentative schedule that was included in the course handout. I have decided to spend a little more time on Chapters 2 and 3, and a little less on Chapter 4.)
Here are some important terms and ideas from the reading:
feedback loop in a circuit
memory circuit
the clock which drives the operation of a computer
control circuit and control wires
registers
CPU and main memory
how to store data and read data in main memory
locations in main memory
address of a location in main memory
fetch-and-execute cycle
If you are still looking for the material about the first week of the course, you'll find it later on the page. (The Quiz on Wednesday, September 17, covers the first chapter of the book and the first lab. A list of important terms is given in the Week 1 section below.)
The lab on Friday, September 19 is xLogicCircuits Lab 1: Logic Circuits. In this lab, you'll work with simulated logic circuits made of AND, OR, and NOT gates. For your lab report, you should turn in a short essay (about a page) about what you did and what you learned in the lab. You should also do the following exercises from the end of the lab worksheet: Exercise 3, Exercise 4, Exercise 6, Exercise 9, and Exercise 10. For the exercises that ask you to "build a circuit," you should turn in a drawing of the circuit. The lab report is due next Friday, September 26, by the beginning of class. You can turn it in either by email or on paper. (For this lab, even if you use email, you'll still have to turn in some drawings of circuits on paper.)
The reading for this week consists of parts of Chapter 2. Some parts of Chapter 2 are rather technical, and we will not cover them all. You should read pages 29--48 and 54--56. This includes the introductory material for the chapter, all of section 2.1, and subsections 2.2.1, 2.2.2, and 2.2.6.
The quiz next Wednesday, September 24, will cover the lab and the readings from Chapter 2. You can expect some questions that are similar to lab exercises. Here are some important terms and ideas:
Boolean algebra (also known as propositional logic)
AND, OR, and NOT gates and the rules for their operation
logic circuits
relationship between logic circuits and Boolean algebra
specifying circuit behavior with an input/output table
building a circuit based on an input/output table
binary numbers
counting in binary
adding binary numbers
half-adder circuit
full-adder circuit
k-bit addition circuit
Arithmetic-Logic Unit (ALU)
control wires
Welcome to the course! In this spot every week, you'll find information about what we are doing in the course that week. There will be a link to the lab that you'll be doing on Friday, and a description of the lab report you have to turn in. You'll also find a list of key concepts and terms from the reading and lab. These are things that are likely to turn up on the quiz the following week.
Friday's lab is Introductory Lab: The Web, Java, and Data Reps. For your lab report, you should write a short essay (about one page) discussing what you did and what you learned in the lab. Then you should answer the following exercises from lab: Exercise 1, Exercise 2, Exercise 5, Exercise 7, Exercise 8, and Exercise 10. Your lab report must be turned in no later than the beginning of class next Friday, September 19. It can be submitted on paper or by email to cs100@hws.edu.
At the lab on Friday, or some other time at your convenience, you should read about using Netscape for sending and receiveing email. The information is available on the Web on the page Using Email at HWS. (You should send me at least one email message!)
The reading for this week is Chapter 1 of the text, "What Computers Do." This is an introductory survey chapter, and many of the topics mentioned will be covered in more detail as the course progresses. You should try to understand the basic idea of structured complexity, which is the central theme of the course.
The key concepts and terms for this week include:
mechanical manipulation of symbols World-Wide Web (WWW)
bit Internet
byte Web browser
ASCII code URL
pixel links and Web pages
transistor search engine
memory Java
central processing unit (CPU) applet
program
machine language
structured complexity
high-level language
This material will be on the quiz that will be given in class next Wednesday, September 17. I expect you to come to class on Monday prepared to discuss this material. You should have questions and comments on what you've read.