Into Computer Science
If you have been trained as a scientist but not exactly as a computer scientist yet, you may wish you had more background/general knowledge about what's under the hood, as it would help you understand your programs better. Topics in this section are meant teach you the CS background you need to better assess the properties of your project like robustness or performance.
Topic: Programming languages: meaning in a diversity
- You write scripts and code.
- You are curious why there are so many different programming languages.
- You are curious how they work, and how they ultimately make your computer work.
- You are curious what the differences are and what they mean.
- Structure the current landscape of (numerous) programming languages.
- Computer architecture: Disk, RAM, CPU.
- Processor architecture: registers, electroning computing, assembly.
- Compilers and optimisation.
- Interpreters and runtime.
- Memory representation and data types.
- Typing systems: static, dynamic.
- Memory management: allocation and pointers.
- Garbage collection and borrow checking.
- Zoom/Discussion on a few example languages:
- Python
- Shell: bash/zsh/fish..
- Julia
- C/C++
- R
- Rust
Towards Performances
Topic 1: Data Structures and Algorithmic Complexity
- Basic computer/programs structure (see above).
- You are curious why some operations are much more efficient than others.
- Beyond simple tables, you are curious how structured data can be represented in computers: graphs, trees, recombination ancestry..
- Memory layout and data structures.
- Pointers, array, linked list, explicit/implicit trees..
- Algorithms and complexity: constant/linear/polynomial/logarithmic/exponential.
- Data traversal, indexing, sorting..
- Examples with your favourite programming language.
Topic 2: Low-Level Optimisation
- Data structures and algorithmic complexity (see above).
- There are programs you think can only be made faster if you get deep into them.
- You crave for learning more low-level CPU architecture detail.
- You are okay with using complicated perf analysis software.
- Resources:
algorithmica.org,
bgregg's,dendibakh's. - CPU internals: pipelining, branch prediction, memory caches.
- Vectorization, branch elision, memory locality, parallelism (last resort).
- Profiling tools: sampling, events, methodology.
- .. get deeper in there and learn more together ;)