--- title: Software As Biology transition: fade buildout: true --- {% macro quote(img=None) -%} {% if img %}
{{ caller() }}
{% else %}
{{ caller() }}
{% endif %} {%- endmacro %} {% from "deckjs.html" import section with context %} {% call section('-------------------------------------------------') %} ## Software As Biology ### Codemotion - April 12, 2014 ### Garrett Smith @gar1t {% endcall %} {% call section('--------------------------------------------------') %} # When I was younger... {% endcall %} {% call section('--------------------------------------------------') %} ## The Model Of Software {% endcall %} {% call section('--------------------------------------------------') %} ## Inspired By The First Programs {% endcall %} {% call section('--------------------------------------------------') %} ## Similar Models Persist Today {% endcall %} {% call section('--------------------------------------------------') %} ## Similar Models Persist Today {% endcall %} {% call section('--------------------------------------------------') %} ## Even If They've Improved {% endcall %} {% call section('--------------------------------------------------') %} ## Overturning The Model {% endcall %} {% call section('--------------------------------------------------') %} # Software As Biology {% endcall %} {% call section('-----------------------------------------------------') %} ## What Is "Software As Biology" - Understand how nature "solves" problems - Focus on the mechanics of solutions - Use knowledge of biology to inform, inspire, or confirm ideas for software construction {% endcall %} {% call section('--------------------------------------------------') %} # But First {% endcall %} {% call section('--------------------------------------------------') %} ## The Problem With Design {% endcall %} {% call section('--------------------------------------------------') %} ## The Human Brain {% endcall %} {% call section('--------------------------------------------------') %} ## Fantasy vs Reality {% endcall %} {% call section('--------------------------------------------------') %} ## Fantasy vs Reality {% endcall %} {% call section('--------------------------------------------------') %} # How Do We Create? {% endcall %} {% call section('--------------------------------------------------') %} ## Genius, Visionary, Creator {% endcall %} {% call section('---------------------------------------------------') %} ## Genius: 1% Inspiration, 99% Perspiration {% endcall %} {% call section('---------------------------------------------------') %} ## Paul Valéry {% call quote('valery-small.jpg') %} It takes two to invent anything. {% endcall %} {% endcall %} {% call section('---------------------------------------------------') %} ## Paul Valéry {% call quote('valery-small.jpg') %} The one makes up combinations. {% endcall %} {% endcall %} {% call section('---------------------------------------------------') %} ## Paul Valéry {% call quote('valery-small.jpg') %} The other chooses, recognizes what he wishes and what is important to him. {% endcall %} {% endcall %} {% call section('---------------------------------------------------') %} ## Paul Valéry {% call quote('valery-small.jpg') %} Genius is the readiness of the second one to grasp the value of what has been laid before him and to choose it. {% endcall %} {% endcall %} {% call section('---------------------------------------------------') %} ## Genius: Natural Selection? {% endcall %} {% call section('---------------------------------------------------') %} ## Genius: Photosynthesis? {% endcall %} {% call section('----------------------------------------------------') %} ## Two Stages of Photosynthesis {% endcall %} {% call section('----------------------------------------------------') %} ## Light Stage (Z Scheme) {% endcall %} {% call section('----------------------------------------------------') %} ## Dark Stage (Calvin Cycle) {% endcall %} {% call section('---------------------------------------------------') %} ## Earth Before Photosynthesis {% endcall %} {% call section('----------------------------------------------------') %} ## Earth After Photosynthesis {% endcall %} {% call section('----------------------------------------------------') %} ## Cyanobacteria Vision Statement {% call quote('cyanobacteria.jpg') %} To maintain atmospheric oxygen levels and supply all of the organic compounds and most of the energy necessary for all life on Earth {% endcall %} {% endcall %} {% call section('----------------------------------------------------') %} ## Genius Everywhere {% endcall %} {% call section('----------------------------------------------------') %} ## Genius Everywhere {% endcall %} {% call section('----------------------------------------------------') %} ## Genius Everywhere {% endcall %} {% call section('----------------------------------------------------') %} ## Genius Everywhere {% endcall %} {% call section('----------------------------------------------------') %} ## Genius Everywhere {% endcall %} {% call section('----------------------------------------------------') %} ## Genius Everywhere {% endcall %} {% call section('----------------------------------------------------') %} ## Genius Everywhere
Zoom out 26 more times (8.7 million species)
{% endcall %} {% call section('----------------------------------------------------') %} ## Intelligent Design? {% endcall %} {########################## Commenting out quotes ####################### {% call section('----------------------------------------------------') %} ## Kent Beck - Extreme Programming {% call quote('beck.jpg') %} Do the simplest thing that could possibly work. {% endcall %} {% endcall %} {% call section('----------------------------------------------------') %} ## David Allen - Getting Things Done {% call quote('allen.jpg') %} You don't actually do a project; you can only do action steps related to it. {% endcall %} {% endcall %} {% call section('----------------------------------------------------') %} ## Pieter Hintjens - ZeroMQ {% call quote('hintjens.jpg') %} Never design anything that's not a precise minimal answer to a problem we can identify and have to solve. {% endcall %} {% endcall %} #} {% call section('-----------------------------------------------------') %} # Example: Speciation {% endcall %} {% call section('-----------------------------------------------------') %} ## Evolution vs Revolution (Punctuated Equillibrium) {% endcall %} {% call section('-----------------------------------------------------') %} ## Allopatric Speciation {% endcall %} {% call section('-----------------------------------------------------') %} # Personal Rant: Google Maps {% endcall %} {% call section('------------------------------------------------------') %} ## Software Release Strategy {% endcall %} {% call section('------------------------------------------------------') %} ## Software Release Strategy {% endcall %} {% call section('------------------------------------------------------') %} ## Software Release Strategy {% endcall %} {% call section('------------------------------------------------------') %} ## Software Release Strategy {% endcall %} {% call section('------------------------------------------------------') %} ## Software Release Strategy {% endcall %} {% call section('------------------------------------------------------') %} ## Software Release Strategy {% endcall %} {% call section('------------------------------------------------------') %} ## R.A. Fisher On Large Change {% endcall %} {% call section('------------------------------------------------------') %} ## R.A. Fisher On Large Change {% call quote('fisher.jpg') %} Any large change will have a very small probability of improving the adjustment. {% endcall %} {% endcall %} {% call section('------------------------------------------------------') %} ## R.A. Fisher On Large Change {% call quote('fisher.jpg') %} In the case of the smallest change, the chance of improvement should be almost exactly one half. {% endcall %} {% endcall %} {% call section('--------------------------------------------------') %} ## Lessons from Speciation - Revolution is evolution plus time - Copy freely (split populations) - Merge (interbreed) or keep separate (speciation) - Large changes are usually bad {% endcall %} {% call section('--------------------------------------------------') %} # Example: Sex {% endcall %} {% call section('--------------------------------------------------') %} ## Nearly All Complex Life Bangs {% endcall %} {% call section('--------------------------------------------------') %} ## Cloning vs Sex {% endcall %} {% call section('--------------------------------------------------') %} ## Cost of Sex {% endcall %} {% call section('--------------------------------------------------') %} ## Cost of Sex {% endcall %} {% call section('--------------------------------------------------') %} ## Meiosis / Gene Shuffling {% endcall %} {% call section('--------------------------------------------------') %} ## Sex Combines Mutations {% endcall %} {% call section('--------------------------------------------------') %} ## Sex: Invest In Diversity and Change {% endcall %} {% call section('--------------------------------------------------') %} ## Lessons from Sex - Homogeneity wins in the short term but eventually goes extinct - Investing in diversity pays in the long run - Select beneficial, abandon harmful {% endcall %} {% call section('--------------------------------------------------') %} # Example: Death {% endcall %} {% call section('--------------------------------------------------') %} ## Apoptosis {% endcall %} {% call section('--------------------------------------------------') %} ## Programmed Cell Death: Erlang :::erlang {ok, Value} = do_something(). %% "crash" if not successful {% endcall %} {% call section('--------------------------------------------------') %} ## PCD: System Orientation {% endcall %} {% call section('--------------------------------------------------') %} ## PCD: System Orientation {% endcall %} {% call section('--------------------------------------------------') %} ## Lessons from Death - Death is *useful* - build for it - Process crash - Service retirement - Project cancelation - Death requires life - Process restart - New replacement services - Many small projects {% endcall %} {% call section('--------------------------------------------------') %} # Example: Coelacanth {% endcall %} {% call section('--------------------------------------------------') %} ## Outdated, Legacy, So 1990s {% endcall %} {% call section('--------------------------------------------------') %} ## Lessons From Coelacanth - Moral judgements don't apply - Suitability is sufficient - Change only when there's pressure to change {% endcall %} {% call section('--------------------------------------------------') %} # Example: Extinction {% endcall %} {% call section('--------------------------------------------------') %} ## No Plan Survives Contact With A Comet {% endcall %} {% call section('--------------------------------------------------') %} ## Except When It Does {% endcall %} {% call section('--------------------------------------------------') %} ## Lessons From Extinction - It happens - Enables new species - Don't bet it all on the dinosaur {% endcall %} {% call section('--------------------------------------------------') %} # Example: Our Eyes {% endcall %} {% call section('--------------------------------------------------') %} ## Underwater Evolution {% endcall %} {% call section('--------------------------------------------------') %} ## Air Is A Different Medium {% endcall %} {% call section('--------------------------------------------------') %} ## Lessons From Eye Evolution - We don't need to start over - We don't need *optimal* - We need *suitable* {% endcall %} {% call section('--------------------------------------------------') %} ## More! - **Mitochrondria:** symbiosis can result in significant "leaps" in complexity - **Junk DNA:** amoeba genome is 220x larger than ours, mostly junk - does nature refactor? - **Adaptive immune system:** learning to detect pathogens - does this apply to software testing and monitoring? {% endcall %} {% call section('--------------------------------------------------') %} # What's The Point Again? {% endcall %} {% call section('--------------------------------------------------') %} ## One Model {% endcall %} {% call section('--------------------------------------------------') %} ## Another Model {% endcall %} {% call section('--------------------------------------------------') %} ## Some Good Books

The Selfish Gene
Richard Dawkins

Life Ascending
Nick Lane

Dragons Of Eden
Carl Sagan

The Tell Tale Brain
V.S. Ramachandran

Parasite Rex
Carl Zimmer

Emergence
Steven Johnson

The Blind Watch Maker
Richard Dawkins

The Machinery Of Life
David Goodsell

{% endcall %} {% call section('--------------------------------------------------') %} ## Are There Any Questions? {% endcall %}