Hi There!

I'm Dan Schlegel, an Associate Professor in the Computer Science Department at SUNY Oswego

Final Exam Study Guide

Below is an outline of the concepts covered during the course. The final exam is cumulative, but will focus on material from the second half of the course (bolded below). You should expect some concepts from the first part of the course to re-appear, especially those which align directly with the course objectives (with asterisks below), though all topics are fair game.

  •  Concepts
    • Syntax
      • BNF*
      • Writing parsers (recursive descent, combinators)
    • Memory allocation
      • Stack / heap / static
      • Avoiding common memory / security issues
    • Object orientation
      • Generics and Templates
      • Case classes
      • Information hiding
        • Nested functions
      • Multiple inheritance
        • Diamond problem
        • Approaches taken by different languages
    • Type systems*
      • Type conversion
      • Determining types (type inference)
      • Optional type
      • Propositions as types
    • Dynamic vs static
      • Scope
      • Method binding
      • Typing
    • Logic programming concepts
      • Unification
      • State-space problem solving
      • Backtracking, derivation trees [We drew a couple of them on the board, see the Prolog tutorial for more]
    • Functional programming concepts
      • Lambdas, lambda calculus
      • Higher order functions
      • Closures
      • Immutability
      • Pure functions (side-effect free)
      • Code is data is code*
      • Pattern matching
    • Scripting Languages
      • Characteristics / uses
    • Concurrency / Parallelism (high level concepts)
  •  Languages
    • All of them we’ve used – focus on Scala, Prolog, Python

You will likely also see a question relating to the 50-in-50 video 🙂