(Last Revision: 08/26/99)

TERM:

Fall 1999

CLASS CODES:

40331 CS 2500 Section 001
40332 CS 2502 Section 001

INSTRUCTOR:

John Sarraille, Professor of Computer Science

OFFICE:

P-286, Professional Schools Building, Cal State Stanislaus

OFFICE HOURS:

MWF 9:00-10:00; Tu-Th 10:00-11:00; or by appointment

TELEPHONE NUMBERS:

Office: 667-3345; CS Dept: 667-3185

E-MAIL:

john@ishi.csustan.edu

HOMEPAGE:

http://www.cs.csustan.edu/~john/jsHomepage.html

BASIC SCHEDULE INFO:

Class meets MWF 10:10-11:08 in P-101

For technical reasons, students in this class are required to sign up 
separately for CS 2500 (lecture) and CS 2502 (lab). However, each class 
session is a mixture of lab and lecture. Each day we do whatever we need to 
do: lab, lecture, or some of both.  Almost every time class meets, whatever 
day it is, we will be in P-101.  However, during the semester class will meet 
occasionally in the main Computer Science Laboratory (The Lab: P-288).  We 
will meet there if we need to do some hands-on computer work.  Always come to 
P-101 for class unless I have previously announced that we will meet in the 
Lab.

My expectation is that everyone will attend all the classes and keep current 
with everything that is happening in class.

PREREQUISITES:

It is important that you are adequately prepared for taking this course, CS 
2500.  Check with me if you have not passed:

CS 1500 (Computer Programming I), or the equivalent.

REQUIRED TEXTS:

"Data Abstraction and Problem Solving with C++: walls and mirrors" by Carrano, 
Helman, and Veroff (2nd edition), published by Addison Wesley, ISBN 0-201-
87402-4, http://www.awlonline.com/product/0,1115,0201874024,00.html

"Learning the Unix Operating System" by Grace Todino, Jerry Peek, and John 
Strang (4th Edition), published by O'Reilly & Associates, ISBN 1-56592-390-1, 
http://www.oreilly.com/catalog/lunix4/

The Unix book above is very inexpensive -- currently $10.95 (new).  Look in 
the CS 3100 textbook section for it if you don't see it in the CS 2500 
section.

SUGGESTED READING:

You should also consider getting a more comprehensive Unix book.  Here are a 
couple of possibilities:

"UNIX in a Nutshell: System V Edition, 3rd Edition" by Arnold Robbins, 
published by O'Reilly & Associates, ISBN 1-56592-427-4, 
http://www.oreilly.com/catalog/unixnut3/

"A Practical Guide to the UNIX System, 3rd Edition" by Mark G. Sobell, 
published by Addison Wesley, ISBN 0-8053-7565-1, 
http://www.awlonline.com/product/0,1115,0805375651,00.html

PROGRAMMING LANGUAGE:

Our text is C++ oriented, and I will present most code samples in C++. If you 
want to do a programming assignment in a different computer language, 
basically I am willing to accept that, but you must speak with me in advance 
and reach an agreement on some ground rules.

COMPUTER EQUIPMENT
SUN Ultra Workstations:

Each of you will need an account that gives you access to all the Computer 
Science Department Sun Ultra 10 and Sun Ultra 30 computers.  These computers 
have been specially networked so that you get the same environment, including 
home directory of your personal files, regardless of which Sun Ultra you log 
on to.  

If you don't seem to have access to the Ultra's, then let me know right away, 
preferably by e-mail.  Give me your full name and the name of the class.  I'll 
see to it that an account is created for you, and I'll give you the account 
information at the next class meeting.

We'll have a special lab session to teach you what you need to know in order 
to use the Ultra's for class assignments.

The Ultra's are located in the Computer Science Lab: P-288.  P-288 is in the 
Professional Schools Building, in the extreme northwest corner of the north 
wing.  

I will test the programs that you write for this course by compiling and 
executing them on a Sun Ultra.  Therefore you must write programs that will 
compile and run without errors on these machines.  If you are accustomed to a 
different computing environment, you will have to be careful about this.

Generally, the Ultra's are available for access and use on a 24-hour basis.  
However the campus computer labs do not remain open at all hours.  Therefore 
sometimes network and modem connections will be the only means available for 
connecting to the Ultra's.  For more information about network and modem 
connections, see the sections below entitled "MODEM CONNECTIONS" and "INTERNET 
CONNECTIONS".  Also see the document entitled "loginDirections".

