WEBVTT

00:00:00.001 --> 00:00:04.400
On this episode, we're going to weave a thread through three different areas of Python programming

00:00:04.400 --> 00:00:09.360
that at first seem unlikely to have that much in common, yet the core will be the same throughout.

00:00:09.360 --> 00:00:13.420
I think this is a really cool lesson to learn as you get deeper into programming

00:00:13.420 --> 00:00:19.260
and a great story to highlight it. We're going to meet Raveen Kumar, who wrote Python code and

00:00:19.260 --> 00:00:24.500
data science tooling for oil rig tool manufacturers, a rocket company, and a hip

00:00:24.500 --> 00:00:32.020
multi-location restaurant chain. This is Talk Python To Me, episode 270, recorded June 17th, 2020.

00:00:32.020 --> 00:00:50.320
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem,

00:00:50.320 --> 00:00:55.000
and the personalities. This is your host, Michael Kennedy. Follow me on Twitter, where I'm at,

00:00:55.000 --> 00:01:00.300
mkennedy. Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on

00:01:00.300 --> 00:01:05.780
Twitter via at Talk Python. This episode is brought to you by Sentry and Linode. Please check out what

00:01:05.780 --> 00:01:10.080
they're offering during their segments. It really helps support the show. Raveen, welcome to Talk

00:01:10.080 --> 00:01:14.980
Python to Me. Thanks. Glad to be here. I'm glad to have you here. We're going to take a bit of a tour

00:01:14.980 --> 00:01:20.160
through the manufacturing space, and I think it's going to be a lot of fun. Yeah, I think so as well.

00:01:20.160 --> 00:01:23.840
See how the two connect. I didn't see it at first, but we'll talk about that, I'm sure.

00:01:23.840 --> 00:01:29.800
Yeah, we absolutely will. Yeah, so you've worked with, you know, I think a little bit different than

00:01:29.800 --> 00:01:36.360
a lot of software engineers. You've worked with physical things plus software. Yes, yes. So much

00:01:36.360 --> 00:01:40.760
so that I'd say none of my jobs, the software matter. Nobody bought the software at any of my jobs.

00:01:40.760 --> 00:01:45.280
People bought the physical thing, so. Right. You didn't have like a user funnel or anything like that?

00:01:45.280 --> 00:01:49.660
Not for the software. Software was particularly all internal, so it's just a different dynamic.

00:01:49.660 --> 00:01:54.100
Exactly. Yeah, I spent a lot of time actually building internal software as well, and it's

00:01:54.100 --> 00:01:58.580
actually pretty rewarding and pretty fun, I think. I think so too. Yeah. Now, before we get to that,

00:01:58.580 --> 00:02:02.500
though, let's jump in with your story and your background. How did you get into programming

00:02:02.500 --> 00:02:07.500
in Python? If we go programming, I guess I didn't have much of a choice. My dad was a network engineer

00:02:07.500 --> 00:02:12.380
in the 70s and 80s and 90s, so when I grew up, there were computers all around. In fact,

00:02:12.540 --> 00:02:16.180
there was just a computer when I was a kid, and to get to video games and things like that, I had to

00:02:16.180 --> 00:02:20.740
type stuff into a DOS 3.1 terminal. So my parents always tell me, you see toddlers these days

00:02:20.740 --> 00:02:24.660
like touching buttons on iPads and things like, or no buttons, but touching the screen on iPads and

00:02:24.660 --> 00:02:28.900
getting through it. That was, I guess that was me as a kid. So before I knew what computers were,

00:02:28.900 --> 00:02:33.660
I was using them. And so that just progressed through my teenage years. I wouldn't call that

00:02:33.660 --> 00:02:37.580
programming. I'd say more of it was just scripting, like changing a value here, changing a value there,

00:02:37.580 --> 00:02:42.520
using a terminal and things like that. The programming in Bonafide came at my first job.

00:02:42.520 --> 00:02:44.340
I think that's when I really started diving in.

00:02:44.340 --> 00:02:49.620
Even though you don't call it programming. And for me, I spent my high school years

00:02:49.620 --> 00:02:57.480
and early college, I guess, as well, being a really big fan and fanatic of computers.

00:02:57.480 --> 00:02:58.200
Okay.

00:02:58.200 --> 00:03:02.460
We would do all sorts of stuff on the internet. And back when getting on the internet was

00:03:02.460 --> 00:03:06.360
actually a challenge, you'd have to find a way to dial it to somewhere.

00:03:06.360 --> 00:03:13.280
Yeah. You'd have to, you know, somehow set up Telnet on Windows back then, you know, like

00:03:13.280 --> 00:03:18.700
use like a bunch of weird tools to like piece it together. And I just loved it so much, but I never

00:03:18.700 --> 00:03:24.560
really thought of myself as a programmer, but looking back, developing that comfort with computers,

00:03:24.560 --> 00:03:30.780
just being like quote, good with computers made becoming a programmer much easier because it's,

00:03:30.780 --> 00:03:34.760
it wasn't like, Oh, well, these computers are weird things. It's like, no, no, I love them.

00:03:34.760 --> 00:03:37.860
I just never thought I could really program them, but apparently this is how you do it.

00:03:37.860 --> 00:03:38.540
And it's not so bad.

00:03:38.540 --> 00:03:41.060
Yeah, that's exactly right. It's the same experience I had.

00:03:41.060 --> 00:03:44.600
Yeah. And I think typing in the little games actually takes it to the next level, right?

00:03:44.600 --> 00:03:51.700
But you mentioned floppy disks. I remember having stacks of like 3.25 or 3.5, whatever it was,

00:03:51.700 --> 00:03:56.920
floppy disks, those little hard ones, you know, floppy on the inside with a hard shell, I guess.

00:03:56.920 --> 00:03:57.300
Yeah.

00:03:57.300 --> 00:04:02.420
Just to get one program on, onto the computer. Like I know people nowadays who maybe didn't really

00:04:02.420 --> 00:04:06.400
have to live through those in practical ways, like a game you might want to play. That could

00:04:06.400 --> 00:04:10.740
have been like 20 disks and you'd have to set there and it would say, now put in disk seven of,

00:04:10.740 --> 00:04:15.220
you know, 20. Like, okay, right, right, right, right. Here we go. What a crazy time, huh?

00:04:15.220 --> 00:04:17.720
Yeah. It's so funny. You mentioned that. Cause that's, that was my dad's,

00:04:17.720 --> 00:04:22.060
that was maybe my first programming job is my dad would give me a stack of like the six red hat

00:04:22.060 --> 00:04:26.980
disks, flop floppy disks. Or like if it was 3.1, I think it was like eight or nine. And he'd be like,

00:04:26.980 --> 00:04:30.060
all right, you're just going to sit here. And when it says, push the disk, you're going to push this

00:04:30.060 --> 00:04:34.940
button, grab that out and put the next one in. I would just sit there for like an hour as a kid,

00:04:34.940 --> 00:04:38.060
just watching the screen and watching like the loading bar and everything going. And then he'd

00:04:38.060 --> 00:04:41.620
be like, insert floppy too. And I would put that one in. Then my dad would come check on me. Did

00:04:41.620 --> 00:04:46.000
you do it? Did you not do it? And that's my, maybe my, the first, like the first set of tasks that I

00:04:46.000 --> 00:04:49.360
remember where a supervisor was telling me to, to program this computer.

00:04:49.360 --> 00:04:53.180
Yeah. Yeah. You were, you were working on computers. That's pretty crazy. And now that's like 10

00:04:53.180 --> 00:04:58.740
seconds to download that. Totally different world. It's a fantastic world, but, yeah,

00:04:58.740 --> 00:05:03.020
very different. All right. So this is how you got started in programming. How about Python?

00:05:03.020 --> 00:05:07.900
So Python is probably bifurcated in the same way. I think I remember seeing bits and pieces like Python

00:05:07.900 --> 00:05:12.280
one, even on some of, I used to use Mandrake Linux, which I don't even think is a thing anymore,

00:05:12.280 --> 00:05:17.340
but I had Python on there. But again, it was scripting. It was, I remember it was like something

00:05:17.340 --> 00:05:21.180
to set up at the background or whatever, and Python would set the color. So I went into Python

00:05:21.180 --> 00:05:24.680
script and would change the color. So it went from, from gray to green. What I liked as a teenager,

00:05:24.680 --> 00:05:29.960
green or whatever. Python again, bonafide came in at my first job. And when I was thinking through

00:05:29.960 --> 00:05:34.500
programming languages and I remember like Python, a lot of people say Python's easy reason. I remember

00:05:34.500 --> 00:05:39.840
it was the easiest one to use and read. So I just picked that one and it, it's stuck.

00:05:39.840 --> 00:05:44.640
Yeah. Yeah. I would say you've been definitely doing a lot of stuff with Python after that.

00:05:44.640 --> 00:05:46.600
How about today? What are you doing day to day?

00:05:46.600 --> 00:05:50.620
So day to day, I have maybe two things I do with Python. So I have the, I have the paid job.

00:05:50.620 --> 00:05:55.580
I work at sweetgreen and I use Python to understand how I'll say, I'm going to say

00:05:55.580 --> 00:06:00.840
restaurants work and entrees and salad production goes and we'll get, I'm sure we're going to get in

00:06:00.840 --> 00:06:07.780
all that, but it's a very data science-y focused area of Python. And outside of paid work, I'm a

00:06:07.780 --> 00:06:13.340
contributor to IREs and PyMC, which are two Bayesian libraries written in Python. So outside of work,

00:06:13.340 --> 00:06:17.620
I'm spending a lot of time on GitHub and working with a bunch of these folks, a bunch of folks

00:06:17.620 --> 00:06:21.320
around the globe to make these packages that are widely used by the Bayesian community.

00:06:21.320 --> 00:06:29.960
Right. So give us the high level story of how Bayesian analysis and whatnot factors into Python

00:06:29.960 --> 00:06:35.620
and data science. Like I had Max Klar on for a while. We talked about it in a little more depth,

00:06:35.620 --> 00:06:36.360
but that was a while ago.

00:06:36.360 --> 00:06:41.000
Yeah. So high level, Bayesian maybe seems like a cool new thing, but it's actually super old.

00:06:41.420 --> 00:06:46.160
The guy, Thomas Bayes, he was born in around the 1700s in England. So it's way even before

00:06:46.160 --> 00:06:52.340
computers existed. And he had this particular idea of probability. That's not the one that's taught in,

00:06:52.340 --> 00:06:57.660
at least in American schools. It's where your data is what you know and is fixed and everything else

00:06:57.660 --> 00:07:02.540
about the world is random versus the train of thought that usually goes on as frequentist mentality,

00:07:02.540 --> 00:07:06.520
where your parameters in the model are fixed and your data is random, your dice rolls are random,

00:07:06.520 --> 00:07:08.140
your coin flips are random and things like that.

00:07:08.260 --> 00:07:12.300
The reason it comes into Python is that the formula is very simple. It's just four terms,

00:07:12.300 --> 00:07:16.000
but it turns out it's super hard to solve by hand and you actually can't solve it by hand

00:07:16.000 --> 00:07:20.440
very well for a large class of problems. But if you combine some clever algorithms

00:07:20.440 --> 00:07:26.160
and the Bayes theorem together, you can start doing very, very complex things. So Python has a,

00:07:26.160 --> 00:07:30.580
I'd say, active and robust ecosystem where a lot of people are taking these algorithms,

00:07:30.580 --> 00:07:34.740
implementing in Python and making these nice libraries around them. So normal people like

00:07:34.740 --> 00:07:37.240
yourselves can use Bayes theorem and not have to think about it too much.

00:07:37.240 --> 00:07:41.800
Right. It doesn't feel necessarily like statistics. It feels like a data science,

00:07:41.800 --> 00:07:42.420
a librarian.

00:07:42.420 --> 00:07:47.060
Yeah, exactly. Yeah. Maybe making Bayes theorem data science is the tagline I should use.

00:07:47.060 --> 00:07:52.500
Yeah, yeah, for sure. That's a good way to put it. So tell me if this sort of understanding is

