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
});

Introducing “The A* Interviews”

Don’t care about the background? Skip to the bottom for the interviews.

Technology is a people business.

You learn that real quick.

Two years ago I left my job as a hedge fund analyst and decided to
join the tech world. Hopped up on three months of reading
TechCrunch, a recent viewing of The Social Network, and a few
breathless stories from colleagues who’d made the leap before me, I
thought that I could just show up and start building.

Hah.

I did teach myself to program, and it’s pretty darn cool to be able to turn an idea into a rough product. But the myth of the lone-ranger technologist is very much a myth. [1]

To get anything non-trivial done in technology, you need other people.

Obviously at some point you’ll need more hands to code. But even that’s not enough. There are a
few people who are just
born great programmers or
great entrepreneurs. I’m
not one of them, and you probably aren’t either. People like you and me need a whole network of friends,
advisors, and mentors to teach us and role-model for us. The world is a complicated place and none of us can even really know how much we don’t know. So we need people in our lives who can help us become our best
self. There are really only two ways to become good enough to survive in this game:

  1. Make painful, expensive mistakes and hope you draw the right lessons from them.
  2. Find people who are already great and learn their secrets.

The second sounds a lot easier, doesn’t it? Just one problem…

The People Who Can Help You Don’t Want To Meet You.

If you’ve already got a cadre of brilliant, dedicated tech world friends from your MIT frat house, then
you’re all set. If you don’t, you’re in trouble. When I left finance I
had no tech world network to speak of. I certainly have brilliant,
loyal friends (hi guys!) but few of them worked in tech and even fewer
had built great technology with their own hands. It immediately became
clear that I needed to “build my network”. But as anyone who has ever
proactively tried “to network” quickly realizes…networking is
pointless
. Unless you’re, like, a boat salesman or something. For
everyone else, trying to network is pointless because of one simple
rule: smart people are super busy. Even if they’re nice enough to
want you to succeed, they’ve got their own goals and they’d rather spend their limited time with people you can help them. Odds are, you can’t do that.

So what are the light-of-rolodex to do?

First, make friends. When you meet someone, don’t think “what can this person do for me?”
Instead, think “do I actually like and respect this person? Is this someone I could build a meaningful friendship
with?” If you can be friends, do. Make the effort and be patient. Some day, your real friends will find
creative ways to help you. Meanwhile your networking “contacts” won’t return
your calls.[2]

Second, find creative ways to help interesting people. Remember, every hour
they spend talking to you is an hour they can’t spend teaching robots
to nuke the moon. So you’ve
got to offer them something to make it worth their time. Not
money
. Interesting people usually have money (and you probably
don’t.) So you’ve got to get a bit clever or crazy or both.

So here’s MY crazy plan.

I want to get better at building stuff. To do that, I need to meet some great technologists, figure out what makes them tick, and then drink their magical think-juice.

Think juice

But really, who cares what I want? The important question is what can I offer? Well, good karma with great leverage of course.

Instead of asking awesome people out for coffee and a brain pickin’,
my plan is to give great technologists a platform to help a lot of
people. How? I’m going to interview them on camera and let them share their wisdom with
the world.
A coffee chat helps one person. A great interview can help thousands. After all, really, really good technologists are very
rare. Many programmers can work for years without every coming into contact with a truly great engineer. I’m hoping this podcast will be the next best
thing. And I’m hoping my quarries will be magnanimous enough share their think-juice at scale.

Either way, let’s find out.

Wait, but why “A*”?

Oh yeah! “A*” is
the name of a highly efficient
graph search algorithm. I’m
generally obssessed with graphs, and my theory is that all
technologists are located somewhere in a connected social graph. So if I traverse that
graph long enough I’m bound to end up identifying and talking to the
actual very best technologists in the world. A* search requires a
“heuristic” that estimates which potential paths are most promising,
and so my heuristic is to ask each interviewee for the names of the two
most competent programmers she knows. I’ll track those people down and repeat the cycle for as long as I can.

I don’t know if this will work (at all), but in the words of Astronaut
Matt Kowalski from the totally freaking rad must-see movie
Gravity, “I’ve got
a bad feeling about this mission.”

Without Further Ado…

#1: Roberto Thais, lead dev at YC-backed HireArt

#2: Carter Schonwald, Haskell guru and consultant at Wellposed

#3: Alexander Young, Math Professor at University of Washington

#4: Gershom Bazerman, organizer of the NYC Haskell meetup group

#5: “Frog Fractions” creator JIm Crawford

#6: C# Hacker Adam Milazzo

#7: “Jamestown” creator Tim Ambrogi

#8 Targo Tennisberg

#9 Former C# Committee Member Eric Lippert

#10 Founder of YC-backed startup RentMetrics and co-creator of HealthSherpa.com, Ning Liang

#11 Chuck Norris of Programming and All-Time StackOverflow champ, Jon Skeet

#12 Creator of noSQL database RavenDB, Ayende Rahein

#13 iPhone Jailbreaker, Agda Wizard, and notorious internet pumpkin – Daniel Peebles

#14 Peripatetic Hacker, Rob Ashton

#15 Creator of Flynn, Co-Founder of Hacker Dojo, Executive Producer of “Indie Game: The Movie”: Jeff Lindsay

#16: StackOverflow’s all-time Python champ, Alex Martelli

#17 Popularizer of the use of Singular Value Decomposition in Recommendation Systems and near-winner of the Netflix Challenge, Simon Funk (Recording Was Inaudible So Link Is To A Kitten) 🙁

#18 Strongly-Typed Emacs Acolyte, Bodil Stokke

#19 Creator of the Twisted Web Framework, Glyph Lefkowitz

Want to know about future interviews? Subscribe to my newsletter for interviews and general tech awesomeness or follow me on Twitter for interviews and Bhutan jokes.

And since I was asked on Twitter, here is a list of the books behind me during the interviews.

[1] Ironically, despite finance’s louche reputation, the myth of the lone-ranger
hedge fund trader is actually true.

[2] Because seriously, who calls people anymore? Use email.

A* Interview #3: Alexander Young

Play Alexander’s game KOMB.

Participate in the Indie Gam Jam.

Follow the zeppelining-about-town of Alexander’s gaming collective The Cloudboat Armada.

Play Frog Fractions.

/* change only these */
var youtubeID = “CQShYy6NRhA”;
var postID = “Alexander Young”;
/* 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
});