PodSearch

ATP

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:24   (laughs)

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:01   (laughing)

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:50   (laughing)

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:23   (laughing)

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:51   (laughing)

00:24:53   - So let's talk about how this works.

00:24:55   (laughing)

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:16   (laughing)

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:55   (laughing)

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:24   (laughing)

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:28   - I have.

00:46:30   - Do you wanna talk about that or is that too geeky

00:46:34   even for John Syracuso?

00:46:35   (laughing)

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:44   things.

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:19   [LAUGHTER]

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:58   instead.

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:52:59   It's--

00:52:59   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:55   Seriously.

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:01   Yes.

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:05   Yes.

00:56:06   So there's progress being made in all fronts.

00:56:09   Wow.

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   like that.

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:40   Oh, OK.

00:56:41   Sci-5 as a company has a couple of different things

00:56:43   going on.

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:56   (laughing)

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:57   Right?

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:19   - I'll see.

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:51   (laughing)

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:46   Right?

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:15   You know?

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   Right?

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:03   Right?

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:30   - Exactly.

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:57   (laughing)

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:31   (laughing)

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:36   - Yeah.

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:38   (laughing)

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:43   Fine.

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:57   Yeah, yeah.

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:11   it.

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   there.

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:29   It's hard.

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:43   Rust-like.

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:13   Right.

01:45:14   And so those are inextricably tied together, in my opinion.

01:45:16   So--

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:45:59   here--

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   question.

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:09   We'll see.

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   Right.

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:29   you can't--

01:50:30   you add mortar in between that you'd normally fill in between

01:50:33   the bricks.

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:50   has done.

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:54   Absolutely.

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:18   think.

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:33   to work on.

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:56   say so.

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:00   paradigm.

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:29   like that.

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:18   SwiftUI.

02:01:19   And that--

02:01:20   And Catalyst somewhere fits in between.

02:01:22   Nobody's not really sure where.

02:01:23   Right.

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:32   You got 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:45   Yeah.

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   collection.

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   Yeah.

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:35   that great.

02:07:36   Right?

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   over time.

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:33   feedback.

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   [LAUGHTER]

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:19   [LAUGHTER]

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:04   (laughing)

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:28   (laughing)

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:00   (laughing)

02:19:02   - That's where you have the chair evolution process.

02:19:04   - Yes, exactly.

02:19:05   (laughing)

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:29   (laughing)

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:03   (laughing)

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:26   (laughing)

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:04   It's hard.

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:58   (laughing)

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:41   (laughing)

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:02   (laughing)

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:01   (laughing)

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:20   (laughing)

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.

02:34:36   (beeping)