00:07:52.500 --> 00:07:58.120
correct. It feels to me like Bayes analysis is a little bit better at making predictions when you

00:07:58.120 --> 00:08:03.700
can't run and like say the training on a bunch of data that you already have, right? It's like one

00:08:03.700 --> 00:08:08.700
thing to say, well, we've got 60,000 mammograms and we know the outcomes of all of them. So let's

00:08:08.700 --> 00:08:14.040
train up a model on it. It's another to say, we're trying to build a rocket. We've never done that.

00:08:14.040 --> 00:08:19.140
We need to predict how it's going or how it's, you know, make predictions about how like the supply

00:08:19.140 --> 00:08:23.540
chain is working and whatnot. Is that good general rule of thumb or am I off the mark there?

00:08:23.540 --> 00:08:27.880
That's the way that I got into Bayes theorem was as I was getting into Python, I saw these cool

00:08:27.880 --> 00:08:31.540
people doing stuff with neural nets and AB testing and all that. But they're like, oh, you're Google

00:08:31.540 --> 00:08:37.380
and 10 million people have visited your site in the last like one hour. Or you've got this image with a

00:08:37.380 --> 00:08:40.820
ton of information in it and you've got 10,000 of them and they're all labeled. And I was sitting here

00:08:40.820 --> 00:08:45.160
at the time at SpaceX and I was like, I've only got like 30 rocket launches. Like I don't have

00:08:45.160 --> 00:08:48.600
actually the funny way to put this is if you go to scikit-learn, there's a flow chart of machine

00:08:48.600 --> 00:08:52.520
learning workflows. And it's like, if you have less than like a thousand samples, you need to get more

00:08:52.520 --> 00:08:57.760
data. I'm like, what am I going to do? Launch at 900 more rockets? Like I can't AB test rockets. So

00:08:57.760 --> 00:09:02.360
stumble into Bayes theorem. Yeah, that's awesome. And I remember there was this interview, this famous

00:09:02.360 --> 00:09:09.560
interview from Elon Musk after the third rocket failure. Yeah, I think the interview was on the fourth

00:09:09.560 --> 00:09:15.880
rocket launch, the first successful one that they had. He was saying, basically, this was our last chance,

00:09:15.880 --> 00:09:20.740
right? We can't just keep launching these many, many million dollar rockets and failing or just

00:09:20.740 --> 00:09:26.640
having them blow up indefinitely, right? It's not like a government funded thing where we're just

00:09:26.640 --> 00:09:30.860
going to do it until you get it working, right? So you can't take that many shots at it.

00:09:30.860 --> 00:09:35.440
That's true of all manufacturing. So, and I should make the general disclaimer that I'm not representing

00:09:35.440 --> 00:09:38.420
any of the companies that I'm talking about. I happen to work for them and I'm an individual. So

00:09:38.420 --> 00:09:42.680
these are all my experiences and opinions, but that's generally true of all manufacturing is

00:09:42.840 --> 00:09:46.720
we're used to trying in Python or even programming general. You can try things out,

00:09:46.720 --> 00:09:50.120
get an exception and just try it again, like no harm, no foul. But in manufacturing,

00:09:50.120 --> 00:09:53.720
it takes a lot of time and money to make these things. And it's hard to go to your boss and say,

00:09:53.720 --> 00:09:57.860
I actually need to make 10,000 of these randomly to figure out which 100 of them work.

00:09:57.860 --> 00:10:01.120
He or she will just be like, get out. We don't, we don't have the budget for that.

00:10:01.120 --> 00:10:05.240
You can't just make a hundred, salads or whatever wrong just to see whether the customers like

00:10:05.240 --> 00:10:08.480
them or not. That's not a good way to build a physical business.

00:10:08.480 --> 00:10:12.420
Yeah, absolutely. So we're going to touch on some of your experiences in a couple of industries.

00:10:12.420 --> 00:10:17.320
We won't go into anything proprietary at SpaceX or anything like that, but we can talk a little

00:10:17.320 --> 00:10:22.660
bit as like some of the tools and stuff, maybe some of the workflows. But before we do, you know,

00:10:22.660 --> 00:10:26.300
you mentioned that you work on a couple of open source libraries. Do you want to talk about those

00:10:26.300 --> 00:10:30.480
two, each one for a little bit? Just give people a background and how they fit into this whole

00:10:30.480 --> 00:10:32.620
supply chain data science story?

00:10:32.760 --> 00:10:36.520
Yeah, exactly. So I work on, like I said, Pimesee and Arby's. Those are both,

00:10:36.520 --> 00:10:41.400
Bayesian libraries. The Bayesian way of doing statistics and the, and the tooling around

00:10:41.400 --> 00:10:46.040
it is fits very well with the type of work that I need to do in ways that like neural networks

00:10:46.040 --> 00:10:50.940
and random force and those don't always. But I mean, in particular too, I want to say the,

00:10:50.940 --> 00:10:54.440
the communities around those libraries, when we talk about Python, not just as a language,

00:10:54.440 --> 00:10:59.380
but as a community was, was extremely nice. So, I just, I find it professionally rewarding.

00:10:59.380 --> 00:11:03.260
I find it, I need it professionally, but then it's also just been rewarding to go in and give

00:11:03.260 --> 00:11:07.240
back to these libraries. I think it's nice people forget, but Python's not a corporation. Like

00:11:07.240 --> 00:11:12.880
it's not like all these people making it, make money or even, even the library. So I'd use Python

00:11:12.880 --> 00:11:17.520
for a while and I felt like, you know what I need, this is the way that I can, I can give back

00:11:17.520 --> 00:11:19.900
and be a part of it more than just using it at work.

00:11:19.900 --> 00:11:25.600
Yeah. I think that's really good. I wish more companies had a more direct belief that they should

00:11:25.600 --> 00:11:28.940
go back and support libraries like this, but it's still really good that, you know,

00:11:29.020 --> 00:11:34.160
companies at least let people like you work on them because I've seen contracts or arrangements

00:11:34.160 --> 00:11:39.900
where it's basically like, I don't know, it, it seems almost like it should be illegal,

00:11:39.900 --> 00:11:46.140
but it's like everything that you think, everything that you imagine, everything that you might touch,

00:11:46.140 --> 00:11:51.100
even if you're not at work, we own that, right? That's us. That's ours. You know,

00:11:51.100 --> 00:11:56.380
if you have an idea for a new product, that's anywhere near where you work conceptually and you have it,

00:11:56.720 --> 00:12:01.100
even if you're not at work, you know what, because you're employed by us, that's our,

00:12:01.100 --> 00:12:05.800
right? That seems just crazy to me, but I've seen stuff like that. And you could see how those kinds

00:12:05.800 --> 00:12:08.700
of arrangements would limit open source contributions.

00:12:08.940 --> 00:12:12.300
Yeah. No, that it was actually a primary consideration in my, my last job search here,

00:12:12.300 --> 00:12:15.960
particularly when I was going to Sweetgreen, the interviews that like the FANG companies that are the

00:12:15.960 --> 00:12:19.900
famous ones, but some of the contracts were worded like that, that any program, anything you do is our

00:12:19.900 --> 00:12:24.300
property. When I had the conversation with my prior boss at Sweetgreen, I don't think people know this,

00:12:24.300 --> 00:12:27.580
but Sweetgreen is becoming a very technology focused company. Actually it is a very technology

00:12:27.580 --> 00:12:29.400
focused company and I was just increasing that way.

00:12:29.400 --> 00:12:34.000
Tell me a little bit about it. Cause I don't, I don't know if Sweetgreen is something I'm aware of,

00:12:34.060 --> 00:12:35.420
or at least it's in the Pacific Northwest.

00:12:35.420 --> 00:12:40.500
Okay. Yeah. So Sweetgreen is a restaurant company is probably what most people see it as.

00:12:40.500 --> 00:12:44.800
The mission of Sweetgreen at a high level is to connect people to real food. So the purpose of

00:12:44.800 --> 00:12:49.040
the company is not necessarily technology. The purpose of the company is to get healthy food

00:12:49.040 --> 00:12:54.580
to people like sort of a, an inaccessible way. And part of that access more and more is,

00:12:54.580 --> 00:12:59.880
is technology. So part of that access is you are easily able to order off an app and get that

00:12:59.880 --> 00:13:03.540
delivered to you at your house. And so it's a very low friction experience. That means that

00:13:03.540 --> 00:13:08.480
you can order healthy food, wherever you're at, not just Domino's or some of the fast food brands,

00:13:08.480 --> 00:13:13.620
but also this is the part that I'm in. It also means that we're making it in an efficient manner.

00:13:13.620 --> 00:13:17.000
Like we're not wasting a lot of food, which I'll talk about in the supply chain stuff later. We're not

00:13:17.000 --> 00:13:21.260
under preparing food. So when you order, you don't have what you want. And that's where the data

00:13:21.260 --> 00:13:25.780
science-y sort of components come in is using the math and the data to make sure that we have the right

00:13:25.780 --> 00:13:29.780
amount of healthy food. So every day when you, Michael want to get whatever you want,

00:13:29.780 --> 00:13:33.540
it's there and it's available and you can get it at your convenience. That's the idea. And technology

00:13:33.540 --> 00:13:37.080
just happens to be a huge enabler in that particular space.

00:13:37.080 --> 00:13:42.900
Yeah. I definitely could see how that, that works. So you were talking about the contracts and some of

00:13:42.900 --> 00:13:50.940
these overly possessive, I don't know, possessive. Yeah, yeah, yeah, exactly. So sweet greens a little

00:13:50.940 --> 00:13:54.940
bit more open to letting you work on things that basically support the business anyway.

00:13:55.160 --> 00:13:58.500
They let me write it. They let me write it as prior arts in my contract and they were accepting

00:13:58.500 --> 00:14:01.880
that. And so I was like, all right, this is a company that seems to really want to give back

00:14:01.880 --> 00:14:06.400
to the community and things like that in their mission. But they, enough so that they let me

00:14:06.400 --> 00:14:09.200
word it in a contract, which is what mattered to me. And I was real thrilled about that.

00:14:09.200 --> 00:14:12.680
I don't get to spend a ton of time developing like per se, like I still have a ton of work to do at

00:14:12.680 --> 00:14:17.560
work, but they were not aggressive about it, which was very, very nice. And I appreciate that.

00:14:17.560 --> 00:14:18.500
And that's why I work at sweet greens.

00:14:18.500 --> 00:14:24.580
I, yeah, I think that's a really cool thing. And more companies should be doing it because ultimately it's

00:14:24.580 --> 00:14:29.800
only going to help them if the tools that you use are better. And if you work on them in your

00:14:29.800 --> 00:14:35.100
spare time, it's not like you're charging them for, you know, that PR that you did on the weekend.

00:14:35.100 --> 00:14:35.480
Yeah.

00:14:35.480 --> 00:14:39.760
They should just see that as a bonus, right? I guess. But yeah, it's, I know where the

00:14:39.760 --> 00:14:45.220
basic idea of, Hey, you can't go create these other things while you work here. I mean, that kind

00:14:45.220 --> 00:14:49.800
of makes sense in some sense. You can't go create a competing company and like incubate it until you're

00:14:49.800 --> 00:14:53.960
ready. But at the same time, you know, it's corporations don't own people.

00:14:53.960 --> 00:14:55.020
No, no.

00:14:55.020 --> 00:14:58.200
They shouldn't anyway, right? So like, but a lot of them kind of treat it a little bit like that,

00:14:58.200 --> 00:14:58.700
which is crazy.

00:14:58.700 --> 00:15:02.060
Yeah. And I would say for the corporations that are listening, like I'm more compelled to work at,

00:15:02.060 --> 00:15:05.940
like, let's say Microsoft or some of these organizations, like particularly Microsoft these

00:15:05.940 --> 00:15:09.940
days, because it seems like they're allowing the developers to work on open source and things like

00:15:09.940 --> 00:15:15.420
that. And that is a huge pro to me as a tech worker to go to a company that supports the

00:15:15.420 --> 00:15:19.760
community and doesn't just take, take the code and hide it away in their private repositories.

00:15:19.760 --> 00:15:20.720
Yeah, absolutely.

