Syllabus
CSCI 3675
Organization of Programming Languages
Summer 1999

Instructor:Karl Abrahamson
Office: Austin 233
Office hours: M-F9:35--10:35
Phone: 328-1879
Email: karl@cs.ecu.edu
Text: Programming Languages: Concepts and Constructs by R. Sethi
Additional Text: Concepts of Programming Languages (manuscript) by Karl Abrahamson
Course web page: www.cs.ecu.edu/~karl/3675/sum99/

Prerequisites

You should have had a course in data structures and be familiar with one procedural programming language, such as C, C++ or Pascal.

Introduction

Programming languages are the notation in which programmers express their creations. It is said that natural language influences how people think. Whether or not that is true, it is certainly the case that programming languages strongly influence how programmers think.

This course explores different kinds of programming languages: their philosophies, structure, advantages and disadvantages. The student should come away with an appreciation for different forms of programming languages, as well as an ability to use different programming styles (regardless of the language used) when the need arises.

Summer session

The summer session goes by very quickly. In five weeks, we will cover what is covered in fifteen weeks during the fall or spring sessions. There are no breaks, and you will have to work hard. You should count on working {\it more than three times as hard\/} as during the regular term, because it takes more work to learn material faster. Here are some tips on how to do well in the summer session.
  1. Attend class. Arrive on time.

  2. Do not allow yourself to fall behind. Work on the homework early. Do not wait until just before the deadline.

  3. Schedule time to work outside class.

  4. Read the notes and the book twice. Take a break in between. You will learn much more this way.

  5. If you are having trouble, seek help soon. Do not wait until it is too late.
You should plan on spending at least three hours per day outside of class on this class. Some days you might need to spend more.

Grading

Grading will be on the basis of nine fairly small programming assignments (40%), five quizzes (35%, counting only the four best quizzes) and a final exam (25%). By small programs, I mean something that can be completed in about four hours. Your time might vary. Here is a approximate outline of the course.
  1. (May 18) Introduction to programming languages. How programming languages are implemented. Assignment 1 available.
  2. (May 19] Specifying Syntax.
  3. (May 20) Data. Memory and memory management.
  4. (May 21) Names and name binding. Scope. Quiz.
  5. (May 24) Equational programming. Assignment 1 due. Assignment 2 available.
  6. (May 25) Functional programming.
  7. (May 26) More functional programming. Assignment 3 available.
  8. (May 27) Scheme. Assignment 2 due.
  9. (May 28) Procedural programming. Assignment 4 available. Quiz.
  10. (May 31) Semantics of procedural programming.
  11. (June 1) Reasoning about procedural programs. Assignment 3 due.
  12. (June 2) Language implementation issues.
  13. (June 3) Types. Polymorphism. Assignment 4 due. Assignment 5 available.
  14. (June 4) Data types. Quiz.
  15. (June 7) Object-based programming. Classes.
  16. (June 8) Object-oriented programming. Assignment 5 due. Assignment 6 available.
  17. (June 9) Run-time typing and virtual functions.
  18. (June 10) Java. Assignment 7 available.
  19. (June 11) More Java. Assignment 6 due. Quiz.
  20. (June 14) Dealing with failure. Exceptions. Backtracking. Assignment 8 available.
  21. (June 15) First order logic. Assignment 7 due.
  22. (June 16) Logic programming. Assignment 9 available.
  23. (June 17) Prolog. Assignment 8 due.
  24. (June 18) Generics. Quiz.
  25. (June 21) Concurrency. Assignment 9 due.
  26. (June 22) Final exam.