Future of Coding - Jonathan Leung on Inventing on Principle
Episode Date: July 21, 2017My friend Jonathan and I discuss various design goals that I try to keep in mind while doing user interface research. You can find notes from this episode at http://futureofcoding.org/episodes/3-...jonathan-leung-on-inventing-on-principle.htmlSupport us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.
Transcript
Discussion (0)
Hello, and welcome to the Future of Coding. This is Steve Krauss.
So today I have my friend Jonathan Leung here, and we're actually in the same physical space,
which I think will be rare for this podcast.
So to tell you a bit about Jonathan, Jonathan and I met at Penn,
where we were both studying computer science.
At Penn, Jonathan worked at the Duckworth Lab with Angela Duckworth.
He was also an early lead organizer of PennApps, the University of Pennsylvania hackathon.
Jonathan has been teaching and mentoring students in computer science and other subjects for a number of years.
He was a teacher at All-Star Code in New York and General Assembly.
He was a former founder of Hack Club, and for his work there, he was a Forbes 30 Under 30 member.
He was also the original creator of the Learner's House, which is a retreat that I've been on with a number of friends.
It's a really fun thing.
Other things Jonathan has done, he worked at Perceptual Networks, Gobbler.
He recently was a part of the School for Pro-Auto Computation,
where he had some interesting projects that we might get to talk about here.
And now he currently lives in Brooklyn.
So welcome, Jonathan.
Thank you so much, Steve. It's exciting to be here.
Cool. So...
It's actually exciting to note that the last time I was here at Steve's place
was for HackNY, where we built a hack to
let you modify emails that you sent after you sent them. Yes that was a fun yeah we went to
yeah we went to HackNY as a fun kind of emotional hackathon we got third place which is which is
exciting for me at the time so yeah so I guess the reason I thought it would be really great to interview you
is over the years we've had a lot of
really wonderful conversations about
interfaces and the future of programming,
the future of design,
and they've always been fun and interesting conversations,
so I thought we would have one of them here
and have other people listen
and be able to contribute to our thoughts.
So, let's see.
Where do you want to start?
Up to you.
All right.
So one of the really interesting conversations that we had a while ago
was about designing on principle, inventing on principle,
which is in reaction to Brett Victor's talk, Inventing on Principle.
And so at the time, i was building a system i was trying to build a programming language and i was trying to like
apply brett victor's advice in a pragmatic way like i was like what principles are the ones that
i'm trying to design on and so jonathan uh came over and we spent a long time talking about the
principles and what was really helpful to me
was there was a number of times when you said oh that's not not abstract enough of a principle
that's that's more of a implementation detail the principle you know you like kind of push back on
some of my principles and and like asked me to to come up with better principles so so i pulled up
this list of principles that i'm going to have a link to in the notes.
A list of principles for the product I created, CycleVersion2,
which I talked about in my last podcast.
To remind you, CycleVersion2
is something I built
in Blockly. So it's basically blocks
for React.js or for
Vue.js. So it's declarative
blocks for
making web interfaces.
And so we have this list of principles pulled up,
and I guess maybe we'll just run through them really quick
and see what ideas they spark.
So the first principle I have is accessible to create,
view, and update anywhere on any device.
And then underneath that,
the two bullets are built for the web
and mobile-friendly.
What do you think about that as a principle?
Yeah, the first thing that comes up for me
is less about...
Less about questioning the intention there
and more about language around...
I took an information communication technology
or, yeah, information communication technology for development course and thinking about like like first world uh not
first world um and like the thing that strikes me there that's just kind of a small thing is like
uh there's an assumption that any device is connected to the internet which is like
predominantly true for in like the u US, but isn't necessarily true.
So maybe explicitly saying, but maybe the intention is it's on any device and not necessarily
the internet, but the sub-bullet points are built on web.
So I'm curious, would it feel more accurate to explicitly say on internet?
Instead of on any device.
Yeah, I think you're right.
On any internet-connected device or something?
Yeah, I think you're right.
Internet-connected device is what I meant.
Cool, that's good feedback.
All right, so let's move to the next one.
The next bullet is prerequisites built in.
A micro world.
So there's no user manual. you learn how to use the system
just in time and so there i'm kind of referencing seymour papert's notion of a micro world which is
a very intuitive place where kid where he designed them for children but where people can learn how
to use the system as a natural extension of their curiosity and exploration so in the same
way that you and i we all learned how to speak our native tongue just by naturally saying words
and listening like can we all learn how to use interfaces in that same way and so examples of
these micro worlds would be the logo programming language that seymour came up with and or the
scratch programming language those are good examples of micro-worlds. So underneath this prerequisites built-in bullet,
I have types represent shapes, which is something I've talked about before, and I have blogs about
that I'll link to, and also the idea of good abstractions, like first-person coding, messages,
and event metaphors. Yeah, I think the idea of the micro world here feels the most resonant is what
you're, what occurs to me as you're trying to say, where, like, the idea of the micro
world is, like, this world where anyone can just play in and just do stuff without having
to deal with BS.
So, like, when you're trying to learn a code now, like it's like,
Oh,
like I think get my like text editor and like install this package.
Oh crap.
I can't install on this package until I installed this like other package.
And like,
there's this entire rabbit hole of like,
you can't even start.
It's like a micro world is a place where like shit just works.
Um,
I think the feeling of like shit just works is the thing that's trying to be
captured in this principle.
Is that kind of the,
yeah, I think the shit just works is a thing that's trying to be captured in this principle is that kind of the yeah i think the shit just works is a big part of it um yeah the shit that that's a good that's a good point i think this is more specifically that it's built in a way that's intuitive and
learnable like the metaphors are are good um the shit just works i think it's like a separate bullet point um
that i think about too okay so it's it's less about like this stuff is working and more about
like your knowledge of how to use the stuff is like obvious kind of in a way that like
like you don't really need to read an instruction manual on legos it's like
yeah just like oh okay just just snap them together. Exactly.
So.
Like, the idea of having to explain what a closure is or what a type is. Oh, okay.
Like, all the words, if you went to get a degree in computer science or if you wanted to learn the Java programming language, for example,
I'd have to teach you 50 different words.
Like, ignoring the syntax, I'd have to teach you, like, 50 different words and concepts.
Like, switch statements.
Like, there are all these things. When you learn the Scratch programming language have to teach you like 50 different words and concepts like switch statements if like there are all these things when you learn the scratch programming language i teach you
nothing you just immediately go and connect the shapes and drag and drop you don't have to learn
the word boolean you just know that hexagonal shapes are boolean are booleans and hexagons go
inside hexagons so it's like if you walk in it's like the the distinction is like if you walk if
if someone who doesn't know how to cook walks into a kitchen they'll like the heck is that machine thing there they don't know what that is as opposed to like
someone walking into like a children's play arena center thing where like there are ball pits oh i
can like jump in or like uh i can like oh yeah there are these hoop things in the air i can like
lift the i can like hold myself up with my arms and those things it's like the affordances
are obvious yes um so i wonder like to me the explicit wording of prerequisites built in
doesn't capture that for me because it's like unclear which prerequisites um and like like
yeah i could interpret that as like like software prerequisites. I see.
But I think the way that you're thinking about it is in terms of classes.
This class has no prerequisites.
Yes.
Knowledge prerequisites, not software prerequisites.
Yeah.
And the term itself sounds like, even though it doesn't say it's a negation of something else, it sounds like a negation.
It's saying this course requires no prerequisites i almost want to hear hear it in a positive as opposed to a negative um uh because like that's so interesting i feel that feels impossible because
it's so it's assumed that anything you'd have you'd have to learn anything like i feel like i have to say for example like organic food like if i leave the organic label off organics is just
saying not pesticides right so like it but do you like the organic label well it's like it's putting
in a positive way like so so i think positive less less about the fact that it's just positive
and therefore it's good the rationale there is kind of like i think the principle of the positive could potentially i'm not sure i haven't thought
through this but like could potentially make the principle more clear and have it be more
focused but maybe not i'm not i'm not actually sure maybe could it be opposite effective when
i'm wanting but like the first thing that comes to mind is like something around into it like
intuitive but that's yeah but i think the affordance of no prerequisites is actually clearer than
intuitive.
I see.
So maybe I actually kind of like it.
Okay.
It just took a while to explain,
but you like the general idea.
Yeah.
But something about like the wording could be more specific to reference
like a,
like a class prerequisite.
And even,
even then it doesn't contain the full flavor
of um what you're talking about because for some like for a like a like a class or something like
where you're like a like a math class where that doesn't have prerequisites you still need to learn
new concepts that you like like to like they're they're teaching you new concepts so like even
like like taking the analog of a
class like a school class doesn't quite capture i see because it's not only are there no prerequisites
but the class itself doesn't introduce things that need to be instructed it's it's all intuitive
yeah it's like infinitely you still need to like figure out how to do it by you figuring it out
but there isn't like a like a person who's introduced introducing new explicit knowledge and um yeah i agree there isn't a word
for this uh and like i i spent a lot of time thinking about the this particular question
because when i was thinking about the name for this podcast i was thinking about calling it the
learnable programming podcast with like a hat tip to brett victor's learnable programming essay
and the problem is people didn't know what i meant by learnable but this is what i mean by Learnable Programming Podcast with a hat tip to Brett Victor's Learnable Programming essay.
And the problem is people didn't know what I meant by learnable.
But this is what I mean by learnable.
It's like learnable by yourself.
So people said, oh, maybe you mean intuitive.
Maybe you mean the word usable.
So I don't think there's really a word.
This is like a pretty unique thing. There are very few systems that are so beautifully that like you don't have to be taught things in order to know how to use it
there are only a few of them like logo and scratch so maybe micro world is the most precise word
because it because that was the word that was coined to describe these types of things what
what if we step out from the programming realm and like look at like other things that we see
in the world as having like these good affordances and see like
how those are kind of referenced like the playpen thing is the thing that is the first thing that
comes to me like a playground like i think like the designers of like good playgrounds like make
things like really obvious even though like things look super weird it's like really obvious what
you're supposed to do with it yeah i wonder if they have a word for that um yeah that is interesting yeah cool yeah that's that's clever i think a playground is
very simple you're not like combining a slide and a swing set you know it's like you're using
one in a when a programming system you have to combine ideas and make more complicated ideas
so it's even though even the word playground strikes
me as like uh capturing some of that yes well i think that when people describe micro worlds
they describe as like playgrounds like virtual playgrounds and i would i would argue playground
is a lot clearer than a micro world because micro the idea of a micro world is an explicit concept
that is like you have to teach that's true that's a good point cool all right next one um
uh so workflow built in and this is a nuanced one but i think it's really important so i want
something like asana and workflow and github all rolled into like one tool and integrated
into the programming language experience um basically i want to treat the workflow that that by which programmers create
programs as a first class citizen right now the static files are like the first class citizen and
so um a compiler just treats a like a program as like the only program that ever existed which i
think is silly because you want to change things constantly and work in collaboration.
So that's kind of where this design goal is.
And so the goal would be
to help you organize your project.
It would help you prioritize different features
that you want to work on
and brainstorm how to build these things.
It would include branching and version control
and collaboration. I would even likeing and version control and collaboration.
I would even like it to be able to notify you
that you've been working on this feature for too long.
You should take a break.
You're in too much of a rabbit hole.
You're distracted.
Wow, yeah.
I love that.
So what do you think about,
how would I go about describing that kind of principle?
Yeah, like, when I hear the thing and then try to put a word to it, workflow makes sense.
Workflow built in makes sense.
But when I hear workflow built in, I don't get the things that you're saying. So when I first
was reading that, I think the thing
that comes up for me
is like,
hmm, I think when we initially
talked about this,
there's kind of like
two high-level
components I can think of for this.
There's kind of like the way
that you deal and manage code, namely like Git and like folders and stuff. Then there's
the way that you organize your thinking, some of which is done with in code with
like comments or like the coding language itself. But I myself like
usually keep an app called workflow open which i
essentially use as my notepad um which could you yeah describe workflow yeah workflow is like like
so just imagine like google docs and you insert a bullet point you can press enter and a new bullet
point comes out you can press indent and like it'll indent in so it's basically a tree outline
thing and imagine uh workflow is that plus you can arbitrarily zoom into any node.
And that becomes the displayed route. So basically, when I'm coding, I got this technique
that my former co founder sent me from a random comment in hacker news that i thought was like super useful every
like i i do this as i code now this like workflow thing which i'll which i'll talk about in a sec
but like just to just to say how useful it's been like i do this whenever i code actually i do this
whenever i do any type of task i've introduced this to my girlfriend and she does it now i
introduce it to my other friend roxanne and they all consistently keep doing it now. And specifically, I basically trace what I'm doing as I'm doing it.
So it's like, okay, I need to install Linux.
It's like, okay, cool.
So I write install Linux.
And underneath of it, it's like, okay, what do I actually need to do to install Linux?
I need to, one, download the CD ISO or something say okay download CD and I go and
like go to the website download it okay great check done next thing what's the next thing I
need to do um need to like burn the CDs okay right burn CD sometimes there might be like multiple
like little subtasks that I think of simultaneously, but are done in series.
So I'll write those subtasks on. So it's like basically keeping track of each step that I do it.
So one, it keeps me focused in which specific step I need to actually do next. Because sometimes when you're going down a rabbit hole, it's like, oh, there's this bug here. And like, there are like
10 things I need to actually do to solve it, I can lose track of what I'm doing, like completely
forget. So having like a list that I can look at, oh, yeah, that's the thing that I
was doing, is, like, super helpful. So the thing for all of that is, like, it's kind of, like,
I don't like the word mental crutch because it sounds negative, but, like, i can offload some of my brain stuff happening onto a piece of paper
so it's basically a way to help me think yeah um i think that's exactly like the vision i would
want for i want one exactly that workflow but embedded into the whole code process
yes one of the things that i see as being backwards is you
come up with a thing in your head like you come up with a plan for what you want to do in your head
then you go into code and you spend a while like dicking around in code and then when you're finally
when you're done you explain what you did in a commit message like that's the opposite like
shouldn't you write what you're going to do first then do it and then just press done when you're
done with it and then it like automatically commits with that commit message yes and then i think where like the
work flowy nested structure this comes into play is as you're doing things you first specify what
you're doing and you specify how this thing nests up to like the bigger task and and so then you you
and like it kind of forks for you every time you like do a subtask, it kind of forks off that top branch.
And when you press down, it kind of brings you back.
It merges for you into the branch at the top branch.
Oh, interesting.
I didn't even notice the one-to-oneness with GitHub.
Yeah, Workflow and GitHub, I think, could be the same tool.
Wow, that's cool.
Okay.
Yeah, Workflow built in just doesn't capture like i 100 agree
with what you're saying i think i'm just basically like wow steve these are great ideas you need
better names for them um uh it's like it's kind of like hmm it's like thinking like like it helps
like like a thinking tool built in or like it's even less clear what the fuck that means.
All right.
Yeah, like, workflow built in, like, I just think of, like, a to-do list,
and I don't get the fact that it's, like, helping support me mentally in my...
Yeah.
It, like, remember when we were teaching with, I forget, Joe, no, okay, Rosanna, Rosanna
Sabato.
Remember, do you remember those like sheets they'd have like the kids fill out before
they did anything?
So this is when we were teaching with Rosanna Sabato
at BruteStrap in Philadelphia.
And so they had these worksheets.
Is that what you're talking about?
So what about them?
So they had...
It's basically kind of like test-driven development, sort of,
but they'd force, like, what's the thing that you're trying to do?
And then you'd be like, okay, what are the things you need to do this in?
It's like, okay.
And then you go try to write the code.
This is all done on paper before they actually do anything.
Oh, and this is very relevant.
Thanks for reminding me.
So in teaching, that's called scaffolding.
And it's a really useful...
So what scaffolding is, from an education perspective,
is you say that the assumption, the principle behind scaffolding,
is that a student wouldn't be able to do the task by themselves
without any structure so what scaffolding does is provide the minimum amount of structure
possible to give the student a good place to get started on the task i didn't feel like i
explained that well so jonathan did a good job of explaining that in
bootstrap when they would advise a kit the structure they would provide the scaffolding
they would provide for a student is they would ask the student to write what is the point of
this program what are we trying to accomplish and then underneath that they would ask what
are the variables that we need to keep track of what are the different functions we we need? So it helps a student think through all the high-level things
so that when they go into code, they have this worksheet they can refer to
to think about what they're doing.
And so we have a similar kind of scaffolding at the coding space,
the after-school program that I started,
where we have a tutorial where the students can refer back to what step they're on,
what they're trying to accomplish.
We don't tell them how to do it.
We just list the step.
So the first thing, when a student raises their hand because they're stuck,
the first thing a teacher says is, what are you working on?
What step are you on?
Just what step are you on?
And that's usually a huge point of confusion for most beginner students.
They're like, Oh,
I forgot that I was even supposed to be doing a step.
Like I,
I didn't even know what I was doing.
Like they just,
all that's in their brain is just stuckness.
Like nothing,
like all the context about how they got stuck is gone.
So being able to refer them back to the step,
then refer them back to why they're stuck.
Like what were they trying to do that let this you
know so like through a series of questions we help them figure out just like refocus on why they're
stuck and which does more to help them get unstuck than anything we could do like once we just like
kind of help them focus on why they're stuck they they get unstuck like they just they just lost the
context that they forgot and so wouldn't it be neat instead of having them like have a separate scaffolding over on a piece of paper on a different tag if on the top of their
editor it said like the step that you're working on is and like right you know oh my god so good
and like for a tutorial project you know we supply the step but if you're making your own project
like you supply the steps and the sub steps and and you just select on the one you want to work on.
It takes you to that fork of a fork of a fork.
You work on it.
You press done.
It merges you right out.
Yeah, yeah.
Oh, my God.
And at any point, if you're stuck,
there could even be a button that says,
I'm stuck, and it says,
well, this is the thing you're trying to do.
Does this thing need subtasks?
Or is this thing too complicated?
Do you want to break it up into smaller problems?
Or it'll say,
oh, is the thing that you're working on even relevant anymore? Look at the thing that this thing is complicated? Do you want to break it up into smaller problems? Or it'll say, oh, is the thing that you're
working on even relevant anymore? Like, look at the thing
that this thing is trying to solve.
Maybe re-examine.
That's to help you solve the XY problem.
So the XY problem in computer science is when you're
trying to solve problem X, but in order
to solve problem X, you think that
problem Y will help you. So then you
spend a lot of time working on problem Y and you lose sight
of the fact that what you're actually trying to do is solve problem x and problem y is now harder than
problem x right and so yeah so like that could help you with that problem too oh my god i would
i would i would love to have that and like i i myself still get stuck in those situations and
don't like i'm still the same student who's like i'm stuck i don't know what's going on and then
i like i had to step back and like i finally remember like an hour later like oh yeah yeah i think it would be neat if when you're putting
the steps and you estimate how much time you think the step's going to take so when that time passes
they say hey you've been working on this for 20 minutes and and you thought it'd only take 10
maybe maybe maybe zoom out here because uh because this this isn't going the way you expected.
Yeah.
So all of that is the better name.
Great.
Okay.
Well, let's move on to the next principle.
So this is principle four.
We have six principles to talk about.
So only logical bugs.
So the metaphor that I think you and I, you actually came up with this when we were together, is that imagine a helpful waiter that when you order things,
he'll give you tips.
He'll say, oh, maybe you want the fish,
or he'll also warn you against, oh, that dish isn't very popular.
You probably shouldn't get it.
But ultimately, he will bring you what you ask for as long as it's not going to kill you.
He'll let you do what you want, but he's helping you.
Another metaphor we used is um bowling lane bumpers so um and i think this is more of the
flavor of what we were talking about before of shit just works like you they're like seg faults
wouldn't make any sense in this world uh because that's not a bowling lane bumper that's just like
something's broken like fix it So underneath this principle
Some of the ways to implement it
Would be blocks
So block based coding where there's no syntax errors
Or strong types
Which allow you to have no run time errors
And then amazing error messages
That help prevent bugs
So Elm is really known for having really readable type errors
Yeah
Doesn't this seem like a subset of shit just works,
like only logical bugs?
Yes, I agree.
I agree that only logical bugs is a subset of shit just works.
Another subset of shit just works would be...
No installation required.
Yes, no installation required.
And like, yeah, no installation required.
Because as I was just telling you,
I spent the last like i spent
five hours over the last two days installing trying to trying to install the software to get
um something to run and it's just it's just ridiculous to have to spend hours and hours
if you try if you want to get xcode to run it takes first of all you need a mac which is crazy
and then second of all it takes depending on your internet connection could take you a whole day just
to get up and running.
Why isn't it xcode.com slash create?
You know what's actually kind of pretty good at this
that I don't normally think of as good at this?
Like Sublime.
You don't use Sublime.
But like in the package manager, you just like install a random package.
And it just like works.
And I'm like really surprised that it just works
because I feel like it shouldn't.
Yeah.
So Sublime Text does an unbelievably good job
of package management.
So does the Atom Text Editor that comes out.
They have the same kind of system.
Ruby Gems, unbelievable.
Gem install.
We do have it working sometimes.
The reason I had such trouble was
I was installing a Haskell project,
and Haskell has a notoriously tricky build system. Even with
the new stack build system, which is supposed to be better,
it's still... See, with RubyGems
and Node and stuff, I still
run into issues.
Oh, you don't have this Xcode dependency.
Oh, you installed Xcode
Select and you actually need... God
damn it! I hate this shit!
Yeah. I'm pretty... This, I think,
will be a... Maybe not in this community, but I think this will be a, like, non-popular opinion with most programmers, that we need to move off the terminal.
Like, entirely move off the terminal.
There are uses for the terminal for some people in some use cases, but the vast majority of programming, like, web programming, systems programming, like, web programming or back-end programming,-end programming especially like should all be web apps like that you should never have to cd into
anything you should never have to or if not web apps like like that that's suggesting implementation
but like we shouldn't be typing like lines of shit into something yes you're right i'm getting
too much into the weeds here i the terminal is so central to everyone who ever codes,
and I'm specifically saying that is garbage.
Fair enough.
Yeah, the terminal is a bad abstraction.
It was good enough at the time.
The terminal was a beautiful abstraction for the time that it was built for.
I think we can move past it.
And we're really seeing engineers move off of that for GitHub Desktop.
Yeah, exactly. People are actually using GitHub
instead of like, oh, I don't need GitHub Desktop.
I'm just going to do everything in Terminal.
It's not cool. It's like, yeah, but you don't
have the color. It's just the worst
interface. It's just worse.
You'll say,
okay, I need to do some fancy rebase thing.
Okay, go use the Terminal. So it's like a default
good interface. Okay, I need more advanced that's not like taken care of in the default
case then maybe like terminals fine yeah or good enough yeah i agree with that i think the way i
explain this um maybe better is that the interfaces that programmers have to build
program computer programs should be of the same quality of consumer apps like Facebook or Instagram
or Pinterest or even like Salesforce, which people hate the interface of. It's still better than the
interface that programmers have to deal with. Yes. I really like that. I really appreciate that thesis.
Okay, so two more bullet points. Number five, no ceiling. So one thing that the Scratch team says about Scratch is that the floor is as low as possible.
So they're trying to make it as easy for anyone to get started playing with Scratch.
They're not as concerned with making the ceiling as high as possible.
So that means that sometimes kids will want to do more advanced things than Scratch,
but Scratch, that's higher than the ceiling.
Like returning things in a function? Yeah, so Scratch doesn't ceiling. Like returning things in a function?
Yeah, so Scratch doesn't allow you to return things in a function.
If you want to have a function computer value for you,
you have to save it into a global variable, which is really annoying.
I heard some gossip from someone that apparently someone implemented that
and it actually worked, and then there was some political thing or something
or the code wasn't good enough, and then they never released it.
Now, as a result, you cannot return things in functions.
Yeah, well, so if you want to return things in functions
in a Scratch-like environment, that's what Snap is for.
Or build your own blocks. It's a project out of Berkeley.
And it's also great, and they have Scratch.
It's basically Scratch, but you can return values.
You can have anonymous functions.
It's a little bit more advanced.
And just for trivia's sake,
this Build Your Own Blocks project was created to inspire the Scratch team
to include these features into Scratch.
Oh, that was what?
They never wanted it to be its own independent project.
They wanted to prove to the Scratch team that it could be done.
And so the Scratch team took some of their ideas, but not all of them.
So I don't think when Build Your Own Blocks was created,
I don't think you were able to even build a function at all, like a method.
Oh, God.
You weren't even able to build your own block in Scratch.
And so that was the main thing.
Oh, yeah.
So that was what Build Your Own Blocks did for Scratch. That's why it's called Build Your Own Blocks. Yeah, that was the main thing. So that was what Build Your Own Blocks did for Scratch.
That's why it's called Build Your Own Blocks.
Yeah, that was the whole point.
So underneath
No Ceiling, I have
it plays, integrates nicely with existing
technologies. It has bindings
to databases like Firebase
or bindings to
the Bootstrap UI, like CSS
Library. And it has really easy package
manager importing of other software
so
yeah, the thing that gets me to think of
I think my former co-founder
Zach Lotta of Hack Club
one of the really
important things to him is like, no fake
shit, it's like
I'm not actually directly quoting him, I just probably curse too much it's like it's like i'm not actually directly quoting him i just probably
cursed too much um it's like real like real stuff like we don't want to do this like fake child
stuff at heck we want to do real shit he's like that's the thing that's actually motivating oh
you're like you're like 10 years old we're gonna give you like this instead it's like no fuck that
like yeah that's that's kind of a bit of a separate point but it's
very very important that i've written about it i've talked about it scratch one of the reasons
the main reason kids don't like scratch is because it seems like it's for children
and it i spend a lot of my time when teaching scratch convincing children and adults that no
this tool is actually complicated and you know like
you actually are learning really intense things about programming it's like a hard sell and so
almost from a marketing perspective yeah um making it that that's more superficial like
making it seem like it's for adults is more important than it actually being for adults yes
but i think we could we could accomplish both yeah so so specifically in the the no ceiling part of
this is like i don't think that like like i guess it doesn't it's i don't think it's specific enough
to actually be true because like like in theory a literal no ceiling means like i could develop
like intense like graphics processing you could build a
spaceship with it i could build a spaceship with it like and like even within like quote-unquote
adult languages like you're not going to use like everything has a ceiling everything has like a
best use case like you're going to use like data stuff in python like sure you could do it in
javascript and deal with floating point games. That's a really good point.
There is no way
to have no ceiling. We can always just make the ceiling
higher.
There are different ceilings.
There's a ceiling
per vertical.
Per type of...
Maybe being specific
about which vertical.
Is it games? Is there no game ceiling?
Is it, like, 2D games?
Or is it, like...
Yeah.
I think what maybe the better way to explain it is,
it's maybe kind of, like, halfway in between what we're talking about,
the superficial and the deeply being able to do what kids want.
I think it should give kids the feeling that they can do whatever they want to that like it should give kids a feeling that this is as real as coding gets
and anything that they would want to do in this system they could do in a real coding system well
the question is like is it for kids no well it's for kids and everybody so i think that's like the
like i think as soon as a system is something that real people use, kids won't think that it's for them.
Yeah.
Yeah.
Oftentimes I think about using my kids as beta.
Like, that's very expensive.
Like, if my goal was to get kids to use something, like everyone to use something, but in order to convince kids to use it, I have to, like, prove to them that adults use it.
That's, like, a very expensive proof.
It'd be nice if the tool itself was but but shouldn't it in theory be if it is good enough for for adults wouldn't people just switch over
to it because it's better yes like uh definitely it seems like there's like a 10 year like kids
come to me wanting to learn java okay okay and like the reason they want to learn java is because
like for the last 20 years,
Java has been like an adult programming language.
So I don't want to have to wait 20 years
for like the industry to adopt it formally
before kids decide that they want to learn it.
So maybe it's not like adults.
Maybe it's just like 10 adults actually.
Like they're actual, like here's real,
like maybe it's like here's real crap
being built into this thing.
That would be cool.
If Instagram was built in the system or like if something
that they'd heard of was built in it that way do it or like even example real
yeah just a link you could point to like you could build something it looks like
this right like like we rebuilt Facebook on this yeah this is this is yeah you're
right you're right maybe maybe yeah that would be the cheaper the cheaper
alternative is like rebuild existing things with the thing.
Yeah, impressive, yeah. I like that.
Rebuild World of Warcraft. Good luck.
Yeah, that's true.
So this is kind of a tangent,
but it's something that I've been thinking a lot about with Woof,
my JavaScript programming environment,
to make games and animations.
I think it's a very powerful tool
that people could use to make like really popular multiplayer web games
or even iphone games if you package up into a web view i think it'd be like a really powerful tool
like unity but just easier to use but no one's doing it i feel like like i don't know how to
kickstart that process i don't know how to like explain to people that like here's this better
tool and just to give you a sense, I had a friend who
spent a number of weeks building a
Flappy Bird-like game in Unity. He was learning
Unity at the same time, and I showed him how
and kind of for fun,
I built the same game that he
was building, that he was building over the last
month. I built it in five minutes
in 20 lines of code in Woof, because
it's just like, it's a better tool.
And so I'm wondering how to get the word out
that this is a thing.
Well, it's different, right?
People who use Unity
aren't usually trying to build Flappy Bird.
They're trying to build intense 3D worlds
for virtual reality or something.
That's one of the uses of Unity,
in which case Woof wouldn't be the right tool.
But I think there's another...
People do use it to make simple games.
Really?
Well, what platform do people it to make simple games. Really? Well what platform
do people use
to make simple games in?
Like processing or
Yeah.
That would be a better example.
Yeah.
Well yeah
if someone wants to
yeah I would like to
convince people
who use processing
to use Wolf instead.
Processing is
but I don't think
but I don't think nobody
I don't think people
use processing
to make simple
guy phone games.
Like I don't think
anyone does that. Like I don't know if any I don't think people use processing to make simple guy phone games. Like, I don't think anyone does that.
I don't know if
any iPhone games
are made in processing.
It's probably
a better piece
of technology
than Unity
to make simple
iPhone games.
You can use
Unity on the iPhone?
Yeah.
Is that what people do?
Yeah,
so that's probably,
probably like,
the thing that
might be able
to make it
so that people
use woofer
processing in the iPhone
is an export button.
Because that's what Unity has.
You, like, file, export, and then, like, you pick a platform.
Oh, yeah.
And you just, like, you hit iPhone and you export.
That's the thing.
That's the thing.
That's the thing I need.
That total, yeah, that sounds, like, super slow because, like, I make games.
You know I make games with us?
Yeah.
So, like, I think the thing that, One of the big selling points is, like,
by the time you leave, you'll have an app on the App Store.
Yeah.
Like, I think that's, like, that's something exciting to me
because I don't know Swift or Objective-C now.
And, like, it's like, oh, I can just, like, make, like...
Like, I just...
There's this, like, large hurdle in my mind about, like,
I can't get something on the iPhone
unless I spend, like, two weeks learning it.
It's like, I've never been like, eh, I don't need to spend these two weeks i'll do something else and
so that would be a huge draw for me it's like this thing exports the iphone yeah i guess you'd still
have to like install you'd still have to like get a apple developer thing there's like all this
bullshit you have to do to like get it into the app store because Apple sucks. It's not a website.
You can't just host it yourself.
But you can do stuff on TestFlight, and maybe that could be built in.
Yeah, maybe.
It's what you're looking for.
If not an iPhone, then Android.
Start with Android.
Yeah, maybe.
Cool.
That's a good idea.
All right, so let's finish these principles.
Number six, simple made easy.
So this is an idea I'm stealing from rich hickey
and so uh to like define these words simple is something that is easy to understand
so imagine a knot a rope with one knot in it that's very simple um on the other hand easy
is something that is close at hand it's like it's you can be very lazy and do something easy so like imagine someone like sitting on a couch eating potato chips like it's very easy to eat
potato chips on a couch you don't have to move but it might not be simple but it's easy so yeah
so like for example could you could you give the same could you can you give a contrasting thing
for simple and easy for the same type of example no i don't have one of those examples really
available um i'll just give you more examples of simple versus easy well like um i can do a the same type of example? No. I don't have one of those examples readily available.
I'll just give you more examples of simple versus easy.
Well, like... I can do that.
I'll just talk a little bit more, and then you...
Okay.
So another example of something easy would be
gem install, like, dependency.
Because that dependency...
It was very easy to type those three lines,
and now things kind of work.
But you just introduce this big hairball into your program.
Who knows how that works, and who knows all the complexities you're going to have to deal with.
So it was super easy, not very simple.
Writing that same piece of code by hand is very simple,
because you're designing it by hand for your use case.
It's not easy. It might take you a year, but it's very simple,
and you understand all of the pieces.
So that's a bit about distinction.
Do you have an
analogy that you want to contribute uh maybe thinking about like administration for any kind
of organization it'd be really simple for the organization to be like a school be like we never
regrade papers like we will never regrade them no matter what so even if like a person had a really
really good excuse say like their home was burned down or something like oh sorry we can't
read papers you fail the class and you have to fail the school so that'd be very simple to always
keep that policy um well it'd be easier is like like for a given situation like oh like yeah we'll
just make it except we'll just say yes sure whatever that's easy for them to say yes yeah
but like it's no longer simple it's like a whole bunch of like um okay well in this situation we
can do it but what
about this other situation yeah exactly yeah so uh an ultimatum rule like that yeah it's very
simple from the perspective of understanding it um when when an easier system where it's like a
case-by-case basis that's really really complicated it's like hard i think the thing about easy things
is that they're hard to model sometimes it's more like and i think like
what you're getting at is rule by law is very simple and rule by man is very easy yeah and i
think it yeah so i think that anyways that's that's that distinction um so examples of things
that are easy when you pass when like um there's a's an example is in programming we have this distinction called pass by reference or pass by value into a function.
So if a function has, if a language has pass by value, then when you give a function an argument and then you mute and you, like, do things to that argument within the function, it doesn't affect the original argument that it was given.
But if you have pass-by-reference in your language,
then anything you do to the argument that the function was given
inside the function, that is reflected on the outside object.
And so Ritchie says, and I agree,
that pass-by reference
is very easy,
but very complicated.
Sorry, it's very easy, but not at all simple.
Pass-by value is harder.
It's not as easy.
You'll have to write more lines of code, but it's very
simple. Every time you pass
an argument to
a function, it's a totally different thing.
Interesting. I wonder if that's fundamentally
true. Like,
I think that the thing that's annoying about
pass-by-reference is that things are not
always pass-by-reference. So, like, in
JavaScript, like,
sometimes you can pass-by-reference, sometimes
you can get a pass-by-reference. Like, numbers are
pass-by-value, and, like, objects
are pass-by-reference. Yes. So it's
like,
oh, I don't know which one it is.
Is this one a pass-by-value or a pass-by-reference?
That does complicate things more.
I think Ritchie would say that in a system where
it's all pass-by-reference or all pass-by-value...
Pass-by-value is still the simpler
of the...
It makes you be explicit about when things change.
And it keeps the responsibility for the... It makes you be explicit about when things change. And it
keeps the responsibility for the
for each
name at the top
level. So when you have
passed by reference, you're all of a sudden delegating
the responsibility to all sorts of
other parties, and anyone can
change anything
anywhere, as opposed to
this thing.
It lives at this level of abstraction. like only you know you can give it to someone else and you can recommend a change
you can choose whether or not you want to like accept that change at the top level um but it
kind of keeps thing this is related to um an essay by andre staltz that i'll link to here where he has really good
diagrams about different arrows pointing
where like
who is in charge
of mutating state
and he has all these arrows
I can actually really
I can feel that because it's like there are all these
consumers like who knows which one
like fucked with it
it's like when you have a house, who left the dishes?
Yeah.
And so it's much easier if you have everybody be responsible for its own state.
And other people can read that state, but if they want to mutate it,
they can request a mutation, but they can't mutate it directly.
And so if you want to know how this one piece of state is modeled,
you look at one file.
Wow.
Okay.
I can feel that.
Yeah, it's way simpler.
Wow. Okay. So, you know, given that I One area. DAN GALPINIERI- OK. I can feel that. Yeah, it's way simpler. Wow, OK.
So given that I want to get away from files in
general and have everything be like a first class citizen, so
any mutation in any piece of state, in theory, if we built
the computer system right, it would be able to know, oh,
these are all the places this code might be edited.
But in the long run,
I think that's probably overkill
and pass-through value is just a simpler system.
So that's an example of simple made easy.
Another example of things that are simple.
So to be more clear,
simple versus easy is the distinction.
And then simple made easy
is when you take a concept that is
simple but by default it's kind of a hard thing to do it takes a lot of time and so you make
something that is simple easy so an example of making something that is simple but like hard
easier one example would be named arguments so most programming languages have positional
arguments so if you put the arguments in
a different position or you forget the position of the different arguments, the behavior of
the function is entirely different.
And this is very easy because you don't have to type the names of each of the arguments,
but it's not at all simple.
It's complicated.
You have to know more things.
And so a way to make this simple thing of named arguments easier is a structured editor,
which when you go to type a function, it automatically fills the names of the arguments you're going to need,
and you can then just fill in the blanks.
So a lot of the reason that code right now is easy but complicated is because you have to type every character when we
have a system where you you're not editing text and it's more structured we
can we can make simple simpler things easier with completions and you can see
this already with how Java editing Java code works because you can like add a
class and all that all sorts of scaffolding for you.
Boilerplate is making, as bad as boilerplate is,
boilerplate makes simple things easier
as opposed to Ruby magic,
which will just kind of hide it behind the scenes
and you don't see how it works.
That's easy and not at all simple.
Okay, so those are the principles.
Do you have any other thoughts jonathan like general
thoughts about designing on principle if like we should spend more time we should less time
thinking about these principles or just general thoughts about these principles or principles in
general i think uh i think it's probably fine i imagine just like working on it more we'll kind of
trying to actually build a thing we will elucidate which which
principles need to be really stuck to and like after doing more versions i think i imagine the
principles will change like a little bit or subtleties will emerge so i think just thinking
about them up front probably won't be so helpful cool great so next topic um so you built at the school for poetic computation you built a physical programming
physical computational project do you want to talk at all about the importance of physical
computing the limitations of screens that kind of thing at all uh yeah sure um I think this is an area I don't have that much familiarity with. First thing that pops up is like, people like, oh, physical computing, like physical computing is like really important and like, etc. Let's all learn Arduino. It's like, oh, God, Arduino is like, is like not simple or easy. Sorry. Well, I guess it's easier than
previous embedded
microsystems.
But
I think there's really
something that I think is
simple made easy
is, what's the
thing that you snap together on the
programming block bit? You bit, bit, bit?
You know what I'm talking about?
I think so.
It's like MIT, MIT Media Lab founder.
Oh, the magnets or the electronics?
Yeah, they snap together.
It's electronics, yeah.
Yeah, bit, bucket, block, bit.
I think I know what you're talking about.
Block, bit, bit.
Block, bit.
Snap, magnets Programming
Block, snap
Snap, magnetic
Electronics
There are a few
Products that do this now
Little bits
I think little bits does a freaking amazing job
At simple made easy.
What they don't do is, like, unlimited stealing.
Well, so are they truly, so I'll push back, are they truly simple?
Like, can you do complicated things with them?
Or is it that you can only do a few canned things?
Well, does simple imply that you can always do complicated things with them or is it like you can only do a few canned things well does simple imply that you can always do complicated things one of the great things about simple designs is
that you can build because each piece of your understanding is so simple you can build them
up into more complicated parts so so so in theory you can the problem is like the physical
limitations get kind of annoying Because like
Oh no, I ran out of room
I need to grab, no the block doesn't turn
90 degrees
So anyway, little bits is
Is a
I don't even, they're like
Electronic Legos that you can just snap together
So it's like
You'll have one block that's the power
And you can route You like you can stick it neck
You can snap another block next to it
Which is a slider and all of a sudden you have an output that modulates a slide like the power source from 0 to 5
you can snap like a like a like a power strip or like an LED strip next to it with like
with a bunch of LEDs and like if the LEDs have like
And like it'll change the brightness
of the led just by putting the slider there it just works um that's cool i think there's something
really nice about things that are kinesthetic that make things even simpler because they model
one-to-one like we as humans have like a very clear understanding intuitive understanding of physical objects
so it's like we know like like getting a child to understand the idea of abstractly two things
added together uh like two plus two is four but like they'll totally get it if you have like
like like two apples and then two other apples
how many apples will be four apples?
but if you try to teach them the abstract concept of addition
it's way harder
so by making things physical
we add this entirely more powerful affordance
of the physical world
we can try to model
physical and digital um but i think there's some there's some like cool stuff to be done
in in in by adding like this physical layer of stuff yeah i so i i'm not sure I understand correctly, but my fear with the system you described where you have a slider and you connect it to the lights and it kind of flows through is that it's limited in what you can do.
Given that, like what if you wanted that number, that slider to connect to two different LED strips?
Like can it fork?
Like, can you use...
Yeah, there's a fork.
There's a fork lock, so you can...
I guess what I'm wondering is,
how expressive is it as a programming language system?
Yeah, I mean, obviously it's significantly more limited
than what you can create with software.
I'm not sold on...
It's still expressive.
Yeah, it's still pretty expressive.
I think they have a really...
One model that I've
kept coming back to
and seeing a lot is the idea of a pipeline.
So in Node.js
middlewares, you just
keep passing an object between middlewares
and you just keep passing an object between middlewares and then you just keep passing a request
and then you respond with a response
and then you call the next function.
And that's a really simple abstraction
that allows you to kind of do anything.
And I think the little bits follow that pipeline model,
perhaps even more literally.
Yeah, yeah.
Pipeline model definitely is powerful powerful this isn't really getting to
like the point that you're making about
the limitations and introduced that one thing when bringing things physical but
I don't know I guess like that's kind of what comes up for me I don't have any
like like a strongly opinionated thoughts around cool physical things
except that i wish more existed yeah all right so there's this concept that i want to keep coming
back to which is that not every programmer thinks that programming needs to or can be drastically
improved the way you you and i do and so and we
all come to programming as beginners but we just everything is just taught to us we accept it the
way it is so what was your red pill when did you realize that things were bad and could be made
drastically better uh i don't know i think i think that's always just been my attitude
about everything
um
where do you think that came from?
that's a good question
I think it comes from a place
that everything sucks
uh
or like always looking at things like
oh this could be better
which kind of like I'm getting into meditation mindfulness now and realizing that's not necessarily the most healthy place to see
things from um but that definitely is a part of me that has that literally answers the question
of where do you think this comes from and where where might that attitude kind of come from for me
i don't know it's interesting i kind of looked at the pattern of all the stuff that i've ever
done and like when you kind of look at it someone could be like wtf like none of these things like how are
how are the things that you're doing cohesive from like teaching programming to like becoming
interested in meditation and mindfulness to like coding yourself to like uh doing non-profit work
um but the thing that coheat that the coifies, is that a word?
Coheres?
Coheres, all these things together,
is that I saw a lack of understandability in something and wanted to create clarity in that thing.
So meditation and mindfulness, I think,
is explained horribly a lot of times to people.
The mental models of what's happening are not clear at all,
and the feedback loop for meditation is like, like not clear at all and like the feedback
loop for meditation is like oh just meditate more is like not the most helpful feedback loop
um and it's yeah anyway so that's an area that i'm really excited about um
i don't know what i can trace that to that's that's a good question for me to kind of reflect
on okay um one thing that this made me think of is
I too noticed the fact that there's
like two sides to the coin
of appreciating what we have now
versus complaining about it.
There's like the static complacent mindset
versus the striving mindset
and how if you want to get things done in the world,
it seems like the striving mindset makes the most sense. But if you want to be happy right now in the moment the
complacent mindset might make more sense well it's cool that like the meditation mindfulness stuff
has like helped me realize it's like there there's actions and there's kind of like your way of being
so like the action of like making wanting to make thing like trying to create
things that have like good interfaces doesn't need to come from a place of wrongness where it's like
oh there's all this sucks like this is terrible it's like oh wouldn't it be like cool if we could
do this so it's like kind of an attitudinal thing where it's like how basically how angry are you
like how strong are your cortisol levels when you're doing this thing are you like blaming or making someone wrong when you're doing this or so i i find that i'm i often
get most excited about the future of programming and explaining why i think it'd be better when i
explained about in the context of how bad the things we are now like i find that it's easier
sometimes i think this is is also true in education.
When I'm thinking about the future of education,
it's easier to explain how things could be better by complaining about what is,
as opposed to talking about what could be.
So to make this conversation a little political for a second,
like, should we not do that?
You can give it a try.
So it's like, we don't need to take sides in this argument,
but one thing that we're seeing with our new president,
there are some people who are very opposed to our new president.
And one not so helpful, so say you have someone who is very for our president
and someone who's very against him.
If there's a person who's like, our president is really bad for X and Y reasons,
he's horrible, blah, blah, blah, blah, blah,
how likely is the person who's supporting our president likely to listen probably like not
like and this goes for anything right like like my my friend wrote a article about um her her her
conversation conversation like um what she was having with her family about this particular issue um and like
my grandfather is like significantly less likely to like kind of empathize and get me if i'm just
telling him how like terrible of a person he is for voting for this person like that that's not
a helpful conversation so i imagine like analogously if we just tell the people who are like building
these systems that are existing all of your stuff stuff is terrible that might not be the most
way to
get people bought in
I definitely agree from a buy-in perspective
shitting on what exists now
might not be
the best way to go about it
I'm wondering just interpersonally
because sometimes I try and challenge myself
to not think negatively and only think positively
try not to think about how another Because sometimes I try and challenge myself to not think negatively and only think positively.
Try not to think about how... One of the reasons I try and do that is because if you think about how to make something that's better than what we currently have,
it kind of might trap you in an innovative or iterative thinking where you're trying to make something that's incrementally better than what we have
when what we're trying to do is to create something drastically better than what we have when what we're trying to do is to create something drastically better than what we have so do you think about yes like whether or not you should
yeah not think about the tools we have now and think more abstractly I think
like in terms of what we actually think about I don't think I'm advocating for
changes on that I think it's just like thinking about like when we're building
these things how angry are we or how depressed are we?
Yeah, the emotions behind it are what matters.
Yeah, like how persistent are negative emotions? I imagine like from like a physiological perspective where psychological things directly map to physiological, like probably be more productive in a not stressed state.
However, maybe it's helpful to start from the state of seeing everything
as bad okay i don't get stressed about this like okay what do i need to do and get excited about
the momentum as opposed to how bad things are yeah well i guess um as someone who wants to
make things better i get excited when i see that things are bad like sometimes i get sad when i
see that things are good it's like i have less things to do now. Yeah, I feel the same way as you,
and there's two parts of my brain.
There's one part that's like, yeah, I get a lot of shit done,
and I get really excited, and it's like,
oh my god, there's so much opportunity!
And there's another side that's like,
but Jonathan, this is so miserable!
It's like, mm, okay.
Still trying to have those parts in my head
kind of talk it out in a not so violent way.
Cool. So this
question is, I'm asking you to play the
contrarian game. So what do you know to be true about
the future of coding that nobody else does?
So the first thing
that comes to mind
for this is less
about the future of coding
and more about the future of coding education yeah and
i don't think i'm the only person to know this to be true but i see a lot of like i don't see
too many people explicitly acting on it that much um where the biggest blocker to learning code
i don't think is explicitly the difficulties of understanding
the abstractions because of intellectual barriers themselves.
I see it as emotional blockages.
The reason why I looked at all of my students in the past, and the thing that gets in the
way for them usually isn't, I can't figure it out.
Everyone can figure this out if they put enough time and effort into it.
It might be not the best experience, but they can do it.
They might struggle, and it might be really intellectually hard, but they'll get through it.
But the thing that gets in the way, if they start thinking, oh, I'm so bad, I'm so bad at this, programming isn't for me,
all those fixed mindset type things and uh for those of you who aren't familiar with this
it's like the work of um carol dweck where you can i don't feel like probably shouldn't explain
the whole thing should we explain the whole thing maybe do the 60 60 seconds 20 second 20 second
basically it's like do you believe that your abilities at a particular skill is changeable
or is it fixed?
So if I say,
oh, I'm not so good at dating,
I have a fundamental belief
that Jonathan fundamentally
has a lesser ability to date
because of genetics or something.
I think I might have a quick way.
I see it as a self-fulfilling prophecy.
So if you think that your ability
is fixed in a certain domain, it is true. It willfilling prophecy so if you think that your ability is fixed in a
certain domain it is true it will remain fixed but if you believe that you can get better at
something then that will also be true and you will be able to get better at something yeah and the
logical the logical train of thought for that is like if i think my ability is fixed i'm not going
to try to change it and if i don't try to change it then obviously it won't get better yeah and
it's really all about the amount of time you spend doing a thing and so if you think you're just
going to be bad at programming for forever you won't spend a lot
of time doing it and that's why you will that's why the prophecy will be fulfilled so like this
is just one of those emotional things uh that i think kind of gets in the way there's also like
kind of cultural emotional things that are like there's like some feeling of like arrogantness
that sometimes exists in programming oh look at like, oh, look at me.
I did this really complicated thing in one line of code.
I'm fucking awesome.
Y'all are dumb.
I mean, obviously, a lot of people aren't like that.
And there are a lot of people who are the stark contrast in this community as well.
But there's some aspects of afraid of feeling stupid in this space.
So I think emotional blockages are significantly larger stumbling blocks
for someone to become confident in programming.
Women in technology is a really hot topic for a while now.
And like hearing stories from my friends,
like there's a friend of mine who like is like super nerdy,
is super like operationally,
like loves like thinking about how do I like define rules
so that we can always follow those rules
and like things will just like work that way
and just like keep it really like simple,
kind of referring to things earlier and like making everything really explicit and clear and
like it's like she has like the like like one like one i don't know powerful like having that kind of
thinking will like kind of make you like i'm afraid to say natural programmer, but there's inherent excitement in programming for you.
I could say that by specifying these rules and stuff.
However, she shared with me that when she went into CS classes
that were filled with men, she was super uncomfortable
and she always felt like she was dumb, when all these like a lot of these bunch of these men like
started programming when they were in like fifth grade it's like oh my god i just started coding
like i can't do this like i think those are the like and like she started learning coding like
learned super fast now after she overcame that fear and like like i think these are the types of emotional blockages that really kind of
get in the way and like maybe kind of putting it on more on the uh more on the specifics of what
we're talking about when code doesn't work and all of a sudden like the error is like seg fault like
which is essentially like fuck you like like you fucked up um we can make those errors like even like if we
keep it exactly the same it's like a picture of a kitten that's like hey like this doesn't work do
you want to try again like i i imagine that'd be like a lot less scary and you see like clown
academy kind of doing that with their like little like thing about bob yeah Yeah, exactly. Yeah, thanks.
While I agree with you that most people don't think that that
is in the future of code,
so this is the contrarian game.
So most people
wouldn't agree with you, I think,
or maybe wouldn't put as much importance on it as you do.
I, however, also happen to agree with you
on this.
And we do a number of things at the coding space to, like, deal with these things.
Like, one of the main things is pretty straightforward.
We teach kids in person.
We, like, have teachers there who can, like, physically, emotionally.
When I say physically, I mean, like, being near them.
And so, like, and kind of notice when a kid is sad with their body language and say like,
Hey,
like you seem sad or tired or anxious,
like let's walk or talk or like,
like smile or put your computer down.
There are all these things that a teacher can do to address these emotional
things when they're in your physical space.
And I think when you're thinking about teaching people coding or anything at
scale,
when the emotional issues are so paramount, how do you do it when you can't physically be in the same space as all these kids?
That's one of the things I think about.
And then as far as the women thing, because there are not many women in tech, women don't want to be in tech.
It's kind of like a negative feedback loop.
One of the ways we solve that is by having girls only computer science classes and that's one of our most popular
programs in fact our girls only computer science program this summer is significantly bigger than
our co-ed computer science program which we're very proud of she's she's now in an all women's
coding program your friend yeah is now in an almost oh i think i know his friend yeah oops that's all right um well like like if you were thinking from first principles right like
if that was the question you were trying to answer if that was a principle like i think
like if the principle of like emotions first or something yeah was it was a principle of like
like even though you know it like it's not i don't
that's a great principle it's not a principle in the in cycle yeah you're right emotions first
because that is a um seymour papper does a good job of making that a principle like emotions first
and and in order for a kid to feel like good at something and to like spend the time like kind of like another
so as we talked about with fixed mindset and growth mindset the real thing that matters is
how much time you spend doing a thing and so their emotions matter so much because if you enjoy
something and you feel like you're good at it you feel like it's something that makes up your
identity and you'll spend so much more time
doing it and you get so much better at it and then it'll make an even bigger part of your identity
and so he spends a lot of time thinking about emotions from that perspective making sure that
his programming language allows kids to do things that they intrinsically want to do
and you know makes them smile makes them happy and makes them feel like they own the knowledge
so that part of emotions i think he does like a great job at addressing and that's like all the
typical things that people think about that are really frustrating with programming
like and i think there are like other things too like the things that you say that you do at the
coding space with physical teachers yeah like it's hard though how do i how do you do that in a in a
in a programming language so like like it's a good goal but like hey how do you do that? In a programming language. It's a good goal, but how do you do it?
So maybe what that looks like is the sub-bullet point of,
I'm just whiffing here.
What's the word? Riffing? Riffing.
Yeah. is maybe the
interface is
collaboration first.
That's definitely going to be
how it is. Is that in there?
No, it's not in there.
But that's obviously a principle.
So it's like, can you just
how easily can someone else
That's like a sub-bullet in workflow.
One of the workflow balls is that like how collaboration is like a first or like it just works or i don't
know whatever yeah it's definitely in there but like if we think about it from like an emotions
level like okay humans are helpful humans like people like to collaborate like i don't know i
think there are other ways that like if we really stopped and think about it and said like we want
to make a programming experience where the most important thing is emotions that are not the frustration ones around ship networking.
Yeah.
I think that's an interesting question to ask.
Yeah. entirely cloud-based and collaborative, like Google Docs kind of style collaboration, wouldn't it be neat if we had, like, a mentor program
where people who are more experienced signed up
for different time slots
so that when a new person came to the website,
they were immediately dropped into a pair programming session.
Like, everyone's first time on the website
is a pair programming session.
Wow, yeah.
Wouldn't that be neat?
And I guess, like, one way you could scale that is,
instead of having mentors,
just everyone
who goes on the website immediately is paired with another anonymous user who might also
be dealing with it for the first time.
Mm-hmm.
Like, everyone is...
Yeah, yeah, yeah.
Like, you know, there's no solo mode.
Like, by default, you have to be programming with someone.
Wow, that's cool.
Yeah, I think, like, the whole, like, it's, like, how do you, like, make a rubber duck
not, like, as shitty?
Yeah.
So, explain the rubber duck metaphor so like
uh to my understanding um like uh some like software companies or something used to like
give their employees rubber ducks so that like if they had a problem they could talk it out to the
rubber duck and like what some what people do a lot including myself is like they might be like hey person like can you help me on this problem the
person will be like sure it's like okay so my problem is this thing and like it's because of
this oh okay okay cool like i figured out my own problem and the person's like you're welcome i
guess you just um so like instead of doing that to another person you can do it to another rubber
duck but like the advantage of another person is that like a person feels like they're listened
to and therefore feels like they want to speak more.
So it's like an emotional thing.
So like having another human has beneficial for that.
Cool.
So do you have any ideas of people or technologies in this space that we should keep our eye
on?
Is it like, do you have any programming languages or researchers?
You're the person
I would come and ask that question, so
I would defer to you on that.
Do you have any ideas of
things or technologies or people that are
overhyped or that we're focusing on
too much in this space? VR or
AR or physical computing or
computers, anything that's
overhyped uh i think yeah i think physical computing is a little bit overhyped not because
i don't like you kind of heard me kind of like saying how awesome physical computing is but i
think people are missing like the subtlety of like good user interfaced physical computing is really
important trying to learn arduino right now is
like the most like oh my god arduino is overhyped you think yeah maybe maybe it's just arduino but
there's like not that many things that are like super obvious and easy to use like physical
computing products that's funny i wonder if there's a business in making a better arduino
it sounds like you think there is yeah i think there definitely is like a oh that's interesting yeah even like raspberry pi or like those things like raspberry pi is great if you're like a
software engineer it's like oh great i can have this like linux thing in this like if you're like
a beginner person it's just like wait how do i even like like make one of these switches turn
on like it wasn't that easy for me to figure out how to do that yeah um i have i've had similar
experience with arduinos and and stuff yeah um all right last question what do you think what
do you see as the biggest obstacle to the improvement of of coding like the vision of
coding that the yeah that i have what's the obstacle why isn't it happening i think we
touched we touched on this earlier.
It's a cultural thing.
And Brett Victor hinted at
this talk, or Brett Victor did give this
great talk about he pretended
he was like...
You probably described this better than I can.
That particular talk.
Oh, no, go for it.
I think you actually...
So it was at Dropbox.
Brett Victor dressed up like he was in the 70s,
and he talked about the future of programming
from the perspective of somebody in the 70s.
And so that decade, the previous decades,
saw many, many improvements in programming language abstractions.
We went from programming punch cards in binary
to assembly to Fortran to C.
We kept jumping levels of abstraction
and so he projected that out
into the future about how we were going to keep improving
and the reason
that the talk was interesting and funny even
was that none of those things happened
we kind of stopped right after
we stopped improving, we stopped jumping levels of abstraction
right after
the time in which he gave the talk
so like the specific things he referenced
like he was like okay like punch card programmers when punch card programmers saw assembly programmers
like that's not real programming like you can't program like that like you gotta use punch cards
and and then like there are people there are like a few people that like were like no no no like we
really like like this assembly thing is like
we're on to something here but everyone else like the status quo is like this is different this is
weird therefore we don't like it like standard human psychology yeah um so like then like
assembly became a thing and everyone like was like wait but see and then like assembly people
like that's not real programming you can't even even do this. And then basically, as soon as people reach a comfort level,
anything that's different from that status quo is considered weird.
It's the same all the way that the current isms happen.
Oh, you're a blah, blah, blah race,
and because this blah, blah, blah race is a minority in this group,
they're weird just because they're not so many.
But that's horrible.'re not so many but like that that's
horrible like it causes so many problems um so like i think that's the that's the biggest the
biggest thing that gets in the way it's a terminal is great what's wrong with terminal i use terminal
what's wrong with you okay it's just like the regular human biases of like the availability
heuristic the uh like that's the one where
maybe that's like the wrong bias but like the regular human biases of like once you learn a
tool you think that well actually i don't know if this is a human bias but it's a common
thing that uh you think in the tools that you know well there's that one but i don't think
that's the largest limiting factor i think it's more about it's not the piaget
like like I think in terms of my current mental models it's like anything that's different for
me and what I do is bad yeah um it's something that I've seen whenever I tell people that the
future of coding isn't in text it isn't in typing it's more in drag and drop weird yeah well it's
more like oh like that that'll never be...
My favorite is when I talk to people
about how much better we can make software systems
and they're like lifelong engineers and they say,
what do you mean? They're pretty good.
They can't even picture how they could be better.
But even when you show them something
that's better, like GitHub Desktop, they're like,
I don't need GitHub Desktop.
They don't think that
they need it.
They think, yeah.
I'm smart enough to do it,
write all these really complicated SQL queries
and Git commands
because I don't like abstracted mental models
because I like to keep everything in my head.
So I actually never have a to-do list.
I just write, I keep everything in, like, way up.
Okay, it's cultural
you think you think the biggest the biggest obstacles here are cultural so i think like
the interesting question to ask is like for for like to investigate other areas of culture that
have been able to shift independent of programming and see how they were introduced those types of
innovations like for example like something that comes up for me is this article by atul gawande who wrote about um
medical history where like back in the day like doctors were badasses badass white men in frock
coats yeah i'm a fucking doctor i have like a badass black frock coat and he's like cut open
my patients and like like go to my next patient i'm like yeah it's like a rock star so it's like
they never clean their shit and as a result like people kept dying and people like why the fuck are people dying like i just cut
this person open and cut another person open like why is this person dying like how is like the aura
of the first person being sick transferring to the second one and like they've discovered like
bacteria but even after bacteria was discovered people were like no i'm like a rock star like
surgeon dude like like fuck bacteria bacteria
like these little small things i'm a man like i don't need that um and then it took like a really
long time i forget how long until like people started wearing like white coats and like washing
their hands and like washing your hands like who the fuck does that um and like there's like a
group in germany with this culture shift that like took so long for this
to propagate so like i mean his his answer is like shit just takes long to propagate yeah so
i think what's notoriously famous about that example is he says that the way that he was
able to get this culture shift was that the old doctors needed to die and did he say that like
not like they just had to wait for them to die like they didn't
have to kill them they just had like the old like that was all he said that was how long it took
yeah like yeah i don't know who said this but that's what i remember from this example is that
the culture shifted as the old doctors died and the new doctors just like learned it the right way
like couldn't you like i don't remember that i just remember there's like this new group in
germany or something that like had this kind of culture.
And I think we're seeing that now, right?
I don't think we need to wait for people to die.
If you look at the whole tech startup thing,
maybe it's the younger generation first started to do it,
but you see older people try to get into it now
who've never been entrepreneurs.
Well, I guess what I'm getting at is
the kids will always do the new fun thing. the kids don't have the culture set as much so
they'll like be more early adopters when you want to like if you're wondering when will um
xcode be as easy to use as like well when will xcode be easier to use for example
like you kind of have to wait for the kids who are in the new culture to start running Apple.
You know,
like you need,
like if you want to know when they're going to require white coats in
hospitals,
like the light,
the leader of the hospital has to be brought up in the culture of germ
theory.
And so like the old leader of the hospital kind of has to retire.
It doesn't have to die.
But like,
you know,
like the,
the,
the new,
the new culture has to come in.
It'd be neat if we could just change the minds of the people in charge now.
I mean, when has that happened?
If we were to query history
either in tech or in other areas,
like agile software
development as opposed to waterfall?
I don't know about that. I feel like
agile software development, people were trained in it
and then they went to run companies.
Yeah, that's probably the case.
Yeah, it's
i don't know but one thing to that we can end on is like i learned um back back in the day like when after world war ii nestle was trying to figure out how to get people to drink coffee
have you heard about this no so it's like okay all of japan currently doesn't like coffee if we
get everyone in japan to drink coffee we'll have like a lot more business it's like okay all of japan currently doesn't like coffee if we get everyone in japan
to drink coffee we'll have like a lot more business it's like a whole country um so nessie's like hmm
what to do the solution they like sold coffee flavored cookies to kids it was like a kid
branded coffee cookie thing or something yeah and then like the next as the kids grew up they like
started to buy coffee like
holy crap that kind of like large-scale social manipulation like blew my mind but i think that's
kind of what i would like to do with a programming tool i'd like to build something for children
that allows them to build what they want to build now and then have it just scale with them as they
grow up and become older and have them you know use it in class and use it in hackathons and all
of a sudden they're like oh now, now I want to start a company.
Might as well use the same tool.
That'd be ideal.
Cool.
Well, thanks so much for coming on, Jonathan.
It's been great talking to you and I hope you're out and here again soon.
Thank you for having me.
This was a fun conversation.