00:15:20.720 --> 00:15:27.660
This portion of Talk Python To Me is brought to you by Sentry. How would you like to remove a little

00:15:27.660 --> 00:15:33.060
stress from your life? Do you worry that users may be having difficulties or are encountering errors

00:15:33.060 --> 00:15:38.480
with your app right now? Would you even know it until they send that support email? How much better

00:15:38.480 --> 00:15:43.700
would it be to have the error details immediately sent to you, including the call stack and values of

00:15:43.700 --> 00:15:49.880
local variables as well as the active user stored in the report? With Sentry, this is not only possible,

00:15:49.880 --> 00:15:55.940
it's simple and free. In fact, we use Sentry on all the Talk Python web properties. We've actually

00:15:55.940 --> 00:16:01.360
fixed a bug triggered by our user and had the upgrade ready to roll out as we got the support email.

00:16:01.360 --> 00:16:05.620
That was a great email to write back. We saw your error and have already rolled out the fix.

00:16:05.620 --> 00:16:11.060
Imagine their surprise. Surprise and delight your users today. Create your free account at

00:16:11.060 --> 00:16:17.360
 talkpython.fm/sentry and track up to 5,000 errors a month across multiple projects for free.

00:16:17.360 --> 00:16:24.460
And if you use the code talkpython, all one word, it's good for two free months of Sentry's team plan,

00:16:24.460 --> 00:16:29.580
which will give you up to 20 times as many monthly events and some other features. So create that free

00:16:29.580 --> 00:16:30.360
account today.

00:16:32.500 --> 00:16:36.580
So one thing I wanted to do is we're sort of thinking about some of these ideas here. I wanted

00:16:36.580 --> 00:16:41.480
to kind of get your opinion looking back on an episode I recently had. I recently had Jacqueline

00:16:41.480 --> 00:16:46.620
and Emily on to talk about careers in data science, this book that they wrote. And it's a super good

00:16:46.620 --> 00:16:51.160
book, like sort of outlining the different types of companies that you might work at. And I could see

00:16:51.160 --> 00:16:57.540
Sweetgreen being like one of the prototypical types of companies as well as SpaceX and other ones.

00:16:58.100 --> 00:17:05.160
And in there, they said, look, data science is kind of three different areas, you know, three, maybe,

00:17:05.160 --> 00:17:08.840
maybe you could find different distinctions, but they broke it into like different areas. Look,

00:17:08.840 --> 00:17:15.380
there's this, this group of people that does analytics, where they create dashboards and reports to deliver

00:17:15.380 --> 00:17:20.400
data. Or there's people that do machine learning that create models and put them into production. And then there's

00:17:20.400 --> 00:17:27.960
decision science, which basically helps make product recommendations like Netflix and whatnot. And it sort

00:17:27.960 --> 00:17:33.000
of sounds like you've been a little bit in the analytics side of things, at least with that

00:17:33.000 --> 00:17:33.860
categorization.

00:17:33.860 --> 00:17:38.880
So I would say my career has progressed through these. I did analytics at the start because it's the

00:17:38.880 --> 00:17:45.240
easiest one and the most obvious one. I tried at the companies I was at, I tried using machine

00:17:45.240 --> 00:17:51.040
learning in an NOV, which is my first company and SpaceX, but didn't wasn't really good fit there.

00:17:51.040 --> 00:17:55.260
What the constant threat has been has been decision science for me, particularly the thing I do the

00:17:55.260 --> 00:18:00.600
most now is use programming data to help somebody make a decision. It could be a person in the

00:18:00.600 --> 00:18:06.380
restaurant. It could be an executive. It could be someone at my level, but how do I take all the

00:18:06.380 --> 00:18:10.640
information we have and package it in a way that helps that one person make a more informed decision

00:18:10.640 --> 00:18:14.320
about whether to buy, whether or not to buy, whether to do this, whether to do that.

00:18:14.320 --> 00:18:19.840
Yeah. And I guess also one of the main themes is sort of the supply chain side of things, right?

00:18:19.840 --> 00:18:24.740
So let's maybe just set the stage of the three different places where you went through some of

00:18:24.740 --> 00:18:29.320
these experiences, right? So you started out in heavy manufacturing where you were working

00:18:29.320 --> 00:18:34.560
at a company that built tools for oil and gas exploration or something like that, right?

00:18:34.560 --> 00:18:36.340
Yeah. Yep. That's exactly right.

00:18:36.340 --> 00:18:39.640
Okay. And then this little company in LA called SpaceX.

00:18:39.640 --> 00:18:43.200
Yeah. I don't know if a lot of people have heard of it. It hasn't been on the news, but yeah.

00:18:43.200 --> 00:18:44.320
It's a rocket company.

00:18:44.320 --> 00:18:48.020
Fourth of July all the time. Pretty awesome. And then Sweetgreen now.

00:18:48.020 --> 00:18:48.300
Yeah.

00:18:48.300 --> 00:18:54.360
So maybe give us a sense of the types of stuff that you did at each of those companies,

00:18:54.360 --> 00:18:56.620
just like the high level stuff.

00:18:56.720 --> 00:19:00.220
And I think it follows like my career progression and sort of what the framework that you laid out

00:19:00.220 --> 00:19:03.940
earlier. So first job was NOV. And that's of course, when I was the most junior with Python,

00:19:03.940 --> 00:19:08.200
that was largely just analytics. How many parts have we made yesterday? How many parts did we make

00:19:08.200 --> 00:19:13.320
today? What parts did we not make yesterday that we needed to make today? I'd say this was the nexus

00:19:13.320 --> 00:19:19.280
of my programming. The company NOV is like a fortune 100 large company. It's been around for 150 years.

00:19:19.480 --> 00:19:22.620
So people are used to doing things the way they've been doing them for a long time. So

00:19:22.620 --> 00:19:27.780
I was in charge of this manufacturing operation and you would have the list of 20 things you needed to

00:19:27.780 --> 00:19:32.700
make yesterday from the Oracle system. You would have the list of 20 things that you need to make

00:19:32.700 --> 00:19:36.300
today. And some of those would be the same and some of those wouldn't. And what would happen is that

00:19:36.300 --> 00:19:40.100
person would print out, would have yesterday's list from yesterday. They would print out today's list.

00:19:40.100 --> 00:19:44.780
And with a highlighter, they would put them down on a table and highlight the ones that they finished and

00:19:44.780 --> 00:19:48.860
the ones that they didn't finish. And that's the way they would build their reporting to say,

00:19:48.860 --> 00:19:52.940
here's what I completed. Here's what I didn't complete. And I was looking at those like, no way.

00:19:52.940 --> 00:19:57.040
You can do this with, you have to do this with programming. Like you're spending 10 minutes on

00:19:57.040 --> 00:20:01.960
this a day. My job is to make you more efficient. And there's 20 or 30 people doing this across the

00:20:01.960 --> 00:20:07.900
company every day. Like let's just write a Python program that just imports this, does a set subtraction

00:20:07.900 --> 00:20:12.720
and from yesterday to today. And that's where you go. And that was the first application that I had

00:20:12.720 --> 00:20:16.700
was programming can be used in this context to just make things so much more efficient,

00:20:16.700 --> 00:20:20.580
less error prone, and just get these, help these folks do the thing that matters,

00:20:20.580 --> 00:20:23.500
which is build parts and not sit there with a highlighter all day.

00:20:23.500 --> 00:20:29.820
Right. And that's not a super deep programming challenge per se, right? I mean, set and set

00:20:29.820 --> 00:20:32.100
subtractions even built into Python, right? Yeah.

00:20:32.100 --> 00:20:39.260
But at the same time, having that automated, having that real-time visibility, having it,

00:20:39.260 --> 00:20:41.820
you know, be sure that you're not missing something. That's great.

00:20:41.880 --> 00:20:46.820
Yeah. It's huge. And I'd say, even if you don't listen to the rest of this podcast or any other

00:20:46.820 --> 00:20:51.940
episode of Talk Python, like there is a huge amount of work that you can just do with the Python that's

00:20:51.940 --> 00:20:57.640
pre-installed on your computer and the standard library, like import CSV. And there's a ton of

00:20:57.640 --> 00:21:01.800
work that can be done and a ton of utility can be added just with that. I think Scott Hanselman had

00:21:01.800 --> 00:21:05.280
this blog post that I really like called Dark Matter. He has this thing called Dark Matter

00:21:05.280 --> 00:21:09.720
Developers. It's a type of thing, like there's so much of this work that's just out there and people

00:21:09.720 --> 00:21:13.600
are thinking about neural nets and Bayesian and, and, pytest and all these like,

00:21:13.600 --> 00:21:16.440
not big things, but like all these tools and stuff you can use.

00:21:16.440 --> 00:21:21.800
Computer science-y, like sort of advanced developer tools and companies and infrastructure and whatnot,

00:21:21.800 --> 00:21:22.100
right?

00:21:22.100 --> 00:21:27.180
Exactly. Yeah. And you can just do so much just by typing Python in your terminal and getting the

00:21:27.180 --> 00:21:30.640
standard library and just going like, don't feel like you have to jump into everything all at once.

00:21:30.640 --> 00:21:35.340
Like there is a ton of opportunity just at that level. And I call it like Python scripting almost,

00:21:35.500 --> 00:21:38.220
maybe not even programming just a single Python file.

00:21:38.220 --> 00:21:39.920
Right. It might not even have a function.

00:21:39.920 --> 00:21:43.420
Yeah. Doesn't even need to have a function. This one didn't have a function. It was import CSV,

00:21:43.420 --> 00:21:46.540
got the CSV and says distraction and print to a terminal. And that was it.

00:21:46.540 --> 00:21:53.580
That is super cool. I do think that there are so many of these scenarios or low hanging fruit of,

00:21:53.580 --> 00:22:01.300
you know, this thing, I do it all the time. It's error prone. It's slow. And if I didn't have to do it,

00:22:01.460 --> 00:22:06.220
life would be better or if it would just automatically happen. And I've actually seen some of those things

00:22:06.220 --> 00:22:11.300
in my business around, say, running the online courses and stuff, there were some things where it was

00:22:11.300 --> 00:22:16.940
so painful. I'm like, you know, this takes me two to three hours to get a course ready to just

00:22:16.940 --> 00:22:20.860
go through and find like, how long is each video? Right. And put it into the database.

00:22:20.860 --> 00:22:21.240
Yeah.

00:22:21.240 --> 00:22:26.780
All these things. And, you know, I was thinking, well, should I like find a contractor, somebody who would

00:22:26.780 --> 00:22:29.300
go through and do all these things? And then like, what is wrong with me? Why don't I just

00:22:29.300 --> 00:22:35.300
both try to write a program? And now all of these types of things, they take seconds, maybe,

00:22:35.300 --> 00:22:41.800
and it's automatic and it never makes an error. And it really was, you know, like you said, 10 to 20

00:22:41.800 --> 00:22:46.580
lines of code. And so there's things, even if you're a programmer, sometimes you just don't think like

00:22:46.580 --> 00:22:52.460
that actually, I could automate that. And then it would be without error and it would be instant,

00:22:52.460 --> 00:22:57.060
basically. And so there's a ton of low hanging fruit, but especially if you're getting into programming,

00:22:57.060 --> 00:22:58.720
I think there's a lot of options for those.

00:22:58.720 --> 00:23:02.940
Yeah. And I would say this is where I got hooked on Python, because when you start with Java, for

00:23:02.940 --> 00:23:06.880
example, the first thing you hit with is like his main thing. And so I think Brett said this in one

00:23:06.880 --> 00:23:11.000
of the podcasts, Python fits the human brain. Why my human brain at the time was particularly

00:23:11.000 --> 00:23:14.440
manufacturing. Like what the hell is, what is main? Like, I don't, why am I even dealing with this?

00:23:14.440 --> 00:23:18.280
Whereas with Python, I could jump straight into, okay, I've got this list and I've got this list and I can

00:23:18.280 --> 00:23:23.420
subtract them. And it fit my way of thinking. And I've just found that Python has just been like that.

