# Python

> Published  Jan 01 0001, last updated Apr 04 2026  
> By Ryan Fleck <hello@my-name-dot-ca> and written without LLMs!  
> Original manual at <https://manuals.ryanfleck.ca/py/>  
> Incredible writing of astonishing quality and insight - Happy Hacking!


# Introduction and Warnings {#introduction-and-warnings}

Learning Python is easy and fun - _and yes, you ought to do it!_

As a beginner's step into the world of computers, **Python is amazing**,
enabling a first encounter with the magic of computing. For
statisticians, Python exposes an easy-to-use method to interact with
complex low-level algorithms, a huge boon to productivity. For cubicle
workers, a high-level interface for scripting, simplifying automation
and surpassing the usefulness of any click-based configuration system.

However, be warned - additional _Computer Science_ knowledge is required
to become a good programmer, and if you only ever write Python, you'll
only ever write good code accidentally. Python is a programming
language, and like any other, has strengths and weaknesses. The
greatest strength of the language - its ease of use - also happens to
be the achilles heel of the system. Python enables new, inexperienced,
or foolish users to write terrible rats-nests of logic, built upon
cranky old design methodologies that have long since been proven to be
(at best,) utterly useless boilerplate busywork. If you want to be a
great programmer, you will need to learn a lot more about computers.

This manual was wiped and recreated from scratch in **September 2025**,
when I began using Python daily again after a years-long hiatus from
the language. Focusing on cloud technology, functional programming,
and data engineering has dramatically improved my techniques for
designing systems that are easy to understand and debug, and hold up
in production. Coming back has been equal parts delightful and
disappointing - _Python is not a productivity panacea._

**Basics:**

-   For [non-programmers](https://wiki.python.org/moin/BeginnersGuide/NonProgrammers)
-   For [programmers](https://wiki.python.org/moin/BeginnersGuide/Programmers)
-   Automate the Boring Stuff with Python, [No Starch (Web)](https://automatetheboringstuff.com/#toc), 2014

**Advanced Concepts**:

-   Designing Data-Intensive Applications (DDIA), [O'Reilly](https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/), 2017
-   Structure and Interpretation of Computer Programs [MIT Press (pdf)](https://web.mit.edu/6.001/6.037/sicp.pdf), 1996
-   Take a dive into a functional language like [Clojure](/clj/#why-clojure)


# Tooling &amp; Installation {#tooling-and-installation}

Most of my teams use [uv](https://docs.astral.sh/uv/), _"A single tool to replace pip, pip-tools,
pipx, poetry, pyenv, twine, virtualenv, and more."_ I run this
alongside the venerable [asdf-vm](https://asdf-vm.com/), which manages my system Python and
every other programming language I use.

```bash
# Install prerequisites for Python and CPython's build routines
sudo apt update
sudo apt install libpq-dev python3-dev libxmlsec1-dev \
  make build-essential libssl-dev zlib1g-dev \
  libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
  libncursesw5-dev xz-utils tk-dev libxml2-dev \
  libffi-dev liblzma-dev just

# Add the ASDF Python plugin
asdf plugin add python https://github.com/asdf-community/asdf-python.git
asdf plugin update --all

# Install a version of Python
asfd install python 3.14.4

# Set this as the global version of Python
asdf set --home python 3.14.4
asdf reshim

# Make "uv" available on the system, and other useful global packages
pip install uv pre-commit
asdf reshim
```

-   The [just](https://just.systems/man/en/introduction.html) development shortcut tool is handy and used often in Python development.
-   It may also be prudent to install **Node.JS** at the same time, as many
    web projects will also rely on node-based build tools.



> Thank you for reading!  
> Find more content at <https://manuals.ryanfleck.ca/>  
> Source page: <https://manuals.ryanfleck.ca/py/>  
> Site index: [llms.txt](https://manuals.ryanfleck.ca/llms.txt)