CSC 335 - Syllabus

The City College of New York • Grove School of Engineering • Computer Science Department • Course Syllabus

Course number

CSc 33500

Course name

Programming Language Paradigm

Credits & hours

4 cr., 3 lecture hr. and 2 laboratory hr.

Course coordinator

Prof. Douglas Troeger

 

Textbook, title, author, and year

  • One of: Essentials of Programming Languages, 3rd ed, Friedman and Wand, 2008 or Structure and Interpretation of Computer Programs, Abelson and Sussman, 1995
  • Other supplemental materials: The Little Schemer, 4th ed., Friedman and Felleisen, 1996, The Seasoned Schemer, Friedman and Felleisen, 2000; web materials, including lecture notes, related to course work

Specific course information

  • Aspects of the design and implementation of declarative and imperative programming languages, presented via a sequence of interpreters. Topics include abstraction, parameter passing, objects and inheritance, type checking, and continuations. Substantial programming assignments.
  • Prereq.: CSc 22000 and CSc 22100
  • Required course

Specific goals for the course and Relationship to student outcomes

 

1

2

3

4

5

6

a. the student acquires knowledge of functional programming in language supporting declarative functional programming

P

    

P

b. the student acquires an understanding of the benefits and limitations of declarative functional programming

P

    

P

c. the student acquires a foundation for reasoning about programs, and is able to construct clear arguments explaining and justifying the design of programs

P

P

   

P

d. the student acquires knowledge of basic principles of programming languages by implementing several interpreters designed to illustrate these principles

P

P

   

P

e. the student completes a team programming project with written and oral presentation illustrating principles of programming languages

P

P

R

 

R

P

I - introductory-level; R - reinforced-level; P - program-level

Brief list of topics to be covered

Seq.

Topics

1

introduction to scheme and recursive programming, and to the use of induction/invariants in certifying and developing code

2

combining functions with objects and state

3

interpreters as mechanisms for explaining the run-time behavior of languages: developing an interpreter for a lexically scoped language with first-class procedures, recursion, and assignment; an interpreter with lazy evaluation and streams; an interpreter with dynamic scoping; an interpreter supporting non-deterministic computing