PF. Programming Fundamentals (65 core hours)

PF1. Algorithms and problem-solving (core -- 8 hours)

  Problem-solving strategies
  Debugging strategies
  Structured decomposition
  The concept and properties of algorithms
  The role of algorithms in the problem-solving process
  Introduction to algorithmic complexity
  Empirical measurements of performance

PF2. Fundamental programming constructs (core -- 10 hours)

  Basic syntax and semantics of a higher-level language
  Variables, types, and assignment
  Conditional and iterative control structures
  Functions and parameter passing
  Simple I/O
  Exception handling

PF3. Basic data structures (core -- 12 hours)

  Primitive types
  Arrays
  Records
  Strings and string processing
  Data representation in memory
  Pointers (or the notion of a reference in an object-oriented language)
  Linked structures
  Static, stack, and heap allocation
  Runtime storage management
  Strategies for choosing the right data structure

PF4. Recursion (core -- 6 hours)

  The concept of recursion
  Recursive mathematical functions
  Simple recursive procedures (Towers of Hanoi, generating permutations)
  Divide-and-conquer strategies
  Recursive backtracking
  Implementation of recursion

PF5. Abstract data types (core -- 9 hours)

  The importance of data abstraction
  Abstract programming interfaces
  Abstract data types
  Encapsulation and levels of visibility
  Information hiding
  Iteration protocols
  Specific ADT structures (stacks, queues, symbol tables, trees, graphs)

PF6. Object-oriented programming (core -- 10 hours)

  Object-oriented design
  Classes, subclasses, and inheritance
  Class hierarchies
  Polymorphism
  Fundamental design patterns

PF7. Event-driven and concurrent programming (core -- 4 hours)

  Event-handling methods
  Event propagation
  Managing concurrency in event handling

PF8. Using modern APIs (core -- 6 hours)

  API programming
  Class browsers and related tools
  Programming by example
  Debugging in the API environment