AnyLearn
All lessons

Programming lessons & courses

64 lessons · 12 learning paths · free, quiz-checked, no signup required

Compilers, concurrency, databases, reverse engineering, and the other load-bearing layers under everyday code. Each lesson explains what the machinery actually does — parsers, locks, B-trees, loaders — with worked examples and realistic code.

Learning paths

🔬
Programming
advanced

Reverse engineering fundamentals

How to read a compiled binary back into something a human can reason about. The file format and loader, disassembly and decompilation of x86-64, and dynamic analysis with debuggers and instrumentation. Three lessons of mechanism — what the toolchain on each side actually does, and what no amount of effort can recover.

3 lessons · certificate
🐍
Programming
advanced

Advanced Python for backend

The advanced syntax and runtime patterns that production Python backends rely on. Async and asyncio fundamentals, the type system as both static contract and runtime spec, FastAPI's dependency-injection model, and SQLAlchemy 2.0's async ORM — four lessons of mechanism over framework hagiography.

4 lessons · certificate
🏗
Programming
intermediate

Scalable System Design

Design systems that handle millions of users without falling over. You will size and scale app tiers with load balancers and autoscaling, apply caching strategies that cut DB load by 95%, partition databases with sharding and replication, and wire services together with message queues and resilience patterns — leaving you ready to lead a real system design review.

4 lessons · certificate
⚙️
Programming
advanced

How Compilers Work

Follow source code on its full journey from raw characters to machine instructions. You will build intuition for each compiler phase — scanning, parsing, semantic analysis, and code generation — and understand why each exists, what can go wrong inside it, and how the phases connect. By the end you will be able to read compiler error messages with precision, write a toy expression evaluator, and reason about what your compiler is doing when you flip on -O2.

4 lessons · certificate
🌐
Programming
advanced

Distributed Systems Fundamentals

After finishing this cursus you will be able to design, evaluate, and reason about distributed systems with engineering precision: model failures and time correctly, choose the right consistency level for a workload, explain why consensus is hard and how Raft solves it safely, and architect replication and partitioning strategies that scale without creating hot spots or correctness bugs.

4 lessons · certificate
🗄️
Programming
advanced

Database Internals

Go beneath the SQL surface and understand how databases actually work. After this track you will be able to explain how data is laid out on disk, why B-trees dominate relational indexes, when to reach for an LSM-tree instead, and how MVCC lets Postgres serve thousands of concurrent readers and writers without blocking. You will read query plans, tune buffer pools and checkpoints, design indexes that avoid heap fetches, and reason precisely about isolation levels and concurrency anomalies.

4 lessons · certificate
Programming
advanced

Concurrency and Parallel Programming

Master the full concurrency stack: from race conditions and lost updates, through mutexes and deadlock prevention, to CPU memory models and lock-free atomics, and finally to async event loops and coroutines. After this cursus you can reason about any concurrent system, pick the right synchronization primitive, and debug races and deadlocks methodically.

4 lessons · certificate
🔐
Programming
advanced

Applied Modern Cryptography

Build the cryptographic judgment to evaluate any system's security posture. You will be able to choose the right primitive for each job (AES-GCM, HMAC, Argon2, ECDH, Ed25519), explain why common constructions fail (ECB, textbook RSA, nonce reuse, bare CTR), read a TLS 1.3 handshake trace, and audit real code for the most dangerous cryptographic misuses.

4 lessons · certificate
🛠️
Programming
intermediate

Full-Stack with Node.js, React, and Next.js

An eight-lesson path that builds a full-stack engineer from the runtime up. Start with the Node.js event loop, build a REST API with Express, learn React fundamentals and hooks, master modern data fetching, then move into Next.js App Router, Server Components, Server Actions, and a Prisma + Postgres deployment.

8 lessons · certificate
Programming
intermediate

Parallel Programming with CUDA

A six-lesson path from why GPUs exist to writing your own performant CUDA kernels. Learn the programming model, memory hierarchy, and optimization techniques that turn a 100x speedup from theoretical into practical.

6 lessons · certificate
🔌
Programming
intermediate

API Design & Reliability