00:23:23.420 --> 00:23:27.940
That's like just enough when you need it. And that was really the ramp into that particular

00:23:27.940 --> 00:23:30.260
language and why I've been in it so long.

00:23:30.260 --> 00:23:35.600
Well, you look at the growth of Python and I think the reason, you know, people compare different

00:23:35.600 --> 00:23:40.200
languages like, well, Java, it's statically typed and has these interfaces and it does this. And

00:23:40.200 --> 00:23:44.740
Python is like this, it's, you know, dynamically typed, but it can have optional type and you could

00:23:44.740 --> 00:23:49.000
treat it. Right. I think you can get over, you think people can overanalyze that. I think

00:23:49.000 --> 00:23:56.420
a large reason why Python is so popular is that story you just told repeats thousands of times a

00:23:56.420 --> 00:24:02.340
day. And, you know, you were like, this is not that complicated. I just need to do this simple

00:24:02.340 --> 00:24:07.200
thing. It's going to let me do this thing, but I'll bet you the stuff you write now is way more involved,

00:24:07.200 --> 00:24:12.260
right? Like it's slowly pulled you in and it didn't make you learn all the computer science things like

00:24:12.260 --> 00:24:18.020
interfaces and compilers and linkers and classes just to do that thing. But probably at some point,

00:24:18.020 --> 00:24:22.780
you're like, Oh, we probably need a function so I can vary this, or maybe I want to use this other

00:24:22.780 --> 00:24:28.560
places. So let's make it a package. And like, it slowly drags you in deeper and deeper. And I feel

00:24:28.560 --> 00:24:33.620
like so many people get started, not even thinking of I'm a developer. They get started as I didn't need

00:24:33.620 --> 00:24:38.340
to do computing. And like, once you're pulled into Python, then you're kind of in its gravitational

00:24:38.340 --> 00:24:43.120
field or whatever. Yeah. Mine was, I'm just tired of doing this stuff in Excel. So how can I do this

00:24:43.120 --> 00:24:47.200
outside of Excel? And Python was like that next, next step.

00:24:47.880 --> 00:24:50.960
So you talked about the automate the boring stuff a little bit. We get back into that some more,

00:24:50.960 --> 00:24:55.740
but setting the high level, SpaceX, what kind of things were you doing there in the supply chain?

00:24:55.740 --> 00:25:00.880
Yeah. So NOV, my job was to just deal with one manufacturing area. It's this part goes in,

00:25:00.880 --> 00:25:05.700
this part goes out. When I got to SpaceX and progressing Python more, my job was now to think

00:25:05.700 --> 00:25:10.040
about the entire supply chain. I don't think about one part anymore. My job is to think about every part

00:25:10.040 --> 00:25:14.540
that goes on to, in this case, the rocket, and figure out when they need to get to the right place at the

00:25:14.540 --> 00:25:21.340
right time. So my thinking went from a small area to a very, very wide, wide area. And where that,

00:25:21.340 --> 00:25:26.340
where Python came to fit with me on that one is it wasn't just set subtraction anymore. Now I needed to,

00:25:26.340 --> 00:25:30.880
I had to think at a higher level. So think about when you guys see a rocket on one of the,

00:25:30.880 --> 00:25:34.360
the live streams at SpaceX or whatever, you guys see one rocket, but the way I see a rocket

00:25:34.360 --> 00:25:38.300
at a big level is I'm just going to go through this real quick. There's with the last dragon launch,

00:25:38.300 --> 00:25:42.420
there's the dragon capsule to make a dragon capsule. You need a trunk and sorry, to make the whole

00:25:42.420 --> 00:25:46.020
dragon. You need it to trunk in the capsule. That's just the top. Then the second stage is

00:25:46.020 --> 00:25:51.680
that middle piece and you need an engine and you need that second stage tank. And then for the

00:25:51.680 --> 00:25:55.880
booster, the bottom part that's got grid fins, there's four of them, there's legs, there's,

00:25:55.880 --> 00:26:00.580
there's multiple stages. And so suddenly this one rocket starts turning into like a hundred pieces.

00:26:00.580 --> 00:26:04.980
The pieces are huge. The smallest piece that I had to plan with my software was the size of a

00:26:04.980 --> 00:26:10.540
refrigerator. And then the rocket gets to 15 stories from that. So how do I take not only this one

00:26:10.540 --> 00:26:15.940
rocket, but every single rocket that SpaceX is building and help someone play what I like to

00:26:15.940 --> 00:26:20.600
call rocket Tetris, both in time and in space that like this piece, this humongous piece is going to

00:26:20.600 --> 00:26:24.400
be here. So we need to move that, this humongous piece here. Then we have the space to move this

00:26:24.400 --> 00:26:28.740
other piece here and over somewhere else. We're moving in all these other things and like link

00:26:28.740 --> 00:26:34.920
together all of these, this basic enormous rocket that has to come together. And my job there.

00:26:34.920 --> 00:26:38.600
I'm sorry. That was, it sounds like an amazing optimization problem because you've got this huge

00:26:38.600 --> 00:26:43.360
factory, but the rocket pieces have to be assembled in different areas, but also you've got to have

00:26:43.360 --> 00:26:48.620
the individual parts arrive on time. You've got to have enough of them, but you can't just go buy

00:26:48.620 --> 00:26:53.660
like three extra engines. Yeah. Right. Yeah. They take a while to make. Turns out it takes, it takes a bit

00:26:53.660 --> 00:26:58.120
of time to make a rocket. So you've got to think ahead. Yeah. Yeah. It was, and this is an

00:26:58.120 --> 00:27:01.480
interesting one because, and this is, I should mention this Python wasn't doing any optimization,

00:27:01.480 --> 00:27:06.140
but what Python would do is I built this tool that one of my friends there now, you can put in all

00:27:06.140 --> 00:27:11.200
these inputs and it comes up with what, what the linkages of, of what's called the, I'm

00:27:11.200 --> 00:27:15.040
not wording this. Like I'll use the programming term, but the dependencies, the graph of, the graph

00:27:15.040 --> 00:27:18.900
of dependencies, when certain things would happen, if you have certain lead times and certain,

00:27:18.900 --> 00:27:23.160
certain constraints and whatever. So he would run the program. He would see that with this particular

00:27:23.160 --> 00:27:27.960
set of inputs, with this lead time and this assembly and this, and this, we're not scheduled to have

00:27:27.960 --> 00:27:31.900
a rocket launch until like February or something like that. And he goes, Oh, that's not going to work.

00:27:31.980 --> 00:27:36.640
We need to get it earlier or we need, or whatever. And so he would then change some inputs because he

00:27:36.640 --> 00:27:41.100
has the human knowledge, put that into the calculator. The calculator would then do the same graph

00:27:41.100 --> 00:27:45.000
explosion and time explosion. And he would get a new set, new set of outputs and be like, okay,

00:27:45.000 --> 00:27:49.240
I can work with this. I can't work with this. So it was him working back and forth with the program

00:27:49.240 --> 00:27:54.900
to run through the scenarios. And then once he had the scenarios that fit the objectives, he would then

00:27:54.900 --> 00:27:59.460
bring it up to, to the managers and things like that. So the program, he was like the human optimizer,

00:27:59.460 --> 00:28:03.340
but he would use the program to quickly lay out the Tetris board of what things would look like.

00:28:03.340 --> 00:28:07.180
Right. Right. Well, I'd say maybe you identify that there's something unexpected that actually

00:28:07.180 --> 00:28:12.340
seriously delays the production, right? Like, Oh, there's a specialized hose that takes, you know,

00:28:12.340 --> 00:28:18.300
liquid, whatever, right over here. And it actually, that's the thing that takes so long to get or to,

00:28:18.300 --> 00:28:22.840
it's the one thing that holds up a big part of the construction. And so let's make sure there's no

00:28:22.840 --> 00:28:23.580
delays on that.

00:28:23.580 --> 00:28:26.820
Yeah, exactly. You would see, that's called the critical path in manufacturing. It's what is,

00:28:26.820 --> 00:28:30.580
what is going to take you the longest time and delay the whole project. You're always trying

00:28:30.580 --> 00:28:35.700
to keep an eye out for those types of things. If we go back to the code itself, I think we had

00:28:35.700 --> 00:28:39.560
talked about the earlier example, it was just sets and I was like, good to go. Just the built-in types.

00:28:39.560 --> 00:28:44.960
But now I, there's no built-in types for rocket. So Python grew up with me, or I grew into Python.

00:28:44.960 --> 00:28:48.580
And like, now I could define an object that was like, here's this booster object. Here's the

00:28:48.580 --> 00:28:52.400
interstage object. Here are the attributes associated with it. And I could start like,

00:28:52.580 --> 00:28:56.080
again, like what Brett Cannon said, I could start writing Python. I could start writing a layer of

00:28:56.080 --> 00:29:00.140
abstraction on Python itself that fit my rocket brain and the way I think about rockets and the

00:29:00.140 --> 00:29:06.440
way we thought about rockets and just using objects, classes, methods, modules, and like that next layer

00:29:06.440 --> 00:29:11.080
of Python. At this point too, it's, this is all deterministic planning. You know, what's going to

00:29:11.080 --> 00:29:14.600
happen precisely, or you at least assume, you know, what's going to happen precisely. So with the

00:29:14.600 --> 00:29:17.560
earlier example, you knew which was, what was completed and what you needed to do.

00:29:18.180 --> 00:29:22.580
Deterministic. At SpaceX as well, the software I had built was deterministic. You just say that

00:29:22.580 --> 00:29:25.920
it's going to take 10 days and that's the assumption you're rolling with, or it's going to take 15 days

00:29:25.920 --> 00:29:27.780
and that's the assumption you're rolling with.

00:29:27.780 --> 00:29:32.360
Yeah. Yeah. Very cool. And you know, maybe just stepping back for a second, like,

00:29:32.360 --> 00:29:35.060
what do you think about what SpaceX has been able to accomplish?

00:29:35.060 --> 00:29:38.960
I mean, I think it's amazing. I am super happy and super fortunate to have been

00:29:38.960 --> 00:29:43.220
an employee of the company and been there with the time I've had. So one of the best experiences of my

00:29:43.220 --> 00:29:47.160
life for sure. And I think if we go into space a little bit, I think everyone listening to this

00:29:47.160 --> 00:29:51.280
podcast should know that within the next decade, you could be an astronaut. Like the goal of the

00:29:51.280 --> 00:29:56.740
company is to make you an astronaut where you could go into space yourself, either for maybe

00:29:56.740 --> 00:30:01.660
either sort of made these moon missions that the one that this one Japanese person has bought. But

00:30:01.660 --> 00:30:06.120
the point of the company is to get to Mars, like get a million of us to Mars. And so it's super

00:30:06.120 --> 00:30:10.640
inspiring to think about. There's a group of people that you can, that most people here could be a part

00:30:10.640 --> 00:30:14.000
of that can, you can contribute to that mission and get yourself there.

00:30:14.120 --> 00:30:16.880
I mean, it's such a wild thought to think, I don't know how many people have gone into space,

00:30:16.880 --> 00:30:21.260
but it's got to be in the hundreds, you know, historically speaking. Right. And to think,

00:30:21.260 --> 00:30:24.800
you know, that's just, we're going to double it. It's just one flight.

00:30:26.700 --> 00:30:31.380
This portion of Talk Python To Me is brought to you by Linode. Whether you're working on a personal

00:30:31.380 --> 00:30:36.880
project or managing your enterprise's infrastructure, Linode has the pricing, support and scale that you

00:30:36.880 --> 00:30:41.920
need to take your project to the next level. With 11 data centers worldwide, including their newest

00:30:41.920 --> 00:30:48.220
data center in Sydney, Australia, enterprise grade hardware, S3 compatible storage, and the next

00:30:48.220 --> 00:30:53.420
generation network, Linode delivers the performance that you expect at a price that you don't.

00:30:53.420 --> 00:30:59.760
Get started on Linode today with a $20 credit and you get access to native SSD storage, a 40 gigabit

00:30:59.760 --> 00:31:04.980
network, industry leading processors, their revamped cloud manager at cloud.linode.com,