P-288 will be open basically mid-morning until about 5:00 p.m.  During these 
times, you can be physically present in the CS Department Lab while using a CS 
Department computer.  This can be very beneficial because you then have the 
opportunity to work and communicate with fellow students and members of the 
faculty.

Due to budgetary constraints beyond our control, the hours during which P-288 
is open are subject to change on short notice.  Please check the postings of 
the lab hours at the entrance to the lab or in the "message of the day" that 
is printed on your screen when you log on to your Sun Ultra account.

Incidentally, the CS Department is looking for volunteers and work-study 
students to help keep the lab open longer hours.  For further information, ask 
our system administrator, Julie Gorman: P-288C, 667-3273, 
julie@siggraph.csustan.edu.

While you are in the CS Lab, you will be able to access Sun Ultra workstations 
by logging in directly at the console, or by using telnet from some other kind 
of computer in the lab, such as a Macintosh or a "Wintel".

Telnet makes it possible for many people to use a given workstation 
simultaneously.  Let me know if you need a demonstration of how to get a 
telnet connection. (You can probably learn how just by asking someone in the 
lab.)  You can also access the Sun Ultra's via a telnet connection from most 
any computer on the campus local network, such as those in P-106, P-120, L-125 
and L-145.  Generally those labs are open during the same hours that the 
campus library is open.  Please check postings at the labs or ask lab 
personnel in order to get further information about lab hours.  Lab assistants 
(wearing red vests) should be able to show you how to telnet to a CS 
Department workstation.

MODEM CONNECTIONS:

Some telephone numbers for making modem connections are: from Turlock 669-
9834; toll-free from Modesto 523-2173; toll-free from Merced 723-2810; and 
toll-free from Stockton 467-5399.  Check with the computer center's (OIT's) 
help desk to get the latest information.  The help desk is in L-150, and the 
telephone number is 667-3687.

INTERNET CONNECTIONS:

You may want to purchase Internet connectivity.  This is *not* a requirement 
and *not* necessary for success, but it can be a great time-saver and a 
convenience once you have gotten past the hurdle of setting everything up.  

