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