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)