00:31:04.980 --> 00:31:11.780
root access to your server, along with their newest API and a Python CLI. Just visit talkpython.fm

00:31:11.780 --> 00:31:17.160
slash Linode when creating a new Linode account, and you'll automatically get $20 credit for your next

00:31:17.160 --> 00:31:22.660
project. Oh, and one last thing they're hiring. Go to linode.com slash careers to find out more.

00:31:22.660 --> 00:31:23.980
Let them know that we sent you.

00:31:23.980 --> 00:31:31.920
I think the real magic to me of what SpaceX has been able to do, one, it's kind of interesting to

00:31:31.920 --> 00:31:38.260
see a private company just come along and do that. But the real magic to me has been the reuse and the

00:31:38.260 --> 00:31:42.000
landing, right? Not the, we're going to take this thing and just throw it away every time.

00:31:42.000 --> 00:31:46.820
But it becomes, you know, not something that's destroyed, but something more like a 747.

00:31:47.560 --> 00:31:52.840
Yeah, well, think of it like a programming coma. Every time you run your program, it just deletes itself. How many programs would you write?

00:31:54.280 --> 00:32:11.540
All your Python programs were self-destructing. It'd be a lot harder to get this stuff done. And I guess while we're on the rocket industry in general, like I come from the supply chain, but Python is used extensively throughout the entire rocket industry. Like it's used to calculate trajectories of rockets. It's used to calculate the mass of rockets, which is particularly important because you got to get it in a space. It's used in so many contexts across so many disciplines in the rocketry industry across so many companies that I think all the core developers of Python should be pretty, pretty proud. I don't know if Guido was thinking that his ABC programming language would be used to make rockets.

00:32:11.540 --> 00:32:28.340
It's kind of a far stretch, but it's happening every day.

00:32:28.340 --> 00:32:35.420
Yeah, that's really awesome. Yeah, I think Python is being used for a lot of things that nobody predicted it would be used for.

00:32:35.420 --> 00:32:37.260
Yeah, definitely.

00:32:37.260 --> 00:32:40.100
It's a good fit. I'm not saying it's not a good fit necessarily.

00:32:40.260 --> 00:32:40.780
It's just like...

00:32:40.780 --> 00:32:41.460
It's a great fit.

00:32:41.460 --> 00:32:56.440
I think actually, historically, one of the challenges of going from Python 2 to Python 3 that the core developers, and Guido said this himself a little bit when I talked to him quite a while ago on, I think it was episode 100 even, probably.

00:32:56.440 --> 00:33:09.340
Anyway, one of those shows I had him on quite a while back said something like, one of the big challenges was we underestimated how foundational Python and its libraries were for so many people.

00:33:09.340 --> 00:33:25.400
They thought, oh, well, we'll make this change to Python 2, upgrade it, and people will just adapt and didn't realize like whole banking systems are built on top of the details of this light or these, all these are super important libraries that actually support so many different things, depended on the exact details.

00:33:25.400 --> 00:33:30.600
And making these relatively minor changes was a lot harder because of those sort of dependencies.

00:33:30.600 --> 00:33:33.200
Yeah, I'd say you're the victim of their own success there, right?

00:33:33.200 --> 00:33:34.320
Yeah, exactly.

00:33:34.320 --> 00:33:35.160
Exactly.

00:33:35.380 --> 00:33:44.860
So I think a lot of people don't really have that much of a visibility to the true scope of how much is built with Python and how much depends upon these libraries that people have created.

00:33:44.860 --> 00:33:45.680
I would agree.

00:33:45.680 --> 00:33:46.600
Yeah, absolutely.

00:33:46.600 --> 00:33:48.880
Yeah, I found an interesting place.

00:33:48.880 --> 00:33:52.280
I don't know if you've heard of it called the Open Source Aerospace Computing.

00:33:52.280 --> 00:33:52.680
Okay.

00:33:53.680 --> 00:33:54.740
And it's for simulated rockets.

00:33:54.740 --> 00:34:02.560
It's got a bunch of different Python modules to do so, like six or seven different things for like simulating high power rockets and different stuff.

00:34:02.560 --> 00:34:03.620
I'll put that into the show notes.

00:34:03.620 --> 00:34:05.780
People can, you know, it's, that sounds really fun.

00:34:05.920 --> 00:34:06.300
That is fun.

00:34:06.300 --> 00:34:07.000
I'm going to take a look.

00:34:07.000 --> 00:34:07.800
That's awesome.

00:34:07.800 --> 00:34:08.940
I didn't realize that.

00:34:08.940 --> 00:34:13.980
See, I'm learning stuff right now about Python and in the aerospace industry and on this podcast.

00:34:13.980 --> 00:34:15.480
Exactly.

00:34:15.480 --> 00:34:16.480
All right.

00:34:16.480 --> 00:34:21.520
So over there, you had these complex but deterministic calculations.

00:34:21.520 --> 00:34:22.220
Yeah.

00:34:22.220 --> 00:34:25.600
And it was SpaceX and they're doing super, super cool stuff.

00:34:25.600 --> 00:34:27.400
I looked over on SpaceX.

00:34:27.400 --> 00:34:29.240
I think this is a few months ago.

00:34:29.240 --> 00:34:33.540
The last time I looked though, they had 92 different job openings for Python.

00:34:33.540 --> 00:34:34.000
Yeah.

00:34:34.000 --> 00:34:35.820
That speaks to itself.

00:34:35.820 --> 00:34:37.980
How much that language is used.

00:34:37.980 --> 00:34:38.580
Yeah, absolutely.

00:34:38.580 --> 00:34:43.780
There wasn't a lot of visibility into exactly what was happening there, but that's not 92 positions.

00:34:43.780 --> 00:34:48.480
That's 92 different roles they're trying to fill, which might be more than one person for each one.

00:34:48.480 --> 00:34:49.720
So pretty, pretty interesting.

00:34:49.720 --> 00:34:55.340
And then now you're working more in the forecasting world with Sweetgreen, right?

00:34:55.340 --> 00:34:59.320
So I would say in this, I still do all the level one stuff that I do.

00:34:59.320 --> 00:35:00.820
Maybe the set instruction.

00:35:00.820 --> 00:35:02.340
I think of it more like a pyramid.

00:35:02.340 --> 00:35:03.740
I still do a lot of that.

00:35:04.040 --> 00:35:08.200
I think when people talk about data science, you get this idea that like, oh, everyone's out there doing amazing data science.

00:35:08.200 --> 00:35:13.740
I don't know if your panel mentioned this at all, but most data scientists spend a lot of time cleaning data and automating the boring stuff.

00:35:13.740 --> 00:35:19.400
It's surprisingly little amount of time is spent, you would guess, in the cool math portion of it.

00:35:19.480 --> 00:35:20.940
So it's more like a pyramid for me.

00:35:20.940 --> 00:35:26.120
I still have a huge wide base of like automate the boring stuff because that's super important and easiest way to get value.

00:35:26.120 --> 00:35:30.360
I still have a middle layer that's there of deterministic type of calculations.

00:35:30.360 --> 00:35:38.180
And now through self-learning and through the help of the Beijing community, particularly the Pimesky and Arby's guys who've been so nice to train me up over time.

00:35:38.180 --> 00:35:39.280
And let me join.

00:35:39.280 --> 00:35:42.320
I'm doing some amount of data science-y tasks.

00:35:42.320 --> 00:35:43.360
Some of that's forecasting.

00:35:43.360 --> 00:35:46.100
Some of that we do is optimization.

00:35:46.100 --> 00:35:47.120
It's across the board.

00:35:47.120 --> 00:35:53.200
But it's really, again, the point isn't whatever way we can use data to help connect people to real food is we're going to do that.

00:35:53.640 --> 00:35:55.120
If it's automate the boring stuff, we're doing that.

00:35:55.120 --> 00:35:57.880
If it's a forecasting model, then we're going to figure out how to do that.

00:35:57.880 --> 00:36:02.960
But the idea is, how can we use programming and technology to fulfill this physical mission?

00:36:02.960 --> 00:36:11.740
It almost seems like the food story would be harder than the space story, which, sorry, a bit of a cough today.

00:36:11.740 --> 00:36:14.540
So it sounds a little contrary, right?

00:36:14.540 --> 00:36:19.180
Like space and space science seems so hard, but food spoils, right?

00:36:19.180 --> 00:36:23.300
Like if it's five days instead of three days, maybe you can't eat that, right?

00:36:23.460 --> 00:36:23.720
Yeah.

00:36:23.720 --> 00:36:31.300
So this is, if we ignore the space or food part of it, if we just talk supply chain for a second, which interesting enough is I don't have any degree in programming.

00:36:31.300 --> 00:36:33.300
All my degrees are mechanical and supply chain.

00:36:33.300 --> 00:36:38.140
SpaceX, the demand was relatively certain because you don't have that many rocket launches.

00:36:38.140 --> 00:36:40.920
There's a lot of nuances and stuff like that, but there's only so many customers.

00:36:40.920 --> 00:36:46.060
At Sweetgreen, there's like tens of thousands of people that could come into any of the locations on any day.

00:36:46.060 --> 00:36:57.220
So it becomes a much more challenging problem to figure out which salads people are going to want or which ingredients people are going to want when they walk into any speaking location across the nation.

00:36:57.220 --> 00:37:02.000
So, and to your point, you can't just prep everything because it'll spoil and it'll all go bad.

00:37:02.000 --> 00:37:03.400
And then you're not connecting people to real food.

00:37:03.400 --> 00:37:07.040
You're just wasting food, which is the absolute opposite of what we want.

00:37:07.780 --> 00:37:10.280
So how do you just get the right amount of everything?

00:37:10.280 --> 00:37:12.480
And that is very, it's very non-deterministic.

00:37:12.480 --> 00:37:13.380
I'll tell you that.

00:37:13.380 --> 00:37:16.480
People, people's salad preferences are not deterministic.

00:37:16.480 --> 00:37:20.240
I can't, I can't predict what you, what someone would want on any given day.

00:37:20.240 --> 00:37:20.600
Yeah.

00:37:20.600 --> 00:37:24.040
Or when there's going to be some event that you didn't realize, right?

00:37:24.120 --> 00:37:28.800
Like WWDC happens to be right near one of the restaurants or something like that.

00:37:28.800 --> 00:37:29.200
Mm-hmm.

00:37:29.200 --> 00:37:29.640
Yeah.

00:37:29.640 --> 00:37:30.560
Interesting.

00:37:30.560 --> 00:37:35.100
So what are some of the tools you're using over there to make these estimations?

00:37:35.100 --> 00:37:35.500
Yeah.

00:37:35.500 --> 00:37:46.180
So this is a lot where when we talk about Bayesian stuff, this is, and not that everything we do there is Bayesian, but like the Bayesian scope of data science lets me work with smaller data sets and more uncertainty.

00:37:46.180 --> 00:37:52.860
So it lets me, it lets us figure out with uncertainty bounds, how much of a particular thing might be used on a day.

00:37:52.860 --> 00:37:56.040
Like that's an example of a type of problem that I could solve at Sweetgreen.

00:37:56.040 --> 00:38:01.380
There's actually in supply chain, there's this idea, this model called this, the single period model or the salvageable model.

00:38:01.380 --> 00:38:10.360
What it is, is the classical example from, from actually 1888 is you're a news vendor, like you're a news girl, a news boy, and you can buy so many newspapers in the morning.

00:38:10.360 --> 00:38:16.160
You can buy 10, you can buy 15, you can buy 20, but by the end of the day, you have to sell them all because if you don't sell them, they're trash.

00:38:16.160 --> 00:38:17.640
No one's going to buy a day-old newspaper.

00:38:17.640 --> 00:38:19.760
So given that-

00:38:19.760 --> 00:38:21.380
Oh, did you read that one newspaper with the headline?

00:38:21.380 --> 00:38:23.640
You should really get that one from three years ago.

00:38:23.640 --> 00:38:24.440
It was super good.

00:38:24.440 --> 00:38:25.540
No, that doesn't happen.

00:38:25.540 --> 00:38:27.360
Turns out, yeah, it doesn't happen very much.