Six lessons on shipping an HTTP API that other engineers actually enjoy using. Start with REST principles and status codes, secure it with OAuth 2.0, then make it survive real traffic with rate limiting, idempotency, and load balancing.

6 lessons · certificate
🏗️
Programming
intermediate

Data Engineering Foundations

An eight-lesson path from SQL fundamentals to a modern data stack. You'll learn how to query and tune relational data, cache hot reads, model with dbt, choose between lakehouse and warehouse architectures, and wire pipelines together with Kafka and Airflow. By the end you can reason about every layer a production data platform actually runs on.

8 lessons · certificate

All Programming lessons

Programming
advanced

Dynamic analysis and debuggers

Reverse engineering by running the binary. Why dynamic analysis sees what static cannot, how debuggers and breakpoints actually work (INT3 vs hardware vs page-fault), tracing (strace, ltrace, dtrace, eBPF), dynamic binary instrumentation with Frida and PIN, the common anti-debug tricks, sandboxing with Unicorn and Qiling, and the static-dynamic loop that does the real work.

8 steps·~12 min
Programming
advanced

Disassembly and decompilation

Reading machine code back into something a human can reason about. Instruction decoding (linear sweep vs recursive descent), x86-64 calling conventions, stack frames, control-flow graph recovery, what decompilers actually do and what they fundamentally cannot recover, and the practical tool landscape (IDA, Ghidra, Binary Ninja, radare2).

8 steps·~12 min
Programming
advanced

Binary formats and what the loader does

The first layer of reverse engineering — the file format on disk and the loader that maps it into memory. ELF, PE, and Mach-O as variants of the same idea; sections vs segments; symbol tables and what stripping actually removes; PLT/GOT/IAT and dynamic linking; packers like UPX; and the triage you do before opening a disassembler.

8 steps·~12 min
Programming
intermediate

Linting from first principles

What a linter actually is, what its rules enforce, how AST-based analysis works, the cost of auto-fix, the ecosystem (ESLint, Ruff, Clippy, golangci-lint), where to wire it in (LSP / pre-commit / CI), why false-positive rate is the real budget, and when a custom rule pays for itself.

8 steps·~12 min
Programming
advanced

SQLAlchemy 2.0 async ORM in production

SQLAlchemy 2.0 from the production angle. The engine/session/transaction layering, the typed declarative, the identity map, the N+1 query problem, async-only gotchas (no lazy loading), savepoint nesting, and the connection-pool knobs that decide whether the backend survives load.

8 steps·~12 min
Programming
advanced

FastAPI dependency injection and the request lifecycle

Dependency injection as a pattern, FastAPI's Depends as one concrete implementation. Sub-dependencies and per-request caching, yield-based cleanup, where Pydantic v2 validation runs, lifespan-scoped resources, BackgroundTasks vs real queues, and the override trick that makes the whole thing testable.

8 steps·~12 min
Programming
advanced

Advanced Python typing for backend

Python's type system has two audiences — static checkers and runtime frameworks. Generics, Protocol, TypedDict, ParamSpec, type narrowing, and runtime introspection, framed as the spec that Pydantic, FastAPI, and SQLAlchemy actually execute.

8 steps·~12 min
Programming
advanced

Async Python and asyncio

Async Python from the bytecode up. Coroutines vs return values, how the event loop schedules tasks, when async beats threading or multiprocessing, structured concurrency with TaskGroup, and the cancellation rules that production backends live or die by.

8 steps·~12 min
Programming
intermediate

Database Sharding and Replication

Go beyond a single database: learn how read replicas offload query load, how range and hash sharding partition data, why consistent hashing makes rebalancing tractable, and how to pick a shard key that avoids the celebrity problem and cross-shard pain.

8 steps·~12 min·audio
Programming
intermediate

Scaling and Load Balancing

Master the mechanics of scaling distributed systems: when to scale up versus out, why statelessness is the prerequisite for horizontal scale, how L4 and L7 load balancers differ, which balancing algorithm fits which workload, and how to avoid turning your load balancer into the next single point of failure.

8 steps·~12 min·audio
Programming
intermediate

Queues, Async, and Microservices

