Future of the Economy Part 5 – Lateral Productivity Growth

Back in the sky, back at the keyboard. Last time in this series, I made two claims:

1) The only way to consistently improve human well-being is to foster productivity growth.

2) Productivity only grows when people invent better methods of production (i.e better technology).

The economy is just a machine that turns raw commodities (e.g. iron) into
consumable products (e.g. corn flakes). The output of any given machine is
limited by how fast the machine can operate; a miner can only dig so fast and a
CPU can only cycle so fast. Machines tend to be made faster over time, but
usually at pretty slow and steady rate.

Productivity Growth is Steady
(Source)

And consequently annual productivity growth over the last 100 years has been remarkable consistent at around 1-2%.
If we want productivity to grow faster than that, we can’t just speed up existing
processes. We have to implement completely new ones. Instead of getting faster
at harvesting bat guano, we need to invent synthetic fertilizer.

So…how do we do that? That’s the key question in this whole series.

Well, the way that humans do it through a specific type of intelligence commonly
called “lateral reasoning” (or sometimes just “creativity”.) Everyone has an
intuitive idea of what creative intelligence is: in a classic test, a child is
given a paperclip and asked to write down as many ways of using the paperclip as
she can. And from there it’s a pretty short leap to “how can I build a CO2
filter out of duct tape and a flight manual?”

Unlike its close cousin linear reasoning (i.e. 1+1=?), lateral reasoning is
rather poorly understood. So much so that it’s often treated with a sort of
mystic reverence
(cf. “a flash of inspiration”). And
it’s the last unironic refuge of the word “genius” in popular discourse (cf. “the creative
genius Steve Jobs”). And while computers have come to dominate humans at classical
intelligence tests like
Chess
and
trivia
the most advanced computer in the world can’t figure out how to fix a toaster [2].

But lateral reasoning is not magic. It actually works pretty much the same way as linear reasoning.

Consider a Chess game:

  1. Start in some situation, e.g. in check, down a knight.
  2. Using your knowledge of the rules, consider all legal moves (or use heuristics to only consider a subset).
  3. Imagine the sequence of potential consequences of each action and calculate the most promising path.

Now consider a lateral problem:

  1. Start in some situation, e.g. on a desert island with a can of beans and a rock.
  2. Using your knowledge of how the world works, figure out potential “moves” you can make, e.g. “smash the can with a rock”.
  3. Consider the consequences of your options and choose the best action.

The only difference is that linear problems tend to involve relatively
simple, clearly specified situations, a small numbers of simple rules, and a potentially enormous sequence of steps to solve. Whereas lateral
problems can often be solved in just a few steps but involve complex, nebulous situations
and an enormous number of complicated, underspecified rules.

Computers, at present, are fantastically adapted for the former type of problem
and terribly adapted for the later. But that’s going to change fast (even if I
have to change it myself.) Over the coming decades, we’re going to see an
explosion of computers designed to extend human lateral intelligence. And that’s
going to produce productivity gains unlike anything we’ve seen before.

Next time, I’ll tell you how it’s all going to happen.

[1] Even semi-exceptions like Moore’s law tend to be steady even if they aren’t slow.

[2] Unless Google can find an exact recipe some human wrote down.

A* Interview #9: C# and ECMA Committee Alum, Eric Lippert

Items mentioned in the interview:

Eric’s blog: Fabulous Adventures in Coding

Eric’s current company Coverity

The Inform7 programming language

The book “Writing Solid Code”

The Joel Spolsky “12 Steps to Better Code” checklist

/* change only these */
var youtubeID = “WYWLU6wyfvM”;
var postID = “Eric Lippert”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #8: Targo Tennisberg, my first Estonian guest

/* change only these */
var youtubeID = “hHcvh-9AEzM”;
var postID = “Targo Tennisberg”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #7: Tim Ambrogi, creator of the “Jamestown” indie game

This one ran a little long, but we get into the serious programming talk at around 19:00.

Learn more about the A* interview series here.

Links from the conversation

Gertrude’s Secrets, the game that originally hooked Tim on programming.

Tim’s excellent game Jamestown.

Tim’s favorite bands Storyville and Protomen.

Tim recommends that you try out Codecademy if you want to learn to code.

And you should try Tim’s audio library.

Follow Tim on Twitter.

For more A* interviews, subscribe to my newsletter!

/* change only these */
var youtubeID = “A-j_RUtI-o4”;
var postID = “Tim Ambrogi”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #6: Adam Milazzo

Read the story of the A* interviews here.

Instead of promoting any projects, Adam sagely requests that you reconnect with an old friend after watching this interview.

/* change only these */
var youtubeID = “JF3AIV_J3Jw”;
var postID = “Adam Milazzo”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #5: Jim Crawford, creator of Frog Fractions and Twinbeard Studios

Click here to learn about the A* interviews.

Here’s Twinbeard Studios, and their great games Desert Hike, Futilitris and of course Frog Fractions.

Here’s some info about Jim’s favorite band “Ween”.

And here’s the Hacker’s Dictionary.

You can follow Jim on Twitter and you should do as he says and support the Windforge Kickstarter project.

/* change only these */
var youtubeID = “0cdBxb64jLg”;
var postID = “Jim Crawford”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #4: Gershom Bazerman, organizer of the Haskell-NYC Meetup and maintainer of the JMacro Haskell Package.

/* change only these */
var youtubeID = “gELK8UESArg”;
var postID = “Gershom Bazerman”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});