Skip to content

This page is a compilation of links I found interesting while learning programming and while solving everyday problems in project management and maintenance, and of course scientific computing. As I keep on learning this list evolves continuously :-)

How to Learn to Code - 8 Hard Truths

Software engineering

Problem solving

Python

Python for Beginners

Python as a language

Python idioms, readability and internals

Decorators

Regular expressions

Dictionaries

Exceptions

Logging

Type annotation

Iteration

Strings

Context manager

Code execution

Internals

Miscellaneous

Useful packages

Installing packages

  • A quick-and-dirty guide on how to install packages for Python
  • uv - pip killer or yet another package manager?: uv is the "pip but blazingly fast™️ because it's written in rust" and is developed by the same folks that built ruff. It is designed as a drop-in replacement for pip and pip-tools for package management. uv supports everything you'd expect from a modern Python packaging tool: editable installs, Git dependencies, URL dependencies, local dependencies, constraint files, source distributions, custom indexes, and more, all designed around drop-in compatibility with your existing tools. uv's virtual environments are standards-compliant and work interchangeably with other tools — there's no lock-in or customization required. It supports Linux, Windows, and macOS, and has been tested at-scale against the public PyPI index.

Interactive Python

Notebooks

Python for HPC

Concepts and ideas

Numpy arrays

JAX

Numba

Python extensions in other languages

Parallelization approaches mimicking or wrapping OpenMP and MPI:

  • Pymp – OpenMP-like Python Programming A really interesting concept, not as efficient as OpenMP itself (which incurs quite a bit of overhead itself), and, of course, limited to a single node. As the number of cores per node keeps increasing, pymp may be a good solution for problems that can do with a single node.
  • High performance Python 4 Mpi4py, doing mpi from Python.

Other parallel processing approaches:

The GIL

GPU computing in Python

Profiling and performance analysis

POP - Performance Optimisation and Productivity CoE

Timing

Memory profiling

Resource monitoring

LUMI (and AMD systems in general)

(The Pawsey Supercomputing Research Centre is located in Perth, Western Australia)

Design patterns

Testing

PyTest

PyTest plugins

Other packages

Mocking

Property-based testing

General ideas

Debugging

GDB

PDB

Debugging Python binary extensions

Better interfaces

DIY debugging

PyStack

Logging

CLIs and scripting

General ideas

Click and typer

bash

Other tools

GUI

Qt

Tkinter

Scientific Python

Visualization

Matplotlib

Other packages

Artificial intelligence, machine learning

Data science

Pandas

Python packaging

Tools

Version control

git

Other version control systems

Development environment/workflow

(I)DE

CI/CD

Documentation

General ideas

Figures

  • Penrose: create beautiful diagrams just by typing notation in plain text

Mkdocs and Markdown

This tutorial by Real Python really got me going in an afternoon... The extension with autorefs is also very useful. Note that the command mkdocs gh-deploy makes publication on readthedocs superfluous!

Installation

We need the following packages to build documentation:

> python -m pip install mkdocs
> python -m pip install "mkdocstrings[python]"
> python -m pip install mkdocs-material
> python -m pip install mkdocs-autorefs

Markdown FAQ

  1. For ~~all~~ most of your formatting questions: The Markdown guide
  2. How to do comments
  3. Tune Your Configuration: Explore advanced configuration for MkDocs, such as adding support for search and multiple languages. Or install and include additional plugins. A good option is autorefs, which allows you to add relative links in your docstrings that work in your rendered documentation.
  4. LateX in markdown
  5. Converting reStucturedText to Markdown

Other Markdown applications

  • Presentations
  • a Markdown viewer/browser for your terminal: https://github.com/Textualize/frogmouth
  • Markdown Code Runner: https://github.com/basnijholt/markdown-code-runner

latex

Sphinx and ReST

(imho less practical than mkdocs) - Writing Documentation with Sphinx and reStructuredText - Practical Sphinx - PyCon 2018 - A “How to” Guide for Sphinx + ReadTheDocs - sphinx-autodoc-typehints

Containers

Low-level programming languages

Fortran

C++

Compilers

Code modernization

Other performance-oriented programming languages

  • Julia can be considered between low-level and high-level, as it combines the performance of low-level languages with the scripting capabilities of Python.

  • mojo: The expressiveness of Python, with the performance of C

  • Python vs Mojo ArjanCodes

OS stuff

Windows

Linux, Macos

Physics simulation

  • Simulate Elastic Objects in Any Representation with NVIDIA Kaolin Library
  • Genesis is a physics platform designed for general purpose Robotics/Embodied AI/Physical AI applications. It is simultaneously multiple things:

  • A universal physics engine re-built from the ground up, capable of simulating a wide range of materials and physical phenomena.

  • A lightweight, ultra-fast, pythonic, and user-friendly robotics simulation platform.
  • A powerful and fast photo-realistic rendering system.
  • A generative data engine that transforms user-prompted natural language description into various modalities of data.

Accelerators

Nvidia GPUs

AMD GPUs