Learn how message queues and pub/sub decouple services, why at-least-once delivery demands idempotent consumers, how backpressure and dead-letter queues protect the system, and when microservices are worth the complexity — with a sequenceDiagram of async order processing.

8 steps·~12 min·audio
Programming
intermediate

Caching Strategies

Understand where caches live, how cache-aside, read-through, write-through, and write-back differ, how to choose eviction policies, and how to prevent cache stampedes — with hit ratio math and a concrete cache-aside code snippet.

8 steps·~12 min·audio
Programming
advanced

Replication and Partitioning

How do you scale a database beyond one machine while keeping it reliable? This lesson covers every major replication topology, the quorum math behind leaderless systems, and partitioning strategies from range keys to consistent hashing — including how to avoid hot partitions and handle rebalancing.

9 steps·~14 min·audio
Programming
advanced

Failure and Time in Distributed Systems

Distributed systems break in ways single machines don't: nodes crash silently, messages vanish, and clocks lie. Learn the standard failure taxonomy, why a global clock is physically impossible, and how Lamport and vector clocks let you reason about causality without one.

8 steps·~12 min·audio
Programming
advanced

Consensus: Raft and Paxos

Consensus is the hardest fundamental problem in distributed systems — and the one everything else depends on. Understand why FLP makes it theoretically impossible in async systems, how quorums work, and exactly how Raft solves leader election, log replication, and commitment safely.

8 steps·~12 min·audio
Programming
advanced

CAP and Consistency Models

CAP is the most misquoted theorem in distributed systems. Get the precise statement, learn why PACELC is more useful in practice, and master the consistency spectrum from linearizability down to eventual consistency — with concrete trade-offs for each level.

7 steps·~11 min·audio
Programming
advanced

Transactions, Isolation, and MVCC

Transactions are a promise. Learn the ACID guarantees, the exact anomalies each SQL isolation level prevents or allows, why two-phase locking blocks and MVCC does not, and how Postgres uses row versions plus a transaction ID visibility check to give you snapshot isolation without holding a single read lock.

8 steps·~12 min·audio
Programming
advanced

Storage Engines and Page Layout

Disk geometry dictates database design. Learn why sequential I/O beats random I/O by 100x, how fixed-size pages and slotted page headers work, why row-stores and column-stores suit different workloads, how the buffer pool keeps hot pages in RAM, and how the write-ahead log makes durability cheap.

9 steps·~14 min·audio
Programming
advanced

LSM-Trees and Write-Optimized Storage

B-trees rule read-heavy OLTP; LSM-trees rule write-heavy workloads. Learn how the memtable and immutable SSTable pipeline converts random writes into sequential I/O, why compaction is unavoidable, how bloom filters slash unnecessary reads, and when to pick LSM over B-tree.

8 steps·~12 min·audio
Programming
advanced

B-Tree Indexes

B+ trees are the workhorse of relational databases. Learn why their high fanout and shallow depth match disk perfectly, how point lookups and range scans work, the difference between clustered and secondary indexes, how covering indexes eliminate table lookups, and the hidden write cost of keeping indexes up to date.

9 steps·~14 min·audio
Programming
advanced

Symmetric Ciphers and Modes of Operation

AES and block ciphers are primitive building blocks, not complete encryption schemes. Learn how ECB leaks structure, why CBC and CTR modes work differently, and why GCM is the modern default — including the catastrophic consequences of nonce reuse.

9 steps·~14 min·audio
Programming
advanced

Public-Key Cryptography: RSA and ECC

Trapdoor functions power every TLS handshake, code signature, and SSH session. Master RSA key generation and its math, why textbook RSA is trivially broken, what elliptic curves add, and how ECDSA and Ed25519 compare — with key-size equivalences you can quote in code reviews.

9 steps·~14 min·audio
Programming
advanced

Key Exchange and TLS 1.3

Every HTTPS connection negotiates a fresh secret over an untrusted network. Learn Diffie-Hellman and ECDH from first principles, why forward secrecy matters when private keys leak, how TLS 1.3 cut the handshake to one round-trip, and how certificate chains stop man-in-the-middle attacks.

10 steps·~15 min·audio
Programming
advanced

Hash Functions, MACs, and Password Hashing

