Syllabus for CS 31600
Programming Languages
Spring, 2012

Professor Roger Kraft
Office: Classroom Office Building (CLO), Room 368
Office phone: (219) 989-2696
Office hours: 12:30--2:00 TR and by appointment.
E-mail: roger@purduecal.edu

Text: Modern Programming Languages: A Practical Introduction, 2nd ed, by Adam Brooks Webber, Franklin, Beedle & Associates Publishing, 2010.

This course is an introduction to the "theory" of programming languages. We will look at how programming language syntax is described. We will consider various types of programming languages, like imperative, applicative (i.e., functional), and object oriented languages. We will study ideas common to all programming languages, like variable scope, data types, control flow, and procedure abstraction. We will learn how a programming language can be implemented using compilers, interpreters, and runtime environments. And we will see how all of these ideas apply to specific programming languages like Java, C, ML, Scheme, and maybe a few others. The goal of the course is to give you the kind of information that you need to be able to learn new programming languages quickly and to be able to determine the suitability of a programming language for a specific project.

This course will cover Chapters 1-18 from the text Modern Programming Languages: A Practical Introduction. Your grade for this course will be based on about 8 homework assignments, a project, and two exams in the following manner:

           40%    homework assignments,
           10%    project
           25%    exam 1,
           25%    exam 2.
Tentative dates for the two exams are
           Exam 1   Thursday, March 8.
           Exam 2   Final exam week.
Each of the homework assignments will have a due date. To receive full credit for an assignment, it must be turned in by the due date. Assignments handed in late will be marked off 10% of the total points for each calendar day late up to a maximum of 50%. If an assignment is more than two weeks late, then I reserve the right not to accept it for credit. When you complete an assignment you will submit your solution using Blackboard. In this course web site there are detailed instructions on how you are to turn in your assignments. You will be expected to follow the instructions. Also in this web site is information on the criteria used to grade programming assignments.

You should turn in your own work for each homework assignment. Here is what that means: You may talk with your classmates about the course material and the ideas behind each homework assignment (and, in fact, it is a good idea to do that) but you should solve the problem on your own and write your own solution. Turning in someone else's solution (or even a modified version of someone else's solution) is a breach of academic integrity. Similarly, giving a copy of your solution to someone else in the class is also a breach of academic integrity. If you need help with a homework assignment, come and ask me. You can ask me as many questions as you want! Please do not hesitate to ask me questions after class, in my office, in an e-mail message, over the phone, etc.

Information about the project will be made available in the first couple of weeks of class and the project will be due near the end of the semester. Roughly, the project is for a two person team to give a presentation to the class about a programming language that we will not be covering in this course.

In this web site you will find more information about this course. There are links to online information about programming languages, information about course reading assignments, and, very importantly, your homework assignments and their due dates will be posted on one of the web pages.

The computer programs that you need to do your programming assignments are on computers in the Mathematics Computer Labs in CLO 363 and CLO 365.

The learning objectives for this course are as follows.

  1. Compare and contrast compiled and interpreted execution models, outlining the relative merits of each.
  2. Describe the phases of program translation from source code to executable code and the files produced by these phases.
  3. Recognize the underlying formal models such as finite state automata and push-down automata and their connection to language definition through regular expressions and grammars.
  4. Identify at least one distinguishing characteristic for each of the following programming paradigms: procedural languages, object-oriented languages, functional languages, declarative languages, and scripting languages.
  5. Differentiate between static and dynamic typing and differentiate between type declarations and type inference.
  6. Describe how languages use activation records to manage program modules and their data.
  7. Design, code, test, and debug programs using the functional paradigm.

If you are a student with a documented disability who will require academic/classroom accommodations in this course, please register with the Coordinator of Services for Students with Disabilities in the Student Support Services Office located in the Student Union and Library Building (SUL), Room 341, phone numbers: 219-989-2455, 219-989-2454(voice/TTY) or 219-989-2920.

Ethics are an integral part of being a student and a professional. Academic integrity is the hallmark of this University. Therefore, Purdue University does not tolerate academic dishonesty in any form. If a student breaches integrity, the student risks sanctions in both the academic and conduct arenas. Academic dishonesty includes, but is not limited to, the unauthorized use of other's intellectual property (plagiarism), and lying to an instructor or any University employee. Such actions WILL result in a failing grade on the assignment with the strong possibility of referral to the Office of the Dean of Students for a conduct sanction (see the Purdue University Calumet Student Handbook available from the Dean of Students office and the Dean of Students web site).


Return to the CS 31600 home page.


compliments and criticisms