Infinite Code

Christoph Neumann

Func Prog Conf

Oct 14, 2026

christophneumann.dev

clojure.org • nu.com

What is your favorite programming language?

If you could not use your favorite programming language, what language would you use instead?

Christoph Neumann

Clojure Developer Advocate


clojure.org
nu.com

Official Clojure Survey:

If you could not use Clojure, what language would you use instead?

A curious pattern

If you could not use Clojure, what language would you use instead?
  • Java (11.4%)
  • Python (10.1%)
  • Quit Programming (9.9%)
If you could not use Clojure, what language would you use instead?

Making software is hard!

⚠️ Correction ⚠️

Making excellent software
is hard!

What makes software excellent?

The Answer:

Functional Programming!

and monads

∎ QED

What makes software excellent?

excellent = surpass, be superior

Excellent at what?

  • Performance?
  • Speed of creation?
  • Reliability?
  • Feature set?
  • Usability?
  • Maintainability?
  • Correctness?
  • Code expressiveness?
  • Token spend?

Are you solving real-world problems?

Real-World Problems:

Changing conditions

Uncertainty

Limited resources

Entrepreneurship

  • Deliver real value
  • to an actual customer
  • in a dynamic market
  • before you run out of cash
  • and die †
    † hopefully just business death

Paradox of Choice:

Choosing an option reduces our options.

Drives us to ask:

How can we separate choices?

Make them independent?

Changeability:

Able to make the changes we want or need.

Changeability is the central factor of longevity.

Better yet:

What choices can we defer?

Optionality: preservation of choices

Decide later when you have more information.

Changeability avoids rigidity

BUT

Optionality avoids choices

Optionality > Changeability

⚠️ Correction ⚠️

(> Optionality Changeability)

Let's formalize this

stacked
stacked

Finite and Infinite Games

Formulated by James P. Carse in 1986

Applied to business by Simon Sinek in
"The Infinite Game" in 2019

The goal of a finite game is to win.

The goal of an infinite game is to keep playing indefinitely.

Finite is bounded: time, rules, players

For infinite, the rules must change to keep playing.

Play is threatened by boundaries and other limits.

Working on software is indefinite, therefore an infinite game.

What ends the infinite game?

Constraint deadlock

Intractability

Too many bugs

Burnout

Inability to bring in a new player

What are some finite games we play?

Optimization game

Feature game

Metrics game

Framework game

Programming language game

Hiring game

Pain-shifting game

Finite games are still necessary

Does a “win” threaten the long game?

You can “win” yourself into failure.

No ultimate win, just a series of wins

Good enough:
win the finite games you play.

You can choose to not play.

You don’t have to play someone else’s game.

Infinite Game > Finite Game

⚠️ Correction ⚠️

(> Infinite-Game Finite-Games)

Playing the infinite game

Changability

Optionality

Factors for longevity

  • Avoid limits
  • Isolate change
  • Avoid need to change

What lasts?

No change needed

"Same As Ever"

by Morgan Housel

Data

Generic solutions, but not specific ones.

Parts of the software,
but not the whole code base.

The loose. Not the tight.

Tight does not handle change, growth, movement.

Separate things. Not combined things.

What keeps the infinite game going?

E.g. The Internet

Data is central.
Behavior is separate and independent.

Open data, not closed

Useful consistency. Ready when you are.

Avoid unnecessary dependencies

Maintain locality

Avoid unnecessary specification

Truly minimal is minimal boiler plate. What you don’t have to write.

Make current code do more

Working on software is an infinite game.

Goal: Keep playing indefinitely!

The real world threatens play

Changing conditions

Uncertainty

Limited resources

Strategy

  • Avoid limits: opt in to constraints
  • Isolate change: separate pieces
  • Avoid change: using lasting pieces

Maximize:

Changability: able to make changes

Optionality: preservation of choices

One more thing ...

We are human.

Playing must be fun
and worthwhile!

Thank You!

christophneumann.dev

clojure.org • nu.com

Bonus slides

Clojure is ...

  • Elegant
  • Functional
  • Dynamic
  • Fast
  • Simple, safe concurrency
  • Hosted on Java

Why Clojure?

  • Live and interactive
  • Start small and grow
  • Data oriented
  • Safe
  • Robust (not fragile)
  • Simple
  • Fun!

More than just a language

Clojure + REPL + Editor + Data Viz

REPL

Read
Evaluate
Print
Loop

Evaluation and Execution

