CPU Cache
A small, fast memory that sits between the processor and slow main memory, holding recently used data so the CPU rarely has to wait; the idea was named by Maurice Wilkes in his 1965 slave-memory paper.
Plain-language explanations of the ideas behind software - compilers, garbage collection, objects, types.
A small, fast memory that sits between the processor and slow main memory, holding recently used data so the CPU rarely has to wait; the idea was named by Maurice Wilkes in his 1965 slave-memory paper.
Command Query Responsibility Segregation: using a separate model to update information than the model used to read it, splitting the write side from the read side.
Compiling code on one platform, the host, to produce a program that runs on a different platform, the target, which is essential for embedded systems and for tools like Zig and Go.
Injecting malicious JavaScript into a web page so that other users' browsers execute it, letting an attacker steal sessions or act as the victim; mitigated by output encoding and Content Security Policy.
A hash function with security properties - preimage, second-preimage, and collision resistance - that lets it fingerprint data, store passwords, and underpin signatures and blockchains.
The science of securing communication and data against adversaries, providing confidentiality, integrity, authentication, and non-repudiation.
A build-time approach in which class names in a CSS file are scoped locally by default, generating unique global names so component styles cannot collide across a project.
An approach to styling components in which CSS is written inside JavaScript and scoped automatically to the component, trading a global stylesheet for per-component styles at the cost of runtime work.
The deep parallel in which logical propositions correspond to types and their proofs correspond to programs that inhabit those types.
Transforming a function of several arguments into a chain of single-argument functions, so it can be applied one argument at a time.
A public catalog that assigns a unique identifier to each known security vulnerability so everyone can refer to it unambiguously, paired with CVSS severity scores and the NVD database.
A way of organizing data in memory so that the operations a program needs to perform on it are efficient.
A central repository of integrated, historical data optimized for analytical queries and reporting rather than day-to-day transactions.
An auxiliary structure, usually a B-tree, that lets a database find rows by a column's value without scanning the whole table - the biggest single lever on query speed.
The formal definition of a database's structure - its tables, columns, types, keys, and constraints - that the stored data must conform to.
Procedural code the database runs automatically in response to data-changing events on a table.
A saved query that behaves like a virtual table, presenting data from one or more tables without storing it separately.
Whether a yes or no problem can be answered by an algorithm that always halts with the correct answer.
The world's largest hacker convention, held in Las Vegas every year since 1993, known for its security research, Capture the Flag contests, and elaborate electronic badge culture.
Writing code that anticipates and guards against invalid inputs, misuse, and unexpected states to make software more robust.
Robert Dennard and colleagues' 1974 result that as MOSFETs shrink, power density stays roughly constant, so each new generation of smaller transistors is also faster and more efficient; its breakdown around 2006 ended the clock-speed race.
Dependency hell is the tangle that arises when packages require conflicting versions of shared dependencies, making a working install hard to achieve.
The problem of selecting one mutually compatible set of dependency versions from a web of constraints, which is what package managers do under the hood.
A graph traversal that goes as deep as possible before backtracking, using a stack or recursion, and the basis of topological sort, cycle detection, and Tarjan's strongly-connected-components algorithm.
A named, reusable solution to a recurring design problem in a given context, giving developers a shared vocabulary for software design.
The discipline of treating the developer as the user of an API or platform, optimizing docs, SDKs, sandboxes, and error messages so integration is fast and predictable.
Representing a change as a 'diff' (the lines added and removed) that a 'patch' tool can apply to another copy of a file, which became the common language for sharing code by email.
A way to sign data with a private key so anyone holding the matching public key can verify who signed it and that the data was not altered.
The craft of rendering type with computers -- on screens and printers -- using mathematically described outline fonts, hinting, and high-quality line-breaking, a field Donald Knuth reignited with his TeX project.
Dijkstra's 1959 method for finding the shortest paths from one source node to all others in a graph with non-negative edge weights.
The problem of getting a group of separate processes to agree on a single value despite crashes, slow networks, and lost messages.
A lock that coordinates access to a shared resource across many machines so only one holds it at a time - simple in idea but subtle to make safe.
A system whose components run on multiple networked computers and coordinate by passing messages, appearing to users as a single coherent system.
A transaction that spans multiple databases or services, which must all commit together or all abort together, classically coordinated with two-phase commit.
A style of version control where every clone is a full repository with the complete history, in contrast to centralized systems where one server holds the authoritative copy.
An algorithm design strategy that breaks a problem into smaller subproblems of the same type, solves them recursively, and combines their answers into a solution for the whole.
The philosophy of writing and maintaining documentation with the same tools and workflows as software: plain-text markup, version control, code review, and continuous integration.
A NoSQL model that stores data as self-contained documents (JSON, BSON, or XML) with flexible, nested schemas, so each record can differ - convenient for application objects but without relational integrity.
The principle that every piece of knowledge must have a single, unambiguous, authoritative representation within a system, so that duplicated logic cannot drift out of sync; from Hunt and Thomas's 'The Pragmatic Programmer' (1999).
Hidden per-user configuration files whose names start with a dot, like .bashrc and .gitconfig, and the culture of versioning and sharing them.
Dynamic random-access memory, the capacitor-based main memory invented by Robert Dennard at IBM in 1967, which stores each bit as charge on a tiny capacitor and must be refreshed constantly - the cheap, dense RAM in nearly every computer.
A resizable array that grows by reallocating to a larger block, giving amortized constant-time append while keeping constant-time indexing.
An algorithm design method that solves a problem by breaking it into overlapping subproblems and reusing each subproblem's stored answer instead of recomputing it.
A hidden message, feature, or joke planted in software for users or fellow programmers to discover; from the Atari Adventure secret room to about:mozilla and Google's hidden tricks.
A type-system extension that tracks the side effects a piece of code may perform, making effects part of a function's type.
The cloud's ability to automatically scale resources up and down to match demand so you pay only for what you use - one of the five essential characteristics in the NIST definition of cloud computing.
The software used to design modern chips: synthesis, simulation, place-and-route, and verification tools that turn a hardware description into a manufacturable layout.
Bundling a small interpreter such as Lua or Tcl inside a larger application so the program can be configured, extended, and modded in a high-level language without recompiling.