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)