The Programmer's Story: From Über-God to Underdog

From Creationism to Evolutionism in Computer Programming

(note: click Ø in the menu on the lower-right to disable slideshow mode)

This Presentation

Title:The Programmer's Story: From Über-God to Underdog
Subtitle:From Creationism to Evolutionism in Computer Programming
Author:François-René Rideau,
Meeting:`LispNYC`_, 2014-10-14

The Take Home Points

Programming tools imply a story 'bout who the programmer is;

the stories we tell inspire a corresponding set of tools.

Past progress can be told in terms of such stories;

Future progress can be imagined likewise.

Making the stories explicit is a great meta-tool...

... and it's fun!

Plan of the Talk

Tell stories

Argue Relevance

Discuss Future

The Stories

Let's start with the beginning,

the simplest, most obvious story to explain

how programs come into existence:


First Story: Creationism

In the beginning the Machine was without form, and void...

...then the Programmer zapped Software into the Machine...

...and the Software was.

Creationist Assumptions

The Programmer is a God above and beyond the Machine

Programmer-God has perfect understanding of the Program

Real software is a projection of His perfect platonic idea

Creationist Tools

Paper on which to write down the perfect program

A switchboard with which to enter the perfect program.

The Creationist Story

The basis for many a course in "Computer Science"

Works great in small exercises...

... at least for a few clever students.

Flaws in the Story

Software isn't perfect.

Plenty of "bugs" happen.

Perfect program ideas have imperfect implementation.

And so...

... we need to account for them in our story.

And the simplest explanation is:

The Devil

Some adverse entity introduces bugs, errors, mistakes,

noise in the channel between God and Machine.

To be blamed for imperfections in the Program.

Deeds of the Devil

"Cosmic Rays" and other random Memory Corruption

Errors when the program is entered into the Machine

Discrepancies between the perfect idea and the program

Weapons Against the Devil

Blinkenlights to inspect the contents of memory

Punch cards to record successful program communications

Adhesive Tape to fix punch cards

Generalizing The Devil

An antagonist force can spice up any story.

