Computer Science Department
College of Sciences & Mathematics

CSC345 Syllabus

  1. Course number and name

    CSC345 – Programming Language Concepts and Paradigms

  2. Credits and contact hours

    3 Credit Hours

  3. Instructor’s or course coordinator’s name

    Instructor: Dr. Richard Wyatt, Associate Professor of Computer Science

  4. Text book, title, author, and year

    • Programming Languages, T. W. Pratt and M. V. Zelkowitz, 2000.
    • Common Lisp: An Interactive Approach, S. C. Shapiro, Computer Science Press, 1992. (Available for free from the author's web site.)
    • GNU Emacs Manual, Richard Stallman, latest edition, 2014.
    • Elements of ML Programming, Jeffrey Ullman, 1998.

    Other Supplemental Materials

    Papers by: Paul Graham, C A R Hoare, Paul Hadak and Mark Jones, John Backus, Dana Scott.

  5. Specific course information
    1. brief description of the content of the course (catalog description)

      An examination of the conceptual underpinning of programming languages and of the paradigms into which they fall. Topics will be drawn from those comprising the field of programming language such as abstraction, bindings, concurrency, design, encapsulation, history, representation, storage, and types. Programming projects will focus on languages within the functional, logic, and object-oriented paradigms — such as Common Lisp, ML, Prolog, CLOS — rather than the familiar imperative paradigm.

    2. prerequisites or co-requisites

      Prerequisite: CSC 220 (Foundations of Computer Science) and CSC 241 (Data Structures & Algorithms).

    3. indicate whether a required, elective, or selected elective course in the program

      Required course.

  6. Specific goals for the course
    1. specific outcomes of instruction Students will be able to:
      • Understand the broad divisions of programming languages into paradigms.
      • Be familiar with using functional languages.
      • Be exposed to using logic languages.
      • Master a wide range of programming language concepts.
      • Understand multiple models of computing, including their strengths and weaknesses.
      • Gain experience with projects involving advanced mathematical topics.
      • Gain experience in writing detailed project reports.
    2. explicitly indicate which of the student outcomes listed in Criterion 3 or any other outcomes are addressed by the course.

      Course addresses Student Outcomes (a), (b), (c), and (i).

  7. Brief list of topics to be covered
    • Overview of the four programming paradigms
    • Introduction to functional programming
    • Recursion and non-imperative programming
    • Introductions to Common Lisp, ML
    • Coercions, casts, conversions
    • Type inference, strong typing, and static and dynamic typing
    • Side effects
    • Lisp Macros
    • Monomorphism and Polymorphism
    • The Von Neumann and the lambda-calculus models of computing
    • The weaknesses of imperative programming languages
    • Curried function and higher order functions
    • Verification
    • First and second class objects in programming languages
    • Hoare's type concepts and referential transparency