371: Four-Letter Technologies
00:00:00
◼
►
Unfortunately, the barbecue place I think is closed.
00:00:02
◼
►
- Is that part of the ATP tradition?
00:00:04
◼
►
- Yeah, usually my editing reward,
00:00:06
◼
►
barbecue places are typically only open
00:00:07
◼
►
from Thursday through Sunday.
00:00:08
◼
►
That's just like a barbecue cultural thing.
00:00:10
◼
►
I don't know why. - What?
00:00:11
◼
►
- So usually, my Thursday tradition is I edit the show,
00:00:15
◼
►
somewhere around noon, hopefully I'm done,
00:00:17
◼
►
or at least I'm almost done, I take a barbecue break.
00:00:20
◼
►
That's my reward to myself for a solid morning of work.
00:00:25
◼
►
- But no more of that, right?
00:00:27
◼
►
- What am I gonna eat?
00:00:28
◼
►
- Yeah, I don't know, I don't know.
00:00:30
◼
►
- God, I can't make this myself.
00:00:33
◼
►
A lot of the stuff that I eat, I can make myself.
00:00:35
◼
►
I can't make this myself.
00:00:36
◼
►
- You got your own coffee roaster.
00:00:37
◼
►
It's only a matter of time
00:00:38
◼
►
for you to get your own smoker in the backyard.
00:00:40
◼
►
- Yep, that's true.
00:00:41
◼
►
(electronic beeping)
00:00:42
◼
►
- So tonight, we have a special episode for you,
00:00:45
◼
►
and we are not really gonna be covering the coronavirus
00:00:48
◼
►
and all of that terrible news,
00:00:50
◼
►
but we're hoping that with this show
00:00:52
◼
►
and hopefully future shows,
00:00:54
◼
►
we'll be able to give you a little break from worrying,
00:00:57
◼
►
because gosh knows, I'm doing enough for everyone.
00:00:59
◼
►
So with that in mind,
00:01:01
◼
►
we actually have something extremely special planned,
00:01:04
◼
►
and I wish I could say that we planned it
00:01:05
◼
►
specifically during a pandemic,
00:01:07
◼
►
but thankfully we didn't, but nevertheless, here we are.
00:01:10
◼
►
And instead of some cutesy, funny intro,
00:01:12
◼
►
we're just gonna get right to it
00:01:13
◼
►
and say hello again to Chris Lattner.
00:01:16
◼
►
- Hi guys, it's great to be back.
00:01:18
◼
►
- Well, thank you, thank you for coming,
00:01:20
◼
►
and we are very excited to have you.
00:01:22
◼
►
And I figure we could start by just asking,
00:01:24
◼
►
what are you up to, man?
00:01:27
◼
►
- Lots of things, aside from sheltering in place.
00:01:29
◼
►
Staying very busy, I started a new job at Sci-5
00:01:33
◼
►
a couple of months ago, just under two months ago now.
00:01:37
◼
►
And so I'm learning a lot of new things
00:01:39
◼
►
and I'm exploring new areas,
00:01:41
◼
►
also staying in touch with a lot of other familiar things.
00:01:44
◼
►
Just generally keeping really busy.
00:01:47
◼
►
Actually, this weekend finished a package shed,
00:01:51
◼
►
which is a little hut looking thing
00:01:53
◼
►
that has a tiny roof on it
00:01:55
◼
►
that keeps packages from getting rained on.
00:01:58
◼
►
- Marco just made a house for his garbage, very similar.
00:02:00
◼
►
Yes. - Yeah, yeah.
00:02:02
◼
►
- Yeah, does yours also keep raccoons out?
00:02:04
◼
►
- No, it doesn't, but the kids like playing it.
00:02:08
◼
►
- So last time we talked to you, it was like three years ago,
00:02:10
◼
►
and I think we talked to you like right after you left Apple.
00:02:13
◼
►
Since we last talked, you went to Tesla,
00:02:16
◼
►
then you left Tesla and went to Google,
00:02:18
◼
►
then you left Google and went to Sci-5.
00:02:20
◼
►
Can you give us whatever kind of summary
00:02:23
◼
►
you feel comfortable with?
00:02:25
◼
►
Explain that journey to us.
00:02:27
◼
►
- Okay, so how should I say this?
00:02:29
◼
►
Let's start with Tesla.
00:02:30
◼
►
The journey into Tesla was a big adventure,
00:02:33
◼
►
one that I knew was fraught with peril and opportunity.
00:02:36
◼
►
The Tesla Autopilot team had been through several leaders
00:02:41
◼
►
and they each had short time horizons.
00:02:44
◼
►
And my mental thought process going into this is that,
00:02:48
◼
►
you know, success over the long term wasn't highly probable,
00:02:52
◼
►
but I bet I would have a lot of really interesting
00:02:55
◼
►
life experiences, learn a lot,
00:02:56
◼
►
and then have some more stories, which I do,
00:02:59
◼
►
that I don't really wanna share.
00:03:02
◼
►
The exit was Elon and I had specific differences
00:03:07
◼
►
of opinion about leadership,
00:03:08
◼
►
decided that we could not get along together,
00:03:12
◼
►
and then he and I decided to part ways.
00:03:15
◼
►
The entire Autopilot team is very challenging,
00:03:18
◼
►
but also really awesome and really exciting team.
00:03:21
◼
►
That's a very specifically weird dynamic
00:03:24
◼
►
and Tesla is a very fascinating place.
00:03:27
◼
►
- I always wonder for people who have experiences
00:03:32
◼
►
and jobs at important companies during exciting times,
00:03:35
◼
►
so on and so forth, very often like most of them will,
00:03:38
◼
►
like you will not wanna talk about specifics
00:03:39
◼
►
'cause like whatever, you move on, you learn something,
00:03:42
◼
►
you don't wanna dish a bunch of dirt or whatever.
00:03:44
◼
►
But I do always wonder if there comes a time where we'll,
00:03:48
◼
►
we've referred to this a lot on the show
00:03:49
◼
►
where they'll be like, oh, everyone's retired
00:03:51
◼
►
and it's 50 years after all their careers happened
00:03:54
◼
►
and they wanna write about, here's what really happened,
00:03:56
◼
►
here's what it was like in the early days making the iPhone.
00:03:58
◼
►
A couple people have had books like that,
00:04:00
◼
►
like Ken Kuchen, did we go on that?
00:04:02
◼
►
Do you ever think about sometime in your old age
00:04:05
◼
►
when you're retired and the world has moved on
00:04:08
◼
►
and we're all using our holographic AR glasses, phones,
00:04:11
◼
►
or whatever, would you write a tech memoir,
00:04:14
◼
►
here's what it was like to be at these important companies
00:04:17
◼
►
during these important times and here are my experiences
00:04:19
◼
►
or do you just have no interest
00:04:20
◼
►
in ever sharing that information?
00:04:23
◼
►
- I have no objection to sharing that.
00:04:24
◼
►
I think that for me it's just a question of time.
00:04:28
◼
►
It's also a question of talent.
00:04:29
◼
►
I don't know that I'd be any good at writing such a thing.
00:04:32
◼
►
It would probably turn out really dry and boring.
00:04:34
◼
►
- Well, they have people for that though.
00:04:35
◼
►
- Yeah, I suppose.
00:04:37
◼
►
I guess, I mean, I can tell you things that I liked
00:04:39
◼
►
and disliked about Tesla if that's what you're asking.
00:04:41
◼
►
- Yeah, I know it was more of a meta question of like,
00:04:44
◼
►
'cause you don't wanna talk about it
00:04:45
◼
►
like when you're still in your career
00:04:46
◼
►
'cause you don't wanna burn any bridges
00:04:48
◼
►
and so on and so forth,
00:04:49
◼
►
but if the job that you had was of historical significance,
00:04:53
◼
►
and I think many of your jobs have been,
00:04:55
◼
►
it's the type of information that is valuable to history
00:04:59
◼
►
and useful for people in the future to know
00:05:01
◼
►
what was it like.
00:05:03
◼
►
If you could read Andy Grove's book or whatever
00:05:05
◼
►
about Intel in the early days
00:05:07
◼
►
or you wanna read about the creation of the transistor
00:05:09
◼
►
or the creation of Unix or what it was like to make C
00:05:12
◼
►
or the early days of the Google search engine,
00:05:14
◼
►
I think a lot of your experience already falls
00:05:17
◼
►
into the category of being worthy of being recorded
00:05:20
◼
►
from your personal perspective when you're retired sometime.
00:05:24
◼
►
And again, we say, oh, I don't have enough time.
00:05:25
◼
►
Someday, I don't know if this is true,
00:05:27
◼
►
maybe you think this is not true,
00:05:27
◼
►
I assume someday you will retire.
00:05:29
◼
►
Now I'm starting to question that of saying
00:05:31
◼
►
maybe you're just gonna drop dead
00:05:33
◼
►
in front of the keyboard someday, but assuming--
00:05:36
◼
►
- I think that's quite possible, yeah.
00:05:38
◼
►
- Assuming you ever do retire,
00:05:40
◼
►
I think we would all love to read that book.
00:05:41
◼
►
- Yeah, I mean, I'd be very open to writing that.
00:05:43
◼
►
I just need to have the spare time
00:05:44
◼
►
to actually collect the thoughts and--
00:05:46
◼
►
- It's like retirement to you.
00:05:48
◼
►
Spare time is what you get when you stop working.
00:05:52
◼
►
- I mean, there's an aspect of my personality
00:05:54
◼
►
that I don't seek out the easy, cushy jobs.
00:05:57
◼
►
- I know, I know.
00:05:58
◼
►
- I seek out the hard things that seem worthwhile.
00:06:01
◼
►
- All right, so from now on, we can go to Google now,
00:06:03
◼
►
which is a hard thing that seemed worthwhile, I guess.
00:06:06
◼
►
- Yeah, well, so I guess a couple of different things.
00:06:07
◼
►
So when I joined Google, I joined the TensorFlow team,
00:06:11
◼
►
and actually at the time, I had talked to Sci-5,
00:06:15
◼
►
and I had decided that Sci-5 was too early on,
00:06:18
◼
►
and I didn't really understand where they were going,
00:06:20
◼
►
and it didn't seem like the right thing.
00:06:21
◼
►
And when I was talking with Google,
00:06:26
◼
►
the pitch was pretty simple.
00:06:27
◼
►
I was very interested in machine learning technology.
00:06:29
◼
►
That's something I was interested in back at Apple,
00:06:32
◼
►
but wasn't able to do anything with it.
00:06:34
◼
►
In the case of Tesla, one of the things I did
00:06:37
◼
►
was I force pivoted the technology stack
00:06:40
◼
►
off of this other machine learning framework called Caffe
00:06:43
◼
►
onto TensorFlow.
00:06:44
◼
►
And so we moved to TensorFlow to get multi-GPU
00:06:46
◼
►
training support and other things like that.
00:06:49
◼
►
And in the process of doing that,
00:06:51
◼
►
I learned quickly that TensorFlow is a good thing,
00:06:54
◼
►
but it was a ways away from being a great thing.
00:06:58
◼
►
And so one of the things that attracted me to Google
00:07:00
◼
►
was that TensorFlow is an incredibly important
00:07:02
◼
►
technology platform.
00:07:06
◼
►
It's also very much a developer tool,
00:07:07
◼
►
which I have a lot of experience with.
00:07:10
◼
►
The machine learning aspect, I think,
00:07:12
◼
►
was very appealing to me.
00:07:13
◼
►
I had a good friend that said,
00:07:14
◼
►
"Hey, if you wanna learn about machine learning technology,
00:07:16
◼
►
"go to one of the best places in the world that's doing it."
00:07:18
◼
►
And I think that was, I don't regret that at all.
00:07:21
◼
►
And so the calculus going to Google was,
00:07:26
◼
►
Google's also a legendary, amazing place to work,
00:07:29
◼
►
a lot of smart people.
00:07:30
◼
►
I know many people that are there.
00:07:32
◼
►
And so I was very excited about that.
00:07:33
◼
►
And I'm also very excited that I joined
00:07:35
◼
►
and had a great time there and did some amazing things.
00:07:38
◼
►
- Some of the stuff you did at Google was,
00:07:40
◼
►
I guess, working on TensorFlow,
00:07:41
◼
►
but also there was a Swift angle on that as well.
00:07:44
◼
►
It was kind of, I don't know if,
00:07:46
◼
►
well, you can tell me which was the cart
00:07:48
◼
►
and which was the horse,
00:07:49
◼
►
but basically modifications were made to Swift
00:07:51
◼
►
that made it easier to work with machine learning stuff.
00:07:54
◼
►
And they weren't features just for that purpose,
00:07:56
◼
►
but they happened to lend themselves to that purpose,
00:07:58
◼
►
and you happened to be doing that with Swift at Google.
00:08:01
◼
►
So it's all, how does that work out, how did that connect?
00:08:04
◼
►
- Yeah, I can explain how that all went down.
00:08:06
◼
►
So what I was hired to do, my starter job, you could say,
00:08:10
◼
►
is Google was developing this machine learning accelerator
00:08:14
◼
►
called a TPU.
00:08:16
◼
►
There's multiple generations of TPU.
00:08:17
◼
►
The one I was working on was the first training accelerator.
00:08:20
◼
►
The idea of TPUs is to use custom silicon,
00:08:23
◼
►
a specifically machine learning design processor,
00:08:25
◼
►
to be able to do machine learning training,
00:08:28
◼
►
both faster than you can do with a GPU,
00:08:30
◼
►
but also, and I think more importantly,
00:08:32
◼
►
at a much bigger scale.
00:08:33
◼
►
And they were just at the point in time
00:08:34
◼
►
where the hardware was now getting installed.
00:08:38
◼
►
They had significant software challenges,
00:08:40
◼
►
integration challenges, programming challenges,
00:08:42
◼
►
and they wanted to launch it in cloud.
00:08:44
◼
►
And so making a public product out of something
00:08:47
◼
►
that's not quite ready yet was a big challenge.
00:08:51
◼
►
And so my starter project was to get cloud TPUs to market.
00:08:56
◼
►
You can now get access to them now through Google Cloud.
00:08:59
◼
►
They're a great product.
00:09:00
◼
►
They're really, really awesome.
00:09:02
◼
►
And so I started working on that.
00:09:04
◼
►
Along the way, there's this discussion about,
00:09:06
◼
►
okay, well, how do we get machine learning technology
00:09:08
◼
►
to go to the next step?
00:09:10
◼
►
So TPUs are an amazing hardware platform,
00:09:13
◼
►
but they don't really touch on the programming model.
00:09:15
◼
►
Now, as part of building the TPU platform,
00:09:18
◼
►
there are many, many things about it
00:09:20
◼
►
that are quite different than the normal places
00:09:23
◼
►
that machine learning frameworks came from.
00:09:24
◼
►
So one example of that is that they are thousands of chips.
00:09:28
◼
►
It's like a supercomputer,
00:09:29
◼
►
petaflops of compute in many racks of a machine.
00:09:33
◼
►
And so the way you think about this
00:09:35
◼
►
and the way you wanna program it is slightly different.
00:09:37
◼
►
At the same time, there are other trends in the industry,
00:09:40
◼
►
including a framework that was new at the time
00:09:42
◼
►
called PyTorch, which came out of the Facebook
00:09:45
◼
►
AI research group.
00:09:46
◼
►
And PyTorch was pushing towards more dynamic,
00:09:50
◼
►
more natural language processing models,
00:09:54
◼
►
things like this, where you don't have as,
00:09:57
◼
►
where the programming model isn't as static
00:09:58
◼
►
as TensorFlow is at the time.
00:10:00
◼
►
And so there's a bunch of interesting discussions about,
00:10:02
◼
►
well, how do we get the programming model to move forward?
00:10:07
◼
►
And it became apparent to me, you might not be surprised,
00:10:09
◼
►
that Python was not really great for this, right?
00:10:12
◼
►
Because a lot of where the Python world was coming from
00:10:16
◼
►
is saying, because, so I should say,
00:10:20
◼
►
a lot of where TensorFlow 1 was coming from
00:10:22
◼
►
is saying Python is a slow language.
00:10:25
◼
►
And so because it's a slow language,
00:10:26
◼
►
what we'll do is we will use Python
00:10:29
◼
►
so that you can kind of script together
00:10:31
◼
►
some code that constructs a graph.
00:10:34
◼
►
And then after you've constructed the graph,
00:10:35
◼
►
we'll go use C++ code to run it really fast.
00:10:38
◼
►
Okay, now this is one of the reasons that TensorFlow 1
00:10:43
◼
►
was a very, what I call a static programming model,
00:10:45
◼
►
is because you create this graph,
00:10:47
◼
►
and anything you can encode in the graph, you're good.
00:10:50
◼
►
You can just use graph nodes
00:10:52
◼
►
and you can express these computations this way.
00:10:54
◼
►
But if you can't express in the graph, you're kind of stuck.
00:10:56
◼
►
You have to go hack TensorFlow and rebuild it yourself.
00:10:58
◼
►
You have to go become a machine learning framework engineer
00:11:01
◼
►
and learn about compilers, all this stuff.
00:11:03
◼
►
And that's beyond the abilities of most machine learning,
00:11:07
◼
►
data scientists type people, right?
00:11:09
◼
►
And as it should be.
00:11:10
◼
►
And so what PyTorch did very early on is it said,
00:11:14
◼
►
okay, well, we'll shift to this dynamic programming model
00:11:16
◼
►
where PyTorch, if you squint and look at it the right way,
00:11:20
◼
►
it's basically the thinnest layer of Python
00:11:22
◼
►
that you can have on top of a really fast C++ runtime.
00:11:26
◼
►
And so both PyTorch and TensorFlow of the day,
00:11:30
◼
►
we're looking at, given that Python is the way it is,
00:11:34
◼
►
how do we work around the limitations
00:11:35
◼
►
and how do we make something that is acceptable?
00:11:38
◼
►
And even today, if you want to deploy
00:11:41
◼
►
a machine learning model, you don't deploy Python.
00:11:43
◼
►
And so if you look at both the TensorFlow
00:11:46
◼
►
and the PyTorch standard ways of using them,
00:11:48
◼
►
what you do is you write your training logic in Python,
00:11:52
◼
►
and then you use some deployment mechanism.
00:11:54
◼
►
In the case of TensorFlow, it's a TensorFlow graph.
00:11:56
◼
►
In the case of PyTorch, it's their TorchScript solution.
00:12:00
◼
►
And then you end up loading it up
00:12:02
◼
►
into a bunch of C++ code,
00:12:03
◼
►
and then you deploy the C++ code.
00:12:06
◼
►
And so where Swift for TensorFlow came from
00:12:07
◼
►
is this idea of saying, hey,
00:12:09
◼
►
well, if we take a more modern language,
00:12:10
◼
►
we can have better language-integrated features,
00:12:13
◼
►
which I'm happy to talk about
00:12:14
◼
►
if you want to geek out about that.
00:12:15
◼
►
You can have deployment built in,
00:12:18
◼
►
so you write it in one thing, output a different thing,
00:12:22
◼
►
bolt it together with C++ code.
00:12:24
◼
►
You can just have one solution that scales.
00:12:26
◼
►
And by doing this, you allow people to move faster,
00:12:28
◼
►
you get research flowing into production faster,
00:12:29
◼
►
and you get a lot of other great benefits from that.
00:12:32
◼
►
- So you're basically like writing in Swift,
00:12:35
◼
►
and Swift is actually also the thing that run,
00:12:38
◼
►
but you're still calling into libraries
00:12:40
◼
►
and other languages from Swift?
00:12:42
◼
►
- Yeah, so let me dive into how Swift for TensorFlow works.
00:12:46
◼
►
So Swift for TensorFlow is a project with, I think,
00:12:50
◼
►
several major components.
00:12:52
◼
►
One of the interesting things about machine learning
00:12:54
◼
►
is that you, and there's many different forms,
00:12:57
◼
►
but one of the most popular forms uses
00:12:59
◼
►
what's called backpropagation.
00:13:01
◼
►
And so you do, when you're training,
00:13:05
◼
►
you shove a bunch of data into a model,
00:13:07
◼
►
and as you're shoving data into the model,
00:13:08
◼
►
you're accumulating what are called gradients,
00:13:10
◼
►
which are the updates for the weights in the model.
00:13:13
◼
►
The weights are basically the parameters that you,
00:13:16
◼
►
actually, let me take a step back.
00:13:18
◼
►
What is a machine learning model?
00:13:19
◼
►
A machine learning model is a set of computation.
00:13:23
◼
►
It's a function, and the thing that's,
00:13:25
◼
►
the distinguishing feature of a machine learning model
00:13:28
◼
►
is that instead of it being a function
00:13:30
◼
►
where you write it all manually in code,
00:13:32
◼
►
you write the structure manually,
00:13:34
◼
►
but then you learn and train the weights.
00:13:37
◼
►
And so I look at a machine learning model
00:13:39
◼
►
when you deploy it as, it's a function
00:13:41
◼
►
that has all this trainable state behind it.
00:13:44
◼
►
Now, where does that trainable state come from?
00:13:46
◼
►
Well, the way machine learning training works
00:13:48
◼
►
is that you take a version of the model you wanna deploy,
00:13:53
◼
►
and you start shoving lots of data through it,
00:13:55
◼
►
and then you use what's,
00:13:57
◼
►
and I don't wanna go into calculus here,
00:13:58
◼
►
but you accumulate what are called gradients.
00:14:02
◼
►
Gradients are, you can think of it as like derivatives.
00:14:06
◼
►
If you think about calculus one,
00:14:07
◼
►
it's, you know, you can take F and you get F prime,
00:14:10
◼
►
which is the derivative of a function.
00:14:12
◼
►
The gradients in a machine learning case
00:14:13
◼
►
are just higher dimensional versions of that same idea.
00:14:17
◼
►
And by using those in your machine learning training system,
00:14:20
◼
►
what you do is you shove a bunch of data through it,
00:14:22
◼
►
you see, hey, I can get closer to a better answer
00:14:25
◼
►
if I nudge all the weights in this direction,
00:14:27
◼
►
then you do it again, you nudge all the weights,
00:14:29
◼
►
you do it again, you nudge all the weights, you do it again.
00:14:32
◼
►
Eventually your training converges
00:14:33
◼
►
and you have a set of weights,
00:14:34
◼
►
and now you can ship those weights as a binary blob
00:14:37
◼
►
and deploy the quote unquote graph for the model,
00:14:41
◼
►
but also the weights that go with it.
00:14:43
◼
►
Now, the way that it works
00:14:45
◼
►
is that you have to do that calculus thing.
00:14:46
◼
►
You have to be able to compute the gradient
00:14:48
◼
►
or you have to have compute the backwards version
00:14:51
◼
►
or the derivative version of a function.
00:14:53
◼
►
So there's lots of different ways of doing this.
00:14:56
◼
►
And so one of the contributions of Swift for TensorFlow
00:14:58
◼
►
is this idea of differentiable programming.
00:15:02
◼
►
We joke this is one of the differentiating features,
00:15:05
◼
►
which is a terrible pun.
00:15:06
◼
►
And so in most machine learning frameworks that exist today,
00:15:12
◼
►
the way this works is you build a graph
00:15:14
◼
►
and then you go do these graph transformations.
00:15:16
◼
►
Well, the graph is just a data structure in memory.
00:15:18
◼
►
You do these transformations and you get a new graph out.
00:15:21
◼
►
Another way to do it is you do it dynamically.
00:15:23
◼
►
And if you do it dynamically,
00:15:24
◼
►
again, it's a very runtime sort of a thing.
00:15:27
◼
►
The problem with both approaches
00:15:29
◼
►
because they're runtime things
00:15:30
◼
►
is that when you make a mistake,
00:15:32
◼
►
so for example, you forget to transpose a matrix
00:15:36
◼
►
or something and they do a matrix multiply,
00:15:37
◼
►
the sizes don't line up, you get a runtime error.
00:15:40
◼
►
And when you get the runtime error,
00:15:42
◼
►
it's difficult to reason about where it came from
00:15:43
◼
►
depending on the exact details of the framework.
00:15:46
◼
►
And so what Swift for TensorFlow does is it says,
00:15:48
◼
►
hey, well, what we can do is we can take this idea
00:15:50
◼
►
of taking a function and calculating its derivative,
00:15:55
◼
►
build just that piece into the Swift language.
00:15:57
◼
►
So this is a first-class language feature.
00:16:00
◼
►
And by doing that, now you have a very generic
00:16:02
◼
►
language feature that could be used in many domains.
00:16:04
◼
►
Machine learning is just one of them.
00:16:06
◼
►
And you can get a much better user experience.
00:16:09
◼
►
You can get a nice type-directed way of doing this
00:16:12
◼
►
so that it's extensible.
00:16:14
◼
►
So you can say, hey, it works on float
00:16:17
◼
►
and it works on tensor,
00:16:17
◼
►
but I wanna define a quaternion type.
00:16:20
◼
►
I can go do that and make my thing also differentiable.
00:16:23
◼
►
And that's something that doesn't really exist
00:16:26
◼
►
in modern machine learning frameworks.
00:16:28
◼
►
What you'll see in them is that you'll see
00:16:29
◼
►
that tensor is differentiable,
00:16:31
◼
►
but the normal float type isn't.
00:16:33
◼
►
Or there's special hacks around certain corner cases,
00:16:36
◼
►
but it's very difficult to extend these things.
00:16:38
◼
►
And again, there's many different systems
00:16:41
◼
►
and this is generalization,
00:16:42
◼
►
but by building in the language, the goal,
00:16:45
◼
►
and I think the reality is that you get a much better
00:16:48
◼
►
better user experience.
00:16:49
◼
►
So that's one of the features.
00:16:52
◼
►
Now, what we did is we've designed all these features
00:16:55
◼
►
to be orthogonal from each other,
00:16:57
◼
►
and we want to upstream these things.
00:16:59
◼
►
And so the differentiable programming work
00:17:02
◼
►
has long been a collaboration with the Swift community.
00:17:04
◼
►
And I think the team's planning on pushing it
00:17:07
◼
►
through Swift evolution soon.
00:17:08
◼
►
And so it's been really exciting.
00:17:10
◼
►
- So for me, I write regular Swift stuff
00:17:14
◼
►
in iOS apps and things of that nature.
00:17:16
◼
►
And the only, I haven't really ever dabbled
00:17:19
◼
►
with machine learning and listening to you talk,
00:17:21
◼
►
my own ignorance is becoming ever more evident.
00:17:23
◼
►
But nevertheless, the only thing that I was aware of
00:17:27
◼
►
that has kind of bubbled into my Swift universe,
00:17:30
◼
►
my perspective of Swift, is some of the Python interop.
00:17:33
◼
►
And that doesn't sound like what you're talking about yet.
00:17:36
◼
►
Is that fair to say?
00:17:37
◼
►
- That'd be the next step.
00:17:39
◼
►
So the cool thing about the differentiable
00:17:41
◼
►
programming features is that they're very relevant
00:17:43
◼
►
to the numeric world.
00:17:44
◼
►
And so there's a couple of different subgroups
00:17:47
◼
►
in the numeric world that are fairly narrow,
00:17:50
◼
►
but in the case of machine learning,
00:17:51
◼
►
they're narrow, but really commercially important.
00:17:55
◼
►
And so the inspiration for this feature
00:17:57
◼
►
and the inspiration for the design
00:17:59
◼
►
actually came from the old days.
00:18:00
◼
►
It came from Fortran, where back in the old days,
00:18:04
◼
►
you have a bunch of numeric programming stuff.
00:18:06
◼
►
And so a lot of the techniques were pioneered
00:18:10
◼
►
and figured out back in the Fortran days,
00:18:12
◼
►
and then the world promptly forgot about them.
00:18:14
◼
►
And so pulling those forward,
00:18:16
◼
►
making them work in a modern language,
00:18:18
◼
►
making it work with all the different constraints
00:18:19
◼
►
that are just very different was a big challenge
00:18:22
◼
►
and is a big challenge.
00:18:23
◼
►
And building language features is hard,
00:18:25
◼
►
but it's been a really interesting project on its own.
00:18:28
◼
►
- Were you familiar with Fortran
00:18:30
◼
►
from whatever your past travels had been,
00:18:33
◼
►
or did somebody say to you,
00:18:33
◼
►
"Oh, you should look at this weird old,"
00:18:35
◼
►
well, I mean, I'm sure you were familiar with it,
00:18:36
◼
►
but you should look at this weird old language.
00:18:38
◼
►
They had some good ideas,
00:18:38
◼
►
and you had to dig into it today, in 2020 or 2018 or whatever.
00:18:43
◼
►
- Well, so these features
00:18:46
◼
►
weren't part of the Fortran language.
00:18:47
◼
►
They were part of the Fortran community.
00:18:49
◼
►
One of the interesting things about the Fortran community
00:18:51
◼
►
back in the day is that there were a lot of tools
00:18:54
◼
►
that read in Fortran code, transformed it,
00:18:56
◼
►
and then wrote it back out.
00:18:57
◼
►
And so these are effectively source code preprocessors.
00:19:00
◼
►
And so some of the source code preprocessors
00:19:02
◼
►
were doing this kind of stuff,
00:19:03
◼
►
and they're widely used because, again,
00:19:05
◼
►
the Fortran world is,
00:19:06
◼
►
there's a lot of numeric people working in that world,
00:19:08
◼
►
back then, but also today.
00:19:10
◼
►
I would also like to say I was not the one
00:19:12
◼
►
that designed all the differentiable programming features
00:19:15
◼
►
in Swift, it was a team effort,
00:19:16
◼
►
and I contributed to that,
00:19:18
◼
►
and I helped with some of the design points,
00:19:19
◼
►
but I will just be very honest,
00:19:21
◼
►
that calculus is not my strong point.
00:19:24
◼
►
I'm very okay with that.
00:19:25
◼
►
- We are sponsored this week by Indeed.com.
00:19:30
◼
►
Now, I'll be honest with you,
00:19:31
◼
►
when they booked this spot a few months ago,
00:19:33
◼
►
they were gonna run a regular ad,
00:19:34
◼
►
but as the coronavirus outbreak hit,
00:19:37
◼
►
it just didn't seem right anymore.
00:19:39
◼
►
So if your job has been affected by coronavirus,
00:19:41
◼
►
they've put together a guide to help,
00:19:43
◼
►
and I'm willing to it from here.
00:19:44
◼
►
That's all for now.
00:19:45
◼
►
So stay safe, everyone,
00:19:46
◼
►
and thanks to Indeed.com for sponsoring our show.
00:19:49
◼
►
- So we both started to talk about the Python interop.
00:19:56
◼
►
I'd love to hear a little more about that,
00:19:58
◼
►
'cause I've glanced at it,
00:19:59
◼
►
but I haven't personally had any particular need to use it,
00:20:02
◼
►
and I've only written, I don't know,
00:20:04
◼
►
a couple hundred lines of Python in my life.
00:20:05
◼
►
So I'm vaguely familiar with Python
00:20:07
◼
►
in kind of some of its tenets,
00:20:10
◼
►
but this is all kind of outside my typical wheelhouse.
00:20:13
◼
►
Nevertheless, I find it really fascinating,
00:20:16
◼
►
the idea of extending Swift or changing Swift
00:20:18
◼
►
in order to make it interop better.
00:20:20
◼
►
So how did the Python interop stuff come to be?
00:20:23
◼
►
I mean, it seems fairly obvious,
00:20:25
◼
►
but I'd love to hear your perspective of the journey
00:20:27
◼
►
and what was done to Swift to make that better.
00:20:29
◼
►
- I think you start from the premise.
00:20:31
◼
►
So the premise was,
00:20:33
◼
►
Swift is a good language for hopefully machine learning,
00:20:36
◼
►
which initially in the project, it was a theory.
00:20:39
◼
►
It was not a proven fact,
00:20:40
◼
►
but it was pretty clear
00:20:42
◼
►
that the entire world revolves around Python.
00:20:45
◼
►
And so just having something better is not enough.
00:20:48
◼
►
You need to provide a path
00:20:49
◼
►
for people to be able to move over.
00:20:51
◼
►
You need to be able to make it
00:20:52
◼
►
so you can migrate existing code,
00:20:54
◼
►
and you kind of have to integrate
00:20:56
◼
►
with all the, not just the machine learning technologies,
00:20:59
◼
►
but the huge ecosystem that has been built
00:21:02
◼
►
around the Python machine learning world.
00:21:04
◼
►
So this includes all the plotting libraries
00:21:06
◼
►
and all the analysis and data loading and slicing and dicing.
00:21:09
◼
►
There's just a huge ecosystem out there.
00:21:11
◼
►
And so interop-ing with Python
00:21:13
◼
►
was a pretty clear goal from the beginning.
00:21:16
◼
►
But then you ask the question of like,
00:21:18
◼
►
what is the best way to do that?
00:21:20
◼
►
Now, if you look at Swift,
00:21:21
◼
►
Swift already has language interoperability support
00:21:24
◼
►
for C, Objective-C, those kinds of languages, right?
00:21:27
◼
►
And the way that works is a very expensive,
00:21:31
◼
►
very complicated integration with the Clang compiler.
00:21:35
◼
►
And so Apple has invested a tremendous amount of money
00:21:37
◼
►
in to making sure that all of its frameworks
00:21:40
◼
►
map over beautifully into Swift.
00:21:42
◼
►
And all these things can,
00:21:44
◼
►
there's like a thousand attributes that you can use
00:21:46
◼
►
to customize how it gets imported
00:21:47
◼
►
and all that kind of stuff.
00:21:49
◼
►
And I think that makes sense for the C world,
00:21:52
◼
►
but doing that for Python seemed very untenable
00:21:55
◼
►
for a couple of reasons.
00:21:55
◼
►
One of which is the complexity,
00:21:59
◼
►
let's just say could not pay for it.
00:22:02
◼
►
It didn't, it was not that important.
00:22:04
◼
►
It was, it started, this all started as a research project.
00:22:06
◼
►
But second of all,
00:22:07
◼
►
a major difference between Python and the C languages
00:22:10
◼
►
is that Python is fully dynamically typed.
00:22:13
◼
►
And so in C languages, you have type signatures,
00:22:17
◼
►
you have API declarations,
00:22:18
◼
►
you have all this stuff to tie into,
00:22:20
◼
►
but in Python, you just don't have that.
00:22:22
◼
►
And so kind of going through this,
00:22:25
◼
►
what I realized quickly is that
00:22:26
◼
►
that dynamic nature of Python was both a huge curse
00:22:31
◼
►
in terms of working the way that the C importer worked,
00:22:34
◼
►
but it was also an amazing blessing
00:22:35
◼
►
because it made everything way simpler.
00:22:38
◼
►
And so without going to how it works,
00:22:40
◼
►
I'll explain the outcome.
00:22:42
◼
►
So right now there's,
00:22:45
◼
►
you can go open a Jupyter workbook,
00:22:47
◼
►
which is a online notebook environment.
00:22:49
◼
►
It's kind of like a playground on the web.
00:22:51
◼
►
You can go through the Python interoperability tutorial.
00:22:54
◼
►
And if you do that, what you'll see is you'll see
00:22:56
◼
►
the syntax looks almost exactly like Python.
00:22:59
◼
►
So this comes to the,
00:23:01
◼
►
this builds on the fact that the Python expression syntax
00:23:04
◼
►
and the C expression syntax, or sorry,
00:23:07
◼
►
the Python expression syntax
00:23:08
◼
►
and the Swift expression syntaxes are very similar.
00:23:11
◼
►
Like you use plus in both languages to add things.
00:23:14
◼
►
You have dot notation, you have function call notation,
00:23:17
◼
►
you have parentheses and stuff like that.
00:23:19
◼
►
It all works roughly the same way.
00:23:22
◼
►
But in the case of Python, it quote unquote just works.
00:23:26
◼
►
What you do is you import the Python module
00:23:28
◼
►
and now you have full access to the entire Python ecosystem
00:23:31
◼
►
and everything works.
00:23:32
◼
►
You don't have to do type annotations.
00:23:33
◼
►
You don't need header files.
00:23:34
◼
►
You don't need to go change your Python code.
00:23:37
◼
►
It just works.
00:23:39
◼
►
And the way that works,
00:23:41
◼
►
you might wonder about this
00:23:41
◼
►
because Python is such a dynamic,
00:23:43
◼
►
such a unique language in its own right.
00:23:46
◼
►
The way it works is that Swift just links
00:23:48
◼
►
in the Python interpreter.
00:23:50
◼
►
And so when you import the Python module,
00:23:52
◼
►
the Python module and the Swift Python module
00:23:55
◼
►
just links to the Python interpreter.
00:23:56
◼
►
And so you're literally just linking the Python interpreter.
00:23:59
◼
►
So now you get literally everything in Python,
00:24:02
◼
►
you can now talk to it.
00:24:03
◼
►
And the way Python works under the covers
00:24:05
◼
►
is the Python is a relatively, I should back out of that.
00:24:10
◼
►
I was about to say it's a relatively simple language
00:24:12
◼
►
and that's probably not quite true,
00:24:14
◼
►
but it's a language that is built on top of C
00:24:17
◼
►
and it has a C API for everything.
00:24:19
◼
►
And so there's a C API to call a function in Python.
00:24:22
◼
►
There's a C API to do like a dot access, like X.Y,
00:24:26
◼
►
and there's C APIs for all these things.
00:24:28
◼
►
And so that Python module is just using Swift's existing
00:24:33
◼
►
C interop to import all those APIs
00:24:35
◼
►
and directly call into them.
00:24:37
◼
►
It's a very beautiful thing.
00:24:38
◼
►
And that Swift, the Python module in Swift
00:24:42
◼
►
is only something like 1200 lines of Swift code.
00:24:44
◼
►
It's pretty simple.
00:24:45
◼
►
- That's bananas.
00:24:46
◼
►
I mean, there's a similar language you could do this for.
00:24:48
◼
►
Could you make Swift interoperate with PHP just for me?
00:24:53
◼
►
- So let's talk about how this works.
00:24:57
◼
►
So now the way this works is if you go look
00:25:00
◼
►
at that Python module, and again, it's just Swift code.
00:25:02
◼
►
So you can go take a look at it.
00:25:04
◼
►
What you'll see is you'll see a bunch of like weird
00:25:07
◼
►
boilerplate stuff that is there to make things work.
00:25:11
◼
►
But at the end of the day, just calls them the C APIs.
00:25:14
◼
►
So now how do you provide the feel of Python code in Swift?
00:25:19
◼
►
Well, Swift has already a fairly hackable syntax.
00:25:22
◼
►
So you have like plus, you can override plus.
00:25:25
◼
►
You have the ability to define new operators
00:25:28
◼
►
and things like that if you want,
00:25:29
◼
►
but you actually don't really need that
00:25:31
◼
►
because Python operators and Swift operators
00:25:32
◼
►
are roughly the same or Swift has a superset.
00:25:35
◼
►
But there's big problems when you start
00:25:37
◼
►
to save function calls.
00:25:39
◼
►
And so as of Swift two and a half years ago,
00:25:43
◼
►
you couldn't just, you didn't have a notion
00:25:46
◼
►
of a callable type.
00:25:48
◼
►
You couldn't say I have a value
00:25:49
◼
►
and I want the function call operator on that value to work.
00:25:53
◼
►
That's not a thing.
00:25:54
◼
►
Function call at the time meant either call function
00:25:58
◼
►
for call method or initialize a type.
00:26:00
◼
►
But that was not a user extensible part of the language.
00:26:04
◼
►
And so when starting to talk through this,
00:26:08
◼
►
had many conversations with people and said,
00:26:10
◼
►
okay, well, how do we do Python interoperability?
00:26:13
◼
►
We talked through, and this included
00:26:15
◼
►
with the Swift core team at the time.
00:26:17
◼
►
Like what are the best ways of doing this?
00:26:19
◼
►
And people generally all agreed
00:26:22
◼
►
that doing a Python feature was a bad move.
00:26:24
◼
►
We should not do that.
00:26:26
◼
►
It turns out there are lots of dynamic languages.
00:26:28
◼
►
There's Ruby out there, there's PHP, there's JavaScript.
00:26:31
◼
►
There's lots of interesting dynamic languages out there.
00:26:34
◼
►
And we didn't wanna have a Python feature.
00:26:36
◼
►
And so pulling us all back around,
00:26:40
◼
►
if you go look at that, that is what led to a couple
00:26:43
◼
►
of very specific features being added to Swift,
00:26:45
◼
►
including one that just shipped in Swift 5.2,
00:26:48
◼
►
which went out yesterday as of this recording, I think.
00:26:51
◼
►
And these features were the dynamic callable
00:26:53
◼
►
and the dynamic member lookup features.
00:26:56
◼
►
And what those two features do is it allows any type,
00:26:59
◼
►
and we use it for Python,
00:27:01
◼
►
but you can use it in your own Swift code now.
00:27:03
◼
►
Any type can just overload the call operator
00:27:06
◼
►
and the member lookup operator.
00:27:08
◼
►
The member lookup operator is the X.Y kind of syntax,
00:27:12
◼
►
and turn it into a method call.
00:27:14
◼
►
And now when you do X.Y on a Python-y thing,
00:27:18
◼
►
it goes and does that C function that does X.Y for Python
00:27:22
◼
►
and then returns the result.
00:27:24
◼
►
And the way this whole system bakes out,
00:27:27
◼
►
which is really beautiful, is you look at Python
00:27:31
◼
►
and people say Python has no types, right?
00:27:34
◼
►
That's a thing that many people say,
00:27:37
◼
►
and they say Swift has types, right?
00:27:40
◼
►
And Swift having types and Python not having types
00:27:43
◼
►
mean they're incompatible, right?
00:27:45
◼
►
Well, the way I look at it
00:27:46
◼
►
and the way that I can explain it is saying
00:27:48
◼
►
Python has one type.
00:27:51
◼
►
That one type is implicit,
00:27:54
◼
►
and so you never utter it generally in Python,
00:27:57
◼
►
but there is a type and Python has a little object model
00:28:00
◼
►
and has a little data representation,
00:28:02
◼
►
and it's very beautiful and consistent
00:28:04
◼
►
in its own way internally,
00:28:05
◼
►
and I actually have a lot of respect
00:28:07
◼
►
for the internals of how Python works.
00:28:09
◼
►
And so when you import that into Swift,
00:28:11
◼
►
it is the Python object type.
00:28:14
◼
►
And so there's one type in Swift
00:28:16
◼
►
that is all the Python stuff,
00:28:18
◼
►
and it's all completely dynamic within that type.
00:28:21
◼
►
And so if you have a Python object and you say,
00:28:24
◼
►
myPythonObject.x, what that does is it fires off
00:28:27
◼
►
that C API call and it returns a new Python object.
00:28:31
◼
►
And then you say, parenthesis 42,
00:28:33
◼
►
and it does a function call on that Python object.
00:28:36
◼
►
And what this means is you get all the,
00:28:38
◼
►
you're true to Python through and through,
00:28:41
◼
►
because if in Python you get some crazy runtime error,
00:28:44
◼
►
well, hey, you'll get the crazy runtime error here too.
00:28:46
◼
►
It's the same model, not in your Swift code.
00:28:50
◼
►
Now, one of the things that I didn't really anticipate,
00:28:52
◼
►
but it has worked out really well,
00:28:54
◼
►
and this comes back to this idea of
00:28:57
◼
►
you get beautiful designs if you build simple things
00:28:59
◼
►
that compose correctly,
00:29:01
◼
►
is that in Python you can have a Python array,
00:29:04
◼
►
you can have Python integers,
00:29:06
◼
►
you can have Python, all the Python things.
00:29:09
◼
►
Well, Swift also has integers, it also has arrays.
00:29:12
◼
►
And so one of the really interesting things
00:29:14
◼
►
about Python interoperability when you embed into Swift
00:29:16
◼
►
is you get, I think, perhaps the world's
00:29:19
◼
►
most beautiful progressive typing system for Python,
00:29:23
◼
►
where you can say, hey, I have a Python dictionary
00:29:27
◼
►
of Python strings to Python arrays,
00:29:30
◼
►
or you can say, I have a Swift dictionary of Python arrays,
00:29:33
◼
►
or Python strings to Python arrays,
00:29:36
◼
►
or you can say, I have a Swift dictionary
00:29:38
◼
►
of Swift strings to Python arrays,
00:29:41
◼
►
and you can type statically or dynamically
00:29:44
◼
►
as much as you want at any level,
00:29:45
◼
►
because it all interoperates correctly
00:29:47
◼
►
in the same type system.
00:29:48
◼
►
It's a really, really interesting and very beautiful thing.
00:29:52
◼
►
And the fact that it just works kind of blows people's minds.
00:29:55
◼
►
Now, coming back to PHP, well,
00:29:57
◼
►
so that Python module in Swift is 1200 lines of code.
00:30:01
◼
►
PHP has its own interpreter.
00:30:03
◼
►
You could build exactly the same kind of a thing
00:30:05
◼
►
talking to PHP, that's by design.
00:30:07
◼
►
That's one of the nice things
00:30:08
◼
►
about the language features being very orthogonal.
00:30:11
◼
►
And then the question is, how good does it feel?
00:30:15
◼
►
I'm not a PHP expert, thankfully.
00:30:19
◼
►
But if the basic grammar structure of PHP
00:30:22
◼
►
is similar to the basic grammar structure of Swift,
00:30:24
◼
►
it will work out really nicely.
00:30:25
◼
►
If you were talking to Objective-C or something like that,
00:30:30
◼
►
it would be somewhat less beautiful.
00:30:34
◼
►
But the system's set up so that you could talk
00:30:36
◼
►
to small talky languages, you could talk
00:30:38
◼
►
to many different kinds of things,
00:30:41
◼
►
and I think it's pretty cool.
00:30:43
◼
►
- See, everyone, you heard it here first.
00:30:45
◼
►
I think most people are gonna look at this proposal
00:30:47
◼
►
as like, you have a sewage treatment plant over here,
00:30:50
◼
►
and you have a nice, fresh, clean ocean over here.
00:30:53
◼
►
Let's build a canal to connect the two.
00:30:56
◼
►
- I mean, if you go back and you look at,
00:30:58
◼
►
so the Python interoperability,
00:31:00
◼
►
all the language features are in Swift now.
00:31:02
◼
►
Like, there's no, this is a done deal.
00:31:04
◼
►
If you go back and you look at the, gosh, when was that?
00:31:07
◼
►
That must have been December 2017-ish, something like that.
00:31:11
◼
►
That's when we were talking about, on the Swift forums,
00:31:14
◼
►
adding dynamic member lookup to Swift.
00:31:17
◼
►
And the threads, there are many mega threads on this,
00:31:19
◼
►
and it was hugely controversial,
00:31:22
◼
►
and the arguments against it at the time,
00:31:24
◼
►
or one of the major arguments against it at the time,
00:31:26
◼
►
was like, hey, if you allow people to overload operator dot,
00:31:29
◼
►
which is kind of what this is, they're gonna misuse it.
00:31:32
◼
►
And then nobody's gonna be able to reason about anything,
00:31:34
◼
►
because everybody will use it for all the things,
00:31:37
◼
►
and they'll horribly pollute all the codebase everywhere,
00:31:40
◼
►
and you're not gonna be able to reason about anything.
00:31:42
◼
►
- I mean, can't you make that argument
00:31:43
◼
►
about almost every Swift feature?
00:31:45
◼
►
- Bingo, that's exactly right.
00:31:46
◼
►
And so you can make that argument
00:31:48
◼
►
about any feature in any language.
00:31:51
◼
►
You can misuse anything.
00:31:53
◼
►
And if you just use integers for everything,
00:31:56
◼
►
well, that's not gonna be great for your numeric code either,
00:31:59
◼
►
but you could do it, theoretically.
00:32:01
◼
►
And so I think that the feature and the argument
00:32:05
◼
►
has stood the test of time,
00:32:06
◼
►
where we've had it for, I think, a couple of years now.
00:32:09
◼
►
People have done really interesting things.
00:32:11
◼
►
There's definitely JavaScript interoperability things
00:32:14
◼
►
for marching through JSON files that use this,
00:32:17
◼
►
and it's enabled some really beautiful and expressive APIs,
00:32:20
◼
►
but I haven't seen people going overboard
00:32:23
◼
►
and using it for everything.
00:32:25
◼
►
It's kind of the same argument as, oh my god,
00:32:26
◼
►
because you allow emojis in your identifiers,
00:32:28
◼
►
everything's gonna be pile of poop, right?
00:32:31
◼
►
- Oh, so you've been looking at my code.
00:32:33
◼
►
- When you make, this is kind of like the,
00:32:36
◼
►
I don't know, the destiny of any community built up
00:32:39
◼
►
or in a language with a particular set of features, right?
00:32:40
◼
►
So Swift was born as a language with,
00:32:43
◼
►
that preferred to have errors,
00:32:48
◼
►
call it a compile time rather than runtime,
00:32:50
◼
►
and it therefore attracted a community of people
00:32:53
◼
►
who value that as an attribute in their language.
00:32:57
◼
►
So you come in a couple years later and say,
00:32:59
◼
►
you know what, what about, there's some cases
00:33:01
◼
►
where you won't tell until you make the call
00:33:02
◼
►
whether there's an error, and they're like, wait a second,
00:33:04
◼
►
that's not what I signed up for.
00:33:05
◼
►
I came here for a language where you couldn't do that.
00:33:09
◼
►
When I have something dot something
00:33:10
◼
►
and the compiler says it's good, it's good, right?
00:33:13
◼
►
If I wanted the other thing, I would go to Objective-C
00:33:15
◼
►
and be sending messages to nil.
00:33:16
◼
►
I'm here in Swift, I'm a fan of Swift,
00:33:18
◼
►
I'm on the Swift forums, and so you kind of,
00:33:21
◼
►
coming down from the mountain and saying,
00:33:23
◼
►
but what if, dynamic callable, but what if,
00:33:25
◼
►
integration with languages that aren't like that?
00:33:28
◼
►
And it was like, well, interoperability is fine,
00:33:30
◼
►
but don't pollute my language with, you know,
00:33:33
◼
►
now when I make a call on something or do a member lookup,
00:33:36
◼
►
I don't even know if that's gonna work
00:33:38
◼
►
until it hits that line of code?
00:33:39
◼
►
I understand why people found that heretical,
00:33:42
◼
►
but I think that same sort of pushback is why thus far
00:33:46
◼
►
it doesn't feel like it's been a problem,
00:33:48
◼
►
because if you are attracted to Swift
00:33:51
◼
►
and are a super fan of Swift,
00:33:52
◼
►
you're not gonna do that willy-nilly,
00:33:53
◼
►
you're not gonna say, hey, here's this cool library
00:33:55
◼
►
for doing this thing in Swift, and by the way,
00:33:57
◼
►
everything's dynamic, and dot means nothing,
00:34:00
◼
►
and you can write any method after the dot
00:34:01
◼
►
and I'll dynamically create it on the fly for you.
00:34:03
◼
►
Like, people don't do that, or if they did that,
00:34:05
◼
►
their library wouldn't become popular, so it's kind of--
00:34:07
◼
►
- Yeah, nobody would use it.
00:34:08
◼
►
- Yeah, so like, it's, people aren't dying to do it,
00:34:11
◼
►
and it has never been the culture of Swift,
00:34:13
◼
►
so even though that feature exists,
00:34:15
◼
►
I don't think it's even an attractive nuisance
00:34:16
◼
►
at this point.
00:34:18
◼
►
- Yeah, I mean, another really interesting to me objection
00:34:22
◼
►
at the time was people would say things along the lines
00:34:25
◼
►
of interoperability with Python makes sense
00:34:28
◼
►
for the machine learning community, but if you do this,
00:34:30
◼
►
then people will just leave the code in Python,
00:34:32
◼
►
and they won't ever move it to a beautiful Swift API,
00:34:35
◼
►
because it will look like Python,
00:34:37
◼
►
and that's not a Swiftie design, right?
00:34:40
◼
►
And this is true, right?
00:34:43
◼
►
I mean, the Python integrated,
00:34:46
◼
►
if you use NumPy, which is a very popular Python library
00:34:50
◼
►
for numerical programming, and Swift,
00:34:52
◼
►
it does not look like a natural Swift API.
00:34:55
◼
►
The naming conventions and the keyword arguments
00:34:57
◼
►
get used differently and all that kind of stuff.
00:35:00
◼
►
- Sounds familiar.
00:35:01
◼
►
- Yeah, so, exactly, this is also like Objective-C, right?
00:35:05
◼
►
Where, at least if you don't do all the work
00:35:07
◼
►
to annotate your APIs, you get something
00:35:09
◼
►
that doesn't look at all like Swift,
00:35:11
◼
►
and what I said at the time, which I still believe
00:35:16
◼
►
is two things, one is, hey, well, interoperability
00:35:18
◼
►
is the first thing that gives you the ability
00:35:20
◼
►
to define wrappers, and so if you wanna use
00:35:22
◼
►
some yucky external code, and it's yucky
00:35:27
◼
►
for whatever reason, being able to wrap it up
00:35:29
◼
►
without having to drop two different completely
00:35:33
◼
►
foreign universes is really useful,
00:35:34
◼
►
because then you can define a Swift API
00:35:36
◼
►
that wraps the underlying thing.
00:35:37
◼
►
The other thing is that, because it doesn't feel natural,
00:35:41
◼
►
people will want to do that work to create those wrappers,
00:35:45
◼
►
but when you start doing that, you start to realize,
00:35:47
◼
►
well, actually, that Python API I'm calling into
00:35:49
◼
►
is just a Python wrapper on top of C anyways,
00:35:53
◼
►
in many cases, and so, instead of wrapping the Python,
00:35:57
◼
►
maybe I should wrap the C, and again,
00:35:59
◼
►
what you allow people to do is, over time,
00:36:01
◼
►
the community can go build amazing new plotting libraries
00:36:04
◼
►
and data analysis libraries and things like this,
00:36:08
◼
►
but you just allow each individual person
00:36:11
◼
►
to make decisions that make sense to them,
00:36:14
◼
►
and you're never blocked, it's very pragmatic.
00:36:16
◼
►
You can always get stuff done, but then,
00:36:18
◼
►
if you have lots of spare time, you wanna go design
00:36:20
◼
►
the world's best plotting library, you can do that,
00:36:22
◼
►
and so now, that feeling unnatural thing
00:36:26
◼
►
actually kind of helps with that, I think.
00:36:29
◼
►
- This is an interesting test case,
00:36:31
◼
►
because in the case of Objective-C and Swift,
00:36:33
◼
►
a lot of the similar problems, but the big difference is,
00:36:37
◼
►
there was a sort of command and control structure
00:36:40
◼
►
that basically dictated Swift as a thing that we're doing,
00:36:43
◼
►
and until you're otherwise, this is the future,
00:36:45
◼
►
so get on board the train, and pretty soon,
00:36:48
◼
►
you basically have no choice.
00:36:50
◼
►
Like, there's a dictator involved,
00:36:52
◼
►
and that dictator being Apple.
00:36:53
◼
►
Like, if you're gonna develop for Apple platforms,
00:36:55
◼
►
it's gonna be in Swift eventually, so get used to it
00:36:58
◼
►
over the course of many years, and you know,
00:37:00
◼
►
in the world of Python and machine learning,
00:37:02
◼
►
I imagine there is no dictatorial force like that,
00:37:04
◼
►
so even though the same thing could happen,
00:37:06
◼
►
it's certainly not gonna happen with the same speed,
00:37:09
◼
►
but all the same tools apply, all the same techniques,
00:37:12
◼
►
all the same sort of what you were saying about,
00:37:13
◼
►
but it has to happen at the rate of cats being herded,
00:37:17
◼
►
and not at the rate of the dictator saying,
00:37:21
◼
►
this is gonna happen over the course of the next few years
00:37:23
◼
►
unless something goes terribly wrong,
00:37:24
◼
►
so get on that train, so it'll be interesting to see how,
00:37:28
◼
►
if that goes faster or slower,
00:37:30
◼
►
or if it never actually happens,
00:37:32
◼
►
or if Swift is just another player
00:37:33
◼
►
in a big soup of languages, but how do you feel
00:37:36
◼
►
about not being able to just mandate it
00:37:38
◼
►
as was possible in the Apple days?
00:37:41
◼
►
- Well, so we could talk about Swift for TensorFlow
00:37:43
◼
►
more in a second, but let me push back on you, John,
00:37:45
◼
►
because you're right that Apple could have done that,
00:37:48
◼
►
but they didn't, so until Swift UI,
00:37:52
◼
►
there's never been a thing that you could only do in Swift.
00:37:55
◼
►
- Yeah, I know, but that's a multi-year plan.
00:37:57
◼
►
- Well, but even with Swift UI,
00:37:59
◼
►
you can still build UIs without using it,
00:38:01
◼
►
and lots of people still use UIKit,
00:38:03
◼
►
so what I'm saying is, for years, Apple did not do that.
00:38:08
◼
►
There was no arm twisting, thou shalt use Swift.
00:38:11
◼
►
It was always a--
00:38:13
◼
►
- Well, so there's not arm twisting,
00:38:14
◼
►
there's a little bit of arm grabbing,
00:38:16
◼
►
like at a certain point on your second year at WWDC,
00:38:19
◼
►
and all the slides are in Swift,
00:38:21
◼
►
that's the type of thing where it's like,
00:38:23
◼
►
they control the platform, and they're clearly saying,
00:38:25
◼
►
"Oh, everything's available in both languages."
00:38:27
◼
►
The year Swift was introduced,
00:38:29
◼
►
every slide had both Objective-C and Swift,
00:38:31
◼
►
I'm presumably dictated from on high,
00:38:32
◼
►
and for the years that followed,
00:38:34
◼
►
Objective-C slowly disappeared
00:38:36
◼
►
from all the slides at WWDC,
00:38:38
◼
►
and Swift became the only thing,
00:38:39
◼
►
and then pretty soon the default was Swift
00:38:41
◼
►
for a new project in Xcode,
00:38:42
◼
►
and that's what I'm talking about,
00:38:44
◼
►
like that there is a large--
00:38:45
◼
►
- Yeah, yeah, I agree with you there.
00:38:46
◼
►
- A large, not so invisible hand
00:38:49
◼
►
pushing in one clear direction,
00:38:51
◼
►
and it wasn't like, yeah, they didn't come down
00:38:53
◼
►
and just say, "We're changing this overnight,"
00:38:55
◼
►
'cause you couldn't, you had to make sure,
00:38:56
◼
►
"Hey, is the Swift thing gonna work out?
00:38:57
◼
►
"Do people like it?"
00:38:58
◼
►
There's lots of unknowns,
00:38:59
◼
►
but the direction has always been clear.
00:39:00
◼
►
That's why I said, in the absence of anything else,
00:39:03
◼
►
this is gonna happen, whether you like it or not,
00:39:06
◼
►
because there are still people like,
00:39:07
◼
►
"Oh, I liked Objective-C better," and whatever,
00:39:09
◼
►
but whether you like it or not,
00:39:11
◼
►
if the majority of the community
00:39:12
◼
►
does not scream bloody murder,
00:39:14
◼
►
and Swift works out fine, which it seems to,
00:39:17
◼
►
we're going to get to the point very quickly
00:39:18
◼
►
when, a couple years down the line,
00:39:20
◼
►
"Oh, here's a new API that you can't use for Objective-C,"
00:39:23
◼
►
and by the time that happens, it's almost a non-event.
00:39:26
◼
►
I mean, some people grumbled about Swift UI,
00:39:28
◼
►
but Swift had been so clearly the message from Apple
00:39:32
◼
►
for so many years that I think,
00:39:35
◼
►
by this point, if you weren't on board with that change,
00:39:37
◼
►
like, I don't know if you've been beaten down
00:39:39
◼
►
by the overwhelming tide of Swift on Apple platforms,
00:39:42
◼
►
or you just got used to it, or learned to love it,
00:39:45
◼
►
or left to go to a different platform, right?
00:39:47
◼
►
Whereas, like I said, in machine learning,
00:39:49
◼
►
you can have enthusiasm for Swift,
00:39:50
◼
►
but it's really up to the individual people, as you said,
00:39:52
◼
►
to say, "Is this what I wanna do?
00:39:54
◼
►
"Do I wanna make a wrapper for this?
00:39:55
◼
►
"Do I mind that there's Python in between?
00:39:57
◼
►
"Do I find the Swift thing benefits me in any way,
00:39:59
◼
►
"or do I just wanna do it in Python,
00:40:01
◼
►
"or do I like the Swift so much
00:40:02
◼
►
"that I'm gonna disintermediate the Python
00:40:04
◼
►
"and go right from Swift to C for my new library?"
00:40:07
◼
►
And that's up to the individual, and I mean,
00:40:09
◼
►
I suppose as a cultural influence as well,
00:40:11
◼
►
I'm not involved in the machine learning community,
00:40:13
◼
►
but if they have big conferences and the same type of thing,
00:40:15
◼
►
here is, you know, let me show a demo
00:40:17
◼
►
of this cool thing I did in machine learning,
00:40:18
◼
►
and it just so happens that all of their demo
00:40:20
◼
►
and slides and code is in Swift, that sends a message,
00:40:23
◼
►
especially if it's something cool,
00:40:25
◼
►
but it's sort of on a case-by-case basis
00:40:27
◼
►
up to the individuals.
00:40:28
◼
►
- Well, so I think that, I mean,
00:40:30
◼
►
to agree with you and then disagree with you,
00:40:34
◼
►
I think you're right that the machine learning community
00:40:36
◼
►
is definitely not top-down controlled,
00:40:38
◼
►
and even if somebody were to do that,
00:40:40
◼
►
you would have a thousand people
00:40:43
◼
►
all doing different things anyways,
00:40:45
◼
►
because there isn't a lot of consistency in that universe,
00:40:47
◼
►
but the same thing is true about server development
00:40:49
◼
►
and many other segments where Swift is,
00:40:52
◼
►
what I would say, organically growing slowly over time,
00:40:55
◼
►
and so I don't think that's unique
00:40:56
◼
►
to the machine learning community.
00:40:57
◼
►
- Yeah, that's true.
00:40:58
◼
►
We talked about Swift on the server recently,
00:41:00
◼
►
and it is very similar in that Apple's not super interested
00:41:02
◼
►
in, they don't have a server platform
00:41:04
◼
►
that they're pressing on everybody,
00:41:05
◼
►
so they're not a force there,
00:41:07
◼
►
and then it's really more like machine learning
00:41:09
◼
►
where it's up to individuals.
00:41:10
◼
►
- And even if they did, if they came out and said,
00:41:12
◼
►
"We think that this is the right thing to do for server,"
00:41:14
◼
►
everybody'd say like, "Okay, cool, Apple, whatever.
00:41:16
◼
►
"I'm using my Django thing," or whatever,
00:41:20
◼
►
and there's not that, to your point,
00:41:22
◼
►
there's not that top-down, single-leader type of thing,
00:41:26
◼
►
but the thing I wanna push back on you again
00:41:29
◼
►
is who fundamentally has the control there?
00:41:31
◼
►
Who has the power?
00:41:33
◼
►
So is it Apple, or is it the community?
00:41:36
◼
►
Because Apple has pushed technologies, as you know,
00:41:39
◼
►
in the past that haven't worked out,
00:41:41
◼
►
and so if Apple started pushing it that first year,
00:41:45
◼
►
and it was kind of a soft push,
00:41:46
◼
►
like that first year in particular was a,
00:41:48
◼
►
"Hey, we have a thing.
00:41:50
◼
►
"We hope you like it.
00:41:50
◼
►
"We think it's great, but let us know what you think,"
00:41:54
◼
►
and if the community barfed all over it
00:41:57
◼
►
and said, "This is terrible.
00:41:58
◼
►
"We don't want anything to do with it,"
00:41:59
◼
►
well, Apple would have, course correction didn't change,
00:42:01
◼
►
and so I think the community and the community reaction
00:42:05
◼
►
and feedback and things like that also have a huge impact
00:42:08
◼
►
on Apple's decision-making process as well.
00:42:12
◼
►
- Yeah, I mean, there's definitely a give and take there,
00:42:14
◼
►
but that's why I was often the qualifier
00:42:16
◼
►
is assuming things worked out,
00:42:17
◼
►
assuming there wasn't just open revolt
00:42:19
◼
►
in the streets or whatever,
00:42:21
◼
►
but there was definitely pushback,
00:42:23
◼
►
but there was enough promise that Apple said,
00:42:25
◼
►
"We're gonna power through the pushback,"
00:42:27
◼
►
because certainly when Swift was introduced
00:42:29
◼
►
and for years afterwards, there were lots of complaints
00:42:31
◼
►
from people who were very experienced with Objective-C
00:42:33
◼
►
about how Swift was inadequate for their purposes
00:42:35
◼
►
and Objective-C was better
00:42:37
◼
►
and didn't understand why we were making this change,
00:42:39
◼
►
but there was enough promise and enough people who liked it
00:42:42
◼
►
that Apple was able to make the decision to say,
00:42:45
◼
►
"We're gonna keep going.
00:42:46
◼
►
"This looks like, I know there's complaints,
00:42:48
◼
►
"but we're gonna keep going,"
00:42:50
◼
►
and so to just power through that.
00:42:52
◼
►
- Yeah, yeah, I'm sure that none of the people on this call
00:42:55
◼
►
would have those complaints early on.
00:42:57
◼
►
- No, no, early on. (laughing)
00:42:59
◼
►
We had complaints like that three shows ago.
00:43:03
◼
►
We'll get to that in a minute.
00:43:04
◼
►
All right, so I think we should--
00:43:05
◼
►
- Yeah, one of the things I love to tell people
00:43:07
◼
►
is that pick any technology that I know,
00:43:10
◼
►
and I can both love it and hate it at the same time.
00:43:12
◼
►
- Well, that's what comes from using it, yeah.
00:43:15
◼
►
- Yeah, exactly, and if you can't,
00:43:17
◼
►
then you're just being religious or something.
00:43:20
◼
►
- Or you haven't used it long enough yet.
00:43:21
◼
►
- Yeah, and so, sorry, so those are the language features
00:43:24
◼
►
in the Swift for TensorFlow project.
00:43:26
◼
►
There's other pieces as well,
00:43:27
◼
►
and so one of those is the API,
00:43:29
◼
►
and so Swift for TensorFlow has a big API,
00:43:31
◼
►
and that API then wraps the TensorFlow APIs,
00:43:34
◼
►
and saying it wraps the TensorFlow APIs
00:43:37
◼
►
doesn't do justice to how cool it is.
00:43:39
◼
►
I don't, it probably doesn't make sense
00:43:41
◼
►
to deep dive on all this stuff, given the audience,
00:43:43
◼
►
but it's really cool stuff.
00:43:47
◼
►
It uses, again, that really powerful
00:43:49
◼
►
and very efficient nature that Swift gives API developers.
00:43:53
◼
►
The next step up then is the community aspect of it,
00:43:56
◼
►
and one of the things I'm very happy about
00:43:57
◼
►
with the Swift for TensorFlow community
00:43:59
◼
►
is that it has attracted a lot of really interesting
00:44:02
◼
►
and really smart people that have contributed a huge amount,
00:44:05
◼
►
and one of the things that we did at Google
00:44:07
◼
►
and is continuous to this day is
00:44:09
◼
►
there is a roughly weekly public video chat
00:44:12
◼
►
that you can dial into and talk to the team,
00:44:15
◼
►
and all the episodes are recorded,
00:44:18
◼
►
and you can go watch all the technical discussions
00:44:22
◼
►
about differentiable programming
00:44:24
◼
►
or APIs for reinforcement learning
00:44:28
◼
►
and all these different things, and they're very public,
00:44:31
◼
►
and this has been a really great thing
00:44:33
◼
►
for engaging a community and helping build
00:44:35
◼
►
and helping learn, and particularly
00:44:37
◼
►
in the machine learning community,
00:44:38
◼
►
where there's so many different people
00:44:40
◼
►
and perspectives and talents,
00:44:42
◼
►
and there isn't obviously one right way to do it
00:44:44
◼
►
because it's not a mature field.
00:44:47
◼
►
I think that was very, very helpful.
00:44:49
◼
►
- You had those video calls at Apple too, though, right?
00:44:52
◼
►
- Are you kidding me?
00:44:53
◼
►
- I am kidding.
00:44:54
◼
►
Just imagine, though, this is the difference
00:44:56
◼
►
between the two companies.
00:44:57
◼
►
You're talking about a technology
00:44:59
◼
►
and a product that you're working on developing
00:45:02
◼
►
and that you're having routine interactions
00:45:04
◼
►
with official members of Google and members of the public
00:45:08
◼
►
talking about the technology in an open forum.
00:45:10
◼
►
It's an alien concept to the Apple way of doing things.
00:45:13
◼
►
- Yeah, and again, I think that Apple's moving a lot.
00:45:17
◼
►
In particular, in the Swift world,
00:45:20
◼
►
I think it's being quite progressive.
00:45:23
◼
►
- They got a blog.
00:45:26
◼
►
- It's just like a light and day difference
00:45:28
◼
►
in terms of the significance placed on such things.
00:45:31
◼
►
Then it's just a different philosophy.
00:45:33
◼
►
I don't think that either is right or wrong,
00:45:35
◼
►
but it's quite different.
00:45:36
◼
►
So the project continues today.
00:45:38
◼
►
It's an exciting project.
00:45:40
◼
►
Just announced their new release a week ago,
00:45:44
◼
►
two weeks ago, something like that.
00:45:45
◼
►
And so they're making really great strides
00:45:47
◼
►
integrating new things.
00:45:48
◼
►
One of the challenges there is that the runtime implementation
00:45:51
◼
►
that they're building on top of the classic TensorFlow runtime
00:45:53
◼
►
is not perfectly suited for their task.
00:45:56
◼
►
And so they're moving to new technology stacks
00:45:59
◼
►
and doing cool stuff.
00:46:01
◼
►
Anyways, if you're interested in that space,
00:46:03
◼
►
it's a very vibrant and very cool project.
00:46:06
◼
►
And it's still, I would say,
00:46:07
◼
►
a little bit ahead of its time,
00:46:09
◼
►
but the technology pieces are falling in place now
00:46:12
◼
►
and it's gonna be a very exciting 2020.
00:46:14
◼
►
- So it sounds like you're super into this stuff,
00:46:16
◼
►
but then you left to go to Sci-5.
00:46:19
◼
►
Explain that.
00:46:20
◼
►
- That's only the second project I did at Google.
00:46:24
◼
►
So there's another project called MLIR.
00:46:27
◼
►
Have you heard anything about that?
00:46:30
◼
►
- Do you wanna talk about that or is that too geeky
00:46:34
◼
►
even for John Syracuso?
00:46:36
◼
►
- I remember you being super excited about CIL
00:46:39
◼
►
back in the day.
00:46:40
◼
►
And you just love intermediary language.
00:46:42
◼
►
This is what you love.
00:46:43
◼
►
- So here's the deal with MLIR
00:46:45
◼
►
without diving too deep into it.
00:46:48
◼
►
If you work on compilers for too long,
00:46:50
◼
►
you start, just like if you work on anything for too long,
00:46:54
◼
►
you start pattern recognizing across different systems,
00:46:57
◼
►
you start realizing they're all the same.
00:46:58
◼
►
Actually, what you realize is they're 50% the same
00:47:01
◼
►
and 50% different.
00:47:04
◼
►
But because you're building a new thing,
00:47:05
◼
►
you build a new thing from scratch,
00:47:07
◼
►
and the 50% that's the same never gets factored
00:47:09
◼
►
across the rest of the universe.
00:47:11
◼
►
And so that's what compilers are today.
00:47:13
◼
►
And so if you look at LVM, for example,
00:47:16
◼
►
it has what's called an intermeter representation.
00:47:19
◼
►
It's the data structure that the entire LVM universe
00:47:22
◼
►
works on as a ton of infrastructure
00:47:24
◼
►
that's been built up across now.
00:47:25
◼
►
LVM from 20 years old this year, incidentally,
00:47:28
◼
►
which is kind of scary.
00:47:30
◼
►
But, and so LVM has a bunch of this stuff.
00:47:33
◼
►
Then you go look at Swift.
00:47:34
◼
►
Swift has CIL.
00:47:36
◼
►
CIL is it's compiler representation
00:47:38
◼
►
for doing high level language optimizations
00:47:41
◼
►
and doing arc optimizations and that kind of stuff.
00:47:44
◼
►
And that representation has to reinvent
00:47:46
◼
►
a huge amount of basic compiler stuff.
00:47:49
◼
►
And you go look at machine learning compilers.
00:47:50
◼
►
You go look at TensorFlow.
00:47:51
◼
►
You go look at all these different domain specific worlds.
00:47:55
◼
►
You look at Julia and Rust
00:47:58
◼
►
and all these different compilers are doing the same thing
00:48:00
◼
►
over and over and over and over and over again.
00:48:02
◼
►
And so what MLIR does is ML,
00:48:04
◼
►
the ML stands for multi-layer.
00:48:07
◼
►
It's also designed to be reinterpreted in many ways.
00:48:09
◼
►
If the acronym ultimately fails itself,
00:48:11
◼
►
we can say it's Moore's law or mid-level
00:48:16
◼
►
or machine learning or whatever the cool thing is
00:48:19
◼
►
of the day, Bitcoin.
00:48:20
◼
►
Wait, that doesn't work.
00:48:21
◼
►
And so what MLIR does, it says, okay, cool.
00:48:24
◼
►
Let's make it so that instead of building
00:48:26
◼
►
an instance of a compiler,
00:48:27
◼
►
we build a compiler construction toolkit.
00:48:30
◼
►
The way MLIR works is you define
00:48:32
◼
►
in a declarative specification what your IR is,
00:48:36
◼
►
what that intermediate representation is,
00:48:38
◼
►
what the type system is, what the instructions are
00:48:40
◼
►
that go into it, things like that.
00:48:41
◼
►
And then you get a tremendous amount of infrastructure
00:48:43
◼
►
for free for doing things like testing, location tracking.
00:48:47
◼
►
So you get debugging optimized code,
00:48:48
◼
►
something LVM has never really been great at.
00:48:51
◼
►
You get a ton of the things, multi-threaded compilation,
00:48:54
◼
►
like all these things that are actually hard
00:48:58
◼
►
and you have to design in from the beginning
00:49:00
◼
►
to make them really great.
00:49:00
◼
►
And most people don't think about that.
00:49:03
◼
►
And so when you're building a new compiler,
00:49:04
◼
►
typically just like you're building a system,
00:49:07
◼
►
you're racing the market to get your thing to work.
00:49:09
◼
►
You're not investing in that core infrastructure.
00:49:11
◼
►
And so MLIR allows you to do that.
00:49:14
◼
►
And we built and started this at Google.
00:49:18
◼
►
It's now an open source project.
00:49:20
◼
►
It's contributed back to LVM.
00:49:21
◼
►
So it's now an official LVM project.
00:49:24
◼
►
And one of the cool things about MLIR
00:49:25
◼
►
is it's only 18 months old-ish at this point
00:49:29
◼
►
and 18 months-ish from the first white paper.
00:49:32
◼
►
And it's already being pervasively adopted
00:49:35
◼
►
across the industry by all the big companies
00:49:38
◼
►
for lots of different things.
00:49:39
◼
►
And it's been just an incredible growth.
00:49:42
◼
►
And it's just really cool to see that happen.
00:49:45
◼
►
Interesting you described it as a compiler construction toolkit.
00:49:48
◼
►
Wasn't that basically the pitch for LVM back in the day?
00:49:50
◼
►
In a very different world, but similar idea,
00:49:53
◼
►
a bunch of libraries you can use to build a compiler.
00:49:55
◼
►
Yeah, so the difference with LVM is, I think, fairly big.
00:50:01
◼
►
So I love LVM.
00:50:02
◼
►
Please don't misread any bad things I say about LVM
00:50:05
◼
►
as me disliking LVM.
00:50:08
◼
►
LVM is really-- or the LVM IR, what people think about when
00:50:12
◼
►
they talk about the core LVM.
00:50:15
◼
►
LVM is a really good way to talk to CPUs.
00:50:17
◼
►
Or they're talking-- the basic model of LVM
00:50:20
◼
►
is C with vectors, roughly.
00:50:22
◼
►
And so if you have a problem that looks like C with vectors,
00:50:25
◼
►
LVM is a really good solution, because you
00:50:27
◼
►
can use a large number of code generators
00:50:30
◼
►
for all the different popular processors
00:50:33
◼
►
and things like this.
00:50:34
◼
►
And you could build really cool high-leverage things
00:50:36
◼
►
on top of that.
00:50:38
◼
►
LVM has not been very successful when you talk to accelerators.
00:50:41
◼
►
LVM has also been completely useless for high-level language
00:50:46
◼
►
It was never designed to do that.
00:50:48
◼
►
And so the difference between MLIR and LVM
00:50:51
◼
►
is that MLIR is designed to solve all the world's problems.
00:50:54
◼
►
And in fact, LVM is an instance within MLIR.
00:50:58
◼
►
MLIR also models LVM as well as many other things.
00:51:01
◼
►
Are you holding out one more letter?
00:51:03
◼
►
So you've got LVM-- what was that, low-level virtual
00:51:05
◼
►
machine or whatever-- ML, which is like mid-level.
00:51:10
◼
►
And I guess the HL is like languages like Swift?
00:51:14
◼
►
Or do we have room for one more letter in there?
00:51:16
◼
►
I don't know.
00:51:17
◼
►
I'm pretty good at four-letter technologies.
00:51:20
◼
►
[MUSIC PLAYING]
00:51:22
◼
►
We are sponsored this week by Jamf Now.
00:51:25
◼
►
Jamf Now makes it easy to set up, manage, and secure
00:51:28
◼
►
your Apple devices.
00:51:29
◼
►
Jamf Now is mobile device management security
00:51:32
◼
►
that helps you sleep better at night.
00:51:34
◼
►
From enforcing passcodes and encryption
00:51:36
◼
►
to remotely locking or wiping a device,
00:51:38
◼
►
Jamf Now ensures you have the MDM security settings you need
00:51:42
◼
►
so your Apple devices and the information on them
00:51:44
◼
►
is untouchable, just the way you want it.
00:51:46
◼
►
With Jamf Now, you can set passcode requirements,
00:51:49
◼
►
place a device in lost mode, even remote lock or wipe
00:51:52
◼
►
a device as needed from anywhere.
00:51:55
◼
►
Jamf Now helps secure devices so you can focus on your business
00:51:59
◼
►
And it's super easy to use.
00:52:01
◼
►
There is no IT experience needed.
00:52:03
◼
►
So our listeners, you can start securing your business today
00:52:07
◼
►
by setting up your first three devices for free.
00:52:10
◼
►
Add more, starting at just $2 a month per device.
00:52:14
◼
►
So create your free account today at jamf.com/atp.
00:52:19
◼
►
That's J-A-M-F dot com slash ATP.
00:52:22
◼
►
Thank you so much to Jamf Now for sponsoring our show.
00:52:25
◼
►
[MUSIC PLAYING]
00:52:29
◼
►
So yeah, so Google's a great place.
00:52:30
◼
►
I had a lot of fun there.
00:52:32
◼
►
There's a lot of really talented people.
00:52:34
◼
►
I love that they're ambitious and willing to swing
00:52:37
◼
►
hard to do amazing things.
00:52:40
◼
►
And so it's really great.
00:52:42
◼
►
But due to an unfortunate incident with the free food,
00:52:44
◼
►
you were forced to leave and go to a new company.
00:52:47
◼
►
Well, just because something is good
00:52:48
◼
►
doesn't mean it can't be better, right?
00:52:51
◼
►
All right, well, so what's your sci-fi pitch?
00:52:53
◼
►
I mean, the downsides of Google are things
00:52:56
◼
►
like it's a gigantic company with many tentacles.
00:53:00
◼
►
--I should say it.
00:53:01
◼
►
Well, it's got its tentacles into everything.
00:53:03
◼
►
It's trying to be and do everything in the industry.
00:53:07
◼
►
I think the other bigger issue is it's just
00:53:08
◼
►
kind of becoming bureaucratic, like many big companies do.
00:53:12
◼
►
And so certain aspects of that, like the performance review
00:53:16
◼
►
system, is just a nightmare.
00:53:19
◼
►
And so there are certain aspects of that that are just
00:53:21
◼
►
standard big company life.
00:53:23
◼
►
And with sci-fi, the appeal is it's a much smaller company.
00:53:27
◼
►
It's hundreds of people.
00:53:30
◼
►
And it's not an early stage startup,
00:53:32
◼
►
but it's way smaller than one of the big companies.
00:53:37
◼
►
But it's really got an ambitious charter
00:53:40
◼
►
of reinventing how semiconductors are made.
00:53:42
◼
►
And so what my team does at sci-fi
00:53:45
◼
►
is really rethinking how people design, build processors,
00:53:51
◼
►
but also just accelerators in general from the beginning.
00:53:55
◼
►
And there's a tremendous number of compiler, language,
00:53:58
◼
►
lots of other familiar problems, as well as
00:54:00
◼
►
a lot of very developer tool-y kinds of problems
00:54:03
◼
►
where you're trying to enable a new kind of user
00:54:07
◼
►
to be productive and be able to do things
00:54:09
◼
►
they couldn't do before.
00:54:10
◼
►
So it's a lot of fun.
00:54:11
◼
►
It's really exciting.
00:54:12
◼
►
And it's also a space where the existing tools, whether they
00:54:16
◼
►
be proprietary or open source, all
00:54:18
◼
►
have different kinds of problems.
00:54:19
◼
►
And there's a huge opportunity, or so it seems,
00:54:21
◼
►
to make the world better.
00:54:23
◼
►
It sounds like there's a lot of synergy with the MLR stuff
00:54:25
◼
►
you were talking about.
00:54:26
◼
►
Like any kind of industry like that,
00:54:28
◼
►
that is especially something about building hardware,
00:54:31
◼
►
probably has a whole bunch of software tools.
00:54:33
◼
►
But the love and attention those software tools
00:54:35
◼
►
get for this very narrow market is probably not very big.
00:54:38
◼
►
And so people just deal with the tools
00:54:40
◼
►
that they have from a limited number of vendors
00:54:42
◼
►
that are not nearly as friendly and as polished as the tools
00:54:45
◼
►
for a larger platform, let's say.
00:54:48
◼
►
Yeah, that's exactly right.
00:54:49
◼
►
And there's also an aspect of MLR
00:54:52
◼
►
is fundamentally transformative compiler technology,
00:54:55
◼
►
in my opinion.
00:54:56
◼
►
And I say that having worked on a lot of compilers.
00:54:59
◼
►
There's nothing else like it.
00:55:00
◼
►
And it really opens the door to a lot
00:55:02
◼
►
of really interesting new kinds of ways to solve old problems.
00:55:06
◼
►
And not all the tools in this chip design space
00:55:11
◼
►
are built on state-of-the-art technology.
00:55:13
◼
►
And so there's unique opportunities when you say,
00:55:16
◼
►
hey, let's take a thing that didn't exist until 18 months
00:55:18
◼
►
ago and apply it in a new way to a field that
00:55:20
◼
►
is really, really important and has a lot of smart people
00:55:25
◼
►
working in it.
00:55:26
◼
►
And just like the TensorFlow and the Swift for TensorFlow
00:55:29
◼
►
projects and things like that are about building tools
00:55:31
◼
►
for data scientists, here's about building tools
00:55:33
◼
►
for chip designers.
00:55:35
◼
►
Does MLR have a animal mascot logo thing?
00:55:39
◼
►
It has a abstracted cuboid M. It's a geometric design.
00:55:45
◼
►
It's not nearly as cute as the LVM dragon.
00:55:47
◼
►
Yeah, a giant silver dragon.
00:55:50
◼
►
We got to workshop the MLR thing.
00:55:53
◼
►
You're very enthusiastic about it, but it's no dragon.
00:55:56
◼
►
And John, did you even catch that somewhere along the way,
00:55:59
◼
►
the LVM dragon got its head installed right side up?
00:56:02
◼
►
I brought this up with you many times.
00:56:03
◼
►
I'm glad to know that that was corrected.
00:56:06
◼
►
So there's progress being made in all fronts.
00:56:10
◼
►
So to come back to Sci-5, to the best year willing and capable
00:56:14
◼
►
of saying, who is the kind of customer
00:56:16
◼
►
that you guys are courting?
00:56:17
◼
►
And I don't necessarily mean like name Tesla or something
00:56:20
◼
►
I'm just saying like, what kinds of more specific problems
00:56:23
◼
►
are you looking to solve?
00:56:24
◼
►
I understand what you were saying about making chip design
00:56:27
◼
►
better and faster and whatnot.
00:56:29
◼
►
But how does that apply to an actual thing
00:56:32
◼
►
I can hold in my hand?
00:56:33
◼
►
Sure, so I think that there is a difference between what
00:56:36
◼
►
Sci-5 is about and what my role in Sci-5 is.
00:56:41
◼
►
Sci-5 as a company has a couple of different things
00:56:45
◼
►
It is-- are you familiar with the RISC-V instruction
00:56:48
◼
►
set and that movement?
00:56:49
◼
►
I know that it is a thing, but I don't know much more than that.
00:56:52
◼
►
OK, so let me give a quick dive into that.
00:56:56
◼
►
So RISC-V, it's an instruction set like ARM or like x86
00:57:00
◼
►
from Intel and AMD or MIPS or PowerPC.
00:57:03
◼
►
It's like one of those kinds of things.
00:57:05
◼
►
So if you talk about the others, so you talk about MIPS, x86 ARM,
00:57:10
◼
►
PowerPC, like all these things, they're all proprietary.
00:57:13
◼
►
And so they're all owned by a very large company,
00:57:17
◼
►
and that very large company controls its destiny.
00:57:20
◼
►
And so this control comes from multiple--
00:57:24
◼
►
in multiple ways.
00:57:25
◼
►
So they have a roadmap, and they publish new specifications.
00:57:28
◼
►
And if you ask nicely, they will listen to you,
00:57:31
◼
►
and they will consider your input.
00:57:32
◼
►
But they decide what to do about it.
00:57:35
◼
►
But the other thing about it is that they're
00:57:37
◼
►
the guardians of all the chips.
00:57:40
◼
►
And so you either have to buy a chip from them,
00:57:44
◼
►
or you have to buy a license to make a chip using
00:57:47
◼
►
their instruction set.
00:57:48
◼
►
And so this has been a very successful model
00:57:51
◼
►
for these companies for a really long time.
00:57:54
◼
►
Look at what Intel has done with x86, right,
00:57:57
◼
►
and the Wintel monopoly back in the day.
00:58:00
◼
►
Or look at what ARM is doing now for cell phones, for example.
00:58:04
◼
►
But this is not really great if you want to do something really
00:58:07
◼
►
custom, or if you don't want to be locked
00:58:10
◼
►
into one particular vendor.
00:58:11
◼
►
And there are actual instances where vendors go out of business
00:58:14
◼
►
and then your instruction set and all the software built
00:58:17
◼
►
around it are stranded.
00:58:18
◼
►
Things like HP even had an instruction set called PA-Risk.
00:58:24
◼
►
And they eventually abandoned it with Itanium,
00:58:28
◼
►
and the whole debacle around that,
00:58:29
◼
►
which really left their server users in kind of a weird spot.
00:58:34
◼
►
And so you could argue that building your whole world
00:58:38
◼
►
on top of a single proprietary vendor
00:58:40
◼
►
leaves you tied to their destiny, right?
00:58:43
◼
►
I think it's true for all proprietary things.
00:58:45
◼
►
So what RISC-V is is RISC-V came out of Berkeley.
00:58:48
◼
►
And it was originally a group of academics
00:58:51
◼
►
that were working on RISC instruction sets.
00:58:53
◼
►
And they were the pioneers of RISC back in the day.
00:58:57
◼
►
And so RISC-V is the fifth incarnation
00:59:00
◼
►
of the Berkeley research group's design for RISC processors.
00:59:06
◼
►
And what they did with RISC-V, which was really cool
00:59:10
◼
►
and interesting, is they open sourced
00:59:12
◼
►
and opened the entire design process for the instruction set.
00:59:16
◼
►
And so not only is it a patent-free,
00:59:20
◼
►
non-licensed, open kind of instruction set,
00:59:26
◼
►
but there are open design processes,
00:59:28
◼
►
kind of like Swift Evolution,
00:59:29
◼
►
for the instruction set themselves.
00:59:30
◼
►
And so you too can design your own RISC-V processor
00:59:35
◼
►
and decide to add new instructions
00:59:36
◼
►
without talking to anybody if you want.
00:59:39
◼
►
But the community also realizes that if everybody does that,
00:59:42
◼
►
well, you get huge fragmentation.
00:59:44
◼
►
And so it's better for people to work together
00:59:46
◼
►
in a collaborative, cross-industry way
00:59:48
◼
►
to define new extensions to that.
00:59:51
◼
►
And so RISC-V is, I think,
00:59:53
◼
►
it's still a bit early in certain ways,
00:59:55
◼
►
but it's really eating the industry
00:59:57
◼
►
in a very interesting way.
01:00:00
◼
►
And it's this wave that's really kind of taking over things.
01:00:03
◼
►
Now, Sci-Fi was founded by the creators of RISC-V.
01:00:07
◼
►
And so the founders of Sci-Fi were from that research group.
01:00:10
◼
►
They had designed the RISC-V instruction set.
01:00:13
◼
►
And so they founded the company initially around that.
01:00:16
◼
►
And their idea was to productize
01:00:19
◼
►
and commercialize the RISC-V design,
01:00:22
◼
►
build actual processors for it,
01:00:23
◼
►
and they've been doing that for quite some time.
01:00:25
◼
►
Sci-Fi has since evolved.
01:00:29
◼
►
And so, yes, it is the RISC-V company,
01:00:33
◼
►
or the leading RISC-V company.
01:00:36
◼
►
Yes, it has some amazing RISC-V CPU designs,
01:00:40
◼
►
which you can license and put them in your own chips,
01:00:42
◼
►
but it's also what is called now an idea to silicon company.
01:00:45
◼
►
And so they have all the functions for chip design in-house.
01:00:48
◼
►
And so you can walk up and say,
01:00:49
◼
►
"Hey, I'm gonna build a toaster or a microwave,
01:00:52
◼
►
and I need this and this,
01:00:53
◼
►
and it needs to be Bluetooth enabled,"
01:00:54
◼
►
because of course it does.
01:00:57
◼
►
But I don't want it to be big,
01:00:58
◼
►
so take out this and that and the other feature,
01:01:00
◼
►
and the entire stack and the entire system
01:01:02
◼
►
can be completely customized to your needs.
01:01:04
◼
►
And if you wanna own the design
01:01:06
◼
►
because you're into owning,
01:01:08
◼
►
you're an ML accelerator,
01:01:09
◼
►
machine learning accelerator company,
01:01:12
◼
►
and you're building your secret sauce,
01:01:13
◼
►
and that's your accelerator,
01:01:14
◼
►
but yeah, you still need RAM interfaces
01:01:17
◼
►
and all the other standard things
01:01:18
◼
►
that go with this PCI interface and stuff like that.
01:01:20
◼
►
Well, you can own or customize however much you want,
01:01:23
◼
►
but Sci-Fi can then bring it to market for you.
01:01:26
◼
►
Now, Sci-Fi is not unique in that respect,
01:01:29
◼
►
but what they're doing,
01:01:31
◼
►
and one of the things that I'm very excited about
01:01:33
◼
►
and what my team is driving is
01:01:35
◼
►
working on all the tooling, the methodology,
01:01:37
◼
►
the cloud platforms, all this stuff
01:01:38
◼
►
to make it just better, faster, cheaper,
01:01:40
◼
►
improving turnaround time,
01:01:42
◼
►
making it so the tools work together,
01:01:43
◼
►
there's more commonality,
01:01:45
◼
►
and just making that just way better
01:01:49
◼
►
than what you get out of a bunch of existing tools
01:01:52
◼
►
that are kind of cobbled together.
01:01:55
◼
►
So it's a really exciting time.
01:01:56
◼
►
They're really hard problems.
01:01:58
◼
►
It's an industry that is very mature,
01:02:00
◼
►
and there's a lot of very established, very good players,
01:02:03
◼
►
and there's a lot of great tools,
01:02:05
◼
►
but there's also, I think,
01:02:07
◼
►
a good opportunity to look at the big space
01:02:09
◼
►
and try to understand how it all fits together
01:02:11
◼
►
and come up with new ideas.
01:02:13
◼
►
So we'll see how it goes.
01:02:14
◼
►
It's a long-term journey.
01:02:16
◼
►
- You're mentioning the open source instruction said,
01:02:20
◼
►
and the fact that companies like this can exist
01:02:24
◼
►
because risk five is not proprietary,
01:02:26
◼
►
so they can build products based on it
01:02:29
◼
►
and use that as a tool set to,
01:02:31
◼
►
if a customer comes to them,
01:02:32
◼
►
so they want a thing that does whatever,
01:02:34
◼
►
they don't have to license an instruction set
01:02:36
◼
►
from somebody they can use risk five.
01:02:37
◼
►
Makes me think about Apple's usual MO.
01:02:41
◼
►
Well, they have two different MOs.
01:02:42
◼
►
One, the more traditional one,
01:02:44
◼
►
was that they come up with something themselves,
01:02:48
◼
►
and it would be their thing, and they would control it,
01:02:50
◼
►
and they're happy with that, and everyone's great.
01:02:51
◼
►
But in the modern world, Apple can't invent
01:02:55
◼
►
everything themselves, so they had two options.
01:02:58
◼
►
The old one was, okay, well,
01:03:00
◼
►
we'll use something from a third party.
01:03:03
◼
►
And then the newer option is,
01:03:04
◼
►
a proprietary thing from a third party,
01:03:06
◼
►
and the newer option is we'll use an open thing
01:03:09
◼
►
that nobody owns in particular.
01:03:11
◼
►
So example of the third-party one is like,
01:03:13
◼
►
we're gonna put CPUs in our computers,
01:03:15
◼
►
we'll buy them from Motorola,
01:03:16
◼
►
we'll buy them from IBM, whatever.
01:03:19
◼
►
And that has been a relationship
01:03:20
◼
►
that's been a little bit fraught.
01:03:21
◼
►
The open source one is we're gonna build
01:03:22
◼
►
a new operating system, we'll build it on top of BSD,
01:03:24
◼
►
we'll build it on top of Mach, right?
01:03:26
◼
►
We'll build a new compiler, toolchain on top of LVM,
01:03:29
◼
►
which is open, and even going to the extent
01:03:32
◼
►
of building some things themselves in-house,
01:03:34
◼
►
either based on open source projects like WebKit from KHTML,
01:03:37
◼
►
or saying we're gonna make a new language,
01:03:38
◼
►
and also that language is gonna be open source,
01:03:40
◼
►
even though that was from the outside,
01:03:42
◼
►
touch and go until the official word
01:03:44
◼
►
that was gonna be open, that's a choice that they've made.
01:03:47
◼
►
But still, within Apple, there are situations
01:03:49
◼
►
where they're still in the old pattern,
01:03:51
◼
►
which is we're using a thing, it's super important,
01:03:54
◼
►
we don't own it, and it's proprietary in some form.
01:03:57
◼
►
And one example of that would be the ARM instruction set
01:03:59
◼
►
that Apple has this license for
01:04:00
◼
►
with whoever owns the ARM stuff, right?
01:04:03
◼
►
And that's, you know, they make their own ARM CPUs,
01:04:07
◼
►
A whatever, blah, blah, blah, but they don't,
01:04:10
◼
►
Apple does not own the ARM instruction set,
01:04:12
◼
►
nor is it open source that anybody can use for free,
01:04:14
◼
►
like RISC-V.
01:04:15
◼
►
So depending on how the RISC-V thing goes,
01:04:19
◼
►
and we've been talking for a while in this program
01:04:20
◼
►
about speculating transitions of the Mac
01:04:23
◼
►
to the ARM platform, and in our various discussions,
01:04:26
◼
►
we have brought up the idea of like,
01:04:27
◼
►
why is everyone thinking it has to be ARM,
01:04:29
◼
►
or why does everyone think it has to be away from x86,
01:04:31
◼
►
or whatever, couldn't Apple just come up
01:04:32
◼
►
with its own instruction set,
01:04:33
◼
►
what about the inertia of ARM, and all this other stuff?
01:04:36
◼
►
I can imagine a future where RISC-V either has the cloud,
01:04:41
◼
►
or Apple decides to give it the, you know,
01:04:44
◼
►
to hitch its wagon to that star,
01:04:46
◼
►
kind of like it did with KHTML,
01:04:47
◼
►
which did not have a lot of cloud in the web browser
01:04:49
◼
►
community before Apple sort of adopted it,
01:04:52
◼
►
but kept it open, then Apple could have an instruction set
01:04:56
◼
►
that is no longer at the mercy of some company
01:04:59
◼
►
that is not Apple, but that is nevertheless
01:05:01
◼
►
a private company, and I always think ARM
01:05:02
◼
►
is gonna go out of business, and honestly,
01:05:04
◼
►
Apple could probably buy them
01:05:05
◼
►
if they really got into a pinch,
01:05:07
◼
►
but I do wonder about, you know,
01:05:09
◼
►
if the timelines are lined up differently,
01:05:12
◼
►
we could all be using iPhones with chips inside them
01:05:15
◼
►
that run some kind of RISC-V instruction set,
01:05:17
◼
►
and it wouldn't be that different of a world,
01:05:20
◼
►
and I bet Apple, it would fit better
01:05:21
◼
►
with the current model of Apple,
01:05:23
◼
►
which is, if we don't own it totally in-house,
01:05:25
◼
►
it should be open.
01:05:27
◼
►
- Well, so I don't know anything about Apple's plans
01:05:29
◼
►
in this space, so I can't comment to that, obviously,
01:05:32
◼
►
but I think there's a couple of different factors
01:05:35
◼
►
that I would weigh into this, so Apple,
01:05:37
◼
►
Apple's big enough they could theoretically do anything,
01:05:40
◼
►
right, and so one of the things that impresses me
01:05:43
◼
►
about Apple is that in the face of immense resources,
01:05:48
◼
►
they're still incredibly strategic, right,
01:05:51
◼
►
and it's very, this is something that I don't think
01:05:53
◼
►
Google is quite as good at, is that Google tries
01:05:56
◼
►
to do everything because they can, right,
01:05:59
◼
►
and that's not always great.
01:06:02
◼
►
- I think Google shut down that kite-based Wi-Fi thing,
01:06:06
◼
►
didn't they, so they're raining it in a little bit.
01:06:09
◼
►
- Yeah, so anyways, I don't wanna speak negatively
01:06:11
◼
►
about Google, but the thing with instruction sets
01:06:15
◼
►
is that there's a huge software ecosystem
01:06:17
◼
►
that goes with that instruction set,
01:06:20
◼
►
and so one of the things that's interesting about RISC-V
01:06:23
◼
►
is that you could look at this and say,
01:06:25
◼
►
well, the RISC-V instruction set's not that interesting,
01:06:29
◼
►
right, and I think the people behind RISC-V
01:06:31
◼
►
would say that's the whole idea,
01:06:32
◼
►
it should not be interesting, it should be very
01:06:34
◼
►
straightforward to compile for and things like this,
01:06:36
◼
►
but the point is not that the instruction set
01:06:39
◼
►
is magic in some way, right, the point is that
01:06:42
◼
►
at the state of evolution that processors are at,
01:06:46
◼
►
the instruction set isn't the most interesting piece,
01:06:48
◼
►
it's about the software that lives on top of it,
01:06:51
◼
►
and at any point in time, somebody could go invent
01:06:53
◼
►
their own instruction set, that does happen,
01:06:56
◼
►
particularly in like grad school,
01:06:57
◼
►
if you're an electrical engineer and you're designing a chip,
01:07:00
◼
►
you can invent your own instruction set,
01:07:02
◼
►
but if you do that, you have no software.
01:07:04
◼
►
Where's the web browser, where's, you know,
01:07:06
◼
►
all the other things that go with this,
01:07:08
◼
►
where's the compiler for, the C compiler,
01:07:10
◼
►
all these things, and so the cool thing about RISC-V here
01:07:13
◼
►
is that you can say, I'm gonna design my own CPU,
01:07:17
◼
►
but I get the software, and that I think is very,
01:07:20
◼
►
very interesting and cool.
01:07:22
◼
►
Now, coming back to Apple, Apple doesn't need that,
01:07:24
◼
►
they could invent their own thing,
01:07:25
◼
►
they have multiple times before,
01:07:27
◼
►
so I don't know how they weigh all these things,
01:07:29
◼
►
but yeah, I think for the general industry,
01:07:34
◼
►
it's a pretty big factor.
01:07:38
◼
►
- We are sponsored this week by Linode,
01:07:40
◼
►
my favorite web host.
01:07:41
◼
►
Whether you're working on a personal project
01:07:43
◼
►
or managing your enterprise's infrastructure,
01:07:45
◼
►
Linode Cloud Hosting has the pricing, support, and scale
01:07:48
◼
►
you need to take your project to the next level.
01:07:51
◼
►
They have 11 data centers worldwide so far
01:07:53
◼
►
and they're always adding more.
01:07:54
◼
►
All these are filled with enterprise grade hardware
01:07:57
◼
►
and their next generation network to back it all up.
01:07:59
◼
►
So Linode Cloud Hosting delivers the server performance
01:08:02
◼
►
you expect at prices that frankly, you don't.
01:08:05
◼
►
I've been a Linode customer myself
01:08:07
◼
►
since long before they were sponsoring,
01:08:09
◼
►
about eight or nine years now.
01:08:10
◼
►
That's where I host my personal server for my blog
01:08:13
◼
►
and the livestream for the show.
01:08:14
◼
►
It's also where I host all of Overcast
01:08:16
◼
►
and that makes up about 25 servers there
01:08:19
◼
►
and I've been with them this entire time
01:08:21
◼
►
and I am so happy with Linode.
01:08:23
◼
►
They are amazing value for the money.
01:08:25
◼
►
Like, you get such good specs,
01:08:27
◼
►
you look around the industry
01:08:28
◼
►
and for the entire time I've been with them,
01:08:30
◼
►
they have been top of the line
01:08:32
◼
►
in both performance and in value.
01:08:35
◼
►
They really are great.
01:08:36
◼
►
I've never found anybody who can beat them
01:08:37
◼
►
consistently on value and so that's why I'm there
01:08:40
◼
►
'cause I spend a lot of money on servers
01:08:41
◼
►
and I get a lot for it there
01:08:43
◼
►
and I wouldn't get that much for my money
01:08:45
◼
►
or I'd have to spend a lot more,
01:08:46
◼
►
pretty much every else I've ever seen.
01:08:48
◼
►
And they have great support if I need it,
01:08:49
◼
►
they have great performance,
01:08:50
◼
►
they have all these different options.
01:08:52
◼
►
So anything you need from basic things
01:08:54
◼
►
like their wonderful $5 a month Nano plan
01:08:56
◼
►
which gives you a gig of RAM these days
01:08:58
◼
►
and over time when they're able to offer more for the money,
01:09:01
◼
►
they just upgrade their plans at the same prices
01:09:04
◼
►
and you can just upgrade your servers
01:09:06
◼
►
with one click to the new plans, it's incredible.
01:09:08
◼
►
So see for yourself, go to linode.com/atp
01:09:12
◼
►
and when you create a new account,
01:09:13
◼
►
use promo code ATP2020 to get a $20 credit
01:09:17
◼
►
for your next project.
01:09:19
◼
►
Linode is so great, I highly recommend it.
01:09:21
◼
►
If you need servers, check out Linode Cloud Hosting.
01:09:24
◼
►
Once again, linode.com/atp,
01:09:27
◼
►
promo code ATP2020 when creating a new account
01:09:30
◼
►
to get a $20 credit.
01:09:31
◼
►
Thank you so much to Linode for hosting all my stuff
01:09:34
◼
►
and sponsoring our show.
01:09:35
◼
►
- So Chris, you haven't been at Apple for several years now
01:09:42
◼
►
but you are very much a veteran of WWDC
01:09:44
◼
►
and you have presented at several,
01:09:48
◼
►
to the best of my recollection if not all the ones
01:09:50
◼
►
when you were at Apple.
01:09:51
◼
►
So as someone who has been on the big stage,
01:09:55
◼
►
the biggest stage in fact at WWDC,
01:09:58
◼
►
knowing now that it's gone online only,
01:10:01
◼
►
how do you feel about that?
01:10:03
◼
►
Do you think it's workable?
01:10:05
◼
►
What would Apple do about labs?
01:10:07
◼
►
Like do you have any thoughts, opinions,
01:10:09
◼
►
anything you'd like to discuss with regard to WWDC?
01:10:12
◼
►
- Yeah, again, disclaimer, I haven't been there for years
01:10:16
◼
►
and I don't know how they think about it
01:10:17
◼
►
but the way I think about it is,
01:10:19
◼
►
I think it's actually a huge opportunity in certain ways.
01:10:22
◼
►
So WWDC as a thing has needed to evolve anyways in my opinion
01:10:28
◼
►
because you've got too much demand and too little supply.
01:10:31
◼
►
The labs, if you're one of the lucky people
01:10:33
◼
►
to get the lottery tickets and you get into the labs,
01:10:36
◼
►
it's incredibly valuable but what about everybody else?
01:10:39
◼
►
Right, and the talks, the talks are great
01:10:44
◼
►
but also variable depending on the day each speaker has
01:10:46
◼
►
and so this gives you a chance to improve the quality
01:10:49
◼
►
of the talks and maybe relieve some of the pressure on that.
01:10:53
◼
►
Now the question for me is,
01:10:55
◼
►
does what do they do with the keynote
01:10:57
◼
►
and other things like that which were kind of positioned
01:10:59
◼
►
as being technical content
01:11:01
◼
►
but they're really marketing talks, right?
01:11:03
◼
►
And so how does that all work?
01:11:05
◼
►
And I'm not sure about that
01:11:06
◼
►
but I think that overall the event will be great
01:11:09
◼
►
and maybe this will force an evolution that allows labs
01:11:12
◼
►
or the replacement for labs to be more scalable
01:11:15
◼
►
to more people and maybe that will be a good thing.
01:11:18
◼
►
Now I think that the other side of this is
01:11:22
◼
►
that this whole shelter in place,
01:11:24
◼
►
people can't talk to each other,
01:11:26
◼
►
you can't go to conferences really impacts a lot of things
01:11:29
◼
►
including WWDC where the community aspects
01:11:31
◼
►
of pulling people physically together
01:11:33
◼
►
and you go have a beer with each other
01:11:34
◼
►
and you see each other once a week,
01:11:37
◼
►
that I don't think is really replaceable
01:11:40
◼
►
and I would argue that in the case of WWDC
01:11:44
◼
►
that's already being diluted anyways
01:11:46
◼
►
just because the community is too big for the venue
01:11:51
◼
►
but I think that's something that is an industry,
01:11:54
◼
►
it's gonna be really interesting to see
01:11:55
◼
►
what this summer or what happens with all the events.
01:12:00
◼
►
It's really hard for people on the event planning side
01:12:02
◼
►
thanks to dealing with the uncertainty.
01:12:04
◼
►
- One of the things we've been talking about
01:12:05
◼
►
speaking of like limited resources and supply and demand
01:12:08
◼
►
is exactly how much of Apple employees
01:12:13
◼
►
and engineers time WWDC takes.
01:12:16
◼
►
We're always sort of speculating like,
01:12:18
◼
►
does not having to do a presentation on stage live
01:12:22
◼
►
in the moment with all the rehearsals and everything,
01:12:24
◼
►
does that free up any engineering resources
01:12:27
◼
►
or is it more or less about the same amount of time
01:12:29
◼
►
'cause now they're just gonna have to be standing
01:12:30
◼
►
in front of a camera, pre-recording things or whatever.
01:12:33
◼
►
How would you characterize the amount of time
01:12:35
◼
►
you felt like it took you and your teams
01:12:38
◼
►
to prepare for WWDC?
01:12:40
◼
►
Did you feel like you could better spend that time
01:12:42
◼
►
doing something else or did you feel like,
01:12:43
◼
►
look, this is stuff we have to do anyway
01:12:45
◼
►
and it's good that we're doing it?
01:12:47
◼
►
- I think it depends on what,
01:12:49
◼
►
so again, this seems like a huge opportunity to me
01:12:52
◼
►
because the dynamic that happens with WWDC
01:12:55
◼
►
is that there are multiple things
01:12:58
◼
►
that Apple gets out of WWDC.
01:13:01
◼
►
One of which is having that Monday morning keynote
01:13:04
◼
►
forces all the builds to converge.
01:13:06
◼
►
Beta one has to happen.
01:13:11
◼
►
And that is an incredibly valuable forcing function
01:13:14
◼
►
for engineering management to have a clearly defined,
01:13:19
◼
►
easy to articulate goal that everybody understands
01:13:22
◼
►
and can rally behind
01:13:23
◼
►
and you just don't have the ambiguity there.
01:13:25
◼
►
Now, the bad thing about WWDC historically
01:13:27
◼
►
is that crunch time,
01:13:29
◼
►
and it is a little bit of crunch time as you can imagine,
01:13:31
◼
►
happens exactly the same time
01:13:33
◼
►
you're preparing the technical talks.
01:13:35
◼
►
So you're trying to, on the one hand,
01:13:36
◼
►
have amazing technical content that you're preparing.
01:13:40
◼
►
On the other hand, you're trying to fix
01:13:41
◼
►
and manage the fixing of all the bugs
01:13:43
◼
►
and this is very difficult to juggle.
01:13:45
◼
►
Now, if they decided to have the keynote on day X
01:13:49
◼
►
and then have the technical talks roll out two weeks later,
01:13:52
◼
►
you could really change that dynamic
01:13:54
◼
►
and maybe that would be better for the sanity of everybody.
01:13:58
◼
►
I don't think it necessarily dramatically reduces
01:14:01
◼
►
the amount of time that it would take to produce that.
01:14:04
◼
►
The thing that you get back, I think,
01:14:06
◼
►
is the 1000 Apple engineers or however many it is
01:14:10
◼
►
that actually attend a week of the conference.
01:14:12
◼
►
And so you get that back,
01:14:14
◼
►
but I think that is probably minor
01:14:17
◼
►
when you look across all of Apple's engineering efforts
01:14:20
◼
►
at this point.
01:14:21
◼
►
So I don't know, I think it'll be really interesting
01:14:23
◼
►
to see what they do.
01:14:24
◼
►
And Apple's a very strategic and very smart company
01:14:27
◼
►
and has a lot of very smart people.
01:14:28
◼
►
I'm sure they're looking at how to turn this
01:14:31
◼
►
into a new opportunity
01:14:32
◼
►
and what new things they can do with the format
01:14:34
◼
►
and how they can delight people in new ways.
01:14:38
◼
►
- If you had to put money for or against
01:14:40
◼
►
there ever being another in-person thing like WWDC again,
01:14:44
◼
►
would you say for or against?
01:14:47
◼
►
You gotta put money out of your $1, $1 bet.
01:14:50
◼
►
- Well, so this comes back to your observation about Swift,
01:14:54
◼
►
which is you do a thing and then see how it works out.
01:14:58
◼
►
And so I think that if they do WWDC virtually this year
01:15:01
◼
►
and it sucks, then it's probably gonna go physical again.
01:15:04
◼
►
- That's not how betting works.
01:15:07
◼
►
- I don't know.
01:15:07
◼
►
I would wager that it doesn't return
01:15:11
◼
►
to its original format.
01:15:13
◼
►
So if there is an in-person event,
01:15:15
◼
►
I think it would be significantly different
01:15:17
◼
►
than what the historical events have been.
01:15:21
◼
►
- So we'll see.
01:15:22
◼
►
I don't know.
01:15:23
◼
►
- It's been funny for me because as I found out
01:15:26
◼
►
about this news, which we all kind of expected,
01:15:28
◼
►
on the one hand, I was kind of happy
01:15:29
◼
►
because I've been lucky enough to go to many
01:15:33
◼
►
of the last WWDCs and have a ticket.
01:15:36
◼
►
But nevertheless, it is certainly way, way, way too little
01:15:41
◼
►
for the amount of demand that there is, as you said, Chris.
01:15:43
◼
►
And so on the one side for the actual event itself,
01:15:45
◼
►
I was like, oh, you know what?
01:15:46
◼
►
I'll probably do the best.
01:15:47
◼
►
But then on the other side,
01:15:48
◼
►
and this is another thing you said a minute ago,
01:15:50
◼
►
not being able to rub shoulders with not only my two co-hosts
01:15:54
◼
►
but a lot of the people, some of whom are within Apple
01:15:56
◼
►
that I know and some of our mutual friends
01:15:59
◼
►
that all kind of descend on San Jose that one week in June,
01:16:03
◼
►
I'm really gonna miss that quite a bit
01:16:04
◼
►
if that doesn't ever return.
01:16:06
◼
►
And I don't know how the community will replace it,
01:16:07
◼
►
but it is definitely a yin and yang sort of thing
01:16:11
◼
►
that I'm very curious to see what'll happen in 2021,
01:16:14
◼
►
assuming we all survive till then.
01:16:16
◼
►
But moving along--
01:16:18
◼
►
- Well, so let's flip that question around.
01:16:21
◼
►
What opportunity does this produce
01:16:22
◼
►
for things like AltConf, right?
01:16:25
◼
►
Because there are people that are interested
01:16:27
◼
►
in pulling people together,
01:16:28
◼
►
and there are a lot of interesting community events,
01:16:31
◼
►
and maybe this is an opportunity for them to benefit
01:16:34
◼
►
and for the community to self-organize
01:16:36
◼
►
in ways that Apple perhaps wasn't super great at
01:16:39
◼
►
in the first place.
01:16:40
◼
►
- Yeah, I couldn't agree more.
01:16:41
◼
►
And I think some of the trouble is
01:16:43
◼
►
any sort of physical self-organizing
01:16:45
◼
►
isn't happening quite obviously, but--
01:16:46
◼
►
- Well, not this summer.
01:16:48
◼
►
But I think the question is, as you project forward,
01:16:50
◼
►
I'm really curious to see what the pandemic does
01:16:54
◼
►
to human culture.
01:16:55
◼
►
I mean, I think it's a really interesting,
01:16:58
◼
►
you think about, I don't know,
01:17:00
◼
►
pick your timeframe, two years from now,
01:17:01
◼
►
three years from now when all the dust has settled,
01:17:03
◼
►
things have gone more or less back to normal,
01:17:05
◼
►
we have reassembled the US economy and the world economy.
01:17:08
◼
►
What's different, right?
01:17:11
◼
►
And 9/11, just within America,
01:17:14
◼
►
had a fairly profound impact on a lot of little things
01:17:18
◼
►
across our world.
01:17:20
◼
►
And this is a global event, right?
01:17:23
◼
►
This is a global event that's a much bigger impact.
01:17:26
◼
►
And I think it's gonna be very interesting
01:17:27
◼
►
to see how this changes the way we look at things.
01:17:30
◼
►
It could have widespread effects
01:17:31
◼
►
on how people think about in-person meetings.
01:17:34
◼
►
You're working from home,
01:17:36
◼
►
maybe far more socially acceptable
01:17:38
◼
►
outside of software and other industries
01:17:41
◼
►
where it's been more common.
01:17:43
◼
►
I think it could have really interesting effects
01:17:45
◼
►
on society and culture in general.
01:17:48
◼
►
- Well, those things have really changed
01:17:49
◼
►
if Apple starts letting people work from home.
01:17:54
◼
►
- It does happen, it does happen.
01:17:55
◼
►
So I feel like, Chris, in the first part of our conversation,
01:17:59
◼
►
talking about your past of the last three or so years,
01:18:02
◼
►
I keep coming back to something you said to us
01:18:06
◼
►
the last time we spoke,
01:18:07
◼
►
and this is not the only time you've said it.
01:18:08
◼
►
You said in so many words,
01:18:10
◼
►
you want Swift to take over the world.
01:18:11
◼
►
And I feel like in many ways,
01:18:14
◼
►
your roles at certainly Google in particular,
01:18:19
◼
►
it is you trying to get Swift to take over the world.
01:18:22
◼
►
So three years on from when the four of us last spoke,
01:18:25
◼
►
how do you feel that goal is coming along?
01:18:28
◼
►
Do you feel like you've made tremendous progress,
01:18:29
◼
►
not enough progress?
01:18:31
◼
►
Where do you feel like it lies?
01:18:32
◼
►
- Well, so I think there's different ways
01:18:35
◼
►
of interpreting this because my,
01:18:38
◼
►
let's come back to why I believe that, right?
01:18:40
◼
►
So my goal is never to take Swift
01:18:43
◼
►
and shove it down the throats of people who don't want it.
01:18:47
◼
►
My goal is for Swift to be such an amazing thing
01:18:50
◼
►
that people want to use it, okay?
01:18:53
◼
►
And when you look at this
01:18:55
◼
►
and you look at the machine learning community,
01:18:58
◼
►
when I was starting there
01:19:00
◼
►
and when I was talking with people
01:19:01
◼
►
when we were talking about this whole Python problem
01:19:03
◼
►
and things like this,
01:19:04
◼
►
and the general sentiment was everybody uses Python.
01:19:07
◼
►
Yeah, it's not great, but everybody uses it.
01:19:09
◼
►
The world will never change.
01:19:11
◼
►
And I come at that and say,
01:19:12
◼
►
hey, well, the world doesn't change
01:19:13
◼
►
unless somebody steps up to change it.
01:19:16
◼
►
And this is merely hard.
01:19:18
◼
►
Let's work backwards from this.
01:19:19
◼
►
Let's look at all the different problems,
01:19:20
◼
►
including the migration problem and social acceptance
01:19:22
◼
►
and da, da, da, da, interoperability,
01:19:25
◼
►
like all of these things and solve the problems.
01:19:29
◼
►
And if you solve the problems,
01:19:30
◼
►
then you can test the social question, right?
01:19:33
◼
►
And in the meantime, it makes Swift a better language.
01:19:35
◼
►
And there's other things that you can do there.
01:19:38
◼
►
Now, the thing that's weird and completely human
01:19:43
◼
►
is that people generally don't like switching technologies.
01:19:49
◼
►
And so when you look at the Swift on the server community
01:19:51
◼
►
to just pick one that you're more familiar with maybe,
01:19:54
◼
►
there what I'm saying is that you see people
01:19:59
◼
►
that use Swift in a different part of the world
01:20:00
◼
►
and they wanna bring it with them because they like Swift.
01:20:04
◼
►
They wanna be, you know, I'm a random Node.js developer
01:20:07
◼
►
and I don't know anything about Swift.
01:20:08
◼
►
I'm just gonna start using Swift on server
01:20:10
◼
►
because I wanna learn a new thing.
01:20:13
◼
►
You generally see people pull it with them.
01:20:15
◼
►
And when you come to language design,
01:20:18
◼
►
one of the things that was really part of the idea
01:20:21
◼
►
of Swift in the first place is building one language
01:20:23
◼
►
that can scale up and down.
01:20:24
◼
►
One system that can, you know, write boot loaders in,
01:20:29
◼
►
but also feel like a scripting language.
01:20:31
◼
►
The initial Swift programming language, iBook,
01:20:34
◼
►
even included this in the intro talking about this notion
01:20:37
◼
►
of scaling from systems up to scripting
01:20:39
◼
►
and being easy to teach, but very powerful at the same time.
01:20:43
◼
►
And if you achieve this, then what you do is you build
01:20:46
◼
►
on the natural tendency that we as humans do,
01:20:50
◼
►
which is we take a thing, we get used to it,
01:20:52
◼
►
and then we wanna bring it to adjacent problems
01:20:54
◼
►
because very few people work on exactly one thing ever.
01:20:58
◼
►
Usually you're working on a thing and then you're like,
01:21:00
◼
►
okay, well, now I have to set up a front end.
01:21:02
◼
►
Well, hey, this technology is nice.
01:21:05
◼
►
If it works for me, like if all the prerequisites are there
01:21:08
◼
►
and it is actually good for that,
01:21:10
◼
►
well, I'd rather have one set of editor bindings,
01:21:14
◼
►
one set of string APIs, one set of all the things.
01:21:16
◼
►
And so, you know, naturally what happens with languages
01:21:20
◼
►
is you get diffusion across different fields.
01:21:22
◼
►
And so Swift, I think, is doing that.
01:21:25
◼
►
Of course, diffusion takes a lot longer
01:21:29
◼
►
than that initial iOS,
01:21:34
◼
►
the iOS growth within that community,
01:21:36
◼
►
but I'm seeing a lot of that diffusion now
01:21:37
◼
►
and it's really exciting and it's really great to see.
01:21:39
◼
►
I still think there are huge missing features
01:21:41
◼
►
and missing tons of work that is left to happen,
01:21:45
◼
►
but as that starts happening,
01:21:46
◼
►
I think it's gonna be even more exciting.
01:21:49
◼
►
- Now, you mentioned the scripting thing
01:21:50
◼
►
and way down lower in the notes,
01:21:53
◼
►
so I don't think we have to get into much detail.
01:21:55
◼
►
There is the Brisk project that I brought to your attention
01:21:59
◼
►
a little while ago,
01:22:00
◼
►
which is like a sort of a bunch of things built,
01:22:04
◼
►
libraries, I guess, on top of Swift
01:22:06
◼
►
to make it a better high-level scripting language.
01:22:10
◼
►
And when I see things like that,
01:22:11
◼
►
I feel like it's like a gift because, you know,
01:22:15
◼
►
so you have this language you want it to be able to scale
01:22:17
◼
►
from, you know, systems programming at the low end
01:22:19
◼
►
all the way up to high-level scripting,
01:22:20
◼
►
and you can write a Swift script and you can, you know,
01:22:23
◼
►
put a little line at the top of the file
01:22:24
◼
►
and just run it from the command line.
01:22:26
◼
►
But there's more to a scripting language
01:22:28
◼
►
than just being able to just write it in a text file
01:22:29
◼
►
and run it, quote unquote, without compiling,
01:22:31
◼
►
even though, you know, it's being compiled behind the scenes.
01:22:34
◼
►
Something like Brisk is saying, here are the pain points.
01:22:37
◼
►
Like, if I wanna dash off a couple line script,
01:22:39
◼
►
here's why I don't use script.
01:22:41
◼
►
I don't use Swift because I feel this pain point,
01:22:43
◼
►
doing this is awkward, and doing that's awkward.
01:22:45
◼
►
And so it's basically, it's obviously someone
01:22:47
◼
►
who loves Swift who's writing Brisk,
01:22:48
◼
►
'cause they're trying to--
01:22:49
◼
►
- I think that's Paul Hudson, that's the main author.
01:22:52
◼
►
- Yeah, I think so, yeah.
01:22:53
◼
►
Like, he's bringing on-- - Paul's amazing.
01:22:55
◼
►
- His, you know, his suitcase, his tool that he likes,
01:22:58
◼
►
hey, I like Swift, sometimes I find myself
01:23:00
◼
►
having to write scripting things.
01:23:03
◼
►
I want to use the tool that I like,
01:23:05
◼
►
but the tool that I like is just not quite well suited
01:23:09
◼
►
for it in these sorts of ways.
01:23:11
◼
►
And so you write this kind of wrapper library
01:23:13
◼
►
as a proof of concept to say, well,
01:23:15
◼
►
if Swift is more like this and more like that,
01:23:17
◼
►
FileIO would be easier, and I wouldn't have to deal
01:23:19
◼
►
with this kind of errors or types or, you know,
01:23:21
◼
►
all sorts of stuff like that.
01:23:23
◼
►
And, you know, I haven't kept up with this,
01:23:26
◼
►
but I'm hoping that the Swift evolution community
01:23:29
◼
►
looks at this and says, if we're interested,
01:23:31
◼
►
if some subgroup is interested in making Swift
01:23:34
◼
►
a better scripting or high-level language,
01:23:38
◼
►
look at all of those, the things that are in Brisk,
01:23:40
◼
►
and say, is this a pain point?
01:23:42
◼
►
Can we address this pain point in a language proper?
01:23:44
◼
►
Because I can't imagine the solution is actually
01:23:46
◼
►
to have a series of wrappers on top of wrappers
01:23:48
◼
►
on top of wrappers.
01:23:49
◼
►
If there's some problem that makes Swift ill-suited
01:23:52
◼
►
to be a scripting language as compared to other
01:23:55
◼
►
quote unquote real scripting languages,
01:23:57
◼
►
it's probably best addressed at the language level,
01:23:59
◼
►
but at least that's what my thinking is.
01:24:00
◼
►
What do you think when you see a project like that?
01:24:03
◼
►
- So I'm not super up to date on what is happening
01:24:07
◼
►
with Brisk, I think when I looked at it,
01:24:09
◼
►
it's a really cool project.
01:24:11
◼
►
One of the things I would observe here is that
01:24:13
◼
►
what Swift has done in this case is it has turned
01:24:16
◼
►
a language design problem into an API design problem.
01:24:19
◼
►
So Paul, for example, he's not a compiler engineer.
01:24:22
◼
►
He's an author and he's a smart, experienced
01:24:25
◼
►
Swift programmer, but he's not a compiler engineer,
01:24:28
◼
►
and he's not into making language changes,
01:24:31
◼
►
nor should he have to be, but he's able to go
01:24:33
◼
►
and tackle this problem and solve it through API design.
01:24:36
◼
►
But that's actually pretty cool.
01:24:38
◼
►
That's one of the things that allows Swift to scale
01:24:42
◼
►
is you get people that have a area that they're interested
01:24:46
◼
►
in and they can be effective because you've now lowered
01:24:49
◼
►
the bar for solving these problems to, you know,
01:24:52
◼
►
quote unquote, merely designing an API.
01:24:53
◼
►
Now that API design is really hard, as I'm sure you all know,
01:24:56
◼
►
but that really shifts the balance versus saying
01:24:59
◼
►
you have to go in and hack the language
01:25:01
◼
►
or the interpreter, things like this.
01:25:03
◼
►
Now, as far as Swift evolution goes,
01:25:06
◼
►
there's a tremendous amount of work.
01:25:08
◼
►
There's a recent proposal from Nate about incorporating
01:25:12
◼
►
command line argument processing and having a really
01:25:14
◼
►
beautiful API for doing that and using property wrappers
01:25:18
◼
►
and all the latest cool things to be able to make
01:25:20
◼
►
that natural expressive fluid and such.
01:25:23
◼
►
And so there's a lot of work, I think,
01:25:25
◼
►
tackling different pieces of these things,
01:25:27
◼
►
but they're not all, there isn't one right answer.
01:25:30
◼
►
It's all the different pieces have to come together.
01:25:31
◼
►
And I just love the, again, this is an example of diffusion
01:25:35
◼
►
where you have, you know, Paul is able to say,
01:25:40
◼
►
"Hey, well, there's a thing I like.
01:25:42
◼
►
Hey, I don't like it in this way for this reason,
01:25:44
◼
►
this other thing, so I'm gonna go do it.
01:25:45
◼
►
I'm gonna go solve it."
01:25:46
◼
►
And like, that's where you get languages and technologies
01:25:50
◼
►
that spread and cover an ecosystem is because people
01:25:53
◼
►
are able to do that and you've made it so, you know,
01:25:55
◼
►
anybody or any, you know, Paul can go off
01:25:58
◼
►
and solve that problem for himself versus waiting
01:26:00
◼
►
for a compiler engineer to schedule time in their day
01:26:04
◼
►
to go care about the thing that he cares about.
01:26:07
◼
►
- Swift has always had that kind of like
01:26:09
◼
►
with the standard library being written in Swift,
01:26:12
◼
►
like that, you know, the int and string and all that stuff
01:26:14
◼
►
are not like, you know, like they're types
01:26:17
◼
►
that are also written in Swift.
01:26:18
◼
►
Now, if you were to look at the standard library,
01:26:20
◼
►
it's some fairly terrifying Swift code in many cases.
01:26:24
◼
►
And often that's because, you know,
01:26:27
◼
►
features that you wouldn't expect
01:26:29
◼
►
a regular Swift programmer to use are essential
01:26:32
◼
►
to make stuff in the standard library work.
01:26:34
◼
►
I'm not sure if that's been itself evolving over time
01:26:36
◼
►
so that the standard library becomes,
01:26:38
◼
►
starts looking more like normal Swift code
01:26:40
◼
►
and less like the craziest Swift code you've ever seen
01:26:42
◼
►
to make all the machinery work.
01:26:43
◼
►
- That definitely has been making progress.
01:26:47
◼
►
It's still not there yet, but.
01:26:48
◼
►
- Yeah, I mean, I guess that, you know,
01:26:50
◼
►
so I still feel like there is that slight discontinuity
01:26:55
◼
►
of like the standard library.
01:26:56
◼
►
Yeah, it's in Swift and hey,
01:26:57
◼
►
you can send a patch to it in Swift.
01:27:00
◼
►
You don't have to be a compiler engineer.
01:27:01
◼
►
Like A, you can more or less understand it
01:27:03
◼
►
and B, you can actually fix it and, you know,
01:27:05
◼
►
without having to know C++ or any of the other stuff.
01:27:09
◼
►
But then for things like Brisk or other sort of API wrappers,
01:27:13
◼
►
the command line parsing thing,
01:27:14
◼
►
that is just more straightforward like library code
01:27:16
◼
►
and no one's gonna look at the command line parsing library
01:27:18
◼
►
in Swift and be terrified that it's doing weird,
01:27:20
◼
►
strange stuff 'cause it's, you know,
01:27:22
◼
►
there's enough language features there
01:27:23
◼
►
that you can write, especially with property wrappers,
01:27:25
◼
►
that's, you know, language feature that lets you make
01:27:27
◼
►
a quote unquote, "Swifty," whatever that means
01:27:29
◼
►
at any given point in time.
01:27:31
◼
►
- A Swift like API using language features
01:27:35
◼
►
to make it simpler, more elegant, fewer moving parts,
01:27:39
◼
►
a novel way to do a thing.
01:27:40
◼
►
I mean, property wrappers is really,
01:27:42
◼
►
a lot of people go wild with some stuff like that,
01:27:43
◼
►
but that's, I think it's a natural sort of explosion
01:27:45
◼
►
of experimentation, but those are, you know.
01:27:48
◼
►
- Yeah, I agree.
01:27:48
◼
►
- Two separate worlds of like the standard library,
01:27:51
◼
►
which is still a little bit intimidating,
01:27:52
◼
►
but very super important.
01:27:54
◼
►
And then I don't know what you call it.
01:27:56
◼
►
Is there a name for the things that aren't part
01:27:57
◼
►
of the standard library, but you know.
01:28:00
◼
►
- So let me pull this back together
01:28:02
◼
►
because you have a really important point, right?
01:28:04
◼
►
Which is, so one of the original design points of Swift
01:28:08
◼
►
that has worked really well is it has this idea
01:28:10
◼
►
of a progressive disclosure of complexity.
01:28:13
◼
►
So you can make hello world be, you know, one line of code.
01:28:16
◼
►
It looks just like Python, right?
01:28:17
◼
►
And then you can introduce functions.
01:28:20
◼
►
You can introduce classes.
01:28:21
◼
►
You can introduce variables and control flow.
01:28:23
◼
►
You can introduce each of these things as you go.
01:28:25
◼
►
And what Swift does is it is really designed.
01:28:29
◼
►
It has a lot of design effort put into it.
01:28:30
◼
►
This is one of the focuses and one of the huge contributions
01:28:33
◼
►
that Swift evolution brings in terms of like really
01:28:37
◼
►
obsessing about the details of how things work
01:28:39
◼
►
and how they look and how they feel.
01:28:41
◼
►
Now that doesn't mean that Swift is a simple language.
01:28:44
◼
►
And so Swift on the one hand is factored really well,
01:28:47
◼
►
I would say.
01:28:48
◼
►
And so this progressive disclosure of complexity
01:28:50
◼
►
is a big piece.
01:28:51
◼
►
So you're not, it's not like C++ where every mistake
01:28:55
◼
►
of the past is thrust in your face when you do some things.
01:28:58
◼
►
But on the other hand, it does have tremendous depth.
01:29:02
◼
►
And so property wrappers are one
01:29:03
◼
►
of these super powerful features where, you know,
01:29:05
◼
►
you don't have to be an app developer
01:29:07
◼
►
to know what a property wrapper is,
01:29:08
◼
►
but as a library designer,
01:29:09
◼
►
you can now achieve a very fluid and expressive API
01:29:12
◼
►
because you're using this feature.
01:29:14
◼
►
Coming back to the Python interop,
01:29:16
◼
►
Python interop, same deal, right?
01:29:18
◼
►
The people using the Python interoperability
01:29:20
◼
►
don't know how the library is implemented.
01:29:22
◼
►
It's implemented in pure Swift.
01:29:23
◼
►
It uses some cool features that are fairly esoteric,
01:29:27
◼
►
like the dynamic member lookup feature, right?
01:29:29
◼
►
Which normal application developers have never used.
01:29:32
◼
►
But the fact that you have one contiguous system
01:29:35
◼
►
where you can scale up and scale down is,
01:29:37
◼
►
I think, really powerful.
01:29:39
◼
►
This goes all the way down to the standard library.
01:29:41
◼
►
Now the standard library, it's hardcore
01:29:45
◼
►
using every crazy feature
01:29:47
◼
►
because people care about performance
01:29:49
◼
►
and there's a lot of low level things going on
01:29:51
◼
►
in certain parts of it.
01:29:53
◼
►
If you go look at like the array APIs and things like this,
01:29:56
◼
►
or you look at the collection APIs,
01:29:57
◼
►
and they're all fairly reasonable, very simple Swift code.
01:30:01
◼
►
And so, and that you can see in your own applications
01:30:05
◼
►
by just adding an extension to string
01:30:07
◼
►
or an extension to an array,
01:30:08
◼
►
and now you can just write normal code.
01:30:09
◼
►
And that's basically what the code you'd see
01:30:11
◼
►
in the standard library is.
01:30:12
◼
►
And so I think that that is one of the things
01:30:15
◼
►
that is fairly unique about Swift
01:30:17
◼
►
is that because it's trying to span this big gap,
01:30:20
◼
►
both in terms of domains of application,
01:30:23
◼
►
but also in terms of user,
01:30:25
◼
►
like I don't know if sophistication is the right word,
01:30:28
◼
►
but the level of craziness of the individual programmer.
01:30:33
◼
►
And because you can support that all in one system,
01:30:35
◼
►
you end up with this really interesting world
01:30:38
◼
►
where you don't hit a ceiling, right?
01:30:41
◼
►
And Swift, like if you get to the thing
01:30:43
◼
►
where arc is a problem for you,
01:30:45
◼
►
you can drop down to unsafe pointers
01:30:47
◼
►
and you can bang out what is effectively C code
01:30:50
◼
►
to go manipulate bits and push around pointers
01:30:53
◼
►
in a completely C like way.
01:30:56
◼
►
And it's complicated, but you could do it, right?
01:31:00
◼
►
And the fact that you can do that in one system
01:31:01
◼
►
versus having to swap out,
01:31:02
◼
►
I think is quite powerful and very different.
01:31:05
◼
►
- I think we asked the same question
01:31:07
◼
►
the last time we talked to him
01:31:08
◼
►
to see if we've made any progress in three years,
01:31:10
◼
►
but it's the idea of a Swift self-hosting,
01:31:12
◼
►
having Swift compiler written in Swift
01:31:14
◼
►
and the natural extension of exactly
01:31:16
◼
►
what you're talking about,
01:31:17
◼
►
that it was Swift all the way down.
01:31:18
◼
►
Are we any closer to that or is that still remain
01:31:21
◼
►
not an area of active development?
01:31:23
◼
►
- We are making some progress on that.
01:31:25
◼
►
So I think the very tip of the iceberg,
01:31:28
◼
►
there's a project by Doug Gregor
01:31:30
◼
►
who is working on rewriting the driver,
01:31:32
◼
►
the command line interface to Swift.
01:31:34
◼
►
He's writing that in Swift.
01:31:35
◼
►
And I don't know the exact status of that,
01:31:37
◼
►
but I think that's underway.
01:31:39
◼
►
Hilariously, like MLIR actually helps with this.
01:31:42
◼
►
The whole cell layer could be switched over to MLIR
01:31:45
◼
►
and then you don't have to worry about that.
01:31:46
◼
►
It's actually doing that would make Swift itself
01:31:48
◼
►
a better compiler.
01:31:49
◼
►
I don't know that anybody is signing up to do that work.
01:31:52
◼
►
There's a lot of different ways to do that.
01:31:55
◼
►
It has not started an interest though.
01:31:59
◼
►
And that's a sad thing.
01:32:01
◼
►
Now there are features in Swift that are still missing.
01:32:03
◼
►
And I think that getting some of those would lead
01:32:05
◼
►
to a better compiler route in Swift.
01:32:07
◼
►
One of the ones I'd make a shout out for is
01:32:12
◼
►
there's a longstanding proposal that is making slow steps
01:32:15
◼
►
at every release towards building
01:32:17
◼
►
what's called an ownership model into Swift.
01:32:20
◼
►
And ownership model is,
01:32:21
◼
►
ownership in this case, there are languages like Rust
01:32:26
◼
►
that allow you to use types to control
01:32:29
◼
►
how your memory gets owned and managed.
01:32:32
◼
►
And so Rust doesn't have something like Arc
01:32:35
◼
►
where you have dynamic memory management
01:32:36
◼
►
with reference counting.
01:32:38
◼
►
It's all static and it's all driven by putting tons
01:32:40
◼
►
and tons of annotations in your code.
01:32:42
◼
►
Rust is a great language incidentally,
01:32:45
◼
►
also builds on top of LLVM.
01:32:47
◼
►
And so it's like, I'm a fan of Rust,
01:32:49
◼
►
but the feeling of Rust is you have to think
01:32:53
◼
►
about memory management all the time.
01:32:54
◼
►
Like that's part of the way you program it.
01:32:57
◼
►
Swift on the other hand is coming in from a different angle
01:32:59
◼
►
of like, you don't wanna have to think
01:33:00
◼
►
about memory management until you do.
01:33:03
◼
►
And so with Arc, Arc allows you to more or less ignore
01:33:07
◼
►
memory management until you get to cycles roughly,
01:33:11
◼
►
or until you get to performance.
01:33:14
◼
►
And the Swift compiler and the stack
01:33:16
◼
►
and like all the design decisions have worked really hard
01:33:18
◼
►
to make it so that you get really good performance
01:33:20
◼
►
out of the box.
01:33:20
◼
►
But when you run up into a performance cliff
01:33:24
◼
►
with Arc in Swift, for example, your option today
01:33:28
◼
►
is you drop down to unsafe pointers
01:33:30
◼
►
and you start writing effectively C code to deal with it.
01:33:34
◼
►
What ownership in Swift does is allows you to write
01:33:37
◼
►
safe code, but it gives you the ability to add new
01:33:41
◼
►
annotations into your source code to say, this is owned,
01:33:44
◼
►
this is borrowed and pass around these ownership modifiers
01:33:47
◼
►
in your code, giving you a new point in the space
01:33:49
◼
►
where instead of having to choose between safe
01:33:51
◼
►
but less performant and unsafe, but as fast as you wanna go,
01:33:57
◼
►
you now can say it's safe and there's extra annotations
01:34:00
◼
►
in your code.
01:34:01
◼
►
And so again, progressive disclosure of complexity,
01:34:04
◼
►
this is not everybody's cup of tea for sure,
01:34:06
◼
►
but for people who value safety and are willing to do
01:34:10
◼
►
the extra type annotations that really completes the
01:34:12
◼
►
triangle of this design space.
01:34:15
◼
►
And I'm very much looking forward to that.
01:34:17
◼
►
- Yeah, this is like the flip side of the brisk thing only
01:34:19
◼
►
at the other end of the spectrum, low level stuff.
01:34:21
◼
►
Why isn't the kernel written in Swift?
01:34:23
◼
►
Why, you know, why aren't the levels different?
01:34:25
◼
►
- Speaking of, I assume somewhat related topic,
01:34:28
◼
►
I recently watched, I don't know why this came across
01:34:30
◼
►
my transom, it's from the 2019 LLVM developers conference,
01:34:34
◼
►
the talk on ownership SSA, which is more at a compiler level
01:34:37
◼
►
to efficiently and correctly essentially implement ARC
01:34:40
◼
►
as far as I can tell with the ownership model.
01:34:42
◼
►
But what you're talking about is a proposal where there'd be,
01:34:45
◼
►
where in your actual Swift code, you'd annotate
01:34:48
◼
►
ownership information, right?
01:34:49
◼
►
- That's exactly right.
01:34:50
◼
►
So it's a language feature, it's not a compiler internal
01:34:52
◼
►
implementation detail, and I mean, the way I look at Rust
01:34:56
◼
►
is Rust is coming from this world of,
01:34:58
◼
►
it's base assumption is that everybody should think about
01:35:03
◼
►
memory management more or less all the time.
01:35:06
◼
►
And so with that worldview, it being, I mean,
01:35:09
◼
►
you encounter ownership in Rust on the first page
01:35:11
◼
►
of most tutorials, because you need to think about
01:35:14
◼
►
ownership to deal with strings.
01:35:16
◼
►
And so if you want to print hello world,
01:35:17
◼
►
you have to like tell the compiler how to manage that string.
01:35:20
◼
►
And so what the Swift approach is doing is saying like,
01:35:23
◼
►
this is really powerful for the people that care about
01:35:25
◼
►
performance, but you should be able to just care about
01:35:29
◼
►
performance in the standard library and have everybody
01:35:31
◼
►
use the standard library or your other high performance
01:35:35
◼
►
library, you can care about it in that domain,
01:35:37
◼
►
but then all the clients get the benefit of it, right?
01:35:39
◼
►
And you get more modularity of that.
01:35:41
◼
►
And you, again, get the ability to think about this
01:35:43
◼
►
as a performance optimization instead of the programming
01:35:46
◼
►
model that everybody must use to understand and work with
01:35:49
◼
►
your system language and code.
01:35:52
◼
►
So I'm really excited about that.
01:35:54
◼
►
- Somewhere between these two extremes,
01:35:55
◼
►
I'll get regular expressions someday, right?
01:35:58
◼
►
- Oh man, you're killing me, I'm so sad.
01:36:00
◼
►
Someday it will be so beautiful.
01:36:02
◼
►
But again, this is a, so all of these things come into the
01:36:06
◼
►
reality that's easy to forget, which is the Swift is only
01:36:09
◼
►
what, five years old, five and a half years old now
01:36:12
◼
►
at this point from the announcement.
01:36:14
◼
►
And so it's still quite early days.
01:36:18
◼
►
And by the time Swift is 10 and it's all figured out
01:36:22
◼
►
and starts getting stodgy and old and doesn't,
01:36:25
◼
►
people start complaining about it and doesn't move
01:36:27
◼
►
and isn't exciting anymore, well,
01:36:29
◼
►
that's when you know it's successful.
01:36:32
◼
►
- Do you think it will be all figured out
01:36:34
◼
►
by the time it's 10?
01:36:35
◼
►
- 10 years old?
01:36:37
◼
►
- Well, so it depends on what you mean by all figured out.
01:36:41
◼
►
I mean, I think that my hope is that by the time it's
01:36:43
◼
►
10 years old, it's more of a library design problem
01:36:46
◼
►
than a language design problem.
01:36:48
◼
►
I don't think that continuing to shove new language features
01:36:51
◼
►
in on an ongoing basis is a good thing.
01:36:54
◼
►
I mean, I don't know if you're aware, but C++ 20 is coming
01:36:58
◼
►
and it has lots and lots of exciting new additions to C++.
01:37:02
◼
►
- That's a black hole for language features, C++.
01:37:05
◼
►
- Yeah, and I mean, there's some good things there,
01:37:07
◼
►
but there's also a lot of complexity and it's unclear
01:37:12
◼
►
exactly where that goes.
01:37:13
◼
►
The committee is working on C++ 23 features,
01:37:16
◼
►
which are also there, let's just say the rate of addition
01:37:19
◼
►
is outpacing the rate of removal by nearly infinity.
01:37:24
◼
►
- It's like C++ is a denial of service attack
01:37:26
◼
►
on other languages.
01:37:27
◼
►
You can't compete because you have to maintain
01:37:29
◼
►
C++ compatibility in your compiler infrastructure
01:37:31
◼
►
and just keeping up with the C++ features is so much effort
01:37:33
◼
►
that you don't have time to make your own languages.
01:37:36
◼
►
Or you found time, but still.
01:37:38
◼
►
- Yeah, I mean, I think that, well, so I think there's
01:37:40
◼
►
a reasonable question, which is Clang C++ was barely possible
01:37:45
◼
►
back in 2010, right?
01:37:48
◼
►
Is something like Clang C++, is a from scratch
01:37:51
◼
►
re-implementation of C++ possible today?
01:37:54
◼
►
Well, I don't know because the language is a lot more
01:37:57
◼
►
complicated now than it was back then.
01:38:00
◼
►
And you know, anything's possible.
01:38:03
◼
►
Humans are amazing and humanity is amazing
01:38:05
◼
►
and can achieve unpredictable things,
01:38:08
◼
►
but it's just way harder.
01:38:10
◼
►
And so I'm not, I don't follow the C++ community
01:38:15
◼
►
and the standards and things like this,
01:38:16
◼
►
but there are reasonable people who are super smart
01:38:19
◼
►
and whose identities are very much tied
01:38:21
◼
►
to the C++ community that are really unhappy
01:38:25
◼
►
with the progression of C++ and feel like the, you know,
01:38:29
◼
►
it's kind of jumped the shark and they're taking more things
01:38:32
◼
►
than they really should take
01:38:33
◼
►
and they're not baking it long enough.
01:38:35
◼
►
And that's also, if that's true, 'cause again,
01:38:37
◼
►
I don't follow that closely, but if that's true,
01:38:39
◼
►
that's also very concerning because language design is hard
01:38:44
◼
►
and the decisions you make, you're stuck with almost forever.
01:38:48
◼
►
And so I hope that they don't do that.
01:38:51
◼
►
Yeah, until then, everybody can just argue
01:38:52
◼
►
about what the tasteful subset is.
01:38:54
◼
►
- Yeah, that's what we've been talking about in this show
01:38:57
◼
►
on and off through various Swift malcontents
01:39:01
◼
►
who will not be named.
01:39:03
◼
►
Whether the same thing you just described for C++
01:39:05
◼
►
is actually true of Swift in some ways.
01:39:07
◼
►
Oh, is it taking on things,
01:39:08
◼
►
more language features than it should?
01:39:10
◼
►
Is it taking on things that aren't fully baked?
01:39:12
◼
►
Is it changing too much?
01:39:14
◼
►
I mean, I don't know if Casey, you wanna chime in
01:39:16
◼
►
and try to give a summary of our ongoing debate
01:39:19
◼
►
and pithy characterization
01:39:21
◼
►
of some of our complaints about Swift.
01:39:23
◼
►
- Oh, sure, leave it to me, I see how it is.
01:39:26
◼
►
For the record, I love Swift and I--
01:39:28
◼
►
- Oh, no, no, no preface, go ahead.
01:39:31
◼
►
- Okay, here it is.
01:39:31
◼
►
I'm trying to play--
01:39:32
◼
►
- No, no, no, make it brutal, make it honest.
01:39:35
◼
►
Let's talk about the real thing.
01:39:37
◼
►
- Marco should talk about it.
01:39:39
◼
►
- Come on, Marco.
01:39:41
◼
►
- Well, honestly, I'm not that qualified to talk about it
01:39:43
◼
►
because I hardly use it still.
01:39:45
◼
►
I'm still very much in my almost entirely Objective-C
01:39:49
◼
►
code base most of the time.
01:39:51
◼
►
I do have some Swift code in Overcast, but it's not much.
01:39:55
◼
►
And most of the time, I'm still writing either Objective-C
01:39:59
◼
►
or straight C, actually.
01:40:01
◼
►
Just recently, stuff I've been doing
01:40:02
◼
►
has been a lot of straight C.
01:40:04
◼
►
But I have this characterization that Swift is a dick.
01:40:09
◼
►
And this is an argument as old as Swift
01:40:11
◼
►
of basically being a dick versus being usable.
01:40:16
◼
►
And if you look at scripting languages,
01:40:20
◼
►
usually, as you mentioned, Python earlier.
01:40:22
◼
►
Usually untyped or dynamically typed languages
01:40:25
◼
►
are usually much more pleasant and straightforward to use,
01:40:28
◼
►
not only for beginners, but also in contexts like scripting
01:40:31
◼
►
where even experts just don't want
01:40:34
◼
►
to deal with certain things.
01:40:35
◼
►
And just kind of want language to just figure it out.
01:40:37
◼
►
You have the string representation
01:40:39
◼
►
that is the string of the character one.
01:40:41
◼
►
You try to use it as a number, it just behaves like number one.
01:40:44
◼
►
You know, that kind of thing.
01:40:46
◼
►
Swift obviously goes way the other direction
01:40:49
◼
►
and goes towards strong typing, strict typing, correctness
01:40:53
◼
►
by compiler versus runtime stuff.
01:40:56
◼
►
So obviously, this is an old argument.
01:40:59
◼
►
But it does result in overall, as people learn the language,
01:41:04
◼
►
and in many ways, even as people who already know it,
01:41:07
◼
►
use the language, man, Swift is such a dick sometimes.
01:41:11
◼
►
It really does feel like it.
01:41:13
◼
►
And I wonder, obviously, to some degree,
01:41:16
◼
►
if what you're going for is a safe and strongly typed
01:41:21
◼
►
and compiler checked language, to some degree,
01:41:23
◼
►
that is inevitable.
01:41:24
◼
►
How do you strike that balance?
01:41:26
◼
►
And in the case of Swift, a lot of that
01:41:30
◼
►
falls on, I think, the tooling, not
01:41:33
◼
►
being able to do things like produce good error messages.
01:41:35
◼
►
And we see this a lot with, here we are in year one of SwiftUI.
01:41:40
◼
►
And if you mess up something in SwiftUI,
01:41:43
◼
►
the error messages that you get are ridiculous and very
01:41:49
◼
►
difficult to debug.
01:41:50
◼
►
And so obviously, this is all balances, right?
01:41:52
◼
►
How about how do you--
01:41:53
◼
►
Let me call time, because you're touching
01:41:55
◼
►
on six or seven different things.
01:41:58
◼
►
Fair enough.
01:41:58
◼
►
Let's pause and then keep going.
01:42:00
◼
►
So there's a whole bunch of different things here.
01:42:02
◼
►
You're right, fundamentally, that Swift
01:42:05
◼
►
is picking a point in the design space that is not designed
01:42:08
◼
►
for quote unquote, "do what I mean," is the way I would put
01:42:12
◼
►
And what I would say is that dynamically typed scripting
01:42:15
◼
►
languages are really amazing when you have--
01:42:18
◼
►
I mean, in many cases, but for example, you
01:42:21
◼
►
have 50 lines of code or 100 lines of code.
01:42:23
◼
►
The whole thing fits in your head.
01:42:25
◼
►
Maybe it's one time you're going to use it for an afternoon
01:42:27
◼
►
and then throw it away anyways.
01:42:28
◼
►
And so for that kind of a thing, dynamically typed languages,
01:42:34
◼
►
I would probably say better, unless you're getting something
01:42:37
◼
►
out of the library ecosystem.
01:42:40
◼
►
The problem with dynamically typed scripting languages
01:42:43
◼
►
is that there are certain places where it becomes a trap,
01:42:47
◼
►
because programmers at large don't differentiate between--
01:42:52
◼
►
don't always differentiate between it feels good now
01:42:55
◼
►
versus it's a good idea as I look ahead.
01:42:58
◼
►
And so one of the things I've seen
01:43:00
◼
►
is that people start writing-- it's a 50-line script.
01:43:03
◼
►
It's not that big of a deal.
01:43:04
◼
►
And then somebody else comes and adds a few more features,
01:43:06
◼
►
and then somebody adds a few more features,
01:43:08
◼
►
and it gets embedded into a bigger framework.
01:43:11
◼
►
And then suddenly you have 100,000 lines of Python code.
01:43:15
◼
►
And at some point, you've passed a threshold
01:43:17
◼
►
where it stops fitting in your head.
01:43:19
◼
►
And now the scale aspect of that has kind of put you
01:43:23
◼
►
in a place where it's harder to maintain,
01:43:24
◼
►
it's harder to evolve and reason about it.
01:43:26
◼
►
And I'm not picking on Python here.
01:43:30
◼
►
Let's pick on JavaScript.
01:43:31
◼
►
I don't know.
01:43:31
◼
►
This is a general thing.
01:43:33
◼
►
But the ecosystems have developed good testability
01:43:38
◼
►
and unit testing solutions and things like this.
01:43:40
◼
►
But what Swift is trying to do is
01:43:42
◼
►
it's trying to allow you to have that progressive path
01:43:44
◼
►
from something small to something big
01:43:46
◼
►
without there being a point of no return or a point
01:43:49
◼
►
where you're like, gosh, I really
01:43:51
◼
►
just want to go rewrite this all because now this technology
01:43:53
◼
►
doesn't scale for me.
01:43:54
◼
►
Now, to your point, that means that when
01:43:57
◼
►
you scale all the way down, it's not really optimized for that.
01:44:00
◼
►
And I think that is true.
01:44:02
◼
►
But coming back to the Paul Hudson framework, Brisk,
01:44:07
◼
►
the fact that you can solve these problems in a library
01:44:11
◼
►
means that, hey, if it means that you can use
01:44:14
◼
►
the same technology stack and your libraries
01:44:16
◼
►
and interact with all your model code
01:44:17
◼
►
and you just import a I'm doing some lightweight scripting
01:44:20
◼
►
kind of API stuff, you actually get a fairly contiguous world
01:44:24
◼
►
And I don't know if that's a full solution,
01:44:26
◼
►
but I think it's a really interesting piece of it.
01:44:30
◼
►
What you're going for is to have one language that
01:44:33
◼
►
covers everything, or it covers most needs from big to small,
01:44:37
◼
►
from low level to high level, from more forgiving to very
01:44:45
◼
►
Is it possible to have that in one language?
01:44:48
◼
►
Because some of what you're talking about is, as you said,
01:44:51
◼
►
it's kind of the difference between the library
01:44:53
◼
►
and the language.
01:44:54
◼
►
In my opinion, the API and the language
01:44:58
◼
►
are inextricably tied.
01:45:00
◼
►
And when people talk about a language, use a language,
01:45:04
◼
►
describe what's good about a language, much of the time,
01:45:07
◼
►
what they're talking about are features
01:45:08
◼
►
of its standard library or features of its ecosystem
01:45:11
◼
►
that are API-based.
01:45:12
◼
►
I completely agree.
01:45:14
◼
►
And so those are inextricably tied together, in my opinion.
01:45:17
◼
►
So wait, so before you add more questions and more things.
01:45:21
◼
►
So it is clearly the case that you can have one language that
01:45:24
◼
►
spans all the things.
01:45:26
◼
►
This is proven by C. Right?
01:45:28
◼
►
C, you can now write a web page in WebAssembly in C.
01:45:32
◼
►
And you can obviously write low-level stuff.
01:45:34
◼
►
People have written web servers in it.
01:45:36
◼
►
You can use C to do all these things.
01:45:37
◼
►
Now, you made an interesting point in the clarification,
01:45:41
◼
►
which is that doesn't mean it's good for everything.
01:45:44
◼
►
And so there's a big difference between what you can do
01:45:46
◼
►
and what it's actually good at.
01:45:49
◼
►
And so this gets into ecosystem, design points of the library,
01:45:52
◼
►
how the language works, friendliness,
01:45:54
◼
►
all that kind of stuff.
01:45:57
◼
►
I think the thing about Swift that is interesting and different
01:46:00
◼
►
and I don't know if this will work out, honestly, right?
01:46:03
◼
►
This is all an experiment.
01:46:06
◼
►
Nobody knows the outcome of what things
01:46:07
◼
►
will look like in 20 years.
01:46:09
◼
►
But Swift was designed from the beginning to try to do that.
01:46:13
◼
►
And so a lot of other languages, a lot of other systems,
01:46:15
◼
►
like let's pick on JavaScript, language that everybody uses
01:46:19
◼
►
and many people love.
01:46:22
◼
►
JavaScript was designed--
01:46:25
◼
►
I think there are people who love JavaScript.
01:46:27
◼
►
Maybe not everybody.
01:46:28
◼
►
Maybe not you guys.
01:46:30
◼
►
Here I am from the PHP waste dump,
01:46:32
◼
►
looking over and making fun of JavaScript.
01:46:36
◼
►
It makes PHP totally consistent and designed and normal.
01:46:39
◼
►
Well, so what I was going to say about JavaScript is, to me,
01:46:42
◼
►
JavaScript is one of these examples
01:46:43
◼
►
where JavaScript was designed to be an on-click handler
01:46:48
◼
►
in a web page.
01:46:50
◼
►
The original idea back in the day
01:46:52
◼
►
is it was rushed together in a couple of weeks
01:46:54
◼
►
to build the prototype, and they shipped the prototype.
01:46:56
◼
►
And it was designed to be this lightweight scripting language
01:46:59
◼
►
you embed in a web page.
01:47:01
◼
►
You fast forward to today, and you
01:47:03
◼
►
get diffusion and communities and the way humans work.
01:47:06
◼
►
And now people are writing web servers in it.
01:47:08
◼
►
And they're writing hundreds of thousands
01:47:09
◼
►
of lines of code of JavaScript.
01:47:11
◼
►
And JavaScript was never designed to scale that way,
01:47:14
◼
►
but people will use it for that anyways,
01:47:16
◼
►
because that's how humans work.
01:47:19
◼
►
And so your question is, is it possible?
01:47:22
◼
►
Well, it's definitely possible to span all
01:47:24
◼
►
the different things.
01:47:25
◼
►
The question is, is it good?
01:47:26
◼
►
And I think what Swift is trying to do
01:47:27
◼
►
is it's trying to be good at all those things.
01:47:30
◼
►
Now, it can't be optimal at every point in the design space.
01:47:33
◼
►
And I think that's OK.
01:47:35
◼
►
The question is merely, is it useful?
01:47:37
◼
►
And if you squeeze and you are good enough
01:47:40
◼
►
at a certain space, can you build a big enough community
01:47:42
◼
►
of people that care to invest, to build the APIs that really
01:47:45
◼
►
evolve and build the frameworks and get that ecosystem
01:47:50
◼
►
virtuous circle going?
01:47:52
◼
►
And I think that's the interesting and untested
01:47:54
◼
►
And after that virtuous circle goes for a few cranks,
01:47:58
◼
►
do you end up with something that's truly beautiful?
01:48:00
◼
►
Or is it just like, yeah, whatever.
01:48:02
◼
►
OK, you can write web pages and see.
01:48:04
◼
►
And it's good for compatibility, but nobody
01:48:06
◼
►
would actually want to do that.
01:48:09
◼
►
So I don't know.
01:48:11
◼
►
So we talked a little bit on and off about SwiftUI.
01:48:15
◼
►
And one of the things that I found striking about SwiftUI
01:48:19
◼
►
is, as someone who had been writing Swift for two or three
01:48:22
◼
►
years at that point, when I saw SwiftUI and I realized,
01:48:25
◼
►
oh my god, this DSL is actually Swift, kind of,
01:48:28
◼
►
it struck me as though the DSL was just stretching Swift
01:48:33
◼
►
all the way to its breaking point,
01:48:35
◼
►
and as per the error messages, up until perhaps
01:48:37
◼
►
this last release this week, perhaps
01:48:39
◼
►
past its breaking point.
01:48:41
◼
►
So I don't know how much you are willing or able to comment
01:48:44
◼
►
on SwiftUI, but is that too much?
01:48:47
◼
►
Or is that just right?
01:48:48
◼
►
And is that what makes Swift so beautiful, that it can be
01:48:51
◼
►
tweaked and bent to be a DSL in line, in a place where I would
01:48:56
◼
►
not expect it to be?
01:48:57
◼
►
I see both sides of SwiftUI.
01:48:59
◼
►
So on the positive side, SwiftUI is a very beautiful, very
01:49:05
◼
►
expressive, very nice way of building things.
01:49:10
◼
►
I think that it has gone a little bit too far in the quest
01:49:13
◼
►
to remove comments so that the slide looks beautiful on a
01:49:15
◼
►
slide and things like this.
01:49:17
◼
►
I don't think that that tradeoff is worth it.
01:49:20
◼
►
And I'm not sure if you are aware, but the Function
01:49:23
◼
►
Builders feature that is the thing that enables all the
01:49:26
◼
►
metaprogramming in SwiftUI hasn't even been standardized.
01:49:29
◼
►
It hasn't even gone through Swift evolution.
01:49:30
◼
►
So technically, SwiftUI is not expressible in Swift.
01:49:35
◼
►
Think about that.
01:49:36
◼
►
I take your point.
01:49:36
◼
►
I take your point.
01:49:37
◼
►
So now there's continuing forces that are trying to do
01:49:42
◼
►
syntactic optimization and trying to get rid of low
01:49:46
◼
►
punctuation and stuff like that.
01:49:47
◼
►
I am very concerned about that, honestly, because the way
01:49:51
◼
►
I look at it--
01:49:52
◼
►
and again, I'm just a community member at this point--
01:49:56
◼
►
but the way I look at it is that Swift--
01:49:58
◼
►
the analogy I would make is that Swift is like a house.
01:50:01
◼
►
And the house has a lot of bricks that are still missing,
01:50:04
◼
►
so things like ownership, things like concurrency, things
01:50:07
◼
►
like regular expressions, John.
01:50:10
◼
►
These are big bricks that have a fairly big
01:50:12
◼
►
impact on the language.
01:50:13
◼
►
We know we want to build them.
01:50:14
◼
►
There's actually very progressed white papers that
01:50:18
◼
►
explain how they should fit together.
01:50:20
◼
►
But you need to build those.
01:50:21
◼
►
You need to fit them together.
01:50:22
◼
►
And if you start dumping in syntactic sugar too early, you
01:50:26
◼
►
end up with a house that you put in all this mortar, and now
01:50:30
◼
►
you add mortar in between that you'd normally fill in between
01:50:34
◼
►
But now you can't fit the bricks in, because you've taken
01:50:36
◼
►
syntactic space, and you add language complexity.
01:50:38
◼
►
Or when the brick falls in, you decide, oh, wow, there's a
01:50:41
◼
►
better way of achieving that syntactic thing
01:50:43
◼
►
in the first place.
01:50:44
◼
►
And so I hope that the Swift community in general really
01:50:50
◼
►
stays focused on the key technologies that we need to
01:50:53
◼
►
build and land and make sure those are really good.
01:50:56
◼
►
And I think that it would be good to resist the urge to add
01:51:00
◼
►
lots of syntactic sugar for things.
01:51:02
◼
►
Now, SwiftUI, again, coming back to positive, it's a
01:51:06
◼
►
profoundly transformational API.
01:51:09
◼
►
I think it's really Swift's coming of age within the Apple
01:51:12
◼
►
community, which people are taking it very seriously.
01:51:14
◼
►
And suddenly it's like clicking is like, wow, this is actually
01:51:17
◼
►
a really good thing, and it's very beautiful how it works.
01:51:22
◼
►
I mean, one of the profound things about SwiftUI, which is
01:51:25
◼
►
a technical thing, is SwiftUI really leverages the type
01:51:30
◼
►
system in Swift to make the diffing part of the functional
01:51:33
◼
►
reactive programming model it provides very efficient.
01:51:36
◼
►
And so if you look at Dart and some of these other systems,
01:51:41
◼
►
they have very bespoke, very interesting systems for making
01:51:47
◼
►
it efficient, which are much more invasive than what SwiftUI
01:51:51
◼
►
And SwiftUI has just built random Swift type system.
01:51:52
◼
►
And I think that is truly beautiful.
01:51:54
◼
►
And I think that the team has done an amazing job with that.
01:51:58
◼
►
But I'm a little bit concerned that SwiftUI and the pressure
01:52:02
◼
►
and the visibility of that API means that there's a lot of
01:52:06
◼
►
pressure on the Swift language to take things that it might
01:52:09
◼
►
be better to wait for.
01:52:10
◼
►
Is it unprecedented to add--
01:52:13
◼
►
I mean, I'm trying to think back on the history.
01:52:16
◼
►
You mentioned the stuff that they're building on is not yet
01:52:19
◼
►
standardized in part of the language.
01:52:21
◼
►
Did that happen at any other point during Swift evolution
01:52:23
◼
►
where there was some Apple feature that they shipped?
01:52:25
◼
►
And the things that it--
01:52:27
◼
►
like imagine Apple shipped some kind of API that a property
01:52:30
◼
►
wrapper's, but property wrappers hadn't landed in
01:52:31
◼
►
language proper yet.
01:52:32
◼
►
Has that happened before?
01:52:34
◼
►
So that has happened at WWC, but never at the GM final
01:52:37
◼
►
release of Swift.
01:52:39
◼
►
And so Apple has surprised and delighted people with features
01:52:42
◼
►
at WWC, but then the team works very hard to actually
01:52:45
◼
►
push it through the standards process and then iterate and
01:52:48
◼
►
change the feature in response to feedback.
01:52:50
◼
►
Because a lot of--
01:52:52
◼
►
Swift evolution isn't just about allowing the community
01:52:54
◼
►
to know it's coming.
01:52:55
◼
►
It's about making the features better based on the input from
01:52:59
◼
►
the community.
01:52:59
◼
►
Because there's a lot of smart people that
01:53:01
◼
►
don't work at Apple.
01:53:02
◼
►
And so SwiftUI is the first where it has actually shipped,
01:53:06
◼
►
and it's an underbarred attribute.
01:53:08
◼
►
And I'm not exactly sure how that will work itself out, but
01:53:11
◼
►
there's a lot of really good people working on this, and
01:53:13
◼
►
they all want the right thing to happen, and they're
01:53:15
◼
►
pushing really hard to pull things together.
01:53:17
◼
►
And I would also say that the SwiftUI very noticeably had
01:53:24
◼
►
bad error messages when it first launched, and even the
01:53:28
◼
►
first official release of it.
01:53:30
◼
►
And so that motivated folks at Apple to put more engineering
01:53:33
◼
►
effort into improving error messages.
01:53:35
◼
►
And that helps everybody.
01:53:37
◼
►
That's a great thing that is a feature brought by SwiftUI
01:53:42
◼
►
that really has nothing to do with the framework itself.
01:53:46
◼
►
So it's complicated.
01:53:48
◼
►
I would say like these things, there's no binary way to look
01:53:50
◼
►
at it. It's just a complicated set of issues together.
01:53:55
◼
►
And I think coming back to what Marco was saying about
01:53:56
◼
►
Swift being challenging, is that what I was doing, Swift
01:54:01
◼
►
early on after year one of Swift being around in public,
01:54:05
◼
►
even then error messaging was rough.
01:54:08
◼
►
And it got a lot better for kind of vanilla Swift after
01:54:10
◼
►
that, and then I think things settled down, and renaming
01:54:14
◼
►
everything every other minute stopped happening after, what
01:54:16
◼
►
was it, Swift two or three or something, Swift three, I
01:54:19
◼
►
And everything seemed to settle out and start to get a
01:54:22
◼
►
lot more consistent.
01:54:23
◼
►
And that's when I think for me, even though I'd been writing
01:54:26
◼
►
Swift for a little while at that point, it's stopped being
01:54:29
◼
►
constantly prickly and started being genuinely amazingly fun
01:54:34
◼
►
And another thing that I find fun to make a terrible segue,
01:54:38
◼
►
you had mentioned functional reactive programming earlier.
01:54:40
◼
►
And I'd asked you last time we spoke about RxSwift, and you
01:54:42
◼
►
had said perfectly reasonably that you hadn't really touched
01:54:45
◼
►
it or looked at it that much, but it looked neat.
01:54:47
◼
►
One of the things that at least from an outsider's
01:54:50
◼
►
perspective, SwiftUI has brought is Combine, which is
01:54:52
◼
►
kind of Apple's take on RxSwift, if you'll permit me to
01:54:57
◼
►
Have you looked much at Combine?
01:54:59
◼
►
Are you familiar with it at all?
01:55:00
◼
►
Does that rev your engine in any way, shape, or form?
01:55:02
◼
►
Or are you kind of whatever?
01:55:03
◼
►
I don't care.
01:55:04
◼
►
- Well, so in the spirit of being evasive, SwiftUI was
01:55:08
◼
►
underway back when I was at Apple.
01:55:11
◼
►
So I was actually quite aware of that.
01:55:13
◼
►
I just didn't want to talk about it.
01:55:14
◼
►
- Sure, fair enough.
01:55:16
◼
►
- So I'm a little bit familiar with Combine.
01:55:18
◼
►
I've never used it.
01:55:19
◼
►
So I'm definitely not an expert on it.
01:55:22
◼
►
So I'm happy to talk about aspects of it, and I can tell you
01:55:25
◼
►
some detailed piece if I happen to know it.
01:55:27
◼
►
- I mean, I just talked about Swift.
01:55:29
◼
►
- Yes, I mean, if you ask a specific question, I can try for
01:55:33
◼
►
a specific answer, but--
01:55:35
◼
►
- My specific question would be like, so that way, the
01:55:38
◼
►
Combine way, RxSwift, it's a different mindset.
01:55:40
◼
►
It's kind of in a similar way to SwiftUI.
01:55:43
◼
►
Compare SwiftUI to UIKit or AppKit.
01:55:46
◼
►
It's a different way of conceptualizing and building,
01:55:51
◼
►
solving a problem, the problem being I'm going to throw an
01:55:53
◼
►
interface on the screen, I'm going to get events, and I'm
01:55:54
◼
►
going to do stuff in response to them.
01:55:57
◼
►
So Combine and RxSwift are yet another twist on how do you
01:56:01
◼
►
want to conceptualize the solution to this problem?
01:56:04
◼
►
The problem is always the same.
01:56:05
◼
►
I'm going to throw up a UI.
01:56:05
◼
►
People are going to click buttons and type stuff, and I
01:56:07
◼
►
want to react to it.
01:56:09
◼
►
I'm not sure how much GUI app development you've done,
01:56:12
◼
►
period, but what do you think of the approach as manifest--
01:56:16
◼
►
I mean, Casey could probably articulate it better, but this--
01:56:19
◼
►
I hate the name reactive, but this sort of reactive style,
01:56:22
◼
►
like, does that fit your model?
01:56:26
◼
►
If you had to write a GUI application, would you be
01:56:28
◼
►
thinking of it, conceptualizing it as a series of sources and
01:56:33
◼
►
syncs or publishers or whatever the hell they're
01:56:35
◼
►
called in Combine and Rx?
01:56:37
◼
►
Or would you think of it imperatively, or does your
01:56:38
◼
►
mind work more like SwiftUI?
01:56:41
◼
►
How do you personally think about solutions in
01:56:44
◼
►
this problem space?
01:56:45
◼
►
So I look at it as it is a programming model.
01:56:49
◼
►
So if you look at programming models, other examples of that
01:56:52
◼
►
include imperative programming with for loops.
01:56:55
◼
►
It includes generic programming.
01:56:57
◼
►
It includes object-oriented programming.
01:56:59
◼
►
I would say that machine learning is a programming
01:57:01
◼
►
Like, if you're going to build a cat detector, machine
01:57:03
◼
►
learning is way better than writing for loops, right?
01:57:06
◼
►
And so I would say Combine is a programming paradigm that's
01:57:09
◼
►
really good at this reactive, whatever that means,
01:57:13
◼
►
programming model.
01:57:14
◼
►
And I'd say it's actually very good for the things it's very
01:57:17
◼
►
good at, and it's not just UI.
01:57:20
◼
►
Like, you think about you have a Unix app, like a script or a
01:57:26
◼
►
web server, like a classic old-- like Apache or something
01:57:30
◼
►
Well, Apache has a bunch of logic for registering signal
01:57:32
◼
►
handlers, Unix signals that you can send out-of-band,
01:57:36
◼
►
like, asynchronous messages to your Unix process, like reload
01:57:41
◼
►
your configuration, things like that.
01:57:43
◼
►
And so there's not really been a great way to model that.
01:57:46
◼
►
The imperative ways of setting up a callback and figuring out
01:57:50
◼
►
how to go poke some things, and then, oh, well, what if I'm
01:57:52
◼
►
interrupting the current thread?
01:57:54
◼
►
I need to set up queues so I can push data around and I have
01:57:57
◼
►
to handle synchronization.
01:57:58
◼
►
All that stuff was really grody before.
01:58:01
◼
►
And I think reactive techniques are a really good way of
01:58:05
◼
►
modeling that, because it's really embracing this notion
01:58:08
◼
►
of you have events.
01:58:10
◼
►
And at that event-based programming, I think really is
01:58:13
◼
►
great certainly for UIs.
01:58:16
◼
►
It's great for, like, edge casing things
01:58:18
◼
►
like signal handlers.
01:58:20
◼
►
And it's good for network servers sometimes, depending on
01:58:24
◼
►
what you're doing.
01:58:25
◼
►
And so I think it's really great that you can do that.
01:58:27
◼
►
And I also think it's great that you can have that sit
01:58:30
◼
►
next to UIKit.
01:58:32
◼
►
You can have it sit next to generic programming.
01:58:35
◼
►
You can have it sitting next to machine learning.
01:58:37
◼
►
You can have it sitting next to all these different things.
01:58:39
◼
►
And then you can provide one system that allows you to pick
01:58:42
◼
►
the right solution off the shelf to solve your problem.
01:58:45
◼
►
It's not saying there is only one way to do it, and you have
01:58:48
◼
►
to do it this way.
01:58:49
◼
►
You can have a diversity of thought and APIs, and you can
01:58:52
◼
►
have different communities that all interoperate and work
01:58:55
◼
►
together in a common framework.
01:58:57
◼
►
Hopefully not too much diversity.
01:58:59
◼
►
I hope this settles down, at least in the Apple space.
01:59:00
◼
►
I hope this settles down to something.
01:59:02
◼
►
Because I think the Swift transition, we just talked
01:59:05
◼
►
about it earlier, objectivity and Swift live together, and
01:59:09
◼
►
will continue to live together for a long time.
01:59:11
◼
►
But there's a gradient, and we're going
01:59:13
◼
►
through a transition.
01:59:14
◼
►
There's no expectation that in 50 years, the community will
01:59:17
◼
►
be 50% objectivity and produced in Swift.
01:59:19
◼
►
Like, you know, we'll--
01:59:20
◼
►
I don't know what the Apple API story will look like
01:59:23
◼
►
this year at WWDC.
01:59:24
◼
►
I think it's really interesting to think about that, because
01:59:27
◼
►
until last summer, they didn't have-- or technically the
01:59:30
◼
►
spring before that-- but until last summer, they didn't have
01:59:33
◼
►
ABI stability.
01:59:34
◼
►
So they could not have large scale APIs written in Swift.
01:59:38
◼
►
And then finally, the SLANS, you have SwiftUI, combine a
01:59:43
◼
►
bunch of other-- the ARKit framework.
01:59:45
◼
►
You have a bunch of really cool frameworks that are now
01:59:47
◼
►
written in a Swift-first, really natural to that
01:59:51
◼
►
environment design point.
01:59:54
◼
►
I mean, a Swift API is very different than an Objective-C
01:59:56
◼
►
API, even if you put all the annotations on it.
01:59:59
◼
►
Now, this will be the second year they do that.
02:00:01
◼
►
And I don't know about you, but I've noticed that sometimes
02:00:05
◼
►
Apple puts its toe in gently into the water the first time.
02:00:08
◼
►
And the second time, they dump a lot more energy into it.
02:00:11
◼
►
And the third time, if it's working, they put all their
02:00:13
◼
►
weight behind it.
02:00:14
◼
►
And so I think it'll be interesting to see what the
02:00:16
◼
►
APIs look like in general, WRC this year.
02:00:20
◼
►
I really have no way to predict that.
02:00:21
◼
►
But I would not expect Apple to stand still here.
02:00:25
◼
►
Well, SwiftUI always felt kind of like Swift 1.0 to me, in
02:00:28
◼
►
that it was very super new.
02:00:30
◼
►
You haven't seen anything like this before.
02:00:32
◼
►
It's not your mother's UI kit.
02:00:35
◼
►
It's solving similar problems, but in a totally different way.
02:00:39
◼
►
But it's kind of weird and creaky.
02:00:40
◼
►
And it's a 1.0, and we're not really super sure about it.
02:00:44
◼
►
And we're excited about it.
02:00:45
◼
►
But there's also Catalyst and a bunch of other stuff.
02:00:48
◼
►
And yeah, whatever.
02:00:49
◼
►
And the second year is when you see, how did SwiftUI work?
02:00:53
◼
►
How did it work out?
02:00:54
◼
►
Have we formalized those guts?
02:00:57
◼
►
Are we going to improve it in a big way?
02:01:00
◼
►
Or is it going to take two or three years?
02:01:02
◼
►
Like, Swift had a couple years of tentative toe dipping in
02:01:06
◼
►
terms of technological churn.
02:01:09
◼
►
But the direction was clear.
02:01:10
◼
►
But I feel like right now, you've got the established UI
02:01:14
◼
►
kit and the older app kit, and then the new kit on the block,
02:01:20
◼
►
And Catalyst somewhere fits in between.
02:01:22
◼
►
Nobody's not really sure where.
02:01:24
◼
►
And so it seems like maybe there's a few too many cooks in
02:01:26
◼
►
this kitchen.
02:01:27
◼
►
I would say Catalyst is kind of the weird one out here.
02:01:30
◼
►
But I think that Apple has a fairly well-established pattern
02:01:34
◼
►
of, often, the first version is not good enough.
02:01:38
◼
►
And people forget that, because you're used to using the
02:01:41
◼
►
products when they're mature.
02:01:42
◼
►
But you go back to the first version of the iPhone, right?
02:01:44
◼
►
And there are some of us that immediately saw the promise
02:01:47
◼
►
and jumped on the bandwagon and said, this is the future.
02:01:50
◼
►
But there are a lot of other people who said, what are you
02:01:52
◼
►
talking about?
02:01:53
◼
►
It doesn't even do 3G.
02:01:54
◼
►
There's no copy and paste.
02:01:55
◼
►
There's no apps.
02:01:56
◼
►
There's no--
02:01:57
◼
►
it's actually an incredible tech demo, but it
02:02:00
◼
►
wasn't really there yet.
02:02:02
◼
►
And then the second iPhone came out, and that's 3G.
02:02:05
◼
►
And then you get copy and paste.
02:02:07
◼
►
And then you get retina screens.
02:02:09
◼
►
And then you get--
02:02:10
◼
►
you just fast forward.
02:02:11
◼
►
And now it's just like a life-changing thing that you
02:02:14
◼
►
can never imagine living without a cell phone.
02:02:17
◼
►
The same thing about OS X. I don't know.
02:02:20
◼
►
John was Puma, a really great release.
02:02:24
◼
►
If you go back in the day--
02:02:25
◼
►
I wonder if you could tell me the version number.
02:02:28
◼
►
I'll give you the answer to that question.
02:02:29
◼
►
I thought Puma was 10.1, wasn't it?
02:02:33
◼
►
Do I win a prize?
02:02:34
◼
►
I don't remember what 10.0 was, though.
02:02:36
◼
►
It was Cheetah, believe it or not, the most
02:02:38
◼
►
hilarious code name.
02:02:39
◼
►
There you go.
02:02:40
◼
►
The slowest release was named Cheetah.
02:02:43
◼
►
Well, it was aspirational.
02:02:46
◼
►
But again, OS X grew to be an amazing, amazing product
02:02:51
◼
►
and an amazing platform.
02:02:52
◼
►
And a lot of what Apple is great at
02:02:55
◼
►
is recognizing that the first version has
02:02:57
◼
►
to have enough to get the community to understand it
02:03:01
◼
►
and enough to build that momentum,
02:03:03
◼
►
and then recognizing when it's working and dumping gasoline
02:03:07
◼
►
on the fire versus recognizing that, OK, well,
02:03:11
◼
►
we have a dumpster.
02:03:12
◼
►
We just put gasoline in it.
02:03:13
◼
►
This is not a good thing.
02:03:14
◼
►
It's on fire.
02:03:16
◼
►
And Apple doesn't have many mistakes,
02:03:19
◼
►
but it does have products that are not successful.
02:03:21
◼
►
And people generally forget about those
02:03:23
◼
►
instead of dwelling on them.
02:03:26
◼
►
That's going to be the bucket Catalyst ends in, by the way.
02:03:29
◼
►
Well, yeah, I don't know.
02:03:31
◼
►
I feel like Catalyst is just a sidekick to UIKit,
02:03:35
◼
►
and the real battle is UIKit versus SwiftUI.
02:03:38
◼
►
Right now, SwiftUI is weird and new and half broken
02:03:41
◼
►
and strange, but it's definitely the shiny new kit on the block.
02:03:46
◼
►
So I don't know if-- like I said, it's a Swift one.
02:03:49
◼
►
But no, if you were to ask some stranger,
02:03:51
◼
►
what do you think of this Swift thing?
02:03:52
◼
►
You've got to put money on it.
02:03:54
◼
►
Is Swift going to hit big, or is it going to be a disaster?
02:03:56
◼
►
It's hard to tell, because Apple done a lot of weird things
02:03:58
◼
►
with languages before, and it's gone a bunch of different ways.
02:04:02
◼
►
And with SwiftUI, it's definitely different.
02:04:06
◼
►
I see a lot of promise there.
02:04:08
◼
►
I see a path from where it is now
02:04:10
◼
►
to being a completely replacement for UIKit,
02:04:13
◼
►
but it's a long path, because UIKit got to build-- not build
02:04:16
◼
►
on AppKit, but got to build on the wisdom learned
02:04:18
◼
►
from making AppKit, and AppKit itself
02:04:20
◼
►
has a tremendous amount of experience and wisdom built
02:04:23
◼
►
into that API.
02:04:25
◼
►
So there's quite a pedigree in UIKit,
02:04:28
◼
►
and Catalyst is just like UIKit in a fancy outfit
02:04:32
◼
►
in a different platform.
02:04:34
◼
►
I think they're functionally very different kinds
02:04:36
◼
►
of technologies.
02:04:37
◼
►
Like one is trying to change the model,
02:04:39
◼
►
and one is trying to broaden the model, I guess.
02:04:43
◼
►
Yeah, let people use the skills they already
02:04:44
◼
►
have on a different platform.
02:04:46
◼
►
Right, and those are really different goals.
02:04:47
◼
►
And I don't know how that will work out either.
02:04:49
◼
►
But one of the things that people don't realize,
02:04:51
◼
►
though, is that when Swift was-- like you talk about Apple
02:04:56
◼
►
put a lot of energy into Swift, and clearly there's
02:04:59
◼
►
a committed plan to making Swift take over the Apple ecosystem.
02:05:02
◼
►
One of the things that's not well known
02:05:04
◼
►
is that even the week before the WWC launch,
02:05:08
◼
►
there were very senior, very smart people that
02:05:12
◼
►
were very dubious about Swift, right?
02:05:14
◼
►
And for rational reasons.
02:05:17
◼
►
I mean, the thought process went,
02:05:18
◼
►
and you have to understand-- so the thought process went,
02:05:21
◼
►
the iPhone is successful because of Objective C, right?
02:05:24
◼
►
And literally everybody in the iOS ecosystem, also Mac,
02:05:30
◼
►
writes their apps in Objective C, right?
02:05:32
◼
►
So now we're looking at adding a new technology, a new language
02:05:37
◼
►
to this world.
02:05:38
◼
►
And these are people, the execs in question,
02:05:42
◼
►
grew up writing Objective C code, right?
02:05:44
◼
►
So they're not coming in from the world of--
02:05:46
◼
►
we have a good sense of what the average programmers out
02:05:53
◼
►
in the wild do.
02:05:53
◼
►
They're people that have spent many, many years thinking
02:05:56
◼
►
about and thinking in Objective C.
02:05:58
◼
►
And they looked at this upstart Swift thing
02:06:01
◼
►
and saying, well, there's a huge risk that this will cleave
02:06:04
◼
►
the community in half.
02:06:06
◼
►
We may end up having two different sub-communities
02:06:10
◼
►
within our ecosystem.
02:06:11
◼
►
And that actually would be a very big problem.
02:06:13
◼
►
And I think that there is an aspect of that that was true,
02:06:16
◼
►
but the Objective C strongholds are diminishing over time.
02:06:22
◼
►
And apparently Apple's feeling confident enough with Swift
02:06:25
◼
►
that they'll introduce Swift-only APIs.
02:06:27
◼
►
And so I guess it's worked out well.
02:06:29
◼
►
But early on, it was not clear, right?
02:06:31
◼
►
I mean, very reasonable, very smart, very strategic people
02:06:36
◼
►
had very real concerns.
02:06:38
◼
►
And it's very hard to predict that.
02:06:40
◼
►
Yeah, and doing a public announcement,
02:06:42
◼
►
if I was one of those people, the thing you could bring up
02:06:44
◼
►
is, look, we were in a similar situation with Insert Technology
02:06:48
◼
►
X, whether it's Objective C garbage collection or even
02:06:52
◼
►
ZFS for that matter.
02:06:53
◼
►
Once we publicly announce it or ship it and have to support it,
02:06:56
◼
►
look how long it took us to get rid of Objective C garbage
02:06:59
◼
►
Because if you ship it and people use it,
02:07:01
◼
►
then you have to support it, and it's terrible,
02:07:02
◼
►
and you eventually learn that it's not the thing.
02:07:04
◼
►
And so I can imagine the argument was, look,
02:07:06
◼
►
if Swift's going to be the thing,
02:07:07
◼
►
maybe bake it a little bit longer,
02:07:09
◼
►
make us more confident internally
02:07:11
◼
►
that we think it's going to work out.
02:07:12
◼
►
Because if we do actually release it
02:07:14
◼
►
and let people ship with it, even if we decide,
02:07:17
◼
►
oh, well, we made a terrible mistake,
02:07:18
◼
►
we're still stuck with it for however many years,
02:07:20
◼
►
and it's really a drain.
02:07:22
◼
►
Well, and that was one of the things that I--
02:07:25
◼
►
I have a lot of respect for Apple and Apple's ability
02:07:27
◼
►
to make bold decisions.
02:07:28
◼
►
But that was really not obvious, and they
02:07:31
◼
►
were able to make a leap, even though Swift 1 was really not
02:07:37
◼
►
Swift 1 was very early.
02:07:39
◼
►
It was-- you could call it a tech demo for sure.
02:07:42
◼
►
And they were still willing to make a bold leap,
02:07:48
◼
►
partially because they believed in the engineering team,
02:07:50
◼
►
and they believed in the promise of moving the world forward.
02:07:54
◼
►
And they really wanted to be the head driving technology
02:07:57
◼
►
in that way.
02:07:58
◼
►
And I think that's really great, and it has worked out
02:08:00
◼
►
But that's both that the ideas were good, I think,
02:08:04
◼
►
but also that it was allowed to iterate.
02:08:08
◼
►
And one of the things that relieved a lot of pressure
02:08:10
◼
►
from those discussions is we said, hey, you know,
02:08:14
◼
►
we're going to do a controversial thing.
02:08:15
◼
►
We're going to say, we have a new language,
02:08:17
◼
►
and you can build and submit apps to the store
02:08:19
◼
►
when it has its final release in the fall.
02:08:22
◼
►
But we're going to change it, and we're
02:08:24
◼
►
going to tell developers that we will change it.
02:08:26
◼
►
And the reason for this is that we cannot--
02:08:28
◼
►
even though we think we're smart,
02:08:29
◼
►
we cannot make something that is perfect without having
02:08:35
◼
►
And by the time Swift was announced,
02:08:36
◼
►
only something like 250 or 300 people in the world
02:08:40
◼
►
knew about it.
02:08:42
◼
►
And you can't make something that's really great
02:08:44
◼
►
if it's in that kind of a silo.
02:08:45
◼
►
And so that ability that we had to really iterate
02:08:48
◼
►
and change the language, even though it was super painful,
02:08:51
◼
►
I think led to the language being way better.
02:08:53
◼
►
It also led to it being way more comfortable for Apple
02:08:58
◼
►
to take that risk, because it didn't have
02:08:59
◼
►
to be perfect on day one.
02:09:02
◼
►
You should have shipped that one with tuple arguments
02:09:04
◼
►
to Functions.
02:09:04
◼
►
That would have been cool.
02:09:06
◼
►
I mean, if you go back in the history of Swift,
02:09:08
◼
►
there's so many terrible ideas.
02:09:10
◼
►
And so I'm very happy that the most terrible ideas
02:09:14
◼
►
have been ripped out, and we're left with only some
02:09:17
◼
►
of the unfortunate ones.
02:09:21
◼
►
So you had brought up earlier ABI stability
02:09:24
◼
►
and how that has recently landed.
02:09:26
◼
►
And out of curiosity, what do you
02:09:28
◼
►
see as the biggest things that are possible now
02:09:31
◼
►
that weren't before that line in the sand?
02:09:33
◼
►
I mean, there's obvious answers, and maybe that's to you
02:09:35
◼
►
the biggest and most important answer.
02:09:37
◼
►
But is there anything that's perhaps more esoteric
02:09:40
◼
►
or interesting or unique that you think
02:09:41
◼
►
is now on the table that wasn't before ABI stability?
02:09:45
◼
►
So I look at ABI stability-- ABI stability itself
02:09:48
◼
►
is one of these funny things where
02:09:49
◼
►
it's very important to Apple, but almost nobody else
02:09:51
◼
►
should care.
02:09:53
◼
►
Or you care as an app developer because you don't have to link
02:09:56
◼
►
the library into your code, and so your app is small and right.
02:09:59
◼
►
But you otherwise don't care.
02:10:01
◼
►
It's also an insanely complicated feature.
02:10:04
◼
►
It's also something that many of the languages
02:10:06
◼
►
don't ever even get.
02:10:07
◼
►
So you take other languages like Rust, for example.
02:10:10
◼
►
It's a great language.
02:10:11
◼
►
They've never fought with this.
02:10:12
◼
►
And it's really hard, and doing this well is really hard
02:10:17
◼
►
and has a lot of really innovative aspects to it.
02:10:20
◼
►
But I look ahead, and so I look at that
02:10:23
◼
►
as kind of this table stakes thing
02:10:25
◼
►
that you have to get done that's just really hard.
02:10:27
◼
►
And so until that was done, Apple's engineering team
02:10:30
◼
►
and design effort couldn't work on some
02:10:33
◼
►
of the more exciting, bigger, impactful things.
02:10:35
◼
►
But when I look at it, I look at there's different kinds
02:10:38
◼
►
of features that are missing.
02:10:40
◼
►
So just to give you an example, one of these
02:10:43
◼
►
is what's called variadic generics.
02:10:46
◼
►
So you take a generic function, and you can have
02:10:48
◼
►
n arguments to your function or n generic types
02:10:53
◼
►
that go into it.
02:10:54
◼
►
Variadic generics are one of these,
02:10:58
◼
►
you know, we were talking about this before,
02:10:59
◼
►
it's a super esoteric, hardcore, power user,
02:11:04
◼
►
library developer type feature.
02:11:07
◼
►
But what it enables is it enables things like tuples
02:11:12
◼
►
going into dictionary keys.
02:11:13
◼
►
It enables, you know, right now with Swift UI,
02:11:16
◼
►
they have this hilarious problem where if you have more
02:11:18
◼
►
than 10 controls in your top level,
02:11:20
◼
►
it doesn't work or something, right?
02:11:21
◼
►
And so you have like a lot of these rough edges
02:11:24
◼
►
that get shaped off by having this really esoteric feature
02:11:28
◼
►
that only hardcore library developers will use
02:11:31
◼
►
because those hardcore library developers
02:11:32
◼
►
are the ones building these APIs.
02:11:34
◼
►
And so that's something that's also,
02:11:37
◼
►
I think it's kind of conceptually well known,
02:11:39
◼
►
but it's a lot of engineering work.
02:11:41
◼
►
And so I would love to see something like that
02:11:42
◼
►
just for the other rough edges that will go away
02:11:45
◼
►
when that happens.
02:11:46
◼
►
There are other features like concurrency.
02:11:48
◼
►
So async await is frequently requested,
02:11:51
◼
►
will be way better for UI development,
02:11:54
◼
►
for server development, for just like anybody
02:11:55
◼
►
that's doing asynchronous programming.
02:11:58
◼
►
Again, it's all pretty well understood.
02:12:00
◼
►
There's a few implementation details
02:12:02
◼
►
that need to be sorted out,
02:12:03
◼
►
but that would be amazing.
02:12:05
◼
►
They've published a Swift 6 roadmap.
02:12:08
◼
►
And I think that's one of the things on the short list,
02:12:12
◼
►
which I think would be great.
02:12:13
◼
►
The ownership thing we talked about
02:12:15
◼
►
is something that would really help with systems programming
02:12:17
◼
►
and places where you really want both safety and performance.
02:12:22
◼
►
Those are, I think the big ones.
02:12:26
◼
►
And I mean, the big language features that I can think of,
02:12:30
◼
►
the libraries then are the big missing piece.
02:12:33
◼
►
And so the fact that here we are in 2020
02:12:36
◼
►
and there's no command line option processing library yet
02:12:40
◼
►
is kind of hilarious, right?
02:12:41
◼
►
And the same is true of many different things.
02:12:45
◼
►
I'm also really curious to see what the community does
02:12:48
◼
►
when you talk about foundation and things like this,
02:12:50
◼
►
where foundation is both a great blessing and a curse,
02:12:53
◼
►
where it was really great for bootstrapping
02:12:55
◼
►
the Swift on server and many other communities,
02:12:57
◼
►
but it also just doesn't feel very naturally
02:13:00
◼
►
like a Swift API even today.
02:13:02
◼
►
And so, I don't know.
02:13:03
◼
►
I mean, there's a lot of really exciting things
02:13:05
◼
►
that I'm sure will happen and come
02:13:06
◼
►
as well as many smaller kinds of features as well.
02:13:10
◼
►
And I think what I'm more concerned about
02:13:12
◼
►
is that we do things the right way
02:13:13
◼
►
and really consider and debate
02:13:16
◼
►
and think about how they fit together
02:13:17
◼
►
and make sure that the consequence of what we get
02:13:21
◼
►
in 10 years or something is really beautiful
02:13:24
◼
►
and still feels really good.
02:13:25
◼
►
It's not an amalgamation of different things
02:13:28
◼
►
that are thrown together.
02:13:29
◼
►
I think the Swift evolution is a really good,
02:13:31
◼
►
I wouldn't say controlling function,
02:13:32
◼
►
but it's a really good feedback loop
02:13:34
◼
►
that encourages good iteration.
02:13:37
◼
►
- I'm just picturing some function in the guts of Swift UI
02:13:40
◼
►
that has like 10 arguments named it,
02:13:42
◼
►
A1, A2, A3, A4, A5, and that's powering the whole thing
02:13:46
◼
►
because it can't be very diddic.
02:13:48
◼
►
- That's exactly what it is, is there's something,
02:13:49
◼
►
and it's overloaded functions, one that takes one,
02:13:52
◼
►
one that takes two, one that takes three, yeah.
02:13:55
◼
►
- Yeah, yeah.
02:13:56
◼
►
- But the limit shouldn't be like 10, right?
02:13:58
◼
►
How many, I don't know what the limit is
02:14:00
◼
►
or how many arguments you can have in a Swift function,
02:14:01
◼
►
but I would think it'd be bigger than 10.
02:14:03
◼
►
- They know about copy and paste, right?
02:14:06
◼
►
- I don't, so I'm not, I don't know anything
02:14:08
◼
►
in the secret sauce internally,
02:14:10
◼
►
but they picked some limit and they went up to that size.
02:14:13
◼
►
Similarly, like in Swift, just the base language,
02:14:17
◼
►
you can use equals equals on tuples
02:14:19
◼
►
and it works up to six elements.
02:14:23
◼
►
'Cause copy and paste.
02:14:24
◼
►
- Does that have a good compiler error message
02:14:26
◼
►
when you exceed it?
02:14:27
◼
►
- I'm sure it does not, right?
02:14:29
◼
►
But you know, it covers the most important part
02:14:32
◼
►
of the problem and it was good enough,
02:14:33
◼
►
but it's just still a bit unsatisfying
02:14:35
◼
►
and it should be a simple thing that is orthogonal
02:14:38
◼
►
to everything else and you just, you're done
02:14:40
◼
►
and then you move on.
02:14:41
◼
►
This again is what I mean by there's like a brick
02:14:43
◼
►
that's missing and if you start like papering
02:14:46
◼
►
around the corners and you start adding special case things
02:14:49
◼
►
that like work around the lack of that brick,
02:14:52
◼
►
it's just way better to go build the brick,
02:14:54
◼
►
drop it in and then get rid of all the workarounds
02:14:57
◼
►
and all the other technical debt that metastasizes
02:15:01
◼
►
around the edges to deal with the lack
02:15:03
◼
►
of that big missing thing.
02:15:05
◼
►
- I mean, even PHP has that.
02:15:06
◼
►
- So, Chris, you've been extremely generous with your time.
02:15:11
◼
►
Just a couple of quickie, hopefully easy ones for you,
02:15:14
◼
►
if you don't mind.
02:15:15
◼
►
You had talked when we had spoken three years ago
02:15:18
◼
►
that you almost never get to write actual Swift
02:15:20
◼
►
and obviously your world has changed quite a bit since then.
02:15:24
◼
►
Are you ever writing Swift these days?
02:15:26
◼
►
- Yeah, so I actually do.
02:15:28
◼
►
I still have not written a large Swift application
02:15:31
◼
►
that's 100,000 lines of code but I do actually use it
02:15:34
◼
►
for certain things I don't really wanna talk about right now.
02:15:37
◼
►
- Yeah, totally.
02:15:38
◼
►
I was just curious if are you using it at all or not
02:15:40
◼
►
because it was so funny to me and sad
02:15:42
◼
►
that you didn't get to really receive the fruits
02:15:45
◼
►
of your labor.
02:15:46
◼
►
- Yeah, I still live in that sadness
02:15:48
◼
►
and I still write way more C++ code
02:15:50
◼
►
than I should but maybe there's a day that will change.
02:15:55
◼
►
- Do you, when you are writing Swift,
02:15:57
◼
►
ever run into a situation where you're like,
02:15:59
◼
►
"Ah, dammit, I wish I didn't do this."
02:16:01
◼
►
Or like, "It's being such a dick."
02:16:03
◼
►
- All the time.
02:16:04
◼
►
And so to me, it's like all those sharp edges
02:16:06
◼
►
that everybody runs into, for me it's like,
02:16:09
◼
►
"Ah, I really wanna go fix that."
02:16:11
◼
►
But I can't because I have another, you know.
02:16:13
◼
►
- Right, yeah.
02:16:14
◼
►
- It's very different.
02:16:15
◼
►
And similarly, it's the same thing when I work with LLVM.
02:16:17
◼
►
I know all the bad things about LLVM better
02:16:20
◼
►
than anybody else does, right?
02:16:22
◼
►
And so people, a lot of people are like,
02:16:25
◼
►
"Oh yeah, LLVM's really great."
02:16:26
◼
►
I'm like, "Yeah, it's okay.
02:16:28
◼
►
"It's better than the alternatives,
02:16:30
◼
►
"but it should be way better than it is
02:16:32
◼
►
"and let's not set our sights on good.
02:16:35
◼
►
"Let's aim for great."
02:16:37
◼
►
And same thing for Clang.
02:16:38
◼
►
Like why isn't Clang,
02:16:39
◼
►
why can't you do high level optimizations in Clang, right?
02:16:42
◼
►
It's very sad that you can't do Arc optimizations
02:16:46
◼
►
for the smart pointer class in C++, right?
02:16:51
◼
►
And that's an implementation detail issue
02:16:53
◼
►
that should totally be fixed.
02:16:54
◼
►
And I've argued that this should be fixed,
02:16:57
◼
►
but I don't have time to go do it myself.
02:16:59
◼
►
So, you know, it's really tilting at windmills,
02:17:00
◼
►
hoping that somebody else will care about fixing the problem
02:17:03
◼
►
that's really apparent to me,
02:17:04
◼
►
but isn't really apparent to everybody else.
02:17:06
◼
►
And, you know, this is the problem
02:17:09
◼
►
with working on large scale things.
02:17:11
◼
►
- You had mentioned earlier,
02:17:12
◼
►
and this is I think the last one
02:17:14
◼
►
that certainly I had had for you.
02:17:15
◼
►
You had mentioned earlier you had made a package shed.
02:17:18
◼
►
I know nothing, literally nothing about woodworking,
02:17:21
◼
►
but I know that that's something that's important to you
02:17:23
◼
►
and a hobby of yours.
02:17:25
◼
►
What other things,
02:17:25
◼
►
or would you like to share more about the package shed?
02:17:27
◼
►
What have you been doing woodworking-wise these days?
02:17:30
◼
►
- Oh, I haven't had a lot of time to do woodworking lately
02:17:32
◼
►
just because I've been super busy
02:17:34
◼
►
and jumping between different things.
02:17:37
◼
►
But there's different aspects of woodworking that I like.
02:17:42
◼
►
The thing that I would say
02:17:43
◼
►
is I'm really good at building one of something,
02:17:45
◼
►
'cause I like the process of design and exploration,
02:17:47
◼
►
understanding something, figuring out the,
02:17:50
◼
►
okay, I'm gonna build a table.
02:17:51
◼
►
Well, how high, why?
02:17:53
◼
►
What is the bracing structure underneath it
02:17:55
◼
►
so you don't bump your knees?
02:17:56
◼
►
Like all these things that,
02:17:58
◼
►
I'm sure there are experts
02:17:59
◼
►
that have thought about these things for centuries
02:18:01
◼
►
or maybe millennia,
02:18:04
◼
►
but I don't know any of these things, right?
02:18:06
◼
►
And there's actual principles that underlie all this
02:18:08
◼
►
and there's better and worse.
02:18:09
◼
►
And kind of working through all that's a lot of fun
02:18:11
◼
►
because it's an amazing problem solving thing.
02:18:15
◼
►
I would be terrible at building a dining room full of chairs.
02:18:18
◼
►
Like I would get the first one figured out
02:18:20
◼
►
and then it turns into a manual process
02:18:24
◼
►
of just like fabricating things
02:18:26
◼
►
and I would not be into that at all.
02:18:29
◼
►
But I really love the problem solving,
02:18:30
◼
►
the exploration side of that.
02:18:31
◼
►
And so lately I've been pretty busy,
02:18:33
◼
►
built a little treasure box for my son
02:18:36
◼
►
that you can see on Twitter if you're interested.
02:18:39
◼
►
Most mainly odds and ends here and there.
02:18:43
◼
►
- If you do the chairs,
02:18:44
◼
►
you should do the first chair as like chair one,
02:18:46
◼
►
like Swift one.
02:18:47
◼
►
And the second chair looks totally different.
02:18:48
◼
►
It's chair two.
02:18:49
◼
►
- There you go.
02:18:50
◼
►
- No, no, first you have to build
02:18:51
◼
►
a chair design factory toolkit.
02:18:54
◼
►
I think he's already got that.
02:18:56
◼
►
- So here you run into logistical problems
02:18:58
◼
►
like I'm not the only decision maker in the household.
02:19:02
◼
►
- That's where you have the chair evolution process.
02:19:04
◼
►
- Yes, exactly.
02:19:07
◼
►
I may not even be the most influential
02:19:10
◼
►
decision maker in the house.
02:19:12
◼
►
- Thanks to our sponsors this week.
02:19:13
◼
►
Linode, Jamf Now, and Indeed.
02:19:16
◼
►
And we will talk to you next week.
02:19:18
◼
►
(upbeat music)
02:19:20
◼
►
♪ Now the show is over ♪
02:19:22
◼
►
♪ They didn't even mean to begin ♪
02:19:25
◼
►
♪ 'Cause it was accidental ♪
02:19:27
◼
►
♪ Accidental ♪
02:19:28
◼
►
♪ Oh, it was accidental ♪
02:19:30
◼
►
♪ Accidental ♪
02:19:31
◼
►
♪ John didn't do any research ♪
02:19:33
◼
►
♪ Marco and Casey wouldn't let him ♪
02:19:36
◼
►
♪ 'Cause it was accidental ♪
02:19:37
◼
►
♪ Accidental ♪
02:19:38
◼
►
♪ Oh, it was accidental ♪
02:19:40
◼
►
♪ Accidental ♪
02:19:41
◼
►
♪ And you can find the show notes at ATP.FM ♪
02:19:46
◼
►
♪ And if you're into Twitter ♪
02:19:49
◼
►
♪ You can follow them at C-A-S-E-Y-L-I-S-S ♪
02:19:54
◼
►
♪ So that's Casey List ♪
02:19:57
◼
►
♪ M-A-R-C-O-A-R-M ♪
02:20:00
◼
►
♪ And T-Marco Armand ♪
02:20:02
◼
►
♪ S-I-R-A-C ♪
02:20:05
◼
►
♪ USA, Syracuse ♪
02:20:07
◼
►
♪ It's accidental ♪
02:20:09
◼
►
♪ Accidental ♪
02:20:11
◼
►
♪ They didn't mean to accidental ♪
02:20:14
◼
►
♪ Accidental ♪
02:20:15
◼
►
♪ Tech podcast ♪
02:20:17
◼
►
♪ Been so long ♪
02:20:20
◼
►
- So are you guys doing anything from working at home
02:20:25
◼
►
or schooling at home besides playing Minecraft all day?
02:20:28
◼
►
'Cause that's mostly what we're doing here.
02:20:30
◼
►
- I think this is the wrong group to be talking
02:20:32
◼
►
about working from home because it consists of two people
02:20:35
◼
►
who always work from home.
02:20:37
◼
►
And yes, it's different because your family's there
02:20:39
◼
►
or whatever, but maybe not that much different.
02:20:41
◼
►
And the third person, me, also works from home a lot
02:20:44
◼
►
despite having a regular office job.
02:20:46
◼
►
So I think life has changed a lot less for us
02:20:51
◼
►
than it has for most people.
02:20:53
◼
►
But it's definitely felt different,
02:20:56
◼
►
even if we're supposedly doing the same thing,
02:20:58
◼
►
sitting in front of the same computer,
02:20:59
◼
►
who's doing the same type of work,
02:21:01
◼
►
or in Marco's case, not doing the same type of work.
02:21:06
◼
►
Everybody's here, right?
02:21:07
◼
►
I mean, the kids don't leave during the day for any reason,
02:21:11
◼
►
and so they're all just here.
02:21:14
◼
►
- Yeah, that is critical though.
02:21:16
◼
►
I literally, I'm getting almost no work done.
02:21:20
◼
►
And it's, in some ways it's my own choice,
02:21:23
◼
►
but the main differentiating factor is
02:21:25
◼
►
our kids are all at home.
02:21:27
◼
►
'Cause the schools are closed for the virus,
02:21:29
◼
►
and they've already been closed for over a week,
02:21:33
◼
►
there's probably gonna be another couple of weeks at least.
02:21:35
◼
►
That totally changes our day here to the point where,
02:21:38
◼
►
and especially we have one kid.
02:21:41
◼
►
There's no one else for him to play with.
02:21:43
◼
►
He's not going to school.
02:21:45
◼
►
All of his out of school activities have been canceled.
02:21:47
◼
►
He can't go to his friends' houses.
02:21:49
◼
►
What's he gonna do?
02:21:51
◼
►
He has nothing to do.
02:21:52
◼
►
He's in second grade.
02:21:53
◼
►
The school work, we do have worksheets and stuff
02:21:58
◼
►
that the school puts up in Google Classroom,
02:22:01
◼
►
which is like, I mean, there's a whole discussion here about
02:22:04
◼
►
man, I feel bad for teachers so often.
02:22:07
◼
►
I know a lot of teachers, and it's never a super easy
02:22:10
◼
►
or well-respected job by our society.
02:22:13
◼
►
But in this particular case, it really shows you
02:22:16
◼
►
quite how important teachers are, because first of all,
02:22:19
◼
►
teachers have all been forced to all of a sudden
02:22:20
◼
►
throw their entire curriculum somehow online,
02:22:24
◼
►
which doesn't work for a lot of stuff,
02:22:26
◼
►
and is totally different.
02:22:27
◼
►
And we're all trying to be teachers ourselves at home
02:22:32
◼
►
who have never done this before, and it's really hard.
02:22:35
◼
►
And we're doing a terrible job largely as a people,
02:22:38
◼
►
because it's a hard job, and we're not trained for it.
02:22:40
◼
►
And we have no experience with it.
02:22:42
◼
►
It really, you know, one of the hardest jobs,
02:22:45
◼
►
or one of the hardest things about being a teacher
02:22:47
◼
►
is that everyone thinks they know your job better than you do
02:22:49
◼
►
and in this case, that could never be more clear
02:22:52
◼
►
as it is right now.
02:22:54
◼
►
But for us, because our kid is home all day
02:22:58
◼
►
and has no one else to play with
02:23:00
◼
►
and can't really do anything,
02:23:02
◼
►
I can either sit him in front of the TV
02:23:04
◼
►
for seven hours a day, or we can play with him.
02:23:08
◼
►
And so we're playing with him.
02:23:10
◼
►
And I don't feel bad about that for the most part.
02:23:14
◼
►
I do feel bad that I am in many ways neglecting my business.
02:23:18
◼
►
That is no question.
02:23:20
◼
►
I am, I see Casey's pumping out a new build of Picaview
02:23:24
◼
►
almost every day somehow.
02:23:27
◼
►
And that makes me feel bad,
02:23:29
◼
►
'cause I'm getting no overcast work done.
02:23:33
◼
►
I'm answering emails as best as I can.
02:23:35
◼
►
I'm keeping up with urgent business matters
02:23:38
◼
►
as best as I can, but I'm getting no programming done.
02:23:42
◼
►
Because during the entire part of the day,
02:23:44
◼
►
during most of the day that I'm awake,
02:23:47
◼
►
so is my kid, and I'm having to be a full-time parent
02:23:52
◼
►
and teacher and we're running the house,
02:23:56
◼
►
so I gotta make food and everything,
02:24:00
◼
►
occasionally shop for food,
02:24:01
◼
►
just keep the house clean and running.
02:24:06
◼
►
And it takes up all this time,
02:24:08
◼
►
and I'm making a decision that
02:24:11
◼
►
while my kid has no one else to play with,
02:24:14
◼
►
then I don't want him to just be watching TV.
02:24:17
◼
►
I wanna be the one to do things with him.
02:24:19
◼
►
And at the same time, my entire family, all three of us,
02:24:22
◼
►
have developed a significant Minecraft addiction.
02:24:24
◼
►
So this works out well.
02:24:27
◼
►
That's all he wants to do is play Minecraft.
02:24:31
◼
►
When we're not playing Minecraft,
02:24:32
◼
►
all he wants to do is talk about Minecraft
02:24:34
◼
►
or read about Minecraft or watch videos about Minecraft.
02:24:37
◼
►
So it's 100% a Minecraft-obsessed time for our family,
02:24:41
◼
►
which I gather is not that rare for a nearly eight-year-old.
02:24:45
◼
►
So it kinda works out well in that
02:24:47
◼
►
we're just kinda playing this game all day,
02:24:48
◼
►
but I am totally neglecting my job.
02:24:51
◼
►
But I don't really see a better choice I could make,
02:24:54
◼
►
given the circumstances.
02:24:56
◼
►
- Now really quickly, has New York not canned
02:24:58
◼
►
the entire school year yet?
02:25:00
◼
►
- I don't know, they haven't made that call yet,
02:25:02
◼
►
but it wouldn't surprise me if they did.
02:25:04
◼
►
But they just haven't made the call yet.
02:25:07
◼
►
- That's very surprising to me,
02:25:08
◼
►
because Virginia is doing much better right now
02:25:11
◼
►
than New York is with regard to the virus.
02:25:13
◼
►
But just earlier this week,
02:25:15
◼
►
I think it was yesterday, the day before,
02:25:17
◼
►
as we record this, our governor announced
02:25:20
◼
►
that this school year's over,
02:25:21
◼
►
which is really, really wild for our family,
02:25:25
◼
►
because this was Declan's last year of preschool,
02:25:28
◼
►
and we'll, hypothetically, be registering him
02:25:31
◼
►
for kindergarten next month, maybe, possibly.
02:25:34
◼
►
But he walked out of his preschool class
02:25:37
◼
►
a week, a week and a half ago, whatever it was,
02:25:39
◼
►
and we thought he would be back in a couple of weeks,
02:25:41
◼
►
which, in retrospect, even then, I was kind of like,
02:25:43
◼
►
well, it'll probably be a month or two,
02:25:44
◼
►
but he'll be back at some point, right?
02:25:45
◼
►
And he is no longer, effectively, a preschool student,
02:25:49
◼
►
and it's really, really wild.
02:25:50
◼
►
I feel terrible for seniors in high school,
02:25:52
◼
►
'cause John, Alex still has one more year left.
02:25:55
◼
►
Is that right?
02:25:56
◼
►
- Oh, God, what the hell year is he in?
02:25:59
◼
►
He's got two more years left.
02:26:00
◼
►
- Oh, he's got two, okay, I'm sorry.
02:26:02
◼
►
But no, it's been weird for us having Declan home
02:26:07
◼
►
all the time, obviously, Michaela pretty much always was.
02:26:10
◼
►
And not bad weird, it's been weird weird.
02:26:12
◼
►
And I think Erin, in particular, since the bulk
02:26:15
◼
►
of the effort has been landing on her shoulders,
02:26:17
◼
►
she's been doing a really good job of doing,
02:26:22
◼
►
not just sitting him in front of the TV.
02:26:23
◼
►
Now, I wouldn't necessarily say that she's doing instruction
02:26:25
◼
►
or anything like that, but he's not,
02:26:27
◼
►
to your point, Marco, he's not just sitting
02:26:29
◼
►
in front of the TV, mouth agape, just staring.
02:26:32
◼
►
- By the way, no judgment if that's what you have to do.
02:26:36
◼
►
'Cause I'm not saying we're not doing that ever.
02:26:38
◼
►
I'm just saying I'm trying not to do that
02:26:40
◼
►
for like seven hours a day.
02:26:42
◼
►
- That's what Alex, speaking of Alex,
02:26:43
◼
►
that's what he's doing.
02:26:44
◼
►
I mean, it's not the television, of course,
02:26:46
◼
►
'cause he doesn't use that primitive device.
02:26:47
◼
►
It's Nintendo Switch and iPad.
02:26:50
◼
►
- Fair enough, and how could you not,
02:26:52
◼
►
especially if you have two working parents?
02:26:53
◼
►
Like, how can you not do that?
02:26:56
◼
►
- Right, and the thing is, the school's giving us
02:26:59
◼
►
these assignments online every day
02:27:01
◼
►
just to try to have some semblance of education,
02:27:05
◼
►
instruction, and structure inconsistency for the students.
02:27:08
◼
►
And frankly, I don't think it's much,
02:27:11
◼
►
'cause it can't be.
02:27:13
◼
►
It's basically homework every day.
02:27:14
◼
►
It's like, here's a couple of worksheets and activities.
02:27:16
◼
►
That's basically what we're calling
02:27:19
◼
►
a full school day these days.
02:27:20
◼
►
And I can't blame, it's not the school's fault.
02:27:24
◼
►
They're doing the only thing they can do, really,
02:27:27
◼
►
'cause they weren't prepared for it.
02:27:30
◼
►
We don't have an entire online curriculum
02:27:32
◼
►
for elementary school kids,
02:27:34
◼
►
and I'm not even sure if there's anything possible.
02:27:37
◼
►
But anyway, so no one's prepared for this,
02:27:40
◼
►
except people who are already homeschooled,
02:27:41
◼
►
but that's not most of us.
02:27:44
◼
►
And so, we have this little bit of homework
02:27:47
◼
►
every day that we do, and we do basic exercise,
02:27:51
◼
►
and we take a dog walk in the afternoon.
02:27:52
◼
►
And so, we have some structure of the day,
02:27:54
◼
►
but for the most part, I'm not filling
02:27:57
◼
►
Adam's day with school, because first of all,
02:28:02
◼
►
we don't have enough school to do that with.
02:28:04
◼
►
But second of all, this is a worldwide, historic,
02:28:09
◼
►
pretty heavy event.
02:28:11
◼
►
I don't wanna be the parents who,
02:28:15
◼
►
throughout this pretty stressful time,
02:28:18
◼
►
especially, kids know what's going on.
02:28:21
◼
►
They might seem like everything's fine,
02:28:23
◼
►
but they can tell we're all worried.
02:28:25
◼
►
They can tell everything's messed up.
02:28:27
◼
►
This is going to weigh on kids,
02:28:29
◼
►
even if it doesn't seem visible right now.
02:28:31
◼
►
Like, they're perceiving what's going on.
02:28:34
◼
►
I don't wanna be the parent who, during this time,
02:28:36
◼
►
forced my kid to be doing schoolwork all day.
02:28:39
◼
►
It's a weird time for everyone.
02:28:41
◼
►
Pretending like everything is fine,
02:28:43
◼
►
I think is both a little inhumane in certain ways,
02:28:46
◼
►
if it's like forcing them to do work they don't wanna do,
02:28:49
◼
►
and also, I think it's ineffective.
02:28:52
◼
►
That like, we're not hiding anything.
02:28:54
◼
►
They can tell.
02:28:55
◼
►
They know stuff is wrong.
02:28:57
◼
►
They know something's up,
02:28:59
◼
►
no matter how young or old they are.
02:29:01
◼
►
They know this is a big deal, and it's not good.
02:29:04
◼
►
And wherever this goes from here,
02:29:06
◼
►
we don't know where it's gonna go from here.
02:29:08
◼
►
We don't know how bad it's gonna be,
02:29:09
◼
►
or the economic fallout, and whatever else yet.
02:29:11
◼
►
We don't know all that yet, but we know it's not good.
02:29:14
◼
►
And I think letting our kid play Minecraft all day
02:29:18
◼
►
for a few weeks, that's not a bad thing,
02:29:21
◼
►
in the face of all that.
02:29:23
◼
►
- Yeah, I couldn't agree more.
02:29:24
◼
►
And one thing, you mentioned this a moment ago,
02:29:27
◼
►
and I know you come from a family of teachers,
02:29:30
◼
►
and Aaron taught up until we had Declan.
02:29:33
◼
►
One thing that I hope comes of this,
02:29:36
◼
►
if we all make it across the other,
02:29:38
◼
►
make it to the other end okay,
02:29:39
◼
►
one thing I hope that comes of this absolute tragedy
02:29:42
◼
►
is that people appreciate teachers,
02:29:44
◼
►
at least a little bit more.
02:29:45
◼
►
Because here in America anyway,
02:29:47
◼
►
teachers are generally considered
02:29:49
◼
►
to be glorified babysitters by a lot of people,
02:29:51
◼
►
which is atrocious and wrong and terrible and disgusting.
02:29:55
◼
►
But in so many communities across so many different
02:29:59
◼
►
racial and economic boundaries,
02:30:01
◼
►
it seems like teachers are just kind of babysitters.
02:30:04
◼
►
And there are teachers that are basically
02:30:07
◼
►
just glorified babysitters,
02:30:08
◼
►
but the overwhelming majority of them
02:30:10
◼
►
are trying exceptionally hard,
02:30:12
◼
►
and doing so for almost no reward of any sort,
02:30:16
◼
►
and typically are getting beat on
02:30:18
◼
►
for the choices they make.
02:30:19
◼
►
It's just a thankless, thankless, awful job to take on
02:30:23
◼
►
that these people do, to some degree,
02:30:25
◼
►
out of the goodness of their hearts.
02:30:26
◼
►
And it killed me watching the way Aaron got treated
02:30:30
◼
►
when she taught.
02:30:31
◼
►
And I hope that now your average parent
02:30:36
◼
►
does a better job of understanding that teaching is hard.
02:30:40
◼
►
Teaching is a very hard job, and it's important.
02:30:43
◼
►
And at least in America,
02:30:45
◼
►
we don't value the teachers nearly as much as we should.
02:30:49
◼
►
But to hopefully not end on a bad note,
02:30:51
◼
►
end on a happier note,
02:30:52
◼
►
we've definitely been watching more movies as a family
02:30:54
◼
►
than we usually do.
02:30:56
◼
►
You guys are playing more "Minecraft" as a family
02:30:58
◼
►
than you usually do or did.
02:31:00
◼
►
- All three of us are playing.
02:31:01
◼
►
Hops would play if he had hands.
02:31:03
◼
►
- And so I think that that togetherness,
02:31:06
◼
►
while sometimes maybe a little too much,
02:31:08
◼
►
or at least in our family,
02:31:09
◼
►
we can get a little on edge from time to time.
02:31:11
◼
►
But generally speaking,
02:31:13
◼
►
the one silver lining from all of this
02:31:15
◼
►
is that we are getting to have some time with each other
02:31:18
◼
►
that maybe we wouldn't have had otherwise.
02:31:20
◼
►
And I am thankful for that,
02:31:21
◼
►
even though I wish it was for a different reason.
02:31:24
◼
►
- Yeah, in my darker moments,
02:31:27
◼
►
I keep only seeing the bad side of this for me.
02:31:29
◼
►
My rational mind says,
02:31:31
◼
►
I'm incredibly lucky
02:31:32
◼
►
that I have not immediately lost my job, right?
02:31:36
◼
►
And that I already did do a lot of working from home,
02:31:39
◼
►
and that I'm able to do my job from home.
02:31:40
◼
►
And these are all reasons I am incredibly, incredibly lucky.
02:31:45
◼
►
But then I read about people who are just sitting at home
02:31:48
◼
►
watching, catching up on movies and reading books
02:31:52
◼
►
and trying to relax and de-stress
02:31:54
◼
►
from the anxiety that we're all feeling.
02:31:55
◼
►
And it's like, I'm doing all the same things
02:31:58
◼
►
that I always did, plus being anxious all the time.
02:32:02
◼
►
- I couldn't agree more.
02:32:03
◼
►
I could not agree more.
02:32:04
◼
►
- No, I don't get any kind of break.
02:32:05
◼
►
And it's the worst kind of thing.
02:32:07
◼
►
I should just be counting my blessings.
02:32:09
◼
►
Yeah, oh, boo-hoo, you still have your job.
02:32:12
◼
►
Trust me, I would vastly prefer still having my job.
02:32:14
◼
►
But a tiny, tiny part of me
02:32:16
◼
►
that doesn't really make any sense says,
02:32:18
◼
►
"Why don't I get to sit around and read a book?"
02:32:21
◼
►
But you know, that part of me is wrong and should shop.
02:32:24
◼
►
- Well, look, the problem is this affects everyone
02:32:28
◼
►
in so many different ways, right?
02:32:30
◼
►
Think about, we said that we're lucky
02:32:33
◼
►
that we have jobs that we can do from home.
02:32:36
◼
►
We're lucky that we didn't just suddenly
02:32:39
◼
►
lose all of our income,
02:32:40
◼
►
and that we have stable homes
02:32:45
◼
►
and stable family lives
02:32:47
◼
►
that we're not gonna all have significant problems
02:32:51
◼
►
by being at home for a few weeks.
02:32:53
◼
►
Those are all some really big conditions
02:32:55
◼
►
that most people don't have all of those.
02:32:59
◼
►
And even for us, it's hard, right?
02:33:01
◼
►
So yeah, it's hard for everyone.
02:33:04
◼
►
We have the best setups that we could possibly have, really.
02:33:08
◼
►
In reality, compared to the world,
02:33:10
◼
►
we are incredibly lucky with the setups
02:33:12
◼
►
that three of us have and the situations we're in.
02:33:15
◼
►
But it's even hard for us, right?
02:33:17
◼
►
So imagine how hard it is for everyone else.
02:33:19
◼
►
That's why I'm saying, if you wanna make your kid
02:33:22
◼
►
play Minecraft or watch movies all day, that's fine.
02:33:26
◼
►
Because if that's what they wanna do,
02:33:28
◼
►
again, I do think there's some value
02:33:31
◼
►
in doing these things with them, which is why I do it.
02:33:34
◼
►
Also, I'm into Minecraft right now,
02:33:35
◼
►
but that's a different story.
02:33:37
◼
►
But I think it's totally fine.
02:33:40
◼
►
Don't beat yourself up, parents especially,
02:33:42
◼
►
don't beat yourself up for all the things you're not doing.
02:33:45
◼
►
Don't beat yourself up for all of the academic value
02:33:49
◼
►
that your kids are missing out on.
02:33:50
◼
►
And I have to kinda tell myself
02:33:55
◼
►
to stop beating myself up for not programming
02:33:57
◼
►
almost at all during this time.
02:33:59
◼
►
But it's a weird time.
02:34:02
◼
►
And it's okay to not try to pretend
02:34:05
◼
►
like everything's normal.
02:34:06
◼
►
And it's okay to do things differently
02:34:08
◼
►
and to let certain things be untended to for a while
02:34:12
◼
►
because things are different
02:34:14
◼
►
and you have a different workload.
02:34:16
◼
►
And God, I really appreciate teachers so much.
02:34:22
◼
►
- I did put out a few releases of Switch Glass too.
02:34:24
◼
►
So me and Casey are way ahead of you
02:34:26
◼
►
on the software update front.
02:34:28
◼
►
High five, John.
02:34:29
◼
►
- Well, I build an awesome house in the Minecraft server
02:34:31
◼
►
but I do by Friday.
02:34:33
◼
►
- Oh, but you are ahead of us
02:34:34
◼
►
in the Minecraft building front, that's for sure.