(The game developers in the audience won't disagree.)

The devil is a good story mixin.

A Better Story Is Possible

Creationism is simple and obvious,

but quickly shows its limits.

And so...

we may improve on it with

our second story:

Layered Creation

On the first day, God separated requirements from bugs

On the second day, God drew a flow chart

On the third day, God divided the program into routines

On the fourth day, God wrote the program's kernel

On the fifth day, God coded the application

On the sixth day, God finished the interface

Layered Creation (Continued)

On the seventh day, God released the Software

Layered Creation Assumptions

God still has a perfect eternal Program idea, but

The Machine isn't perfect.

Programming the Machine isn't instantaneous.

And so...

He does it in layers.

Neat hierarchical layers.

Layered Creation Concepts

Method: Top-down design

Architecture: layered systems

Prototyping: Flow chart diagrams

Process: The waterfall process

Layered Creation Automation

Algorithms: Divide and Conquer

Layered languages: Assemblers, Formula Translators

Layered Creation with a Devil

The devil mixin applies.

At each step, the devil introduces bugs to be fixed.

Even at the end of the process, bugs are still there.

And so...

Creation is re-iterated until bugs are gone.

Iterated Creation

At first, God wrote a prototype: unicellular software

After some work, God released version 1 beta: fish, etc.

Eventually, God released version 1: dinosaur software

Then God released version 2, 3, etc.: as many layers of fossils

At last God has now produced a stable version.

Unless He's working on next patch release.

Iterated Creation aka...

As you no doubt noticed,

this Layered Creation with a Devil,

or Iterated Creation,

is best known as...

... Intelligent Design!

Intelligent Design (Retold)

God first creates simple software.

God frequently improves with more elaborate releases.

More complex structures bootstrapped from simpler ones.

Previous creations are discarded.

Parts remain as fossils.

Intelligent Design Assumptions

God is essentially Intelligent

He designs software along hierarchical organization

Design however is neither instantaneous nor perfect

Iterations improve the design

Intelligent Design Concepts

Method: Software Refinement

Architecture: nested layers

Prototyping: Modelling Tools

Process: Design iterations

Intelligent Design Automation

Scaffolding: Assemblers, Compilers, Compiler-Compilers, Builders

Service Layers: Kernels, Libraries, Daemons

Weapons Against The Devil

Loggers, tracers and single-steppers to help locate bugs.

Editors to add features and remove bugs (line-based)

Some small amount of reviewing and testing (at the end of each iteration).

The Intelligent Design Story

Official story amongst software professionals,

probably because it boosts their ego:

they feel intelligent and in control.

Scales to largish programs...

... for well-organized teams of clever people.

Upsides from Intelligent Design

Intelligent Design can handle much more complex programs

Better understanding breeds better tools

Tools are both mechanical and social

Downer from Intelligent Design

The Programmer-God is somewhat less of an Über-God

Better understanding also breeds Humility

The same will go for all of my stories

Story Mixin: Polytheism

Multiple Programmer-Gods cooperate in creating Software.

Each has his own intents, actions, specialties.

Interpretations of Polytheism

Multiple Gods

Multiple roles of a same God

God changes his mind with time

Tools for Polytheism

Files, directories, hierarchical directories

Time-sharing systems, multiple users, simultaneous processes

Communication protocols between multiple machines

Components: software divided in modules, submodules, etc.

Comments, documentation convey intent from God to God

Conferences are given, journals are published.

Polytheism with Devils

Alternate groups of godly antagonists (crackers)

Personalities of a schizophrenic God (mental disorder)

Tools for Polytheism with Devils

Passwords, Access Rights, Backups, Redundancy Checks.

Errata, Pages intentionally left blank.

A Third Story

Sooner or later, the Intelligent Design Story falls short.

The end design of most software is just really bad.

Even ignoring bugs, the development process is quite wasteful.

The initial idea itself is often plain stupid.

And so...

to improve on Intelligent Design, we introduce our third story:

Unintelligent Design

The Programmer-God does iterated layered designs, but

His iterated layers include lots of wasteful dead-ends;

further designs often include regressions.

The whole creation lacks either elegance or efficiency.

Unintelligent Design Assumptions

Not only is the program implementation imperfect,

God doesn't have a perfect idea of it to begin with.

Neither the ultimate intent or means are clear to Him.

Godly intelligence is a scarce resource.

Errors might be a secondary antagonist effect, but

Nonsense is a first-order protagonist defect.

Unintelligent Design Concepts

Interactivity, to bounce ideas: command line, REPL, IDE

Filtering, to eliminate nonsense: systematic sanity checks

Usability, to avoid blunders: idiot-proof interfaces

Unintelligent Design Automation

Online manuals, Interactive help

Precise diagnostic from compilers

Shallow checking: syntax errors, runtime assertions

Simple semantic checking: Types, Contracts

Deeper semantic checking: Model checking

Unintelligent Design with Mixins

Polytheism: protect gods from each other's failures,

enforce checks and contracts in and between isolated processes.

Devil: testing becomes a systematic need;

Happily, the Devil is just as stupid as the Programmer-God,

to be buried under heavy and complex security features.

The Unintelligent Design Story

The untold story behind much of software engineering,

ever present but never to be made so crudely explicit.

Downer from Unintelligent Design

The Programmer-God loses his respectability.

From omniscient, he becomes stupid and ignorant:

partial intelligence, narrow and shallow mind, limited focus

Worse, he suffers from mental disabilities:

impatience, blindness, biases, false beliefs, neuroses, etc.

Upsides from Unintelligent Design

No shortage of imaginable prosthetic devices

to cope with Godly disabilities.

Story Mixin: Lamarckism

Whichever way Software is or isn't designed,

Software Lamarckism focuses on

Change in the code base between iterations of software

rather than successive states of the code base.

Tools from Lamarckism

File versioning, project revision control, configuration management

Diffs, Patches, Merges

Lamarcking the Devil Out

Review changes, not the whole code base everytime.

Incremental building and testing.

The Lamarckism Mixin

Now an accepted part of all non-trivial software development.

Doesn't include any proper explanation of how change happens.

A Change in Perspective that suggests new stories about

The Evolution of Software.


Darwin's famous theory applies to Software.

But before we tackle his Natural Selection,

let's focus on simpler views of programs evolve.

And so...

... our fourth Story:

Supernatural Selection

Changes are made that only demand limited understanding.

Some changes prove good, some prove bad.

The Almighty Programmer-God carefully selects the good changes.

His Supernatural Selection impresses a direction upon Evolution:

Progress, at a steady pace.

Supernatural Selection Assumptions

Programs may be deeper than God can fathom, but

God can intelligently judge good from bad,

promote the good and winnow the bad.

God designs the fitness function.

Supernatural Selection Concepts

Declarative programming: specify goals, not means

Algorithms: heuristic search

Prototyping: Rapid Development

Method: experiment to quickly filter ideas

Supernaturally Selecting the Devil Away

Formal specification of software intent

Formal verification of suspicious software

Polytheist Supernatural Selection

Many Gods Cooperate towards the selection

Software modules: separate interface from implementation

Forums for developer communities

Polytheist Supernatural Filtering

Some Devils play against positive selection

Software modules: monitor accesses, restrict capabilities

Moderate Forums

The Supernatural Selection Story

Supernatural Selection has traction in loose developer communities

Culminates with the First Cybernetics

First Cybernetics

Declarative programming

Ever improving explicit knowledge representations

Expert systems to solve complex problems

Supernatural Selection Upsides

Combines understanding of natural dynamics of software itself

with faith in the ultimate power of

an intelligent and purposeful programmer god.

Supernatural Selection Downsides

The Programmer-God is not that intelligent, remember?

Even distinguishing good and evil is beyond Him.

And so...

just like Unintelligent Design followed Intelligent Design,

we introduce our fifth story:

Teleological Evolution

God may not master how Evolution works,

he may lack omniscience or clairvoyance, but

He intuitively guides Evolution towards Progress.

The fittest programs survive, others die out.

Teleological Evolution Assumptions

God possesses something, some unspeakable Quality,

some ultimate meaning, some soul.

The direction of progress may not be obvious beforehand,

but progress is clearly recognizable after the fact.

God can compute the fitness function, not understand it.

Teleological Evolution Concepts

Randomized algorithms. Simulations.

Statistical analysis. Probabilistic proofs.

Programs fast enough in practice, whatever the theory says.

Weak structures compute despite lack of programmer understanding.

Second Wave of Cybernetics

Getting inspiration from existing life forms

Genetic algorithms, connectionist neural networks

Knowledge without an explicit representation

Probabilistically Approximately Correct learning.

Polytheist Teleological Evolution

Communities gather not just developers, but also users.

Distributed knowledge.

Wisdom of crowds.

Eventual Victory against the Devil

Regression test suites.

Cryptographic checksums, signatures, zero-knowledge proofs.

Distributed debugging by users.

Users will eventually favor the better software.

The Teleological Evolution Story

It's Yesterday's Next Big Thing.

Teleological Evolution Upsides

Allows for solutions where problems overcome understanding

Can create huge software distributions

Teleological Evolution Downsides

Reasonable endeavor, while recognized, is de-emphasized.

What remains when reason is gone is plain mysticism.

And so...

we can now discuss what Darwinism really is

in our sixth story:

Natural Selection

There is no God above and beyond the Machine,

no supernatural reason or intent.

Survival is its own tautological fitness function.

In each niche memes survive that best acquire resources.

Random haps and mishaps modify programs.

Systematic statistical biases tautologically favor some memes.

Natural Selection Assumptions

A tautology is something that is tautological.

What survives and reproduces, survives and reproduces.

What doesn't survive or doesn't reproduce, disappears.

All kinds of resources are limited and competed for.

And most importantly...

Reality Strikes

Programmers are in the same world as Machines.

Natural Selection works at the level of human behaviour.

Human productive time is the ultimate scarce resource.

Programmers and Machines are actors at the same level.

Sure you're unique and different...

Just like everyone else in this machine-eats-machine world.


Not just (un)speakable technical quality matters.

Acquisition of programming resources matters most:

time and focus of proficient programmers.

Economic and social considerations trump technology.

Legal and managerial aspects matter.

The market is ultimately driven by economic costs.

Natural Selection Concepts

Self-sustaining systems, evolving and competing.

All systems are born small, big systems grow from there.

Keep it working at all time.

Keep it simple: complexity costs.

Forking and merging traditions of humans and machines.

Hardware, software and wetware survive as ecosystems.

The Devil is Human, too

Intentful opposing forces are human:

trust networks, economic or legal accountability.

Race between noise and signal,

noise reduction by competition between moderated forums.

Third Wave of Cybernetics

Re-create artificial life by unguided evolution.

Emerging behavior from interacting software agents.

The Natural Selection Story

Sometimes mentioned, always hard to swallow.

Most actually go by degenerate stories as above.

Natural Selection Upsides

Down from their pedestal, haughty programmers

can wrestle with muddy reality.

Though no direct solution is offered,

fake solutions are dispelled:

illusions, vain obsessions, unearned authorities.

Life is the ultimate judge, accept no substitutes.

Natural Selection Downsides

If God exists, then ever since He created the world,

He has just been relaxing, and enjoying the show.

Evolution is not guided by God, it is God's Spectator Sport.

Are you feeling small and alone in a cold wild world yet?

And so...

our seventh story will bring you back some warmth:

Perspective Change: Inside Evolution

If some god is observing, it's not you.

You're no observer outside the fray.

You're an animal thrown in the jungle.

Inside Evolution Concepts

Focusing on available opportunities

What now will make you most productive?

You can sell but an exclusive resource -

Starting with your own time, talent, trustworthiness.

Inside Evolution Tools

Power of incentives: make cooperation mutually profitable

Division of labor, specialization of tasks.

Competing forms of software licenses, service agreements.

Inside Evolution Enemies

Frauds will waste your time, spam you, scam you, etc.

You must recognize friend from foe, signal from noise.

Either keep on top of the race, or delegate ruthlessly.

Software, Mortal vs Immortal

Centralization concentrates risks and makes them lethal.

Proprietary software is on a suspended death sentence.

At any time, any surviving Proprietary Software is superior.

But Free Software survives long after the Proprietary one died.

Should you avoid Proprietary Software?

Maybe not, but know the price.

The Inside Evolution Story

Adopted by Upstart Entrepreneurs - The Underdog.

Spokesperson: Paul Graham?

Inside Evolution Downsides

The game is rigged, but

if you don't play, you can't win.

You can't let nature decide,

you're part of the nature.

Inside Evolution Upsides

This isn't a soulless world -

You're the soul of the world.

The world isn't full of failures -

It's full of opportunities.

You're the entrepreneur of your own life.

Paradigms Evolve!

From Naive Creationism to Inside view of Natural Selection,

The paradigms evolve and our methods improve with them.

Simpler methods are cheaper.

If you can instantly create the software you need, do!

Paradigms: What Relevance?

"There is no such thing as philosophy-free science; there is only science whose philosophical baggage is taken on board without examination." -- Daniel C. Dennett

Discrepancy between Reality and Practice = Blind Spot

Reality differing from Theory = Blind Spot you can't identify

Theory differing from Practice = Blind Spot you can identify

What Next?

Present Optimism: No Future

Future Optimism: Singularity

Mutation Opportunity: Bootstrapping Intelligence

The Fast Lane: Internal Evolution

Present Optimism: No Future

"We already know the best paradigm"

Someday might be true, but today?

Progress currently happens at breakneck rate.

Future Optimism: The Singularity

"Progress follows a vertical asymptote"

"AI will soon transcend these issues"

But what paradigm will the AI follow?

The buck must stop somewhere.

AIs can't Escape Evolution

Survival applies to AIs too.

Scarce Resources, Competition, Cooperation, Incentives...

Praxeology applies to any system of intentful agents.

Comparative Advantage: Humans and AIs will trade, not make war.

So what?

The Future can't be predicted.

If I could tell you in detail,

it'd be past, not future.

But here are my best bets...

Mutation Bias: Bootstrapping Intelligence

Understanding human intelligence

Finite Quantum progresses

Bootstrap higher expertise

Evolving declarative metaprograms

Programming as dialogue, not command

Accelerating Change: Internal Evolution

External evolution: statically pick a meme, survive or die

Internal evolution: dynamically adopt memes that survive

Fast lane: gear your system to emphasize internal evolution

Avoid autism - evolve in a conversation with the world

Where my mouth is

TUNES: project for such a system (still vaporware)

Lisp plus: allows internal evolution, metaprogramming

Lisp minus: not declarative, internal evolutions are autistic

Goal: bootstrap declarative metaprograms

Means: invest in conversational internal evolution

Low-hanging fruits: use reflection to drive distributed systems

Where my money is

Since October 2008, I'm now hiring someone full time

to extend Lisp towards the low-hanging fruits of TUNES.

I'm working on XCVB to make Lisp evolution less autistic.

The End (for now)

Questions? Comments?

Docutils System Messages

System Message: ERROR/3 (/home/fare/html/computing/, line 25); backlink

Unknown target name: "lispnyc".