00:38:27.360 --> 00:38:29.640
So how do you decide how many newspapers to buy?

00:38:29.640 --> 00:38:30.500
Because they cost you money.

00:38:30.500 --> 00:38:34.280
Maybe they cost you 25 cents to buy and you can sell them for 75 cents.

00:38:34.280 --> 00:38:35.740
What's the optimal amount to buy?

00:38:35.740 --> 00:38:40.340
And traditionally, the way this problem is solved is like, oh, well, you just sell, you just have 10,000 days of demand.

00:38:40.340 --> 00:38:43.220
And you just take the average and that's how many newspapers you buy.

00:38:43.220 --> 00:38:47.080
But now you spend 10,000 days making suboptimal or inoptimal decisions.

00:38:47.080 --> 00:38:59.620
So what Bayesian stats lets me do is like, well, if I have five days of newspaper demand, okay, even though it's not a lot of data, I can say that with 17, 20, 21, and 22 and 25 sales, I should maybe buy 20.

00:38:59.620 --> 00:39:04.720
But the uncertainty bounds are there could be 16 sales, there could be 28 sales, and I can make a decision of what to do there.

00:39:04.720 --> 00:39:09.940
And as you get more and more data, if there's certainty in your demand, that distribution will shrink over time.

00:39:09.940 --> 00:39:16.460
And that's the real trick for me with Bayesian type of analysis is I can work with small data sets.

00:39:16.460 --> 00:39:19.460
I preserve uncertainty, which is critical in business decision making, right?

00:39:19.760 --> 00:39:24.660
I don't want to go in there and say the mean is going to happen and the mean doesn't happen because the mean is never going to happen, almost ever, never happens.

00:39:24.660 --> 00:39:27.440
So I want to go in there and say it'll be somewhere between this and this value.

00:39:27.440 --> 00:39:35.540
And the part that we haven't talked about is that Bayesian stats in particular, you build a very nuanced model to capture what you know in your head.

00:39:35.540 --> 00:39:39.760
So random force and neural nets, there's very little you can do besides just tuning some hyperparameters.

00:39:40.520 --> 00:39:42.080
The algorithm is relatively fixed.

00:39:42.080 --> 00:39:47.180
But with Bayesian models, you can say I'm a news vendor and I have demand for New York and demand for Boston.

00:39:47.180 --> 00:39:49.200
And I know which day of the week it is.

00:39:49.200 --> 00:39:51.880
And I know that on event days, we might sell more newspapers.

00:39:51.880 --> 00:40:06.280
And you can build this graph, which is the probabilistic programming language part of it, of probabilities that helps you get a more, I'll say precise estimate, even though that's not the right statistical term, but helps you build a more nuanced model that gets you to a better estimate.

00:40:06.280 --> 00:40:15.460
And that's the real power in it for me is the uncertainty and the ability to encode human dependencies into the programming language.

00:40:15.460 --> 00:40:17.420
In this case, into PyMC3, for example.

00:40:17.420 --> 00:40:18.120
Right, right.

00:40:18.120 --> 00:40:22.780
Well, and preserving that uncertainty and communicating that is super important, right?

00:40:22.780 --> 00:40:31.520
Because it's one thing to say, we think we're going to meet this deadline or sell this many salads or sell this many cars.

00:40:32.060 --> 00:40:37.260
And you go to plan around it, if that's, well, here's the number and there's a small variation.

00:40:37.260 --> 00:40:38.240
Yes.

00:40:38.240 --> 00:40:39.640
Here's the number, there's a huge variation.

00:40:39.640 --> 00:40:43.600
Like, you want to approach that from an investment perspective, super different.

00:40:43.600 --> 00:40:44.100
Exactly.

00:40:44.100 --> 00:40:45.240
That is the key portion.

00:40:45.240 --> 00:40:47.820
That's the thing that like standard linear regression does not get me.

00:40:47.820 --> 00:40:50.700
It gets me the mean, but it doesn't tell me how far off I might be.

00:40:50.700 --> 00:40:50.980
Yeah.

00:40:50.980 --> 00:40:51.780
Yeah, for sure.

00:40:51.780 --> 00:40:58.020
So it sounds to me like you've been doing a lot of research into this whole Bayesian side of things.

00:40:58.960 --> 00:41:00.920
Maybe even book level research?

00:41:00.920 --> 00:41:01.700
Yeah.

00:41:01.700 --> 00:41:04.800
So I've kind of just fell into the pool of Bayesian research.

00:41:04.800 --> 00:41:10.940
The open source story is I saw PyMC and RVs and I figured, hey, why don't I just open a pull request for like two typos?

00:41:10.940 --> 00:41:13.720
And Chris Fonsbeck was so nice to merge it immediately.

00:41:13.720 --> 00:41:14.740
I was like, this feels great.

00:41:14.740 --> 00:41:15.340
This is awesome.

00:41:15.340 --> 00:41:17.060
I'm just contributing to open source.

00:41:17.060 --> 00:41:18.880
And then they just kept going more and more.

00:41:18.880 --> 00:41:21.800
And they started letting me contribute more and more code.

00:41:21.920 --> 00:41:23.520
And I've just been talking to those guys.

00:41:23.520 --> 00:41:29.180
And over the two years, me and a couple of the other guys who work on PyStan, RVs and PyMC3.

00:41:29.180 --> 00:41:31.740
So all of these are Python Bayesian libraries.

00:41:31.740 --> 00:41:32.400
We're like, you know what?

00:41:32.400 --> 00:41:39.600
We think we can write a book that explains how to use Python to use Bayes theorem with a much more modern twist on it.

00:41:39.600 --> 00:41:45.020
So you've got a lot of Bayes theorem books from like the 80s or the 90s and things like that.

00:41:45.020 --> 00:41:46.940
You've got a couple of introductory books.

00:41:46.940 --> 00:41:47.860
So Osvaldo Martin.

00:41:47.860 --> 00:41:50.480
And those original ones have to be like super theoretical, right?

00:41:50.480 --> 00:41:51.640
So it's interesting.

00:41:51.640 --> 00:41:57.200
They're theoretical prior to the 90s because there were not very many algorithms to solve Bayes theorem at the time.

00:41:57.200 --> 00:42:00.200
You were constrained to what were called conjugate models that you could solve by hand.

00:42:00.200 --> 00:42:06.740
I don't know if you talked about this in the other podcast, but this algorithm called MCMC sort of hit the streets in the late early 90s.

00:42:06.740 --> 00:42:09.920
It was a just bust the door down on computational Bayes theorem.

00:42:09.920 --> 00:42:14.380
Like turns out this particular algorithm, if you use it in particular ways, just works really well.

00:42:14.380 --> 00:42:17.400
And since then, people have just been making it better and better and better.

00:42:17.840 --> 00:42:21.840
And so there's actually different variations of this now called like Hamiltonian myocardial.

00:42:21.840 --> 00:42:28.960
And within that, there's a subset called the no U-turn sampler that just do great on solving, not solving, but doing Bayesian inference.

00:42:28.960 --> 00:42:37.700
But there's not a lot of a, we think there's a gap where we can write this book to help people understand how to use it in a more, more advanced ways.

00:42:37.700 --> 00:42:41.560
So for reference, Advaldo Martin wrote this book called Bayesian analysis and Python.

00:42:41.560 --> 00:42:43.360
He's actually one of the co-authors on this other book.

00:42:43.360 --> 00:42:46.980
It's an introduction to how to use Bayes theorem in Python.

00:42:46.980 --> 00:42:54.000
And so if you don't know anything about Bayes theorem, I would just say, go buy this book and you can start learning Python and start learning Bayes theorem sort of in the same book.

00:42:54.260 --> 00:42:55.300
But it's an introductory level.

00:42:55.300 --> 00:42:56.580
So he only goes so far.

00:42:56.580 --> 00:42:58.300
There's more layers to Bayes theorem.

00:42:58.300 --> 00:43:08.380
Things like Gaussian processes, Bayesian regression trees, decision analysis that we're covering specifically in this intermediate level book that we're hoping to publish by February.

00:43:08.380 --> 00:43:08.780
Awesome.

00:43:08.780 --> 00:43:09.080
Yeah.

00:43:09.080 --> 00:43:13.880
So you have a new book that you've co-authored, Bayesian modeling and computation and Python.

00:43:13.880 --> 00:43:16.600
And I got a, just a super brief look at it.

00:43:16.600 --> 00:43:17.800
It looks pretty interesting.

00:43:17.800 --> 00:43:20.500
It looks like it's pretty approachable.

00:43:20.500 --> 00:43:27.840
It's got a lot of nice graphs and pictures and a little bit of theory, but then here's the library call that you make to do that thing.

00:43:27.840 --> 00:43:32.020
And so it looks like it has this really nice practical aspect to it.

00:43:32.020 --> 00:43:35.980
So yeah, I hope the, hopefully the book takes off and does really well because it looks useful.

00:43:35.980 --> 00:43:36.560
Thanks.

00:43:36.560 --> 00:43:36.920
Yeah.

00:43:37.140 --> 00:43:37.400
Yeah.

00:43:37.400 --> 00:43:45.980
I will put a link to something, whatever you think is the right thing to link to in the show notes so people can sign up to get notified or whatever.

00:43:45.980 --> 00:43:46.520
Okay.

00:43:46.520 --> 00:43:46.840
Yeah.

00:43:46.840 --> 00:43:47.560
I'll come up with something.

00:43:47.560 --> 00:43:47.860
Yeah.

00:43:47.860 --> 00:43:48.160
Perfect.

00:43:48.160 --> 00:44:01.920
So one of the things I think that was interesting, I want to kind of dive into a little bit with you here is a lot of the things that you talked about were pretty straightforward, at least in the early days.

00:44:01.920 --> 00:44:08.360
You talked about automating, you talked about automating, like basically comparing CSVs and getting a nice output and whatnot.

00:44:08.360 --> 00:44:09.060
Yeah.

00:44:09.060 --> 00:44:25.320
And so much of the talk out there is, you know, here's the cool architecture of what Google is doing, or here's how Instagram upgraded their huge Django production from Django 1 to 2 and Python 2 to 3.

00:44:25.540 --> 00:44:25.940
Yeah.

00:44:25.940 --> 00:44:25.980
Yeah.

00:44:25.980 --> 00:44:26.700
And so on.

00:44:26.700 --> 00:44:30.080
And people focus on that and I think they get excited about it.

00:44:30.080 --> 00:44:34.460
But at the same time, so many people can just solve these little problems for themselves, right?

00:44:34.460 --> 00:44:39.980
With, and really, it doesn't have to be these huge engineering efforts to get a lot of value out of it, right?

00:44:39.980 --> 00:44:40.720
Yeah, I agree.

00:44:40.880 --> 00:44:41.040
Yeah.

00:44:41.040 --> 00:44:47.520
I think there's just a lot of opportunities for people who are non-programmers to sort of level up what they're doing with a little bit of Python.

00:44:47.520 --> 00:44:51.740
So, yeah, it sounds like your story, the arc of your story tells that as well.

00:44:51.740 --> 00:44:53.300
I tend to think, I think, yeah, you're right.

00:44:53.300 --> 00:44:59.440
There's a lot of publicity and press around the big things, huge installations, like the massive side sorts of stuff.

00:44:59.440 --> 00:45:00.580
I think of it like cooking or whatever.

00:45:00.580 --> 00:45:04.640
You see like the chef's table on Netflix and it's like all the people that are like the best and whatnot.

00:45:04.980 --> 00:45:08.800
That's what you see a lot in blog posts and articles and on Hacker News and whatnot.

00:45:08.800 --> 00:45:14.580
But there's a whole class of people like me that are like making mac and cheese on a stove and we're just fine.

00:45:14.580 --> 00:45:16.040
Like the stove's the same.

00:45:16.040 --> 00:45:17.440
But it's good mac and cheese.

00:45:17.440 --> 00:45:17.760
But it's good mac and cheese, yeah.

00:45:17.760 --> 00:45:19.200
You get better over time, yeah.

00:45:19.200 --> 00:45:24.980
So you don't, I would say, I hope people don't get intimidated when they start seeing terms like, and I use pytest all the time now, but they don't.

