Skip to content

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)