University of Cincinnati Logo

CS-4003 - Organization of Programming Languages
Electrical Engineering and Computer Science

Learning Objectives
Programming Language Concepts
  1. Understand what thread safety is
  2. Understand what memory safety is
  3. Understand what type safety is
  4. Understand the importance of reusable code
  5. Understand what polymorphism is and what features of a language support it
  6. Understand what should be checked at compile time and what should be left for runtime
  7. Explain paradigms: imperative, object oriented, procedural, functional, declarative
  8. Explain data abstraction and why it is important
  9. Explain what a type system is
  10. Explain the difference between static and dynamic typing (including the benefits of each)
  11. Explain what it means for an object to be first-class
  12. Know different ways to pass parameters and the benefits of each
  13. Know the difference between normal order and applicative order (strict and non-strict) evaluation of arguments
  14. Explain what procedural abstraction is
  15. Explain bindings, when they should be made
  16. Know what lazy-evaluation means
  1. Understand virtual function
  2. Know how to use threads safely
  3. Understand how to manage streams with java threads
  4. Understand generics and why it is part of the language
  5. Understand reflection
  1. Understand the s-expression
  2. Understand tail recursion
  3. Know what a closure is and its relation to classes in Java
  4. Understand continuation passing style
  5. Understand what a continuation is and call-with-current-continuation
  6. Understand the power of lambda
  1. Learn the syntax of Haskell
  2. Understand the benefits of a functional language
  3. Understand Functors
  4. Understand Monads
  1. Understand what a specification language is
  2. Observe that some properties of a program can be proved formally
Paul Erdos
Ladies on Campus
Oscar Robinson