Hash functions are not all equal and MACs are not just hashes with a secret. Learn the three resistance properties, why length-extension attacks break naive HMAC constructions, how KDFs differ from hashes, and why bcrypt/scrypt/Argon2 exist for passwords.

9 steps·~14 min·audio
Programming
advanced

Threads and Shared State

Threads look deceptively simple — create a few, share some memory, done. In practice, shared mutable state is a minefield: race conditions, non-deterministic output, and bugs that vanish under a debugger. This lesson dissects concurrency vs parallelism, why `count++` is three operations the CPU can interleave, Amdahl's law, and what a critical section actually means.

9 steps·~14 min·audio
Programming
advanced

Memory Models, Atomics, and Lock-Free

The CPU and compiler silently reorder your code. Cache coherence does not mean coherent behavior. This lesson explains the happens-before relation, memory fences, C++ and Java atomic operations, compare-and-swap, and why `volatile` is not a synchronization primitive.

9 steps·~14 min·audio
Programming
advanced

Locks and Synchronization

Mutexes, condition variables, semaphores, and reader-writer locks — the primitives that make concurrent code correct. Understand the four Coffman deadlock conditions, how lock ordering prevents them, and why contention turns a performance win into a bottleneck.

9 steps·~14 min·audio
Programming
advanced

Async, Event Loops, and Futures

Threads are not the only model for concurrency. Learn how blocking vs non-blocking I/O works, how the event loop and reactor pattern scale to millions of connections, and how callbacks evolved into futures, promises, and async/await — plus where coroutines fit and when async loses to threads.

9 steps·~14 min·audio
Programming
advanced

Semantic Analysis and Type Checking

The parser only checks syntax — it happily accepts `x = y + z` even if none of those names exist. Semantic analysis adds meaning: it builds symbol tables, resolves names, enforces scoping rules, and runs the type checker that catches the errors a grammar cannot. Learn what happens between the raw AST and the typed AST the IR generator gets.

9 steps·~14 min·audio
Programming
advanced

Parsing: Tokens to ASTs

The parser takes a flat token stream and recovers the hierarchical structure the programmer intended. Learn context-free grammars, recursive-descent parsing, operator precedence, the difference between a parse tree and an AST, and when LL versus LR parsers matter — including the classic dangling-else ambiguity.

9 steps·~14 min·audio
Programming
advanced

Lexical Analysis: Source to Tokens

Before a compiler can understand your code it has to chop it into meaningful pieces. Learn how scanners work, how regular expressions become finite automata, why maximal munch is the rule, and what a real token stream looks like — the foundation every later compiler phase depends on.

9 steps·~14 min·audio
Programming
advanced

IR, Optimization, and Code Generation

The typed AST is high-level — too high for a CPU. Learn why compilers lower to an intermediate representation first, what SSA form buys you, how classic optimizations (constant folding, dead-code elimination, CSE) transform IR, and how instruction selection and register allocation finally produce machine code.

9 steps·~14 min·audio
Programming
intermediate

GitHub Copilot: Niche Power Features You Probably Aren't Using

You already let Copilot autocomplete your code. This lesson dives into the underused power features: chat participants, slash commands, Copilot Edits, agent mode, custom instructions, prompt files, the model picker, MCP servers, and Copilot Spaces.

12 steps·~18 min·audio
Programming
intermediate

Claude Code: Niche Features You're Probably Not Using

A tour of the underused Claude Code power features beyond basic prompting: CLAUDE.md memory, plan mode, rewind, custom slash commands, subagents, hooks, MCP servers, statusline, and headless mode.

11 steps·~17 min·audio
Programming
intermediate

Full-Stack Next.js with Prisma and Postgres

Ship a full-stack app on Next.js 15: Prisma schema, migrations vs db push, the hot-reload-safe client singleton, Server Components reading data, Server Actions mutating it, useOptimistic, Auth.js, and a Vercel + Neon deploy.

10 steps·~15 min·audio
Programming
intermediate

Server vs Client Components in Next.js

The RSC mental model: server-by-default, the 'use client' boundary, what can cross it, Server Actions with 'use server', streaming with Suspense, and a Postgres-to-Client end-to-end example.

10 steps·~15 min·audio
Programming
intermediate