00:45:24.980 --> 00:45:32.460
They see Docker, pytest, Packaging, PyPI, like all these acronyms and stuff that are now prevalent for good reason, but they're now prevalent.

00:45:32.460 --> 00:45:38.980
I hope they realize that, you know, you can just fire up a Google Colab these days and just get your basic thing done.

00:45:38.980 --> 00:45:40.380
And that, like, you are an A-OK programmer.

00:45:40.380 --> 00:45:41.480
Like, that is awesome.

00:45:41.480 --> 00:45:42.380
You're creating value.

00:45:42.380 --> 00:45:43.540
And that's what matters.

00:45:43.540 --> 00:45:52.760
Not that you have a multi-cluster Kubernetes thing at the edge with instant retry fails or, you know, all these terms that get thrown out, like, these days.

00:45:52.760 --> 00:45:53.040
Yeah.

00:45:53.040 --> 00:45:58.800
And the whole reason I bring it up is I feel like there's a lot of people who are newer to the programming space.

00:45:58.800 --> 00:46:06.140
They see these big, impressive stories of technology and whatnot, and they feel like, well, what I'm doing isn't good enough.

00:46:06.140 --> 00:46:10.820
How do I go learn Kubernetes so that I can also do it the right way?

00:46:10.820 --> 00:46:14.020
And, well, the right way is very different.

00:46:14.020 --> 00:46:16.440
We were talking about racing before we hit record.

00:46:16.440 --> 00:46:16.940
Yeah.

00:46:16.940 --> 00:46:29.300
If you're in F1 and you have an insanely competitive environment, like, what you're going to need to do to make the brakes work is very different than if your minivan is going to go on a road trip, right?

00:46:29.300 --> 00:46:35.160
Like, you would never go and do what they do in F1 to your minivan because it just doesn't make any sense.

00:46:35.280 --> 00:46:43.340
And so, like, I think I just want to encourage people to just a lot of time, not everyone, but a lot of folks to remember they're not Google, they're not Facebook, they're not LinkedIn.

00:46:43.340 --> 00:46:49.160
And so these simple solutions are not necessarily just a compromise that they can make.

00:46:49.160 --> 00:46:53.940
They might be actually the better solution than what some of these fancy tech companies are doing for their situation.

00:46:53.940 --> 00:46:58.300
I actually want to word that even stronger is the right way is what works for you to do the thing you need to do.

00:46:58.300 --> 00:47:02.560
And the thing that Google is doing most likely is the wrong way for you.

00:47:02.560 --> 00:47:08.520
Because if you're not at Google, like, terabyte scale, like, doing what they do for your Excel file is not what you need.

00:47:08.520 --> 00:47:11.040
Like, if you're running Hadoop on your Excel file, definitely the wrong way.

00:47:11.040 --> 00:47:14.900
Don't fire a PySpark to analyze your Excel file.

00:47:14.900 --> 00:47:15.860
Like, there's a right way.

00:47:15.860 --> 00:47:17.340
10,000 entries or whatever, yeah.

00:47:17.340 --> 00:47:18.260
Yeah, exactly.

00:47:18.260 --> 00:47:22.620
So don't always take what Google and Instagram and everyone are doing as the right way for your situation.

00:47:23.000 --> 00:47:28.120
Definitely inspiration for what the language can be and that there's really no, in my opinion, no barriers on what Python can do.

00:47:28.120 --> 00:47:30.320
But I would say don't get intimidated.

00:47:30.320 --> 00:47:36.940
Like, look around, see what's around you that's automatable or boring or that you just find tedious.

00:47:36.940 --> 00:47:38.120
And just start with that.

00:47:38.120 --> 00:47:42.520
And if all you do is make that script, then that's a Python success story in and of itself.

00:47:42.520 --> 00:47:43.300
And you should be proud of that.

00:47:43.300 --> 00:47:43.540
Absolutely.

00:47:43.540 --> 00:47:44.240
Absolutely.

00:47:44.240 --> 00:47:48.460
Now, another thing that I want to talk about really quickly before we wrap this up.

00:47:48.940 --> 00:47:53.140
I've had this experience and I know that to some degree you have as well.

00:47:53.140 --> 00:47:56.920
It sounds like those three environments are super different.

00:47:56.920 --> 00:48:05.620
It sounds like helping people work with predicting or understanding what tools they've made in their supply chain and what ones they still got to produce.

00:48:06.060 --> 00:48:11.280
Going to working with predicting rocket construction, going to predicting salads.

00:48:11.520 --> 00:48:18.560
Like, it sounds like as a preparation or as a set of skills you need to learn to go work with rockets versus salad.

00:48:18.560 --> 00:48:21.260
It seems like that's really, really different.

00:48:21.260 --> 00:48:21.980
Right?

00:48:22.180 --> 00:48:28.360
But in practice, I would bet that the actual coding and the tools are not as different as it would sound.

00:48:28.360 --> 00:48:31.760
Yeah, I think there's just a lot of commonality.

00:48:31.760 --> 00:48:39.000
And so this is another inspiration I want people to take is that the things that tech companies do, you can absolutely bring those into your business.

00:48:39.000 --> 00:48:44.920
Like, almost every, I want to go as far as to say almost every business at this point could use Python.

00:48:45.260 --> 00:48:51.960
So don't feel like just because you're not working at Google, Facebook, or one of those large companies that you can't find a use for programming at your job.

00:48:51.960 --> 00:48:53.300
And that's the experience that I found.

00:48:53.300 --> 00:48:54.780
NOV is an example.

00:48:54.780 --> 00:48:56.460
That company's been around again for 150 years.

00:48:56.460 --> 00:49:00.900
So they've been building stuff way before computers were even a thing, at least electronic computers.

00:49:00.900 --> 00:49:02.600
And definitely before Python was around.

00:49:02.600 --> 00:49:09.260
But still at that company, there was an opportunity to use Python to make that company that much more efficient in certain ways.

00:49:09.260 --> 00:49:13.580
And that same skill set then translated to what people think is the more high tech company, which is SpaceX.

00:49:13.580 --> 00:49:22.120
Like, the same basic idea of taking data, processing it away, and then placing it in front of users in a way that they can think about it was relevant at SpaceX.

00:49:22.120 --> 00:49:26.700
And to be frank, after SpaceX, I didn't realize that it would be useful in the restaurant industry.

00:49:26.700 --> 00:49:35.200
But after a couple interviews, I realized, holy crap, it's the same ideas, the same tools, the things that I've been working on are things that this company is already doing.

00:49:35.200 --> 00:49:39.920
The manager that I now work for had already been using Python for two years to do a very similar sort of stuff.

00:49:39.920 --> 00:49:49.440
So even for me, I had to make that mentally, but hey, the stuff that the Python that I use in manufacturing companies is the same style and thinking that I can use at a restaurant company.

00:49:49.440 --> 00:49:50.540
And it's equally valid.

00:49:50.540 --> 00:49:52.080
And it works out super well.

00:49:52.080 --> 00:50:00.960
So I could just like, quote unquote, import my knowledge of environments and JupyterLab and Bay Serum and all the things that I picked up along the way to use at Sweetgreen.

00:50:00.960 --> 00:50:06.880
It's so interesting because it, you know, looking in from the outside, it seems like it would be absolutely not the case.

00:50:06.880 --> 00:50:08.200
But it really is.

00:50:08.620 --> 00:50:12.040
And like you said, you almost have to live through it to experience it.

00:50:12.040 --> 00:50:17.540
The one example that I have of that is I did training, software developer training, in-person training for quite a while.

00:50:17.540 --> 00:50:28.240
And in the course of a month, I had taught a course to developers at a hedge fund in New York City who were doing high speed trading type of stuff.

00:50:28.580 --> 00:50:33.100
And I also taught a course to engineers at Edwards Air Force Base.

00:50:33.100 --> 00:50:35.540
And after those two experiences, I'm like, you know what?

00:50:35.540 --> 00:50:39.480
These people need to know like 90% the same thing.

00:50:39.480 --> 00:50:50.460
It's just that little 10% where you take that knowledge and apply it to, you know, low latency stocks, stock trading versus reliable airplanes or whatever it is you're trying to do.

00:50:50.520 --> 00:50:56.660
But like mostly what you need to know is actually really, really similar, which blew my mind.

00:50:56.660 --> 00:51:02.080
And, you know, I would have the same experience between like restaurants and rockets, right?

00:51:02.080 --> 00:51:02.840
Yeah.

00:51:02.840 --> 00:51:07.720
And even for me, like for Python, it's the stuff, the Python you need to know for web development.

00:51:07.720 --> 00:51:10.460
Like a lot of it is the same Python you need to know for data science.

00:51:10.460 --> 00:51:17.560
And so like that's been a huge plus for me in using Python was like, okay, I know Python for data because that's what I do.

00:51:17.560 --> 00:51:19.620
I now need to build a web app for something.

00:51:19.860 --> 00:51:22.080
Like I need to build a static blog for myself.

00:51:22.080 --> 00:51:23.220
Cool.

00:51:23.220 --> 00:51:29.880
The stuff that I use for data science transfers to static hosts, like static sites and web hosting because it's Python.

00:51:29.880 --> 00:51:32.040
Like I don't have to learn a new language.

00:51:32.040 --> 00:51:36.880
I just, I can transfer within the community and it's just so flexible to jump from one area to another.

00:51:36.880 --> 00:51:41.560
You talked about Instagram doing their, Instagram is a company that's doing as a social media site.

00:51:41.560 --> 00:51:45.520
And the Python that's being used there is very similar to the Python that I use.

00:51:45.520 --> 00:51:46.340
That's weekly.

00:51:46.340 --> 00:51:49.280
Now to your point, like they've got that 10% of specialization or whatever,

00:51:49.280 --> 00:51:55.380
but it's so good to know that I can take this language and this set of knowledge and move between different organizations.

00:51:55.380 --> 00:51:57.020
It's awesome to be quite honest.

00:51:57.020 --> 00:51:57.340
Yeah.

00:51:57.340 --> 00:52:00.280
As a person who has those skills, you know, looking for different jobs.

00:52:00.280 --> 00:52:01.240
It's, it's super cool.

00:52:01.500 --> 00:52:08.580
I suspect there's probably some cool lessons that could cross pollinate across these industries that hasn't yet.

00:52:08.780 --> 00:52:11.640
Just because, you know, most people maybe haven't made that connection.

00:52:11.640 --> 00:52:17.760
And even if you have that theoretically, you don't actually have the interactions across the industries that much, but I bet there are.

00:52:17.760 --> 00:52:22.620
That's actually, so this is one reason I actually really like this podcast in particular is because you go across all these industries.

00:52:22.620 --> 00:52:25.300
Like I've been listening to these like, oh, that they do that in web development.

00:52:25.300 --> 00:52:26.660
Like that's, that's a, that's a great idea.

00:52:26.660 --> 00:52:28.680
I want to just take that idea and like do it over here.

00:52:28.760 --> 00:52:30.800
Like we're doing that.

00:52:30.800 --> 00:52:31.560
We're doing that.

00:52:31.560 --> 00:52:32.300
This is a good idea.

00:52:32.300 --> 00:52:33.500
Awesome.

00:52:33.500 --> 00:52:33.880
Thanks.

00:52:33.880 --> 00:52:37.620
I guess maybe that we're just about out of time.

00:52:37.620 --> 00:52:47.940
Maybe one more question that I'd like to ask you sort of a high level closing things out is, you know, what, what do you find exciting in the world of programming and Python these days?

00:52:47.940 --> 00:52:49.620
Like what's amazing right now?

00:52:49.620 --> 00:52:53.460
You know, I'd say the thing I like about Python the most is, is the community of people.

00:52:53.460 --> 00:53:06.080
When I started using Python, I wasn't thinking about the community, but as I got more and more into the programming language, just the people you tend to meet like yourself here, but I'm meeting people online who are friendly and helpful and are just great people to interact with.

00:53:06.080 --> 00:53:19.320
When I, when I used to go to conferences, because right now I can't go to conferences for reference where this is a middle of COVID, but like, it's so exciting to go to SciPy and see all of these folks that are excited about what they're being, what they're able to do.

