McGill University
School of Computer Science

Computer Science 308-203A: Syllabus
Introduction to Computing II

Fall Session, 2000
Bulletin Board:
William F. Renner
Jacob Eliosoff


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:
  1. An understanding of some of the basic data structures and algorithms which recur time and again in programming
  2. An appreciation for the way in which object-oriented programming facilitates clear and reusable code via abstraction.
  3. An awareness of computational complexity issues of running time and memory as they arise in programming 
  4. 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:
  • Michael Main, Data Structures and Other Objects Using Java, Addison-Wesley, 1999
  • Mark Allen Weiss, Data Structures and Problem Solving Using Java, Addison-Wesley 1998
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:
  • Gilles Brassard and Paul Bratley, Fundamentals of Algorithmics, Prentice-Hall, 1995
  • T.H. Cormen, C.E. Leiserson and R.L. Rivest, Introduction to Algorithms, MIT Press, 1990
Numerous references on the Java language itself can be obtained from as well as


Course Outline

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:
  1. Software design in Java
    • A review of Java
    • OOP - Objects, classes, and inheritance
    • Abstract Data Types (ADT's) and their use in program design
  2. Traditional data structures and algorithms
    • Recursion
    • The running time of algorithms
    • Lists, stacks and queues
    • Trees and tries
    • Sorting algorithms
    • Graphs
  3. Advanced topics
    • 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:
  • Source code (.java files)
  • Compiled code (.class files)
  • Execution of test-cases to demonstrate that the program meets the problem specification.
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.

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 homework assignments. 

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:
Assignments 20%
Midterm Examination 20%
Final Examination 30%
Project Part #1 15%
Project Part #2 15%


Office Hours

Time: MWF 11-1230     Room:  McConnell 231

If you need to schedule another time to meet with me, do not hesitate to e-mail me at .

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
[ McGill University ][ Academic Programs ] [ SOCS HOME

August 28, 2000