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 firstname.lastname@example.org.
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.