Course outline

  1. Introduction

  2. Type system

    • user: tool for abstraction
    • compiler: tool for memory layout
  3. Design patterns (mental setup)

    • Julia is a type-based language
    • multiple-dispatch generalizes OOP and FP
  4. Packages

    • way how to organize code
    • code reuse (alternative to libraries)
    • experiment reproducibility
  5. Benchmarking

    • how to measure code efficiency
  6. Introspection

    • understand how the compiler process the data
  7. Macros

    • automate writing of boring the boilerplate code
    • good macro create cleaner code
  8. Automatic Differentiation

    • Theory: difference between the forward and backward mode
    • Implementation techniques
  9. Intermediate representation

    • how to use internal the representation of the code
    • example in automatic differentiation
  10. Parallel computing

    • threads, processes
  11. Graphics card coding

    • types for GPU
    • specifics of architectures
  12. Ordinary Differential Equations

    • simple solvers
    • error propagation
  13. Data driven ODE

    • combine ODE with optimization
    • automatic differentiation (adjoints)