UNIVERSITY OF THE WITWATERSRAND                 Tel.:  011 717 6177
Department of Computer Science                  Fax.:  011 339 3513
Dr. Yinong Chen                          email: yinong@cs.wits.ac.za

  ------------------------------------------------------------------------
                            Computer Science II

                            Programming Languages

                                 Yinong Chen
  ------------------------------------------------------------------------

Introduction

Although algorithms have been written and expressed at least since the time
of Euclid, it is only in the last fifty years since the development of the
digital computer that the methods of expressing algorithms have had
extensive study. Today there are different paradigms for programming,
hundreds of programming languages in active use, many others in existence,
and many more being designed.

The aim of this course is to introduce the principles of the study of
programming, and give you the basic foundation in the topic. By giving you a
good insight into the principles of programming language design, this course
should make you a better programmer, but this course is useful if you will
ever need to design your own language, or choose which programming language
to use for a project.

This whole area is a very fast moving one. A language like Java was unknown
a few years ago. Today object-oriented programming is considered standard,
but five or six years ago, teaching object-orientation was considered
avant-garde. For this reason, the course focuses on the underlying
principles, which will equip you to deal with new developments. We will be
using a number of programming languages to illustrate some of the points.
Although you will have some programming assignments to do, the course is not
about how to program in language X.

Course structure

We will use the prescribed textbook and notes as the base for the course, using
additional and alternative material where appropriate. The material will
cover the following sections:

   * The historical development of programming languages
   * Architecture of computer
   * General principles and issues
   * The imperative paradigm
   * The object-oriented paradigm
   * The parallel paradigm
   * The functional paradigm

Objectives

By the end of the course, you should be able to:

   * understand how high level programs are translated into low level 
     programs and executed by computer hardware.
   * Describe the major paradigms of programming languages and discuss their
     advantages and disadvantages.
   * Write imperative, object-oriented, parallel and functional programs.
   * Compare and contrast methods of defining the syntax and semantics of
     programming languages.
   * Explain important programming language features and illustrate them
     with examples.
   * Discuss basic methods of language implementation.
   * Assess the strengths and weaknesses of a programming language against
     criteria of good language design.

Lectures, Tutorials and Laboratories

The course will be given in parallel with Operating Systems -- 
The two courses share the same teaching "diagonal". The time table for 
PL and OS changes every week.
Please check carefully the times and venues of lectures, tutorials and labs
in the time table. There are four laboratory sessions in a week. You must
attend the laboratory session to which you are assigned.

The tutorials and laboratories are integral parts of the course and all
students are expected to attend and participate actively in the tutorial and
laboratory programmes. The tutorials will supplement the lecture material,
and the laboratories will cover the course's practical material. Tests may
be held in lecture and tutorial periods.

Assignments and Tests

The exam counts 60% to the topic, and the course work counts 40%. Each
student must get 50% in total to get credit for the course.

The course-work comprises a class test and a number of assignments (which
will be assessed by assignment tests). The class test weights 15% and the
assignment tests equally share the remaining 25%.


Prescribed and Reference Books

The prescribed book is
Henri E. Bal and Dick Grune
Programming Language Essentials.
Addison-Wesley, Wokingham 1994.

The reference books include:
DA Patterson and JL Hennessy,
Computer Organization & Design: The Hardware / Software Interface, 
Morgen Kaufmann, 1994 edition or 1998 edition.

Deitel & Deitel
Java How to Program
Prentice-Hall, 1998 0r 2000 edition.

D. A. Bailey & D. W. Bailey
Java Elements: Principles of programming in Java
McGraw-Hill, 2000.

V. S. Manis & J. J. Little
The schematics of computation.
Prentice Hall, 1995.


Consultation Time (office SH2157)

One hour consultation time per week has been reserved for the course. Please
check the CS2 noticeboard or my office door for the official consultation
time periods.

Outside these time periods you are also welcome to see me, and I shall try
to help you if I am free.

Acknowledge

The outline is based on the outline prepared by Scott Hazelhurst in the
framework of the course curriculum designed by the Department of Computer
Science.


Yinong Chen (yinong@cs.wits.ac.za) SH2157
10 July 2000
This document is available at
http://www.cs.wits.ac.za/~yinong/teaching/pl2_outline.html