00:53:19.400 --> 00:53:26.380
Like detect earthquakes, find cancer, do RNA sequencing or whatever, and share like that knowledge of moving, moving.

00:53:26.380 --> 00:53:28.160
So I honestly think moving the world forward.

00:53:28.160 --> 00:53:35.520
I really enjoy just being part of these, these doers that are sitting around using Python to do a thing and do the thing they're passionate about and make that thing better.

00:53:35.520 --> 00:53:42.520
And then even so much to even explain it to me, who's an idiot about biology and things like that, but explain it to me in a language as Python that I know.

00:53:42.520 --> 00:53:44.420
And that is the most fascinating, exciting thing to me.

00:53:44.420 --> 00:53:45.600
And I really love being a part of that.

00:53:45.600 --> 00:53:45.840
Awesome.

00:53:45.840 --> 00:53:49.280
I love the way you put it, that, you know, just be part of all these doers.

00:53:49.280 --> 00:53:49.540
Yeah.

00:53:49.540 --> 00:53:52.300
Building stuff and making things happen with Python.

00:53:52.300 --> 00:53:52.980
It's very cool.

00:53:52.980 --> 00:54:04.520
I think the thing that inspires me really is like, I can almost just imagine anything and then I can find people doing that with Python and polished libraries that make it accessible to many more people.

00:54:04.520 --> 00:54:04.740
Right?

00:54:04.740 --> 00:54:09.500
Like I said, Oh, well, what about like rocketry and like, you know, rocket stuff with fire.

00:54:09.880 --> 00:54:18.620
Here's like, Oh yeah, here's like five or six libraries for simulating that just so you can test it before you actually do your real, I mean, it's just like, you know, you name it and it's probably out there.

00:54:18.620 --> 00:54:19.280
That's so cool.

00:54:19.280 --> 00:54:23.220
I mean, you were talking about this earlier, but I've definitely met people using Python and F1 at a conferences.

00:54:23.520 --> 00:54:24.900
I was like, what are you doing here?

00:54:24.900 --> 00:54:25.820
You work for Red Bull?

00:54:25.820 --> 00:54:28.000
Like, why are you at this tech programming conference?

00:54:28.000 --> 00:54:29.100
Like, Oh, we use Python all the time.

00:54:29.100 --> 00:54:30.460
We do stuff with that phone car.

00:54:30.460 --> 00:54:32.420
It's like a classic example.

00:54:32.620 --> 00:54:32.760
Yeah.

00:54:32.760 --> 00:54:39.660
I would love to dig into what people are doing and like high-end racing F1 IndyCar and stuff with Python.

00:54:39.660 --> 00:54:44.480
And it's going to be hard to find someone able and willing to talk about it because those groups are so secretive.

00:54:44.480 --> 00:54:49.780
But yeah, the technology behind those types of events and engineering projects.

00:54:49.780 --> 00:54:53.580
I mean, the engineering behind F1 cars, they have hundreds of employees.

00:54:53.580 --> 00:54:54.480
Oh yeah.

00:54:54.480 --> 00:54:55.480
It's crazy.

00:54:55.480 --> 00:54:56.680
So much stuff is built from scratch.

00:54:56.680 --> 00:54:58.240
Yeah, yeah, exactly.

00:54:58.240 --> 00:55:01.620
Someday maybe I'll be able to talk about that, but it's tricky.

00:55:01.860 --> 00:55:05.720
If someone wants to be on the show and they work in that space, let's chat.

00:55:05.720 --> 00:55:06.760
So anyway, all right.

00:55:06.760 --> 00:55:10.080
Well, it's definitely an exciting time to be in programming and Python.

00:55:10.080 --> 00:55:13.700
And all the stories you've told here are definitely a part of it.

00:55:13.700 --> 00:55:17.380
So before you're out of here, though, I've got the two final questions for you.

00:55:17.380 --> 00:55:19.560
When you write some Python code, what editor do you use?

00:55:19.560 --> 00:55:19.920
Okay.

00:55:19.920 --> 00:55:22.020
I'm going to cheat a little bit here because we talked about three levels.

00:55:22.020 --> 00:55:26.140
So if I'm at level one, which is my early start, I just use Vim and Tmux because I just need a script.

00:55:26.140 --> 00:55:27.280
Single file and I'm done.

00:55:27.740 --> 00:55:31.940
If it's a complex program like RVs or PyMC3, PyCharm is my go-to.

00:55:31.940 --> 00:55:35.080
And then if it's exploratory analysis, JupyterLab.

00:55:35.080 --> 00:55:37.320
So I'm in one of those three writing Python.

00:55:37.320 --> 00:55:37.700
Yeah.

00:55:37.700 --> 00:55:38.100
Awesome.

00:55:38.100 --> 00:55:40.560
And it's probably not exclusive with the last two.

00:55:40.560 --> 00:55:45.000
Like maybe sometimes PyCharm fits, sometimes Jupyter fits, depending on what you're doing, right?

00:55:45.080 --> 00:55:46.800
The Venn diagrams are fuzzy.

00:55:46.800 --> 00:55:47.960
Sometimes it's one or the other.

00:55:47.960 --> 00:55:49.280
There's a lot of blurry spaces.

00:55:49.280 --> 00:55:50.240
Maybe even both.

00:55:50.240 --> 00:55:50.560
Who knows?

00:55:50.560 --> 00:55:51.260
Yeah.

00:55:51.260 --> 00:55:55.280
And then notable PyPI package throughout the two that you work on, right?

00:55:55.280 --> 00:55:56.780
PyMC3 and RVs.

00:55:56.780 --> 00:55:57.160
Yep.

00:55:57.160 --> 00:55:59.740
But I think the one I want to call a shout out to is X-Ray.

00:55:59.740 --> 00:56:03.480
I think that package can use a lot of publicity.

00:56:03.480 --> 00:56:07.940
I think it's an awesome package because it basically takes Pandas and makes it more than 2D.

00:56:07.940 --> 00:56:08.920
It makes it multidimensional.

00:56:08.920 --> 00:56:13.680
And I think the developers are doing just a great job over there building that out and making it awesome.

00:56:13.680 --> 00:56:16.960
And community-wise, we use it in RVs.

00:56:16.960 --> 00:56:24.080
And those developers have been nice enough to jump on Google Hangouts with us and talk to us and give us tips for what we should do.

00:56:24.080 --> 00:56:29.100
So plus one to the library and plus one to the people that are putting it in open source for everyone else to use.

00:56:29.100 --> 00:56:29.540
That's cool.

00:56:29.540 --> 00:56:34.220
So it's a little bit like Pandas, but more n-dimensional, 3, 4, 10-dimensional type stuff.

00:56:34.220 --> 00:56:34.420
Yeah.

00:56:34.420 --> 00:56:35.420
Pandas with more dimensions.

00:56:35.420 --> 00:56:36.120
Yeah.

00:56:36.120 --> 00:56:36.980
And n-dimensions.

00:56:36.980 --> 00:56:38.180
As many dimensions as you want.

00:56:38.180 --> 00:56:39.960
As many dimensions as fits in memory.

00:56:39.960 --> 00:56:43.080
I've actually heard a lot of recommendations for X-Ray lately.

00:56:43.080 --> 00:56:44.380
I think it's getting a lot of traction.

00:56:44.380 --> 00:56:45.260
So that's awesome.

00:56:45.260 --> 00:56:45.520
Cool.

00:56:45.520 --> 00:56:46.000
All right, Revan.

00:56:46.000 --> 00:56:48.900
Thank you so much for being here and telling your story.

00:56:48.900 --> 00:56:54.340
People are interested in this whole supply chain plus Python, maybe Beijing as well.

00:56:54.340 --> 00:56:55.360
Final call to action.

00:56:55.360 --> 00:56:56.220
What should they do?

00:56:56.220 --> 00:56:56.860
There's two ways.

00:56:57.000 --> 00:57:01.120
If you have a job, just see where you can automate the boring things, as he said.

00:57:01.120 --> 00:57:04.600
And if you don't have a job, or even if you do have a job, just get into open source.

00:57:04.600 --> 00:57:06.700
There's so many things you can do in open source.

00:57:06.700 --> 00:57:07.940
You don't have to be a Python expert.

00:57:07.940 --> 00:57:10.320
You don't really even have to know tons of Python.

00:57:10.320 --> 00:57:14.200
You just have to have the willingness to want to join in and be a positive contributor.

00:57:14.460 --> 00:57:20.060
And that's the magic that keeps all of this going, is the community efforts of good people

00:57:20.060 --> 00:57:23.180
that are just putting their work out there and trying to move the ball forward.

00:57:23.180 --> 00:57:23.440
Yeah.

00:57:23.440 --> 00:57:29.160
And I also want to say, your story is the story of you don't have to start huge.

00:57:29.160 --> 00:57:32.760
You can start small with little bits of automation, and you'll see where it takes you.

00:57:32.760 --> 00:57:33.240
Exactly.

00:57:33.240 --> 00:57:33.560
Yep.

00:57:33.560 --> 00:57:36.220
It's pretty much life-changing, to be quite honest.

00:57:36.480 --> 00:57:37.280
I know.

00:57:37.280 --> 00:57:38.860
I hear you.

00:57:38.860 --> 00:57:39.400
That's awesome.

00:57:39.400 --> 00:57:40.120
All right.

00:57:40.120 --> 00:57:41.380
Well, thank you so much for being on the show.

00:57:41.380 --> 00:57:42.200
It was great to chat with you.

00:57:42.200 --> 00:57:42.880
A lot of fun.

00:57:42.880 --> 00:57:43.420
Thanks, Michael.

00:57:43.420 --> 00:57:43.780
You bet.

00:57:43.780 --> 00:57:43.960
Bye.

00:57:44.060 --> 00:57:47.740
This has been another episode of Talk Python To Me.

00:57:47.740 --> 00:57:49.940
Our guest in this episode was Ravine Kumar.

00:57:49.940 --> 00:57:52.380
It's been brought to you by Sentry and Linode.

00:57:52.380 --> 00:57:54.540
Take some stress out of your life.

00:57:54.540 --> 00:57:59.140
Get notified immediately about errors in your web applications with Sentry.

00:57:59.140 --> 00:58:03.200
Just visit talkpython.fm/sentry and get started for free.

00:58:03.200 --> 00:58:08.000
Start your next Python project on Linode's state-of-the-art cloud service.

00:58:08.000 --> 00:58:12.320
Just visit talkpython.fm/Linode, L-I-N-O-D-E.

00:58:12.840 --> 00:58:15.620
You'll automatically get a $20 credit when you create a new account.

00:58:15.620 --> 00:58:17.760
Want to level up your Python?

00:58:17.760 --> 00:58:22.620
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.

00:58:22.620 --> 00:58:27.720
Or if you're looking for something more advanced, check out our new Async course that digs into

00:58:27.720 --> 00:58:30.780
all the different types of Async programming you can do in Python.

00:58:30.780 --> 00:58:34.740
And of course, if you're interested in more than one of these, be sure to check out our

00:58:34.740 --> 00:58:35.460
Everything Bundle.

00:58:35.460 --> 00:58:37.320
It's like a subscription that never expires.

00:58:37.320 --> 00:58:39.480
Be sure to subscribe to the show.

00:58:39.480 --> 00:58:41.980
Open your favorite podcatcher and search for Python.

00:58:42.180 --> 00:58:43.120
We should be right at the top.

00:58:43.120 --> 00:58:47.940
You can also find the iTunes feed at /itunes, the Google Play feed at /play,

00:58:47.940 --> 00:58:52.100
and the direct RSS feed at /rss on talkpython.fm.

00:58:52.100 --> 00:58:54.180
This is your host, Michael Kennedy.

00:58:54.180 --> 00:58:55.680
Thanks so much for listening.

00:58:55.680 --> 00:58:56.720
I really appreciate it.

00:58:56.720 --> 00:58:58.500
Now get out there and write some Python code.

00:58:58.500 --> 00:59:19.340
I'll see you next time.

