Department of Information and Computer Sciences

ICS 313: Programming Language Theory

Overview:

Most novice computer programmers fall in love with their first programming language. Having acquired some semblance of mastery over the computer with their first language, they immediately wonder why anyone in their right mind would ever program using any other language. This quickly leads to flame wars with other novice programmers who have rallied behind their own first language. Particularly if the novice programmer is in love with a "hot" language, (such as Visual Basic or Java in the late '90s), they feel even more justified in their obsession, since the marketplace seems to be in complete agreement with them.

The basic purpose of this course is to help you acquire a more mature attitude toward programming languages by learning about their history, the common concepts underlying all languages, and the inevitable trade-offs that arise in language design that preclude any language from ever being "best" for every application. Once upon a time, the "hot" language was Fortran, and those who knew it thought they'd never need to learn another language. Similarly, in a few years, Visual Basic and Java will most likely be dethroned. The sad fact of the matter is, if you intend to work in software development for any length of time, you're going to have to learn many more programming languages.

This course is also intended to help you with this problem by teaching you concepts that will help you learn the next hot programming language more quickly and efficiently. In addition, you'll learn how to evaluate language capabilities and match them to the application. In some cases, believe it or not, it may be faster to learn a new language that is well suited to the problem than to try to program the solution in your "favorite" language.

Course
Structure:
This course is organized much differently from the 100 and 200 level ICS courses. The goal of this organization is to minimize the occurrence of things that are often boring, minimally productive, and/or lame (such as classroom lectures) and maximize things that are useful and interesting (such as one-on-one interaction with the instructors and/or other students). This organization will also require a LOT more responsibility from you, the student. If you don't keep up, you're going to fall behind.

The class is scheduled for MWF, 11:30-12:20, in Ocean 114. Since my lectures will all be online, I will not need this time for lecturing. Instead, I will use that time to talk with you about any questions or problems you are having. I will bring my PC and we can go over the lecture material, the module assignments, or anything else you need help with. If you are mastering the course material (and you should be able to determine that through the online assessment quizzes), and do not have any questions for me, then you will not need to come to class. The only required class sessions are for the three midterms and the final, as listed in the class schedule.

The course format can be appropriately viewed as "distance ed", since you do not have to be physically present at UH Manoa in order to participate in the course. (I can use netmeeting for distance ed students.) However, the course is not designed to allow unlimited enrollment, because this would not allow the one-on-one interaction that makes the course more valuable than simply reading the textbook on one's own. For this semester, I hope to keep the course enrollment in the neighborhood of 60 students. If you are not at UH Manoa, you will have to contact me so I can set up proctoring for the three midterms and the final exam.

I've structured the course into a sequential set of about 18 modules. The course schedule shows which module or modules you need to complete each week in order to finish the course. Each module has the following structure:

  • A reading assignment from the textbook. This is typically one chapter. A few modules do not include a reading assignment from the textbook.
  • An online RealAudio lecture presentation.
  • A PDF file containing the lectures slides. You should print this file out and write notes on it as you listen to the lecture.
  • An assignment.
  • An online assessment test using the WebCT system, which tests how well you have comprehended the material.

I will make each module available shortly before the week in which you need to work on it.

Prerequisites: For you to succeed in this course, you will need about 10 hours a week to study. You will be much better off if you have your own computer with at least a 56K internet connection, although this is not required.

Grading: The three midterms and the final are each worth 20% of your grade. The total of all of the online assessments is also worth 20% of your grade. After each midterm, I will post your current grade totals and a potential letter grade so you know where you stand.

Texts
and other
resources:
The text for the course is: Concepts of Programming Languages, Fourth Edition, by Robert Sebesta, Addison Wesley, 1999.

In addition, some modules will require you to use a programming environment such as Java, Lisp, or Prolog. More details about these environments will be available in the modules themselves.

Registration: Classified graduate students or undergraduates at UH Manoa should use Pa'e to register. You will need to email uhmics@hawaii.edu to request an approval code.


http://www.ics.hawaii.edu/~johnson/313f99/