INTRODUCTION TO COMPUTER SCIENCE
308-250A
Time: MWF 1:30-2:30
Place: LEACOCK 26
Last update: 99.9.13
Prakash's welcome:
First of all let me welcome you to the computer science program at
McGill. We all hope that you will find the courses educational, challenging
and entertaining. This, the first course, will introduce you to (some of)
the basic concepts of computer science. The most fundamental idea is that
of an algorithm . This is an ancient concept, at least 2500 years old,
and was articulated by Arab, Aztec, Chinese, Greek and Indian mathematicians
a long time before physical computers were imagined. It is remarkable that
this central concept has remained unchanged over the years. In this class
we will learn to design algorithms that are correct and efficient . We
will learn a scientific approach to discussing the efficiency of algorithms,
and rigourous techniques for reasoning about algorithms. We will also learn
how to implement algorithms (this is what is normally called ``programming'').
You will have noticed that programming is only one of the topics that I
have mentioned. Programming is a vital skill, and becoming good at it is
a major component of the course. However, the design and study of algorithms
is the core of computer science. Please do not confuse knowledge of one
or another system or machine as being equivalent to knowing ``computer
science''. It is a sad fact that many colleges and educational institutions
offer courses on ``using computers'' and call it computer science. This
is like saying that `driver's ed'' is mechanical engineering! Systems and
machines change but algorithms are of general and permanent utility. This
course is not about how to use Windows98 or a UNIX system, nor is it even
about learning a specific language. It is about algorithms. At the end
of this course you will be able to design and implement a variety of algorithms.
This knowledge will be portable across languages and machines. Having
said all this, learning about algorithms in a purely abstract way is not
very useful either. Thus there will indeed be programming assignments.
I assume that you know the elements of programming in some language such
as Pascal or Basic. We have a laboratory of about 20 Pentiums which will
run Java. Several other labs on campus are also available. We will use
the language called ``Java'' in this class. This is a relatively new but
very popular object-oriented programming language. It is closely related
to C++ and to C but there are key differences.
Last year a number of students has problems with this course that could
have been
avoided. Here are some hints for taking this course.
The lectures are intended to be thought about
and discussed. If you do not understand everything that is going
on in the classroom, do not be either discouraged or surprised. I expect
that you have to think about these ideas before they sink in.
Expect your programs not to work at first. I have
had people time after time tell me that they are ``almost done, I just
need to type it in.'' If you have not started to test it you are about
5% done. Naturally if your expectation is that nothing will go wrong, then
you will get very frustrated when your program does not work.
Please take all programming problems to one of
the course TAs. When you come to the TA with a problem regarding
a program please bring the program on a diskette or the program listing.
A lot of errors are impossible to spot by yourself for purely psychological
reasons. Ask someone else to look at it at some point. If you have spent
all day on a bug that is too long, come for advice before that.
Required Texts:
Data Structures & Problem Solving Using Java, M.
Weiss, Addison-Wesley
The core material of the course is contained
in Chapters 1-13 and 15-17. Current topics of interest will be included
as time permits.
A Little Book on Java, F. Ahmad and P. Panangaden, available
at Copi-EUS (McConnell Engineering, main entrance. Ask for 308-250 Course
Notes).
Supplementary Text on Reserve at PSENG Library: Data Structures
and Other Objects Using Java, M. Main, Addison Wesley
Grading: Homework 30%, Midterm 10%, Final 60%
Homework: There will be 6 assignments. For the programming
assignments, you will be expected to develop, test and exhibit working
programs. We expect that you will comment all programs thoroughly. We want
you to hand in a diskette containing the program, a printout of the program
listing and a brief discussion of the test cases that you checked. Handing
in a program listing with no indication that you actually ran it is useless
to us. Most of you paid no attention to that sentence, let me reiterate
it. If you just hand in the program listing you will get ZERO!! We, after
all, cannot tell whether a program runs by staring at it. If we could,
we probably would not need computers!! All assignments should be dropped
off at the box marked "308-250" on the first floor of McConnell Engineering,
in the lobby near the main elevators. No late assignments
accepted.
Dates:
Final Exam: tba
Midterm: October 15
Note new date!
Instructors:
David Avis
McConnell 308 avis@cs.mcgill.ca
398-3737
Office Hours: Tu 11-12 and Th
3:30-4:30
Jacob Eliosoff, jacob@cs.mcgill.ca
Teaching Assistants: (office hours tba)
Website Info: http://www.cs.mcgill.ca/~avis
click on "308-250" or use ftp://mutt.cs.mcgill.ca/pub/courses/250.html