Next.js App Router Fundamentals

Next.js 15 App Router: page/layout/loading/error files, nested layouts, dynamic and catch-all segments, route groups, parallel routes, and the Metadata API for SEO — with the file tree as a diagram.

10 steps·~15 min·audio
Programming
intermediate

Data Fetching in React

From hand-rolled useEffect fetches to TanStack Query v5 and SWR: race conditions, caching, mutations, optimistic updates, error boundaries, and when to push fetching to the server.

10 steps·~15 min·audio
Programming
intermediate

React Hooks: State and Effects

useState, useEffect, useReducer, and useContext in React 19: the rules, snapshot semantics, dependency arrays, when NOT to useEffect, and the dependency-array footgun that bites everyone.

10 steps·~15 min·audio
Programming
intermediate

React Components and JSX

Master React 19's core primitive: function components, JSX, props, children, composition, conditional rendering, and stable keys — built around a small TODO list you can ship.

10 steps·~15 min·audio
Programming
intermediate

Building REST APIs with Express

Build a small REST API on Node 22 with Express: routes, middleware, JSON body parsing, Zod input validation, status codes, and a clean async error pipeline you won't outgrow.

10 steps·~15 min·audio
Programming
intermediate

Node.js Runtime Fundamentals

How Node 22 actually runs your code: V8, the libuv event loop and its phases, microtasks vs macrotasks, blocking pitfalls, and where worker threads, npm, pnpm, and bun fit in 2026.

10 steps·~15 min·audio
Programming
intermediate

Profiling CUDA: Occupancy, Memory Coalescing, and Nsight

A working CUDA kernel is the start, not the finish. How to measure occupancy, spot uncoalesced loads and warp divergence, and read the three numbers in Nsight Compute that actually matter.

9 steps·~14 min·audio
Programming
intermediate

Shared Memory Tiling for Matrix Multiplication

Why naive matmul on a GPU is bandwidth-starved, and how tiling with __shared__ memory reduces global memory traffic by a factor of the tile size. The classic optimisation, with the kernel that demonstrates it.

9 steps·~14 min·audio
Programming
intermediate

Your First CUDA Kernel: Vector Addition End-to-End

The hello-world of CUDA, done properly. Allocate device memory, copy inputs, launch a kernel, copy results back, free, and check every return code. The full driver + kernel in one runnable file.

9 steps·~14 min·audio
Programming
intermediate

CUDA Memory Hierarchy: Global, Shared, Constant, Local, Registers

The five memory spaces a CUDA kernel can see and why they have wildly different speeds. Global vs shared vs constant vs local vs registers, coalesced access, bank conflicts, and a cheat-sheet table you'll actually reference.

9 steps·~14 min·audio
Programming
intermediate

CUDA Programming Model: Kernels, Threads, Blocks, and Grids

How CUDA carves a problem into a grid of blocks of threads. Host vs device code, the __global__ qualifier, the launch syntax, and how every thread figures out which slice of data it owns.

9 steps·~14 min·audio
Programming
intermediate

Parallel Computing Fundamentals: CPUs, GPUs, Latency vs Throughput

Why GPUs eat CPUs for breakfast on some workloads and choke on others. Serial vs parallel execution, Amdahl's law, the latency-vs-throughput trade-off baked into silicon, and a rule of thumb for when to reach for a GPU.

9 steps·~14 min·audio
Programming
beginner

SQL JOINs: Combining Data from Multiple Tables

Learn how to combine data from different tables in a relational database using the four fundamental SQL JOIN types: INNER, LEFT, RIGHT, and FULL OUTER. We'll explore what each join does, when to use it, and how they differ, using clear examples and diagrams.

10 steps·~15 min·audio
Programming
intermediate

PostgreSQL Indexes: Unlocking Query Performance with B-tree, Hash, GIN, and GiST

Dive deep into the world of PostgreSQL indexes. Understand the core mechanics of B-tree, Hash, GIN, and GiST indexes, their optimal use cases, and how to choose the right indexing strategy to dramatically accelerate your database queries.

9 steps·~14 min·audio
Programming
intermediate

OAuth 2.0: Deep Dive into Authorization Flows

