The best software I’ve written has mathematical elegance—not because it uses advanced math, but because it embodies mathematical principles of abstraction, composition, and invariants.
What Mathematical Elegance Means
In mathematics, elegance means:
Generality: One theorem covering many specific cases reveals deep structure
Composability: Small results combine to prove larger results
Invariants: Properties preserved across transformations
Minimal assumptions: Maximum results from minimum prerequisites
Inevitability: Each step follows naturally from the previous
These same principles make software beautiful.
Generality in Code
Good abstractions are general.
Instead of:
def sum_integers(lst): ...
def sum_floats(lst): ...
def sum_complex(lst): ...
Write:
def sum(iterable): ... # Works for any numeric type
This isn’t just code reuse—it’s recognizing essential structure independent of representation.
Mathematical parallel: group theory doesn’t care if you’re rotating shapes or permuting elements. It cares about the structure of symmetry itself.
Composability
Mathematical proofs compose: lemmas → theorems → theories.
Software should work the same:
def normalize(vector):
return vector / magnitude(vector)
def magnitude(vector):
return sqrt(sum(x**2 for x in vector))
# Compose naturally
unit_vector = normalize(data)
Each function does one thing. They combine predictably.
This is Unix philosophy through a mathematical lens.
Invariants as Correctness
In math, invariants let you reason about properties that survive transformations.
In code, invariants are contracts that must hold:
- A sorted list stays sorted under these operations
- This hash function is deterministic
- This pure function returns same output for same input
- This encryption preserves confidentiality
Design APIs to make important invariants obvious and enforceable.
Type systems help:
-- Once encrypted, type system won't let you use as plaintext
encrypt :: PlainText -> Key -> CipherText
decrypt :: CipherText -> Key -> PlainText
Minimal Assumptions
Mathematical theorems state assumptions explicitly: “Let X be a metric space with property P…”
Software should too:
Type signatures declare valid inputs:
def cosine_similarity(v1: np.ndarray, v2: np.ndarray) -> float:
"""
Precondition: v1 and v2 are non-zero vectors of same dimension
Returns: similarity in [-1, 1]
"""
Documentation states what must be true:
- Preconditions: what caller must ensure
- Postconditions: what function guarantees
- Invariants: what always holds
Make it hard to violate assumptions accidentally.
Inevitability in Design
The best mathematical proofs feel inevitable—each step follows naturally.
The best software feels the same:
Function names that make usage obvious:
# Not: process_data(x, True, False, 3)
# But:
results = data.filter(predicate) \
.map(transform) \
.reduce(aggregator)
Type systems that guide toward correct code:
// Rust's ownership system makes it hard to write memory-unsafe code
// The correct way is the natural way
APIs where the right way is the natural way:
# Natural usage:
with open(filename) as f:
data = f.read() # Automatically closes, handles errors
When users think “of course, what else would it be?"—that’s inevitability.
My Two Degrees, Combined
Two master’s degrees gave me complementary modes:
Computer Science (2015): How to build systems that work
- Algorithms and data structures
- Systems programming
- Distributed computing
- Practical engineering
Mathematics (2023): How to reason about structure and correctness
- Rigorous proofs
- Abstract algebra
- Measure theory
- Mathematical maturity
The combination is powerful: build systems with mathematical elegance.
Examples From My Work
Statistical libraries:
Functions compose like mathematical operations:
bootstrap(estimator, data, resamples = 1000) %>%
confidence_interval(level = 0.95)
Returns a distribution you can query. Each piece does one thing. They compose naturally.
Cryptographic tools:
Invariants enforced by types:
// Encrypted<T> can't accidentally be used as T
// Type system prevents confusion
template<typename T>
class Encrypted { ... };
Network analysis:
Abstract over graph representations:
def pagerank(graph: GraphProtocol, damping=0.85):
"""Works on any graph satisfying the protocol"""
Write algorithms that work on any structure satisfying the interface.
Why This Matters
Mathematical elegance isn’t aesthetic preference—it’s engineering for comprehension.
Code with mathematical structure is:
Easier to reason about: Invariants guide understanding
Easier to test: Composability enables isolated testing
Easier to extend: Generality means fewer special cases
Easier to prove correct: Invariants support formal reasoning
Easier to maintain: Clear structure resists decay
The Discipline Required
Achieving this requires discipline:
Resist special cases: Factor out common structure instead
Name things precisely: Names should reveal intent
State assumptions clearly: Document preconditions and invariants
Make properties obvious: Important characteristics should be explicit
Compose small pieces: Build complex from simple
It’s harder than throwing code together. But the result is software that feels mathematically clean.
Practical Implications
For my research:
Reliability analysis code: Estimators defined abstractly, work for any censoring pattern
Network analysis tools: Graph algorithms independent of representation
Statistical methods: Mathematical properties preserved in implementation
For general development:
Write functions that compose: Small, focused, predictable
Use types to encode invariants: Let compiler help maintain correctness
Document the mathematics: Explain theoretical properties of your code
Test invariants explicitly: Verify properties that should always hold
The Connection to Legacy
With stage 4 cancer, I think about code differently:
Will someone else understand this design?
Are the mathematical principles clear?
Can this be extended without me?
Does the structure communicate intent?
Mathematical elegance helps here. Code structured like a proof:
- States its assumptions
- Proceeds logically
- Reaches inevitable conclusions
- Can be verified independently
is more continuable than clever hacks.
Examples of Mathematical Thinking
Monoids everywhere:
# Recognizing monoidal structure
# Identity element, associative operation
[].extend([1,2]).extend([3,4]) # List concatenation
0 + 5 + 10 # Addition
1 * 5 * 10 # Multiplication
"" + "hello" + "world" # String concatenation
Functors in practice:
# map preserves structure
list.map(f).map(g) == list.map(lambda x: g(f(x)))
Option.map(f).map(g) == Option.map(lambda x: g(f(x)))
Type algebra:
// Sum types: A | B (union)
// Product types: {a: A, b: B} (record)
// Function types: A => B
// These compose algebraically
Recognizing these patterns makes code comprehensible at a higher level.
The Aesthetic Dimension
There’s genuine beauty in code that embodies mathematical principles:
- A function signature that perfectly captures the abstraction
- An invariant that makes correctness obvious
- A composition that feels inevitable
- An API that maps naturally to the domain
This isn’t just satisfying—it’s useful. Beautiful code tends to be:
- More correct
- More maintainable
- More extendable
- More understandable
What I’m Striving For
Every library I publish aims for:
Mathematical clarity: Structure reflects underlying theory
Compositional design: Small pieces combine naturally
Explicit invariants: Important properties are obvious
Minimal assumptions: Work with maximum generality
Inevitable usage: The right way feels natural
This takes time. But it’s how you build things that last.
The Bottom Line
My two degrees taught me complementary skills:
CS: How to build Math: How to reason
The combination: Building with mathematical elegance
This means:
- Code that composes
- Types that enforce correctness
- Abstractions that reveal structure
- Invariants that guide reasoning
- Designs that feel inevitable
Cancer doesn’t change this. If anything, it emphasizes it:
Do work that’s comprehensible, continuable, and correct.
Mathematical elegance serves all three.
The best code feels like executable mathematics.
Discussion