CS 671: Programming Language Concepts and Features

(Coordinator: Michel Charpentier)

Catalog Description

Explores the main features of modern, high-level, general purpose programming languages from the user (programmer) point of view. Provides students with an opportunity to use non-imperative programming paradigms, such as object-oriented, functional, and logical, and to learn how specific features of such languages can be used efficiently in solving programming problems. Prereq: CS520.

Course Topics and Student Outcomes

Programming (3):

Programming languages concepts and features.

Algorithms (2):

Object-oriented patterns, functional patterns, concurrent patterns.


Five programming assignments (50%), multiple quizzes (30%) and one exam (20%).


  • Basic syntax and semantics:

    • values, expressions, primitive types, variables
    • conditionals, loops, exceptions, iteration, pattern-matching
    • objects, methods, functions, parameters, types
    • infix operators, string interpolation
  • Intermediate syntax and semantics:

    • modules, packages, imports, collections
    • annotations, assertions
    • generics, type inference
    • variable-length arguments, default values, pass-by-name arguments
  • Advanced syntax and semantics:

    • implicit parameters, implicit conversions
    • user-defined pattern-matching
    • type bounds, covariance and contravariance
    • domain specific languages
    • self-types and collections design
  • Object-oriented programming:

    • classes, objects, singletons
    • interfaces, traits, inheritance, overriding, abstract members
    • polymorphism, dynamic binding, mixins, nominal and structural subtyping
    • equality, serialization, mutability
  • Functional programming:

    • recursion, tail recursion, memoization, dynamic programming
    • first-class functions, function literals, higher-order functions, currying, closures
    • lazy evaluation
    • monads
  • Concurrent programming:

    • threads, synchronization
    • thread pools, futures, actors


  • Martin Odersky, Lex Spoon and Bill Venners. Programming in Scala, 3rd edition, Artima Press, 2016. ISBN: 978-0-9815316-8-7.