Explore the core concepts of OAuth 2.0, its various grant types, and how it enables secure, delegated access without sharing credentials. Understand the roles and the step-by-step authorization process.

12 steps·~18 min·audio
Programming
beginner

Crafting Robust APIs: Essential REST Design Principles

Learn the foundational principles behind RESTful API design. This lesson covers statelessness, client-server architecture, uniform interface, effective use of HTTP methods and status codes, and practical tips for building scalable and maintainable web services.

11 steps·~17 min·audio
Programming
intermediate

Mastering Retrieval-Augmented Generation (RAG)

Explore Retrieval-Augmented Generation (RAG), a powerful technique that enhances Large Language Models (LLMs) by grounding their responses in external, up-to-date, and domain-specific information, mitigating hallucinations and improving factual accuracy. This lesson covers its core components, workflow, and practical considerations.

10 steps·~15 min·audio
Programming
intermediate

Vector Databases and Similarity Search: Unlocking Semantic Understanding

Dive into the world of vector databases, specialized systems designed to store and query high-dimensional vector embeddings efficiently. Learn how these databases power semantic search, recommendation systems, and large language model applications by finding semantically similar data points at scale.

10 steps·~15 min·audio
Programming
beginner

LangChain: Building Your First LLM Application

A beginner's guide to LangChain, the popular framework for composing applications with Large Language Models. Learn the core concepts of Models, Prompts, and Chains, and build a simple application using the LangChain Expression Language (LCEL).

10 steps·~15 min·audio
Programming
beginner

Snowflake: Cloud Data Warehouse Fundamentals

Learn the foundational concepts of Snowflake, the cloud-native data platform. Explore its unique architecture, key features like time travel and zero-copy cloning, and understand how its pricing model works.

9 steps·~14 min·audio
Programming
intermediate

Apache Kafka: Distributed Event Streaming for Data-Intensive Applications

Dive into Apache Kafka, a powerful distributed streaming platform designed for high-throughput, fault-tolerant data pipelines. Understand its core components, architecture, and how it enables real-time data processing for modern applications.

12 steps·~18 min·audio
Programming
intermediate

Apache Airflow: Orchestrating Data Pipelines

Dive into Apache Airflow, the powerful platform for programmatically authoring, scheduling, and monitoring complex data workflows. Learn about DAGs, operators, and how to build robust, scalable pipelines for modern data engineering.

11 steps·~17 min·audio
Programming
beginner

Introduction to dbt: The "T" in ELT

Learn the fundamentals of dbt (data build tool), the industry standard for transforming data directly within your cloud data warehouse. This lesson covers core concepts like models, materializations, sources, and testing, empowering you to build reliable and modular data pipelines with just SQL.

10 steps·~15 min·audio
Programming
intermediate

Understanding the Data Lakehouse Architecture

Explore the data lakehouse, a modern architecture that merges the cost-efficiency and flexibility of data lakes with the performance and reliability of data warehouses. This lesson covers its core components, benefits, and the open-source technologies that make it possible.

10 steps·~15 min·audio
Programming
beginner

HTTP Status Codes: Understanding Each Class and When to Use Them

HTTP status codes are essential for effective communication between clients and servers on the web. This lesson breaks down each class of status codes (1xx, 2xx, 3xx, 4xx, 5xx), explains their meaning, and provides practical guidance on when to use them in your applications.

10 steps·~15 min·audio
Programming
intermediate

LangSmith: Tracing & Evaluating Your LLM Applications

Dive into LangSmith, the developer platform for building and evaluating robust Large Language Model (LLM) applications. Learn how to trace execution paths, debug complex chains, and rigorously evaluate your LLM's performance to ensure reliability and quality.

9 steps·~14 min·audio
Programming
beginner

Redis: Fundamentals of an In-Memory Data Store

Explore Redis, a powerful open-source in-memory data store. Learn its core concepts, why it's used, its versatile data structures, and how it delivers blazing-fast performance for caching, real-time analytics, and more.

11 steps·~17 min·audio
Programming
beginner

Intro to Big-O Notation

A beginner-friendly tour of Big-O: what it measures, the common growth classes, and how to spot them in your own code.

11 steps·~17 min·audio