A* Interview #18(ish): Strongly-Typed Emacs Acolyte, Bodil Stokke

Follow Bodil on Twitter.

Check out some of her conference talks.

Use an Emacs starter kit to smooth the learning curve.

For an introduction to type theory, click here.

Or if you want to crack a turtle with types, read Types and Programming Languages.

Learn about the A* Series and see more interviews here.

/* change only these */
var youtubeID = “Zm3xjks7”;
var postID = “Bodil Stokke”;
/* 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 #16: StackOverflow’s all-time Python champ, Alex Martelli

Read some of Alex’s favorite monosyllabic books, Cod and Salt.

Listen to the Art of the Fugue on LinerNotes.

Check out Alex’s personal website.

And at his suggestion, sign up for Fitocracy and get yourself in shape!

Learn about the A* Series and see more interviews here.

/* change only these */
var youtubeID = “R6XSEfNqgZ4”;
var postID = “Alex Martelli”;
/* 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 #13: Daniel Peebles, iPhone Jailbreaker and Agda Wizard

Follow Daniel on Twitter or on Github.

Follow Daniel’s example and get started with Agda (because dedicated domains are for the insufficiently dedicated).

And if you want to step up your game, follow Dan’s advice and read some code from Edward Kmett’s Github.

Learn about the A* Series and see more more interviews here.

/* change only these */
var youtubeID = “OvdLGXw9e4k”;
var postID = “Daniel Peebles”;
/* 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 #11: Jon Skeet, All-Time Highest Reputation StackOverflow User

My top two lessons from Jon:

1) Most mistakes come from users not understanding their data

2) Great communication comes from a whole lot of practice, and it really pays off in your career

Some links:

Watch Jon’s screen casts

Read Jon’s blog

Read some reasons why Jon Skeet is the Chuck Norris of coding

Follow Jon on Twitter

And finally, go buy “C# in Depth”!

Read the story of the A# Interviews here. For future interviews, subscribe to my newsletter or follow me on Twitter.

/* change only these */
var youtubeID = “7P2Uzb74qKw”;
var postID = “Jon Skeet”;
/* 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 #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 #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
});