Structure vs Semantics

Learning

https://clojure.org/guides/learn/clojure

https://www.braveclojure.com/

https://clojure.org/guides/getting_started

https://kimh.github.io/clojure-by-example/

https://clojure.org/api/cheatsheet

https://clojure.org/community/resources

Practice

http://clojurescriptkoans.com/

https://tryclojure.org/

https://exercises.clojure.camp/

Community

https://clojurians.net/

https://clojurians.zulipchat.com/

https://clojureverse.org/

Take a moment. Think about it. Turn to your neighbor and tell them.

Boom! It's gone! Now what? Take a moment. Think about it. What would you choose? Tell your neighbor... Why? What makes you want to choose it? But let me introduce myself ...

Last year, I had a heretical idea to ask Clojure developers about other programming languages! On the official survey!

What did they say? Well first, some background. Where did this idea come from?

Over the last 3 years, I've interviewed countless Clojure developers. I get the full backstory that leads to Clojure I noticed a pattern: testing, ops, dev rel, project owner, project manager, even a *manager*! Programmers that tried something else. Even management! Lost their joy. Burnt out on programming. Felt anecdotal. I wanted some data!

Give up programming? Some were surprised by the results or thought it was a joke. I knew better from my interviews. Why give it up?

Actually, some would argue that making software is now easy!

That implies the question...

Well..thank you for coming to my talk. It was a bit shorter than expected...

The answer matters because it's hard to do. We do hard things, but we need a purpose. Example: Marathon Why? We want to feel success, but what are we up against?

surpass what? superior to what?

What do you want to maximize? Manager: prioritize everything! Those managers were not clearly not devs that had quit programming. It depends! No universal “winner”.

Congratulations! You have real problems!

Unbounded change Unbounded uncertainty I learned this as an entrepreneur.

Real-world problem: * Changing conditions * Uncertainty * Limited resources

Fewer resources, at least. Some choices have high impact, others low.

Eg. Functional programming separates values and behavior. Joke: Dysfunctional programming. dis- means "lack of, not", "opposite of", "apart, away" dys- means "bad, ill; hard, difficult; abnormal, imperfect" “When you separate functional from programming? Dis-functional.”

The paradox of change: Making a change, requires making choices, but choices constrain future change. Therefore change constrains change.

World is changing Uncertainty means surprises! Limits force change of approach

E.g. Functional programming has higher-order functions to defer specifying behavior. OO has interfaces and (gasp) inheritance Someone will make this choice later

Let’s formalize this.

Not that kind of formal! I have found it helpful to view software as an infinite game. What is that?

I learned it for entrepreneurship. Entrepreneurship is brutal: struggle to survive.

For infinite, the rules *must* change. The rules must change to take those into account. Finite players play within boundaries; infinite players play with boundaries.

--- Trap: A succession of finite games. We “win” now, but impose limits later. Those limits can force us to stop playing! Background: I worked in live production. It has constant change, but you don’t want any on-air mistakes!

We want to keep the game going!

--- ## Let us consider ... * What ends the infinite game? * What lasts? * What keeps the infinite game going?

What are game ending conditions?

Everyone abandons Business fails

Looks good now but get a constraint future?

Which features are going to change in the future? Which ones can we avoid doing now?

Velocity. ROI. Short-term earnings.

You suffer, management wins. … for a while until everyone quits

You have to play finite games to make progress in your infinite software game. You just need to make sure your finite games do not compromise the infinite games.

there's no fixed endpoint, no fixed set of players, and no way to ever truly "win.”

* Opt in to constraints * Separate pieces * Make things non-brittle and non-fragile

Preserves optionality and therefore changeability Not moving Moving expends energy, so you can only move so much.

If you bet on lasting things, you will alway win!

E.g. Weather data

The example Fibonacci versus it in Ada. JVM example Hiccup is more general than HTML

E.g. Ingredients, not cooked things.

The Internet is an infinite game. Good basis of illustration.

Data is stable. I never reset a thing. It only changes as often as that thing.

How many cascading changes do you have to make? e.g. Change types. Change "helper" code for your pattern. Hidden dependencies

In strength in constraints Conveyance Interactive development JVM example Hiccup examples

The most minimal specification? No specification!

What if you could make a change without changing any code?! The preferred solution is the one that doesn’t require any code change at all! (Sorry Scala devs. You have my deepest condolences.) Possible when things are *not* specified.

We want to keep the game going!

Software is for us! Satisfying, at the very least.