School of Computer Science
Computer Science 308-203A: Syllabus
Fall Session, 2000
Introduction to Computing II
The purpose of this class is to prepare students with an elementary background
in programming to participate effectively in software development. In particular,
we would like to foster:
An understanding of some of the basic data structures and algorithms which
recur time and again in programming
An appreciation for the way in which object-oriented programming facilitates
clear and reusable code via abstraction.
An awareness of computational complexity issues of running time and memory
as they arise in programming
An ability to engage in programming as it is performed in the "real
world," which means working actively with bodies of code which
one did not create entirely on one's own.
You should be familiar with programming in a high level language including
the use of procedures, parameter passing mechanisms and arrays. I assume
that all of you have some knowledge of Java (or at least of C). This material
is covered in courses in computer programming and problem solving such
as 308-202, Introduction to Computing I.
Most of the ideas we will encounter in the course do not depend on the
language being used to implement them, but when we do use a specific language
for examples or to do assignments, we will use Java.
There is no official textbook for this course, however the following references
on data structures and algorithms in Java may be of use:
Two additional references on algorithms, of which the second is the
classic work frequently referred to as "the Big White Book," an introduction
employed in computer science programs almost universally:
Data Structures and Other Objects Using Java, Addison-Wesley,
Mark Allen Weiss, Data Structures and Problem Solving Using Java,
Numerous references on the Java language itself can be obtained from www.javasoft.com
as well as www.java.sun.com.
Gilles Brassard and Paul Bratley, Fundamentals of Algorithmics,
T.H. Cormen, C.E. Leiserson and R.L. Rivest, Introduction to Algorithms,
MIT Press, 1990
This course deals with programming techniques used to solve non-trivial
programming problems effectively. We will focus largely on the design of
data structures which support the efficient manipulation of data. Specific
topics to be covered will be chosen from the following:
Software design in Java
Traditional data structures and algorithms
A review of Java
OOP - Objects, classes, and inheritance
Abstract Data Types (ADT's) and their use in program design
The running time of algorithms
Lists, stacks and queues
Trees and tries
Concurrency, multi-threading and deadlock
A little taste of AI
There will be bi-weekly assignments, which will consist of a few
written questions and/or programming problems. For the programming problems,
the following must be handed in:
The above must be submitted in both hardcopy and electronic format
(except for the .class files which, needless to say, do not need
to be printed out in hardcopy). Handing in a program listing
by itself is of no use to us and will result in a grade of zero.
Source code (.java files)
Compiled code (.class files)
Execution of test-cases to demonstrate that the program meets the problem
Assignments should be deposited in the box marked 308-203 outside
MC100N, clearly labelled with your name and student number. They should
contain a diskette with the program, a printout of the program and a brief
discussion of the test cases you checked.
There will be a course project of moderate size consisting of 2 phases.
Programmers in the field rarely work alone, and are frequently called upon
not only to participate in a collaborative design effort but to alter pre-existing
software, be it for a small tweak or a major upgrade. Unfortunately, students
are rarely exposed to this process before leaving academia.
Project Phase #1 will involve the design and testing of a body
of code somewhat larger than the toy examples which are given as regular
For Project Phase #2, students will integrate some (not necessarily
100% compatible) software modules into a working program.
The grading will be partitioned as follows:
|Project Part #1
|Project Part #2
Time: MWF 11-1230 Room: McConnell
If you need to schedule another time to meet with me, do not hesitate
to e-mail me at email@example.com
N.B. If I am not to be found in my office, I am likely to be found next
door in the Compilers and Concurrency (CCL) lab - McConnell 234.
Send comments/questions to firstname.lastname@example.org
[ McGill University ][ Academic
] [ SOCS HOME ]
August 28, 2000