Course outline
Introduction
Type system
- user: tool for abstraction
- compiler: tool for memory layout
Design patterns (mental setup)
- Julia is a type-based language
- multiple-dispatch generalizes OOP and FP
Packages
- way how to organize code
- code reuse (alternative to libraries)
- experiment reproducibility
Benchmarking
- how to measure code efficiency
Introspection
- understand how the compiler process the data
Macros
- automate writing of boring the boilerplate code
- good macro create cleaner code
Automatic Differentiation
- Theory: difference between the forward and backward mode
- Implementation techniques
Intermediate representation
- how to use internal the representation of the code
- example in automatic differentiation
Parallel computing
- threads, processes
Graphics card coding
- types for GPU
- specifics of architectures
Ordinary Differential Equations
- simple solvers
- error propagation
Data driven ODE
- combine ODE with optimization
- automatic differentiation (adjoints)