There are several Internet service providers (ISP's) that serve this area.  
Chances are that members of the class can make good recommendations.  We can 
devote some time to this topic on the first day of class.  

One can find many ISP's by using the site: "http://thelist.internet.com".  
ISP's also advertize in the yellow pages and in newspapers.

If you get an Internet connection, make sure you get "telnet" and "ftp" 
capability so that you can login remotely to your computer account at the 
college and also transfer files back and forth.  To be ready to do telnet and 
ftp, you may need to get some special add-on software from your ISP.

NETWORK AVAILABILITY OF COURSE MATERIALS:

Many course documents, assignments, supplements, and so on will be made 
available via gopher.  To access my gopher server, you can open the URL 
"gopher://ishi.csustan.edu" from any web browser on any computer connected to 
the campus network or Internet.  From there, just select "Classes" and then 
"CS2500_Programming_II" to get to the area containing the class information.

COURSE OBJECTIVES:

The main aim of this course is for you to acquire the knowledge, skills, and 
experience needed to solve programming problems correctly, efficiently, 
independently, and on time.  It will not be easy, but you will do well if you 
are patient and persistent.

Some specific goals are to learn about simple data structures, common 
algorithms, analyzing the efficiency of algorithms, designing programs that 
are easy to check and maintain, the basics of testing and debugging, self-
reliance, and dealing with the inherent uncertainties and complexities of 
today's computing systems.

Other aims of this course include learning to use advanced C++ features such 
as structures, classes, pointers, arrays, and files; learning to use Sun 
workstations effectively; and gaining facility with jove, a plain-text editor 
that is useful for editing program source files.

COURSE COVERAGE:

Basically, we will be covering chapters 1-4, 6-7, and 10 of "Walls and 
Mirrors".

If you are not yet familiar with Unix, I expect you to read Todino, Strang, 
and Peek in the first 2-3 weeks of the course.  Material from Todino, Strang, 
and Peek will be discussed as needed.

TESTS & GRADING:

The course has two main components: programs, and exams.

The program component consists of assignments to write 5 programs.  I will 
require you to design each program using a top-down design methodology.  You 
will use the top-down method to design the data structures, documentation, and 
test data of your program, as well as the program instructions themselves.

A programmer using the top-down method develops the program level by level.  
The programmer starts with a very simple first-level program design, and works 
down, step-by-step, to more detailed levels.  I will often require you to turn 
in two or three "levels" of your programming assignments so that I can check 
your progress in employing the top-down design method.

The exam component of this class consists of 3 quizzes, and an *optional* 
comprehensive final exam.  Each quiz and exam can cover topics from textbook, 
programming assignments, and lecture.

Ideally, you will do well on all the programs and quizzes, and your course 
grade will be determined by giving a weight of 10% to each program, and 16.66% 
to each quiz.  Under these ideal circumstances, you will not take the final 
exam and your quiz scores will, in total, account for 50% (3 times 16.66%) of 
your course grade.

THE OPTIONAL FINAL EXAM:

If you miss a quiz, or if for any reason you wish to improve your average on 
the exam component of the course, you may choose to take the final exam.  The 
final exam is penalty-free:  If your score on the final exam is higher than 
your lowest quiz score, then the final exam will count 16.66% of your grade in 
the course and your two highest quiz scores will each count 16.66%.  If your 
score on the final is equal to or lower than your lowest quiz score, then your 
score on the final will not count, and each quiz score will count 16.66% of 
your course grade.

EXCEPTION:

In order to receive a passing grade in this course, you must get a passing 
average in both the programming component and the exam component.  Also, you 
must turn in a working solution to each of the programming problems.  Late 
assignments are not accepted, so solutions to programming problems have to be 
turned in by the (final) due date for the project in order to receive credit.

LATE ASSIGNMENTS:

Late assignments will not be accepted, however we can discuss due dates in 
class and I may be willing to move a due date back if doing so can be 
justified to my satisfaction.  If you are uncomfortable with a scheduled due 
date, please bring this to my attention as soon as possible, and not at the 
last minute.

If you are not finished with an assignment on a due date, please turn in what 
you *have* done.  (In this case, it may be possible to get up to about half 
credit, depending on the quality of the work and the circumstances.)

NOTE: Please bear in mind that you can fail this course just by missing some 
due dates.  If you get bogged down on some aspect of an assignment, get some 
help from me.  Speak to me after class, during my office hours, or send me a 
message by e-mail.  Do this well before the assignment is due.  

SPECIAL PROBLEMS:

If you think you are going to be unable to take a test or turn in an 
assignment on time due to circumstances beyond your control, then let me know 
at the very earliest time possible.  I'll try to make some fair arrangement 
with you.

RESPONSIBILITY FOR YOUR OWN WORK:

I encourage you to discuss programming assignments with your classmates or 
whomever you wish.  It is very appropriate and worthwhile for students to get 
together to test their understanding of an assignment, to discuss advantages 
and disadvantages of alternative approaches to solving the problem, to talk 
over the pro's and con's of different ways of organizing the program, and to 
give each other pointers to helpful published materials.

You are welcome to use algorithms or segments of source code that you get from 
me, from text books, or from publications available in our library or through 
inter-library loan. (Don't expect all of it to work perfectly!  You'll have to 
adapt and even debug some of it.)  Aside from the foregoing exceptions, you 
must be the sole author of all the source code that goes into the programs you 
turn in for this course.

During quizzes and exams, you are allowed to come forward and ask me to 
clarify the meaning of a test question.  It will be up to me to decide how to 
answer, or whether to answer at all. The members of the class will be told any 
new information that arises from such an exchange.  Aside from that, you must 
write quizzes and exams without the help of other people or the help of any 
reading materials.

If there is compelling evidence that programs or tests were not done according 
to the above criteria, credit will be withheld.

PARTICIPATION:

I hope to be accessible, helpful, and responsive to your needs during this 
course.  You can do well, and I want that. 

To optimize your likelihood of success, consider participating fully in the 
class:  Attend all classes.  Faithfully listen and take notes.  Finish all 
assignments on time.  Review your notes before each class.  Reply to questions 
or remarks addressed to you.  Ask questions.  When you are not getting 
anywhere on some problem, and it's not the kind of thing you can get resolved 
in class, seek my help outside of class.  

Do all this, even when things are not going well.  And have fun!