Future of Coding - Samantha John Of Hopscotch On Learnable Programming
Episode Date: August 11, 2017In this episode, I chat with Samantha John (@saj0hn), cofounder and CEO of Hopscoth (@hopscotch), the award-winning iPad and iPhone app that allows kids to learn to code and share their projects with ...the Hopscotch community. Learn more at futureofcoding.org.Support us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.
Transcript
Discussion (0)
Hi everyone. Before I play you this week's episode, I want to give you a quick heads up about the audio quality of this episode.
Samantha John and I were outside in her backyard in Brooklyn while we were recording this episode,
so you will hear some wind, some birds chirping, and there's even a bit of construction going on in the background.
So I think you can mostly make out what we're saying, but I apologize for the poor quality and I will try and do better in the future.
And now I bring you Samantha John.
Welcome to the Future of Coding. This is Steve Krause. I'm really excited because today I have
my friend Samantha John on the podcast. She's a true programming language expert. Sam is the
co-founder and current CEO, former CTO of
Hopscotch, the award-winning app for the iPhone and iPad that allows people to create software
on their phones and iPads and also play these games and animations on their phones and iPads.
Hopscotch has over 10 million downloads and is used in 44% of schools with iPads.
Sam also was formerly at Pivotal Labs and she studied pre-med, math and English at Columbia
University. Welcome Sam, Samantha. Thank you Steve. So, first thing I want to say is, as
you know, I teach children how to code and we teach Scratch to kids and a lot of kids
love Scratch but there's also a lot of negativity around Scratch sometimes but I in my experience
I've only heard positive things about Hopscotch and in particular kids are obsessed with Hopscotch
like there's a real like obsession and love for it that I don't see with Scratch sometimes and so
I'd love to get your sense about why.
Why do you think kids like it so much?
That's really nice to hear, first of all.
Making a product, sometimes you tend to focus a lot on what can be improved about it.
And you focus a lot on people's complaints about it.
So it feels really nice to hear that people love hopscotch,
which we also, we hear that too, and it's very gratifying
and really nice to hear that this product that you've worked so hard on
is something that kids really enjoy.
The things about hopscotch that people love,
I think when we first set out to create Hopscotch,
we really wanted to focus on making a great experience on mobile and really taking advantage of what is really nice about the iPad and what feels really good about the iPad. So the
touch interface on iPad is a very natural way to interact with it and when
you do drag-and-drop on the desktop it can feel a little bit more tedious
dragging something with a mouse really far on a screen sometimes you just wish that you could
type in keyboard shortcuts um versus on an ipad it's actually the opposite you never want the
keyboard to come up because it always feels like it's interfering and dragging around feels like
the more natural and native interaction.
So I think there must be some of that in that hopscotch is very natural to its platform.
And then, you know, we did try really hard to make it nice and delightful.
So I hope that that's just a sign that it's a good product and that and i think that
you know speaking i can't really say why hopscotch in particular
is uh is loved by people versus just coding in particular is loved by kids um because i think
that there is something very powerful for kids who generally
don't have a lot of agency in their life to be able to start learning coding and to start
controlling these machines that they're using every day and realize that they can kind of pop
the lid on this mysterious piece of technology that permeates their life in so
many ways.
Yeah, yeah, totally.
I definitely see that, and especially with Hopscotch, I see that, as I've told you before,
whenever I'm out and about in the world and I tell people what I do, I teach kids how
to code or that I code myself, occasionally I'll get, what is coding?
Or, I've always wanted to try that.
And I just love the fact that I can pull out my iPhone
and open up Popscotch.
And I put the phone in their hands
and just tell them to click around.
And then they're coding.
It's magical.
And I definitely see the agency.
People light up and like, that's it?
That's what coding is?
Yeah.
It's really fun to do user tests.
Because kids just get so excited when they realize that they can make the type of stuff that they've been playing on their devices.
It's super empowering.
So one thing that I hear a lot from kids when they use Scratch is that it's not real coding. You know, like this experience is really fun and easy, but, you know, this isn't real coding.
It's babyish.
It's limited.
It's child's play.
Do you hear that?
And what do you say to kids who say that?
So I definitely hear from kids and from parents and teachers, like, what's next after hopscotch or you know but I think that a lot of
what it has to do with is that they really are reaching the limits of the platform and the
language and in some ways I think it could be considered babyish to some people because of the
look and feel but on a deeper level there are certain things that you as a programmer want and certain tools
that programmers expect to have that aren't really built into something like scratch and hopscotch
and like what for example um an easy example is version control yeah i know that i would be really
lost if i didn't have version control i Even if I'm doing a really simple prototype,
I think about an hour in is the limit where I need to start a Git repository
and start saving versions because I just don't feel safe making changes
knowing I could break things.
So that is actually something that's really important for kids,
maybe even more important for kids than for professional programmers,
in that everything is so new to them.
And I think a lot of them don't feel super confident in their computer skills.
So to feel like you're always on the verge of messing up in this kind of irrevocable way
where you could break your code forever makes you much more risk averse and it makes it harder to
try new things and to um go out on a limb so i think think that's a really simple one that can be frustrating.
And then there's another issue.
Should I just list all the issues?
Yeah, go for it.
I can go on for a really long time about what's kind of inadequate about programming for kids.
I mean, another really big one is just the ability to make good abstractions.
And as, as professional programmers, that's basically all we think about all the time is
what kind of abstractions does this language let me make? Does it have multiple inheritance? Does
it have classical inheritance, prototype inheritance? Um, is it functional is it um can you do what are they called uh can you do
like mix-ins can you do composition and um like what's the right way to abstract these things
like what's the right way to split up my code and you really don't have any ability to do that
you can make functions in hopscotch and scratch and
you know they're a trade in scratch the functions are pretty buried and i find them not super
intuitive to use uh though they do let you have parameters so that's kind of powerful
in hopscotch you actually can't put parameters into your functions but they're much easier to use and they're much more um they're kind of like
a first class thing where the first thing you see when you start coding in hopscotch is
is some of the functions so i think you guys do a really good job of that in scratch there are
some blocks that are really complicated and you don't see how they work but in hopscotch when you
drag in a complicated block like follow my finger you can pop it open
and see the code inside so it like shows how it was made i love that yeah um and i wish that we
did more of that actually i think actually when i've thought about the blocks that we offer in
hopscotch i think we probably should use many fewer blocks than we actually do built in. I could see that too. So for example there's a turn block that animates turning however many degrees you put but
really what it should be is just setting the property of heading on the angle on
the character and in some sort of looped thing where you know you set a
little bit at a time.
I couldn't agree more.
So, and then same with move.
It's like actually you're just setting the position a bunch of times in a row.
So I think that a lot of times when people think about how to make a programming language more powerful, especially in the context of kids, they immediately go to, okay, well, you have to have Bluetooth enabled so you can connect to hardware,
or you need to connect to the camera, or you need physics blocks or more gravity.
But actually, what you need is more ability to do lower-level things and composite them.
So you can make those things yourself, yeah.
So you can make those things yourself
and that's where the real power of the language comes in yeah totally i i couldn't agree more i um
i always say that um i know like a programming language platform is like has the wrong level of
traction if there's like a gravity button you can check you know like like in like i think scratch
proves this because you you can create gravity in like like in like I think scratch proves this
because you can create gravity in like four lines of code in scratch it's like
this it's such a great level of abstraction and I think in hopscotch too
it's like pretty straightforward to create like you know gravity with
acceleration so that like if you have a language where they do that for you like
something must be wrong like it, it's so straightforward. Yeah, it's interesting.
Physics is interesting.
Collisions are hard.
I haven't figured that out.
Collisions are hard for hopscotch.
That's actually a big... I think this is another problem that hopscotch has.
I don't know how much Scratch has it, though.
What I imagine they do is...
It's probably not as bad because we're on these devices.
Sometimes there are performance problems and I think we actually should spend more time on it than we do because I think there's kind of
it's a two-fold problem one is that we try and make it easy for you to clone your object and
instantiate new ones and what that means is then you can do a lot of collisions you could actually
have collisions between every object on one thing we have we added recently is you can say self so
you can say you can take an object make a thousand clones and say for each of those clones when self
collides with anything you know
something happens and and that's actually has very poor performance
because you're doing a lot of collision checks yeah you have a thousand self's
who have to check everything with anything and it's just not gonna work
well and then if you're on an older device it's just not going to work well and then if you're on an older
device it's really not going to work well um and you can actually basically crash your ipad
there are definitely ways to crash your ipad with hopscotch um it's a good fun challenge it's a fun
challenge i it's i always i actually find that i'm this type of kid i think there's two types of kids
there's there's the kids who
they're given a blank text box where they can type in a number
and they type in
four
and they think about it for a long time
they're very cautious about it
and then there are other kids and they get a blank text box
and they start just typing nines
they type 999999
because they want to see what will happen or see if they can break the system
I am the type of kid who will type in the nines Yeah, yeah, yeah. They type 999999 because they want to see what will happen or see if they can break the system.
I am the type of kid who will type in the nines.
Yeah.
It's something I've realized about myself, so I have to be supportive of hopscotchers
who want to do that as well.
Totally, that's great.
I see the distinction as like kids always type the nines and adults type the four.
Oh, no, no.
There are a lot of kids who...
I see those kids as like adults in a kid's body, and you're a kid in an adult's body.
Yeah, maybe.
Cool. So I guess on the topic of...
Oh yeah, so then on the topic of collisions, we try and give you this power,
but I think one thing we do a poor job of is actually making you aware
that you are a little bit in control of your hopscotch game's performance.
And that's something where we think kids aren't ready for that.
Yeah, that's hard.
You know, like, you don't have to worry about performance yet.
But actually, you do.
Like, this isn't even really what I would call a full-fledged enough programming language
for what you really need to be learning,
and you're already running into performance stuff.
So that's actually maybe just a first-class concern
that people need to have when they start programming.
Because the thing is, they do think about it.
We don't tell them about it, but then they're mad
when their game has bad performance or when it's slow,
and they blame us.
So blame yourself, kids.
That's tricky.
I have this programming language woof uh so i
also like have to figure out collisions and stuff and um yeah it's really tough especially pixel
perfect collisions do you guys do that or is it more bounding we do pixel perfect collisions
and then actually our hack is that if i think if there are more than 10 first we do the bounding
box collision and if there's a bounding, first we do the bounding box collision,
and if there's a bounding box collision, then we'll do the pixel collision.
And I think if there are more than 10 bounding box collisions,
you just won't do the pixel collisions.
Oh, okay.
You just give up.
Yeah, yeah. That makes sense. But even that, it still takes a while, yeah.
Because there's just so many pixels sometimes.
There's a lot of pixels, especially on a, you know.
High-resolution iPad.
High-resolution iPhone 3X. so many pixels sometimes. There's a lot of pixels, especially on a, you know, high resolution iPad. High resolution iPhone,
iPhone 3X,
a lot of pixels in that,
in that guy.
Yeah.
Um,
luckily it has a pretty good processor,
but,
that can definitely cause problems.
X.
Yeah.
Um,
like I,
in Warfuck,
we've like thought about like different sampling techniques,
like pixels,
so you can like.
You know what,
it's actually not that, I don't know if this is relevant to the podcast or not but it's not that slow to do the
pixel comparisons the slow thing is to get the pixels oh interesting yeah that's what i found
at least huh for yeah for me in in javascript when i'm doing this in the browser getting the
pixel is no big deal.
You just look at the profiler, it's like all of my time is spent iterating through, just running through that array.
You know what we do also is that we take the image and then downsample it.
Yeah, that's basically what I need to do probably.
And the downsampling probably is what is expensive.
Downsampling is expensive.
There you go, yeah.
Interesting. All right, well, good is what is expensive. Downsampling is expensive. There you go. Yeah. Interesting.
All right.
Well, good advice.
Thank you.
You're welcome.
I'll have to apply that to my own hand quick.
Okay.
Got it.
So, yeah, there are plenty of things that you think hopscotch needs to be like a real language.
Yeah.
On scratch.
I think there are.
And I think that a lot of times when we think about programming for kids,
because the simple stuff is still hard to get started with,
we worry so much about how can we teach kids to get the turtle to the jewel
and how can we get kids just to make a simple sequence
and make that really easy. And we've done a simple sequence and make that really easy?
And we've done an okay job of making that really easy.
I would argue that a lot of kids still have trouble with it.
But I think even more importantly, a lot of kids see that as somewhat trivial.
And I think that's rightly so.
Because they've seen other computer programs.
And they know that on computer programs, and they know that on computer programs people have solved drag-and-drop.
So when you have to write a script to get your turtle to the jewel,
they're a little bit thinking, what's the point of this?
In a way that I think really harms people with math,
where in elementary school they're learning all this arithmetic and kind of
these formulas for fact fractions and and and kids look at that and they say
what's the point and we don't have a good answer for them so I think another
kind of problem with teaching computer science to kids is that we often teach
them things that are quite
trivial and don't really have a point and they see that.
A lot of people when I talk about making programming easier and more intuitive, they think, oh
yeah, that makes sense, Scratch is easy and intuitive, and we should make more intuitive
languages for kids, but for adults it will always be as hard as it is.
We can't make it better for adults.
Programming is programming.
Do you believe that programming for adults could be made easier?
Do you think, you know, like you can only do it for kids?
Yeah, what are your thoughts there?
I definitely think programming for adults could be made easier. I think going at it from the angle of making programming for kids that is real programming is a good way to approach it.
Yeah.
Because kids are just so much more open than adults.
If you look at the history of computing, there were the people writing machine code,
and then the assembly people came along, and the machine code people said,
that's not real programming.
Yeah.
And then the next stage was Fortran.
The assembly people said, Fortran's not real programming, and et cetera, stage was um the assembly people said fortran's not real programming and etc etc on and on until the present day and but now they're right in the sense
that scratch really isn't real programming but you think yeah it's not um well that's not fair
it's not not real programming but it's not full it's not sufficient it's not better than the programming
that we do now it's not i'm not going to be more productive with scratch than i will be with
javascript despite the problems that javascript has would you mind telling us a bit about the
new project you're working on in hopscotch so a big request that we've gotten from the hopscotch
community is that they really want to see Hopscotch on the web.
They want to be able to do it in their browser or I think basically just on their computer.
And we've thought a lot about that and we're actually now working on a version of Hopscotch for the web.
Tentatively named HOP, which will stand for HOP-oriented programming.
I like the joke there.
Yeah, recursive acronym, just like GNU.
Is it GNU? GNU?
Whatever that's called.
And basically trying to address some of the issues that we see with Hopscotch
and that we see with Scratch,
where we really feel like those languages
aren't quite good enough as programming languages and we want to make something for kids that
actually is a good enough, real enough programming language that they're not going to hit this
ceiling.
And I think another kind of related problem to all this is that if you make a programming language that doesn't have the best features of programming languages then that encourages you to program
in a bad way yeah that's a real thing that you hear with kids from scratch like you know that
they they learn to make spaghetti code they don't organize their code yeah it's definitely real
really so they start learning another language and then they feel like they don't know how to organize their code?
Or their teachers say they don't know how to organize their code?
Or how does that...
Yeah, that's a good question.
So there are a lot of patterns of thought that you'd want a kid to develop when they learn to develop complex pieces of software
that they don't develop in Scratch, which makes it harder to build Scratch games.
So it's noticeable just right there.
When it's pretty clear that a student needs a function
and they don't have one, you're like, oh, that's interesting.
One example is you'll have a kid who wants to make a choose-your-own-adventure game
where you can be a man or a woman,
and then you choose, like, you live in Antarctica or whatever, somewhere woman and then once you're you and then you choose like you live in our Antarctica or whatever somewhere else
and so you're picking all these options so like you know I don't know if this is
scratch's fault or maybe just my fault for teaching for not encouraging this in
their development but oftentimes what they'll do it's so easy in scratch to
right-click duplicate that they'll just have these really long pieces
of code that are identical except, like, boy costume, girl costume, Antarctica or Africa.
Yeah.
And so, like, there's all this duplication, and, like, Scratch kind of encourages all
that duplication, and they don't, like...
Yeah, that's the easiest thing to do.
Yeah, exactly.
The default thing to do is duplicate rather than abstract.
Exactly. Or as I just I was reading this book by by Richard Gabriel
called I forget what it's called I'll look it up but he was talking about
abstraction in that sense where you make a function and then call it with
different parameters and he made this point where he said well is that actually abstraction actually
what it is is it's compression it's um you know it's taking something that is longer and then
making it making it shorter and smaller and that might not actually be useful for other people
using your code if it's more compressed it might actually be harder to understand
though obviously there are benefits of compression he wasn't advocating against it for other people using your code. If it's more compressed, it might actually be harder to understand.
Though, obviously, there are benefits of compression.
He wasn't advocating against it.
But I thought that was an interesting distinction to make.
It's compressed because instead of having twice the amount of code,
you have half the amount of code,
and then just a reference to that code.
That definitely seems like compression.
It seems like if you name that function well,
then like, you know, like, yeah, if you name that function well, it could in your mind stand for all the code,
and so like it's abstract in that way.
I guess you could just put a comment on the top and bottom of the section
and describe what it does, and it could be abstract. Yeah. And then you wonder what does abstraction even mean?
Yeah. And you can really get philosophical. Well, so tell us in the context of Hop,
what does abstraction mean to you? What does abstraction mean? What are the powerful
abstractions you're building into Hop? So where Hop is right now is basically still very much in the research phase.
We are building prototypes.
We are looking at other languages.
We are talking to kids.
And we're looking at Hopscotch and seeing what has worked and what hasn't.
One of the ways that we're starting out, I mentioned earlier that I think a lot of the kind of first programs that you learn are quite trivial.
So what we want to do is make sure that you can make some non-trivial programs in Hop.
But not, you know, there are some kids who make non-trivial programs in Hopscotch.
Really non-trivial.
One kid made the game 2048 in Hopscotch.
We don't even have arrays. She basically implemented her own arrays using her primitives,
which it's a very impressive piece of software.
But I think that is going to be beyond the capabilities of most 10-year-olds
or 8-year-olds who are getting started with Hopscotch,
even with a very detailed tutorial.
There's just too much that can go wrong so we want to design the language such that a normal 10 year old of normal motivation could with a little
bit of guidance actually make something like 2048 our test game actually is
Candy Crush well like which were like just like
one screen of candy crush um yeah starting out with one screen which is still actually like a
pretty complicated game i've been making it in javascript i've made it like six different ways
nice i just got into playing candy crush though that's oh yeah well Candy Crush is cool because it's a game where it's so clear that only a computer,
you could only play this game on a computer. There's no board game Candy Crush. Yeah,
that's a good point. Because Candy Crush has this infinite fountain of candies that keeps
filling in the blank spots and then there's the chain reactions and then you can add in all the
bells and whistles. The combos. Yeah, bells and whistles the combos yeah the combos the
fireworks the bombs whatever what have you and that's something where if you can make candy crush
you're like oh programming has enabled me to do something that i couldn't do
with any other type of software i had to program this um it's powerful. Yeah, it's very powerful.
So we're trying to figure out what is needed for a normal person to make Candy Crush.
And it's unearthed a lot of interesting things.
So, for example, I mentioned earlier version control.
You really need it.
You can't make a piece of software that big without version control.
Some people can, but most people can't make a piece of software that big without version control or you some people can but most people can't um so what are your thoughts around how to build version control into a kid's
programming language system what are my thoughts i like yeah i haven't figured out exactly how it's
going to work i think you i think at the very least you need to be able to go back and forth
in a timeline you might need some sort of branching yeah I think I'm not
actually sure about this because I've heard kind of mixed things about tools
like get where actually I've heard kind of bad things from a lot of people who
have tried to teach Git to beginners.
Yeah, it's hard.
That it's really hard to teach people and it's really hard to understand the model.
And I think because I've been programming for a long time, it feels like second nature to me.
But at the same time, I think that there are these visual tools for Git where it just doesn't seem like it's actually a very difficult model.
And you see people who aren't programmers almost sometimes make their own version of Git where they just save a file with different names or version 1, version 2, version 2B, version 3, whatever it is.
They make their own branching structure, and it's just not connected.
So I think that some combination of a visual tree of where your code has been
could be really cool.
And I actually have seen a couple of projects people have done
to make something like that more legible.
Do you have anything on the top of your head? I'd love to research.
Yeah, these two guys, well, I don't know if this is, I don't know if they've released it publicly, but they have it on the web.
So I don't know if we should include this or not.
Guillermo something and Kevin something, I can look up their names,
who I talk to have made this kind of cool little, like,
branching version control demo.
Neat.
That was cool.
So I think some sort of interface like that.
One thing that I think is kind of a philosophy that we have at Hopscotch and just tends to work really well in almost every aspect of life
is to really deeply understand the problems you're trying to solve.
And once you're there, it's actually not that hard to solve them.
Wow. A lot of the trouble with problem solving that I see is, especially if you're working with someone else,
but even if you're just working with yourself, is that you mix up the different types of problems you're trying to solve.
So you think that you have a really good idea because it's solving one problem but then
you're ignoring another problem or you're talking to someone and you both have different ideas
and you both think your idea is right but actually both ideas are solutions to slightly different
problems and you're never really gonna see eye to eye so if you can really understand the thing that
kids need to get out of the system then you can
create a system that will do that for them it's more when you start thinking
Oh version control would be cool or like debugging would be cool this would be
cool how do we do this thing without knowing the pain point that it's
actually addressing that you kind of get muddled yeah that's super powerful i i find
myself um constantly doing the opposite of that like the wrong thing and it's such a time waster
um i i was watching some alan k videos this past week and and i think he does a pretty good job of
articulating that you have to be like unbelievably focused on the problem and not on the solution
and like because i think i fall into the trap of, I know all these cool things.
I like, I know how to program in all these cool ways.
Like what can I make with the tools I have?
Yeah, totally.
And then I ended up like building solutions to problems that don't exist.
So what techniques do you have to like keep yourself focused on the problem?
I think a good technique, and this is something Alan Kay has really encouraged us to do,
is actually focusing on a problem, such as Candy Crush, or, you know, what are, what are things
that, yeah, well, he told me to pick 10, and then I picked one. He was, he said, pick 10, and then
maybe do five, and I think I picked five and am doing one.
Though, you know, maybe eventually we'll do all five.
What are the other four?
What are the other four?
One of them is building a programming language.
Inside of it?
Yeah.
Wow, that's huge.
Obviously, that's such a good one.
It's so powerful.
He actually told us, he suggested picking topics of, like, topics that we think would be cool for kids to learn about.
So, one of them, the one that I'm really focusing on right now is game design.
So, which, game design is really interesting.
I mean, first of all, kids like it.
And then it touches on all these other cool topics,
which I think is true for any branch of knowledge.
But I like game design because it really starts to touch on, you know,
it touches on, like, what is learning?
How does the mind work?
How does intelligence work?
Because you kind of have to know those things to design a game
that an intelligent person would enjoy playing.
And by an intelligent person, I mean a person, because all people are intelligent.
Yeah, I think one thing that I see when we teach our kids to make games is most of the time they are focused on just making a game and it like like like designing a fun game that's like uh
addicting and like thinking about game design we maybe like the tools aren't there or maybe
the kids are too young to like actually focus on those i'd love kids to be able to focus on those
things like wouldn't it be great if we had a 15 year old or a 12 year old make like a block but
like the next blockbuster video game like Like, do you think that's possible?
I think it's definitely possible.
I also think that you probably do have to get started on a more generic game.
Yeah, and then you work your way up. But I think that there are also ways to think about games that we can give to kids that will be really useful to them.
So just even realizing that there are different archetypes of games that they can make.
So this is a side scroller.
These are the properties of a side scroller.
Now fill in the blanks with your particular side scroller.
And that's really, I think, what they're doing when they get started.
It's just that the class of game that they start with is maybe not the most interesting class of game,
but I think that's okay.
I think it's useful for them to know that this is an archety class of game but i think that's okay i think it's useful for them to know that
this is an archetype of game and these are the variables that you can change and get started
with that yeah so this might not be an interesting question but um it occurred to me that you probably
get this a lot too like when i when you say when you talk about like oh i want to make it easier
for people to develop games they say oh well unity exists like what like what what else is there to
do but how do you respond to something like that?
Oh, interesting.
I actually haven't gotten that too much.
Maybe I don't talk to enough programmers.
I think Unity is, I think it's just still too hard for most kids.
I actually haven't used it much myself.
One thing, actually, we were talking about physics,
the turn on physics button earlier,
which I have some actually ambivalence about
because I spent some time trying to implement a physics engine.
So first I was like, okay, let's have gravity and everything just falls at a constant rate.
But wait, actually let's have acceleration so that you can jump.
But then like, what about forces?
What about mass?
And then at some point I was like, oh, maybe someone's done this before and this is why
everyone has the physics button. And so there's this library called Box2D that basically I think everyone just uses to do their physics calculations
that has done a very good job of modeling out Newtonian physics.
And I do think that at some point you want that.
You know, as a kid kid it's interesting to start modeling
out physics and some kids might want to model out all of physics and re-implement box 2d but i think
there's also a lot of value in the fact that someone has made box 2d and that you can use that
in your code and and i think this kind of gets at another issue
with a lot of programming stuff for kids
is that it's not very easy to share code
or to use code that other people have written.
And that's actually a really powerful thing in software
is to be able to...
Libraries, frameworks.
Yeah, to have libraries and frameworks
and to not just be building your own
code but to be building code you know on top of the shoulders of giants yeah totally i definitely
yeah it's it's a subtle point because i definitely like obviously want kids to be able to use
libraries and frameworks and not have to reinvent the wheel every time they make their code um
so yeah i could see that perspective yeah but you also want them to learn about physics
because it's actually really fun and interesting. And that is definitely the right, or you know,
I don't want to say right or wrong, but it is a very powerful way of making a lot of the types
of things that people want to make a lot of the games and simulations. If you start trying to
program it such that you have to specify the path that something is going along the entire time, that quickly breaks down.
If you want to bump into something or jump or whatever it is, to try and get that to look realistic is actually really difficult.
If you try and program each position along the way, but if you can do it with physics, it's much easier.
So you want people to understand that they can use physics to model physical things
and to kind of understand how that works.
And then at some point, they want to use a library that does it better than they can do it themselves.
Yeah, I think we're slowly coming to unpack the distinction here.
So Rich Hickey makes a distinction between simple things and easy things.
And so he says a simple thing is something that's easy to understand.
And an easy thing is something that is quick,
but might be very complicated to understand.
And so like an add gravity button,
that like, or like Rails,
like you know sometimes Rails has things that like,
where it's very very easy to do something,
but not at all simple.
You have no clue how it's working on your code,
you can't customize it, you're like,
you're handcuffed into exactly the presets
that like it comes with.
And so I think I'm totally down for having kids use a
gravity engine that someone else made as long as it's a simple one that they can
go in and customize and understand themselves. And then Rich Hickey has this
whole thing about how you can make simpler things, how you can make simpler things
easy. So like building a whole 2D graphics collision engine by yourself
will be very simple but not very easy at all.
So if you could somehow make that simple process easier
and I think the way you guys at Hopscotch
have blocks that are very easy but then you pop them open
you can see the code underneath, they're also simple.
So I think that distinction could be a good compromise.
Yeah, yeah, it's something I think about all the time
in so many aspects
of life. It relates to just technology as well, where, you know, is it good that I can just order
anything I want at any time from Amazon and have it show up at my door two days later? I don't know.
I canceled Amazon prime, so I can't take that Jeff Bezos. Maybe he's not going to be the rest of the person in the world anymore.
Yeah, but I have two Alexas, so I really...
And I still order a lot of books on Amazon.
I just have to wait for them.
I'm really...
You're conflicted.
I'm doing very little to stop the Jeff Bezos empire.
Nor am I even sure that I want to.
But I think, you you know there's some people say that everyone everyone thinks
technology should have stopped at about the time that they were 10 years old or 20 years old
whatever it is yeah of course so so they think that all technology after that is bad for humanity
and I can definitely see myself falling into that trap but I also
kind of think a lot of technology is bad for humanity or that too much
convenience is not is not good for us so so I'm conflicted with both with coding
and with life yeah yeah I see that okay I have a few more questions for you.
So what is something that you know to be true about the future of coding,
where software development is going, that almost nobody else understands?
Something that...
It's hard to say that you know anything about the future.
What are you so sure of?
But here's something here's
something that i believe it's a good idea to start with hard problems and start with programming
models that scale and a lot of the time we think that it's okay to start teaching people things
that don't scale and then they'll learn the scalable things later
yeah um but i think it's really hard to change your mindset once you've gotten into
one comparison i've heard is to the that your programming software is if you're a clock maker
and you make all these pieces these intricate pieces that fit perfectly together and you make all these pieces, these intricate pieces that fit perfectly together, and you make this very mechanical system.
And that really just doesn't scale.
If one little piece of the clock breaks, then the whole thing is a bust.
And I think you need to start people programming with models that actually do scale.
So you're saying when uh the kockmaker
analogy is like a like you're talking about the brittleness of yeah i think the brittleness of
code and the um the kind of all the interdependencies that everything has with each other and and the
proceduralness yeah yeah i see and and we kind of think okay that's okay because that's like the
easiest way to think about it starting out um but maybe it's i i kind of think it's better to
to put people into push people towards a different model of thinking about their code from the start
and then that way that way of thinking will be more natural to them so maybe let's like i have
a feeling i know that model of thinking would be but like what could you describe i'm i'm obviously
very influenced by by alan k and and small talk and and the idea of objects which i think that
term has come to mean so many things and it really was a very unfortunate name, because when you think of an object, you think of a cup or a microphone or something very inert,
and I think what Alan meant by objects was computers.
So the idea of object-oriented programming was that everything in your system was a computer,
and it was a full computer that could do all the things a computer could do.
And the idea was that you would program with these very powerful pieces.
To build on that, just because the way I come to this understanding is,
I see it as, like some people like to see their code and data as separate.
Yeah.
And like Alan said, like what, like that's's crazy. Why don't you put it all together?
Yes, it should all be together.
Code and data should be together.
And I think also this idea that when you think of a computer,
it's kind of this whole thing that doesn't really depend on other computers for its existence.
And an extension of what they did with object-oriented programming was was the actor
model where it became much more strict about what kind of messages you could pass and the type of
encapsulation that an actor would have to have so if you look at something like Erlang, which was built in the 80s, and it's, so Erlang is this programming language invented by Ericsson, the telecom company.
Maybe listeners have owned a Sony Ericsson phone at some point in their life.
I know i did and and the idea earling there's a couple ideas
behind earling it's very functional but it also has this concept of of actors and processes
that really don't depend on each other at all like all they can do is send messages to each other
and they don't even depend on they send a message to something and you can't even depend on that thing still being there or you kind of expect that it might go down at any time
and because of that they've been able to have this very very reliable telecom system that i
think in 20 years had like five minutes of downtime or something crazy wow um because they built it as a system where they they thought about the health
of the system rather than the health of any individual actor so it's built such that actors
can have all sorts of problems and go down and whole data centers can go down but the system
doesn't depend on any part of itself actually working at any time.
I've never heard that example. It's so powerful.
It's so powerful.
I mean, that's how the Internet works, too.
The Internet hasn't really gone down since never.
I guess back to Jeff Bezos.
When Amazon goes down, the Internet goes down.
It does a little bit because it's a little bit centralized.
The important part is Netflix.
No, I think Netflix is probably pretty resilient to Amazon going down
at this point. Really? I thought Netflix
was entirely on Amazon.
Well,
but they're on a lot of data centers.
Have you
heard of Chaos Monkey?
Yeah.
I love it. It's this thing that
Netflix does where
basically the Chaos Monkey just takes down random, just breaks random stuff at Netflix all the time.
And their system has to be resilient to the Chaos Monkey.
So because of that, when things go down for real, Netflix generally doesn't go down.
That's great. But, you know, even when all the things that are,
if all of Amazon went down, the internet would still work.
That's true.
It really, the internet doesn't depend on anything.
Yeah, it's really powerful, the decentralization.
So what in this space is like a distraction or overhyped?
Okay, well, one thing that I think, I don't know if it's overhyped or a distraction,
but what I've seen in the coding for kids space is that a lot of energy and goodwill
and smarts has gone into kind of trying to get computer science as, you know, trying to get people to take the AP computer science science or what it actually means for kids to learn computer science or why it might actually be important for them to learn it.
And I worry that we're teaching kids kind of like the arithmetic version of computer science where we might end up in this
future where every kid has learned computer science and they all think that it's stupid
and they hate it yeah i think that's exactly the analogy to make that um uh like we do teach math
already to every kid and the vast majority of kids leave school thinking they're bad at math and hating math and never wanting to do math when in reality they've never even learned
like math as mathematicians do it they learn this arithmetic yeah they learn to kind of blindly
follow these algorithms of these arithmetic algorithms and and then forget them as soon as
the test is over so so many adults tell me that they're bad at math. My dad always tells me that he's bad
at math, which is super interesting to me because he runs a business. He runs a real estate business
in Detroit and he has to do a lot of math to get that business working and to know when it's worth
it to buy a property and what the rent should be, what the rent
needs to be to make sense.
And that is, you know, I think his number sense is very, very good.
And his number instincts are very good.
But yet he still thinks he can't do math because he didn't do well in math in school.
And apparently his older brother used to hit him on the head with a math book when he got
questions wrong so maybe that was also pretty scarring um so i think a lot of people are
actually perfectly capable of doing math in in a practical situation and completely incapable of
doing it in this school situation um so maybe that will happen with computer science there
will be an underground computer
science that everyone actually uses, but the thing they teach in school, everyone will think they're
bad at. Yeah, no, I think about this a lot. And I think the analogy of math really lines up
perfectly. When we were trying to erase the Soviets into space, there was this big push
to get calculus in every high school so we could have more rocket engineers. And guess what? Those
people were successful. There is calculus in virtually every high school so we could have more rocket engineers. And guess what? Those people were successful.
Like, there is calculus in virtually every high school in America.
And their success, I would argue, made the world worse off.
Like, calculus is a terrible math to teach kids in high school.
We should teach statistics or a much more applicable math that's easier to learn,
makes kids, and gives them much more practical, useful knowledge
because almost nobody ever used calculus in their daily life yeah and statistics are so useful to know yeah so
not very intuitive but yeah and that's part of why they're so useful it's so useful yeah because
it like it changes the way you see the world so um i'm so worried as you are with this this new
equivalent craze of oh there aren't enough software engineers we need to like create more
software engineers let's get coding in every high school.
We're probably going to succeed, but are we going to succeed or are we going to achieve failure?
That's where Eric B. says it in The Lean Startup, where you achieve what you set out to,
but you actually don't achieve your ultimate goal.
Yeah, I just had a conversation with a friend yesterday, actually,
where he was saying, you know this woman Carly
Kloss who's yeah who's a big advocate for computer science education has also
become started advertising for Wix the kind of website creator thing he's like
well isn't that like the opposite because Wix won't like eliminate the
need for programmers but you know if we think computer science education is going to create
jobs that will be eliminated by WYSIWYG website creators, then, like, we're already very lost.
Yeah, that's a good point. It's a good point. And people talk about that a lot, like, why
teach kids to code? It's all going to look so different by the time they become adults. Yeah, I totally agree with that. Which is why I think what's more important is to teach them actual computing because understanding what is powerful about computers and what you can do with them and the ways that you can think about them, I think isn't, that's more of an invariant than, you know, teaching people how to write procedures.
Totally. I think, yeah, like the analogy we've made to math fits.
So like teaching kids arithmetic isn't important, but teaching kids, well, it's somewhat important,
but the skills that are really important for math are being precise with your wording,
arguing from definitions, like following logical trains of thought.
And then computer science.
Or even just understanding numbers.
Yeah, and numerical thinking, exactly.
And then from a computer science perspective,
I really love Chris Granger's article that says,
coding is not the new literacy, modeling is the new literacy,
and computers can enable modeling if you have the right programming language.
But coding isn't the real core skill here.
Yeah.
Cool. So two more questions.
So what personal technology in the space should we keep our eye on besides Hop and HopSkatch?
Oh, that's interesting.
In the learn-to-code space?
Yeah, well, you could do that.
Or I'm more asking in the future of coding space.
The future of coding space.
A big influence for me is Brett Victor,
who I feel like if you're listening to this,
you probably know who Brett Victor is.
Yeah, I've mentioned him once or twice in this podcast.
And we'll maybe mention him once or twice more.
Yeah, he's doing some really cool stuff.
He's actually right now working on this physical space.
He basically thinks that computers are over,
or computers as a unit are over,
but that everything should be a computer.
So he's building out this space where...
I don't think this is secret but
it's not he's building out this space where basically you know any surface can be a computer
and um any surface can be a screen and you can go and like program any surface in the space and
then you can like take two surfaces and put them together to make a bigger screen or you can split them apart to make two screens and and a lot of really interesting things
kind of follow from that and i'm not explaining it well it's very it's like you kind of have to
be there to see it um but i buy that you know that guy is really smart yeah i sometimes i think that
because he did so much work on user
interface design and the future of programming languages and the future of computing and and
now it seems like he's moved on a little bit um no he's still thinking about the future of computing
okay um i guess he hasn't published stuff maybe recently that i've seen oh yeah i think he's been
working on this this space and you know eventually we'll go back to it. Yeah. My thought.
We'll eventually start talking about it.
That's a good point.
My thought is that he has said so many wonderful things about the future of computing that
sometimes I get the feeling from him that it's like, I've said what needs to be said,
go be inspired by what I've said and build it already.
I get the feeling that he feels like he's done his piece and it's up to to us to like take it from there oh no i don't think that's quite true um
you've met him sir yeah yeah so you tell me oh i don't it's hard to hard to explain someone else's
motivations or even understand them because um but i think that bre Brett really cares about things being done well and with
like proper planning and knowledge so when he says you know here are some good
ideas he is not telling you to go out and build what he said because his ideas are just the start of it.
He's kind of telling you to go out and, like, read 20 textbooks and then, like, spend 10 years building what he said to do.
Yeah, yeah.
And I'm doing it.
I said I'd like to send him an email, you know, every, like, two or three months.
I've only gotten one reply in all the years I've been doing this.
You really?
You send him an email every two or three months?
Yeah.
That's really funny.
What do you say to him?
It depends on the point of my life.
I think the first email I sent to him was right after I watched his first video,
Inventing a Principle.
And I was basically like, I'm a freshman in college and tell me what to do with my life.
Like, I just want to like...
Tell me what to do with my life.
Like, I will do whatever you say. Like, I just, I like, I believe in your mission. Just like, tell me what to do with my life. I just want to like... Tell me what to do with my life. I will do whatever you say.
I believe in your mission.
That's hilarious.
Just like tell me what to do with my life.
Did he reply?
He probably did not reply to that.
No, he did not reply to that.
And then over the years,
I figured out what to do with my life.
And he was an inspiration for so much of it.
And maybe one day a dream will come true
and he'll be on this podcast.
What did he...
Which one did he respond to?
Um, I, I, I wrote a, when Seymour Papert died, who's like, uh, I wrote a eulogy for him and I sent, I sent it on to Mitch Resnick who invited me to, uh, to a celebration of Seymour
Papert's life in MIT.
And, uh, and so I, I, I replied to this, uh, a recent email I sent to Brett Victor and said,
oh, I just want to check if you'd read my email, might as well double check,
and by the way, I'm going to this event, will I see you there?
And he replied, no, I didn't see that event was happening, I won't be there.
But, you know, at least I know that his email just works.
Like, they aren't going to a spam folder.
That's really funny.
Yeah, maybe one day I'll come up with something interesting enough to say that I'll get a real response.
I'm working on it.
That's really funny.
Yeah, Brett, he's great.
He's very smart.
He thinks very deeply about things.
And I think doesn't...
He feels frustrated sometimes by the way that a lot of people don't think deeply about things,
where they kind of just read his blog post and and then i think
there's a quick fix yeah and let's hack it together yes exactly and he's very much not
about hacking it together and that's why he often won't release the stuff that he does his code yeah
because he i mean and i i have this feeling too where there's this fear that, or you can release something and if you build something in three months and release it, like, what is the worst thing that could happen?
Is it that no one uses it or is it that everyone uses it?
And now you've put out this like poorly thought through thing that you hacked together,
and now millions and millions of people are using this,
and maybe you've changed the course of history with this thing that you didn't even think through in the first place.
Oh, wow.
Damn, that's deep.
I don't think many people in Silicon Valley think that.
Their brain stops when you say millions of users.
There's a possibility of millions of users?
Let's go there
They don't think about how
How yet how like their success might be bad for the world? Yeah, that's it's very humble and very
Refreshing to have someone think so deeply and so benevolently
on behalf of the rest of us
alright, so Is it a question?
I don't know if this will be useful,
but is there anything that you need help with that you'd like people to reach out to you
to help you with or anything that you would like to help others with? You know, I'm trying to
foster this community of people who are trying to build like future programming. So is there
anything that you want to say to that community? I mean, I'm always happy to get emails and well, if you write me a long random email
about your ideas for the future of programming, I'll probably answer it. Cause I don't get that
many. I'm not that famous. I don't get that many emails. And I also like writing long emails.
I can, I can attest to that. I've, I that. We've written long emails back and forth.
Yeah.
And I find it fun because I like writing,
and I find that writing a good email is a good,
it can be a fun exercise.
So if you write me a good email,
I'll try and write an equivalently good one back.
Nice. Nice.
Cool.
So do you have any links, social Twitter handles, website that you want to share?
Oh, well, gethopscotch.com is where you can find Hopscotch.
And our Twitter handle is at Hopscotch.
So look us up there.
You can tweet at me at SamJ0HN.
Cool.
I'll put that in the notes.
Great.
Well, thanks so much for coming on and talking.
I really appreciate it, Sam.
You're welcome.
Thanks for inviting me on your show.
Thanks.
I feel so honored.
Oh, yeah.
Well, I'll see you later.
Bye.