Syllabus
CSCI 3675
Organization of Programming Languages
Summer 2000

Instructor:Karl Abrahamson
Office: Austin 233
Office hours: M-F 1:30-2:30
Phone: 328-1879
Email: karl@cs.ecu.edu
Text: Programming Languages: Concepts and Constructs by R. Sethi
Additional Text: Concepts of Programming Languages: A Unified Approach (manuscript) by Karl Abrahamson
Course web page: www.cs.ecu.edu/~karl/3675/sum00/

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 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 approximately nine fairly small programming assignments and possibly some homework exercises (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.

Course outline

Here is a approximate outline of the course.
  1. (Tu May 16) Introduction to programming languages. How programming languages are implemented. Assignment 1 available.
  2. (We May 17) Specifying Syntax.
  3. (Th May 18) Language implementations. Data and data representation.
  4. (Fr May 19) Names and name binding. Scope. Quiz.
  5. (Mo May 22) Equational programming. Assignment 1 due. Assignment 2 available.
  6. (Tu May 23) Functional programming.
  7. (We May 24) More functional programming. Assignment 3 available.
  8. (Th May 25) Scheme. Assignment 2 due.
  9. (Fr May 26) Procedural programming. Assignment 4 available. Quiz.
  10. (Mo May 29) Semantics of procedural programming.
  11. (Tu May 30) Reasoning about procedural programs. Assignment 3 due.
  12. (We May 31) Language implementation issues. Assignment 5 available.
  13. (Th June 1) Types and type checking. Assignment 4 due.
  14. (Fr June 2) Working with data types. Quiz.
  15. (Mo June 5) Polymorphism. Generics.
  16. (Tu June 6) Object-based programming. Classes. Assignment 5 due. Assignment 6 available.
  17. (We June 7) Object-oriented programming.
  18. (Th June 8) Run-time typing and virtual functions. Assignment 7 available.
  19. (Fr June 9) Java. Assignment 6 due. Quiz.
  20. (Mo June 12) More Java. Assignment 8 available.
  21. (Tu June 13) Dealing with failure. Exceptions. Backtracking. Assignment 7 due.
  22. (We June 14) Logic programming. Assignment 9 available.
  23. (Th June 15) More logic programming. Prolog Assignment 8 due.
  24. (Fr June 16) More Prolog. Quiz.
  25. (Mo June 19) Open. Assignment 9 due.
  26. (Tu June 20) Final exam.