This document is available online at http://helios.hampshire.edu/jdavila/cs109. For the latest updates, visit the online version.

 CS 109: Introduction to Computer Science.

Last Updated: July 25, 2000
 


Textbook: A Book on C, Fourth Edition, by Kelley and Pohl. Addison-Wesley.


Instructor           : Jaime Davila
Office              : ASH 204
Office Hrs       : Tuesdays and Thursdays, 10:30 AM -12:00 PM
                                   Fridays,                           12:00-1:00 PM
                                   or by appointment.
Phone Number : 413-559-5687
email               : jdavila at hampshire dot edu (by far the best way to reach me)

Notes:


This course is designed to give you an introduction to general computer science topics, with a very strong emphasis on programming. At the end of the semester you will not be an expert in any one field of computer science. You will certainly understand, though, what some of the most common topics in computer science are.

Although we will be covering topics having to do with computer hardware, we will spend most of the semester talking and working with software.

Classes will be run in a very interactive mode. Each week I will use part of the class to present the basics of a programming subject. You will then use the rest of the class to start building a program that puts that subject into practice. That will give you the opportunity to see what was just explained "in action," while at the same time allowing you to discover and ask any questions you might have. The result of these sessions will then be expanded into homeworks.



Your evaluation for this course will be based on 1)class participation (both daily and during assignment discussions), 2)programs you will be handing in throughout the semester, and 3) a portfolio of programs you will hand in at the end of the semester.

There will be a total of five assignments this semester. You will always have at least one whole week between the date when the assignment is given and the day it is due. Because of the number of students in the class, as well as to build a sense of professionalism, I will not accept late homeworks.

Homeworks will always be due on a Tuesday, unless otherwise stated.  Handing your homework will consist of EMAILING me a copy of all the files that form part of your homework. You should send these files to the email address listed above.

In the schedule below you will notice when it is in the semester we will be having assignments. As soon as the material for an assignment is covered in class, you will be able to follow links below to pages describing the homeworks.

The first time we meet in class after a homework is due, we will discuss your homeworks as a group. I will take your name and other identifying information out of the files, and then project them into a screen so that we can all look at them together. The purpose is that we can all learn from each other, observing the good and bad that we have all generated.  I expect everyone to participate in these discussions; the amount of knowledge we can get from each other is enormous.

At the end of the semester I will let you know of which homeworks from throughout the semester you will be handing in again. When you hand these homeworks again, I expect you to incorporate everything you might have learnt during class discussions.  In addition, I will assign one or two new projects to be handed in with the rest of your "old `" homeworks.


Division I note:

If you would like to have this course count as one of your Div. 1 courses, you will need to do some work in addition to what is outlined above.

As the semester goes along, you will see that I keep talking about how a lot of software currently being created and used is full of bugs. My personal position is that the type of errors we all find in the programs we purchase and use would not be accepted in any other field. For example, no one would accept an automobile that crashes every other day, or buildings that collapse under their own weight.

The fact is, there are mathematical techniques we can use in order to certify that our programs are correct. We can apply these techniques to our programs to determine if they are free of bugs once the programs have been written. In fact, we can write algorithms as mathematical formulations first, and then turn these mathematical algorithms into error-free code.

I will be talking about these techniques in class, and show you how to use them for code design. If you would like this course to count as a Div. 1 course, the homeworks you hand in will need to be proven correct by using these techniques. If you want to pursue this option, I suggest that you meet with me several times during the semester, so that we can talk about how you are doing with regards to this requirement.


The following schedule should help you in preparing for the different topics we will be talking about during this semester. We will all enjoy and get more out of the course if you do the suggested readings before coming to class.

I encourage you to take advantage of the syllabus shown below in order to remain on schedule.


Week Dates Topics Assignments Reading
1 Sept. 7 Course outline. 
What the course is and is not about. 
What you should expect of the course. 
Office hours, etc. 
Introduction to the course. 
Computer Organization. 
  13.1, 13.2
2 Sept. 12, 14 Simple programs: printing, arithmetic operations. 
 
September 14: Assigned: First homework, dealing with arithmetic expressions, conditional statements, and while loops (due September 19).  13.1, 13.2, 2.8-2.12
3 Sept. 19 21 Relational operators. Control structures.
 
4.1-4.9
4 Sept. 26, 28 Control Structures Assigned: Second homework, dealing with function decomposition (due October 10). 4.1-4.9
5 Oct 3, 5 Control Structures, Functions. 

 

  4.15-4.17, 5.1-5.7
6 Oct. 12 Control structures Second homework due on October 10th, befome midnight.  
7 Oct. 17, 19 Functions   5.1-5.7
8 Oct. 24, 26 Arrays    
9 Oct 31, Nov. 2, 4  Arrays.  

6.1, 6.12
10 Nov. 7, 9 Pointers, file I/O   6.2-6.5, chapter 11
11 Nov. 16 Arrays   6.6-6.11
12 Nov. 21 Introduction to Data Structures   Chapter 9
13 Nov. 28, 30 Introduction to Data Structures   Chapter 9
14 Dec. 5 Introduction to Data Structures. Last project assigned (due December 13) 13.4