WEBVTT

00:00:00.001 --> 00:00:05.360
How do you go from poking around at Python code to actually solving real problems the right way?

00:00:05.360 --> 00:00:10.420
Well, there are many paths. The longest one probably is to get a four-year computer science

00:00:10.420 --> 00:00:16.320
degree. Maybe faster, but pricey still, is a solid in-person developer bootcamp.

00:00:16.320 --> 00:00:19.980
But have you considered reaching out to the community to find a mentor?

00:00:19.980 --> 00:00:24.960
Many Python meetups have project nights where folks who could help will be attending.

00:00:24.960 --> 00:00:28.900
And if you're up for giving back, maybe you could become a mentor at one of these events.

00:00:29.440 --> 00:00:34.260
That's what this episode is about. We'll hear from two former guests of Talk Python,

00:00:34.260 --> 00:00:39.200
Rusty Gregory and Doug Farrell. They teamed up and are back to share their mentorship story.

00:00:39.200 --> 00:00:44.500
This is Talk Python To Me, episode 254, recorded February 14th, 2020.

00:00:58.080 --> 00:01:03.240
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem,

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

00:01:07.920 --> 00:01:13.220
mkennedy. Keep up with the show and listen to past episodes at talkpython.fm. And follow the show on

00:01:13.220 --> 00:01:18.200
Twitter via at Talk Python. This episode is sponsored by Brilliant.org and Linode. Please

00:01:18.200 --> 00:01:21.540
check out what they're offering during their segments. It really helps support the show.

00:01:22.320 --> 00:01:25.040
Rusty and Doug, welcome back to Talk Python To Me.

00:01:25.040 --> 00:01:26.480
Thanks, Michael. Glad to be here.

00:01:26.480 --> 00:01:27.160
Good to be back.

00:01:27.160 --> 00:01:34.160
Yeah, it's great to have you back. So, Rusty, you were on episode 194 previously about learning

00:01:34.160 --> 00:01:41.820
and teaching Python in a vacuum. And back then, we talked about how you were in not super populated

00:01:41.820 --> 00:01:46.600
part, a small town in Vermont, and you were working at elementary school, right?

00:01:46.660 --> 00:01:47.180
Correct. Yep.

00:01:47.180 --> 00:01:53.520
Yeah, yeah. Helping teach kids programming concepts and other things. And then, Doug,

00:01:53.520 --> 00:01:58.020
we had you on back like 12 episodes before then.

00:01:58.020 --> 00:02:03.480
I was teaching kindergarten directly and then basically just kind of made sure everybody else

00:02:03.480 --> 00:02:09.640
could do whatever they needed to do with computers, whether it was teachers or students, and basically

00:02:09.640 --> 00:02:14.760
just kind of all-around resource for people. We had another person that worked with the equipment.

00:02:14.760 --> 00:02:19.320
I was the people person, the bridge between that kind of the technology and all the students

00:02:19.320 --> 00:02:22.760
and teachers. And I also taught web design at a community college.

00:02:22.760 --> 00:02:29.100
That's super cool. And Doug, you were on episode 182, Picture Python at Shutterfly, where you

00:02:29.100 --> 00:02:33.340
talked about how you guys are using Python over at Shutterfly, which is a photo sharing, photo

00:02:33.340 --> 00:02:34.460
book site, right?

00:02:34.460 --> 00:02:37.180
Yes, correct. We use it quite a bit and doing more of that.

00:02:37.180 --> 00:02:40.120
Super. You guys got a lot of API stuff going on there, I'm guessing.

00:02:40.320 --> 00:02:45.740
Oh, yeah. A lot of rest calls and RabbitMQ stuff. And we're actually getting into AWS. So

00:02:45.740 --> 00:02:47.240
that's an interesting twist for us.

00:02:47.240 --> 00:02:51.700
Oh, yeah. That's going to be exciting. And I know you because you were on the show before,

00:02:51.700 --> 00:02:55.960
but also I've read some of your articles on RealPython and you're writing a book. You're

00:02:55.960 --> 00:02:59.020
doing a lot of things. You're keeping yourself busy for sure, right?

00:02:59.020 --> 00:03:04.140
Thank you. I've been enjoying writing the articles for RealPython and that actually led to a book

00:03:04.140 --> 00:03:08.020
proposal and actual book that I'm writing for Manning Publishing, which is fun and a little

00:03:08.020 --> 00:03:11.320
nerve wracking. Yeah, that's for sure. What's the book title?

00:03:11.320 --> 00:03:16.180
The Well-Grounded Python Developer. The proposal is, and I'm going to try to fulfill it, is that

00:03:16.180 --> 00:03:20.860
there's a lot of beginner books and there's a lot of expert books and cookbooks, but not much stuff

00:03:20.860 --> 00:03:26.620
that helps a beginning developer transition more towards an expert. So that's kind of what I'm

00:03:26.620 --> 00:03:33.160
trying to do is convey how to help somebody who's got a basic tool set move into thinking about bigger

00:03:33.160 --> 00:03:35.900
projects, the big picture stuff and think like a developer.

00:03:35.900 --> 00:03:38.460
You know, that's a really big step, I think.

00:03:38.460 --> 00:03:38.900
Yeah.

00:03:38.900 --> 00:03:44.660
It's easy to go around and say, I want to learn language X. So I want to learn what a loop is,

00:03:44.660 --> 00:03:50.180
what a variable is, how do I call a function? But then you go to actually create a program and you're

00:03:50.180 --> 00:03:54.200
like, it's like deer in the headlights or, you know, writer's block or something. It's just like,

00:03:54.200 --> 00:03:59.600
I don't really know how to put the pieces together. Right. And the advanced stuff is too hard.

00:03:59.760 --> 00:04:02.800
Yeah. It's like knowing how to use a hammer, but he doesn't know how to build anything.

00:04:02.800 --> 00:04:06.580
Yeah, exactly. Yeah. So I think that sounds like a cool project that you're working on. Great.

00:04:06.580 --> 00:04:07.280
Yeah. It'll be fun.

00:04:07.280 --> 00:04:13.180
Yeah. So at the beginning, Rusty, I think maybe it would be fun. You talked about a little bit

00:04:13.180 --> 00:04:19.520
before we hit record about sort of the progress that you've made. So maybe give people a sense of

00:04:19.520 --> 00:04:25.740
the challenges. You know, that was a really popular episode that you did with me way back when,

00:04:26.340 --> 00:04:30.880
and I guess that's probably a year and a half ago. So it's, it's been a while, but so you've

00:04:30.880 --> 00:04:35.760
made a lot of progress and I guess to sum it up, like one of your main challenges was you're in this

00:04:35.760 --> 00:04:42.040
position where you need to have a fair amount of expertise in the software that you're working with.

00:04:42.040 --> 00:04:47.620
And yet being in a small town, it's really hard to go to meetups or to find folks to collaborate

00:04:47.620 --> 00:04:51.800
with. And if you're the only one at the place you work, well, that's also doesn't help, right?

00:04:51.800 --> 00:04:56.780
Yeah. That was, I was actually learning with a colleague of mine who was kind of interested

00:04:56.780 --> 00:05:01.360
in getting into Python a little bit. And so we were both learning at the same time and then he

00:05:01.360 --> 00:05:05.720
promptly got another job with a different school district. So then I was, by myself again.

00:05:05.720 --> 00:05:10.320
And, it was, you know, it's a lot more fun when you can bounce ideas off people and everything.

00:05:10.320 --> 00:05:13.360
So I was getting started to get a little bit frustrated. I was starting to want to be able

00:05:13.360 --> 00:05:14.800
to do more than I, than I could.

00:05:14.800 --> 00:05:20.580
You know, what I think is interesting is everyone gets stuck when they're doing programming

00:05:20.580 --> 00:05:25.500
or they're working on software projects. You know, I remember not long ago, some library

00:05:25.500 --> 00:05:30.000
I was trying to use, I'm like, why does it not do the thing it's supposed to do? You know,

00:05:30.000 --> 00:05:34.100
and I've been programming for like 20 years. Right. But still I'm, I'm sitting here pulling

00:05:34.100 --> 00:05:39.700
my hair out because it seems like it says it's going to do X and it's not doing it for whatever

00:05:39.700 --> 00:05:44.740
reason. Right. And the thing that I think somebody somewhere knows how to make it do that.

00:05:44.740 --> 00:05:49.660
Exactly. But here's what I think is interesting is I think, you know, everyone gets stuck,

00:05:49.660 --> 00:05:53.700
but they don't always get stuck in the same place. Right. I might get to a part and I'm

00:05:53.700 --> 00:05:56.780
stuck here, but you've already figured that out, but you're stuck on something else. Right.

00:05:56.780 --> 00:06:00.960
But if we could just talk to each other and go, Hey, I tried this and I'm, I'm stuck. Like,

00:06:00.960 --> 00:06:04.540
you know, I did that. And it was, yeah, I remember that was hard, but now here, you can just like

00:06:04.540 --> 00:06:09.840
help each other over these little hurdles much easier if you can interact with somebody.

00:06:09.840 --> 00:06:14.700
Right. Stack overflows there, you know, when you have the time to, you know, craft a half

00:06:14.700 --> 00:06:19.260
an hour question about, you know, two lines of code to make sure you don't get ridiculed or,

00:06:19.260 --> 00:06:23.380
or whatever's going to happen if you don't, you know, freeze your question in the correct way and

00:06:23.380 --> 00:06:28.700
show that you've, you know, tried all these other things. And, and yeah, so there, yes. Being able

00:06:28.700 --> 00:06:30.720
to just ask somebody that, you know, is, is awesome.

00:06:30.720 --> 00:06:36.580
These public spaces that you can go like stack overflow or Reddit or whatever, they can be kind

00:06:36.580 --> 00:06:41.800
of rough, but let me tell you, I learned a program when it required a book when there was like

00:06:41.800 --> 00:06:47.720
hardly even in the internet. And when you got stuck, it was like, you know what, let's go get

00:06:47.720 --> 00:06:53.020
in the car and drive for 20 minutes and hope that there was a book at Barnes and Nobles or one of

00:06:53.020 --> 00:06:58.740
these other weird places that kept all these trees and buildings in square form. And you would go there

00:06:58.740 --> 00:07:04.220
and you would go through it. Like, so I guess the reason I put it out is like, it's kind of a love,

00:07:04.220 --> 00:07:10.460
hate relationship. Like I can type an error into stack, into Google and likely a stack overflow thing

00:07:10.460 --> 00:07:15.260
helps me nine out of 10 times. I don't have to ask the question. Right. But it can be rough to get out

00:07:15.260 --> 00:07:20.040
there and ask questions like, didn't you read the manual or that's a stupid way to do it or whatever.

00:07:20.040 --> 00:07:24.780
You're like, well, how about you just say a better way to do it would be this, because I only asked this

00:07:24.780 --> 00:07:28.380
way because this is the best I got. Right. I'm trying to learn, like, take it easy on me.

00:07:28.380 --> 00:07:33.180
Yeah. Lots of times in the early days, you don't have the vocabulary to explain what it is, or you don't

00:07:33.180 --> 00:07:37.640
understand this concept that you want to go. Like for me, it was databases. Like I didn't even know how to get

00:07:37.640 --> 00:07:41.980
started or how to, how to do things like that. So I had to like think through all of that. You can't

00:07:41.980 --> 00:07:48.420
do that in a, in a forum really. Right. Right. It's too general. So yeah. So I guess long story short,

00:07:48.420 --> 00:07:53.500
long question short, give us a quick update on what you've done. You've taken a couple of courses.

00:07:53.500 --> 00:07:59.720
Obviously you found a great mentorship story, which we're going to dig into, but just give us the recap.

00:07:59.720 --> 00:08:05.060
Yeah, it was great. So when we talked last time, I was doing a few things, processing, you know,

00:08:05.120 --> 00:08:10.160
pictures and, and writing a few little apps that interacted with Google sheets. And then

00:08:10.160 --> 00:08:15.940
I took a Java course, a Python course at an access course at the community college that I teach at,

00:08:15.940 --> 00:08:20.060
because I was able to do them, you know, pretty much for free. And I only took access because the

00:08:20.060 --> 00:08:25.300
SQL course kept getting canceled. So I figured that was the best I could do. And it worked out. I

00:08:25.300 --> 00:08:34.420
understand, you know, I wasn't happy, but I did it. Yeah. And then, I got a call from Doug

00:08:34.460 --> 00:08:39.480
afterwards, which we'll talk about after we talked last time, but, and after Doug and I connected,

00:08:39.480 --> 00:08:44.740
I was able to build a flask app that was like asynchronous play for this board game that I was

00:08:44.740 --> 00:08:49.080
interested in. It was basically just, it held your cards, you know, in between, but I built a

00:08:49.080 --> 00:08:54.160
dashboard for users, put a database on it, notification emails when it was your turn.

00:08:54.360 --> 00:08:59.680
I was really just kind of, I was spending like 25 hours a week on it at the time. Cause I was using

00:08:59.680 --> 00:09:04.060
this thing called walk a time that talks to Adam and I think it works for a PyCharm as well.

00:09:04.060 --> 00:09:07.780
Cool. So walk a times like time tracking, if you want to know how you're spending your time.

00:09:07.780 --> 00:09:11.820
Yep. When you open up your editor, it keeps track what language you're using at the time.

00:09:11.820 --> 00:09:12.380
Oh, interesting.

00:09:12.380 --> 00:09:16.700
Yeah. And it was, it's really great with Adam. I couldn't get it to work very well with Python,

00:09:16.700 --> 00:09:21.600
uh, with a PyCharm, but, I'm sure there's a way to make that happen. Yeah. So, I mean,

00:09:21.600 --> 00:09:27.020
that was just really exciting to go from, I was a web guy before, but, to be able to make

00:09:27.020 --> 00:09:31.940
an app that did all these things was just blew me away. And I had a blast that I, you know,

00:09:31.940 --> 00:09:35.620
try and stop me from coding on the weekend, getting up at seven in the morning and working on it. It was a

00:09:35.620 --> 00:09:36.100
good time.

00:09:36.740 --> 00:09:41.160
It's such a cool experience when you're like, just, you wake up, you're like, I gotta, I gotta get back

00:09:41.160 --> 00:09:43.900
to it. I really was. I'm not done. I still have these ideas. It's wonderful.

00:09:43.900 --> 00:09:47.980
Yeah. It was, it was a lot of fun. It even made me want to put up with the question of like, can I

00:09:47.980 --> 00:09:51.480
download this in the app store? You know, that's the first question I would show it to people. I'd be

00:09:51.480 --> 00:09:56.500
so excited. Like, Oh, can I, no, it's, it's not an iOS app. It's, it's actually a web app and

00:09:56.500 --> 00:10:00.280
it's in Python and nobody really cares. But anyway, I was pretty excited.

00:10:00.280 --> 00:10:04.940
You just got to show them how to put like a little icon, like save a shortcut to the desktop.

00:10:05.220 --> 00:10:07.720
Yeah. Their eyes just glaze over after you say no.

00:10:07.720 --> 00:10:09.840
I hear you.

00:10:09.840 --> 00:10:15.200
I started to, rebuild one of my first apps as well. Since then, try and do, you know,

00:10:15.200 --> 00:10:21.240
build on what I had done before. And what was that experience like with, more experienced eyes?

00:10:21.240 --> 00:10:27.700
It was wonderful. I was able to go back in and just make everything so much simpler to read. I

00:10:27.700 --> 00:10:33.360
discovered, flask sessions, which just made a world of difference. Once I was able to put things

00:10:33.360 --> 00:10:37.920
into a cookie then and persist it over pages was awesome because before I had,

00:10:37.920 --> 00:10:43.360
I had to come up with this hack that I was doing it. I went from sending it as a hidden piece in a web

00:10:43.360 --> 00:10:49.920
form. So every page had to be a form to figuring out how to do that. And yeah, it was, it was good.

00:10:49.920 --> 00:10:51.420
It was really rewarding.

00:10:51.640 --> 00:10:56.760
Nice. Well, it sounds like you're making really, really good progress there. And I now know about

00:10:56.760 --> 00:10:59.980
walk a time, which is apparently a thing I'm going to have to dig into.

00:10:59.980 --> 00:11:00.680
Check that out.

00:11:01.900 --> 00:11:03.920
For sure. And Doug, how about you? What have you been up to?

00:11:03.920 --> 00:11:04.680
You might not want to know.

00:11:04.680 --> 00:11:10.180
I have another article coming out on real Python, which was insane to do with the book. And then,

00:11:10.180 --> 00:11:15.980
uh, all of my free time, every spare second, that's not tied to work is involved in the book.

00:11:15.980 --> 00:11:20.740
And then just work has been very busy. the fourth quarter for us is insane. So

00:11:20.740 --> 00:11:23.220
it's been a very busy time. And then, right.

00:11:23.220 --> 00:11:25.340
Yeah. So I've just been very busy with that stuff.

00:11:25.460 --> 00:11:30.180
Yeah. This is like the big holiday rush. Everyone's going to get photo books for Christmas

00:11:30.180 --> 00:11:32.100
or something like that, right?

00:11:32.100 --> 00:11:34.800
Yeah. The fourth quarter is like a huge.

00:11:34.800 --> 00:11:40.420
So Black Friday, that's like a, a legitimate thing that makes the business go for you guys,

00:11:40.420 --> 00:11:41.900
right? Like gets you back in the black.

00:11:41.900 --> 00:11:45.880
Yeah. They put us, they put, they, they try to put like the police tape around the entire system

00:11:45.880 --> 00:11:50.160
so that we don't touch it after that. So it doesn't break. But at the same time,

00:11:50.160 --> 00:11:52.320
it's constantly like wants new features.

00:11:52.320 --> 00:11:54.780
Can't have it both ways, can you?

00:11:54.840 --> 00:12:00.140
Yeah. I saw a really cool joke cartoon type of thing. And it just said the first rule

00:12:00.140 --> 00:12:03.840
of programming is if it's not broke, don't touch it.

00:12:03.840 --> 00:12:08.280
That's really an excellent optimization.

00:12:08.280 --> 00:12:13.760
Yeah. I'm not sure if it's really good advice, but I certainly know the feeling and you know,

00:12:13.760 --> 00:12:19.480
I know the feeling even more when it's software that I didn't originally write and I'm not especially

00:12:19.480 --> 00:12:24.660
fond of or, or think it's like well written. Yeah. Yeah. It's like, if you touch that and break it,

00:12:24.720 --> 00:12:29.320
it becomes yours. Like, no, no, it's fine. We don't need to, it's fine over there. It's just,

00:12:29.320 --> 00:12:32.700
we're going to let it do its thing. If you want to touch it, you can fix it, but not at all.

00:12:32.700 --> 00:12:40.940
Cool. All right. So let's jump into the main topic here, which I think is going to be a lot of fun.

00:12:41.020 --> 00:12:50.000
So as I mentioned before, both of you have been on the show, episode 194 and 182. And I don't remember

00:12:50.000 --> 00:12:55.960
which direction it went, but I know that one of you guys reached out to the other after you were both

00:12:55.960 --> 00:13:00.740
on the show saying, Hey, it sounds like there might be some chance for us to work together or help each

00:13:00.740 --> 00:13:06.120
other out. And you all started working together through that, right? Let's give us the story there.

00:13:06.120 --> 00:13:12.640
I had listened to the episode that Rusty was on and I really liked, I really enjoyed it. And I thought,

00:13:12.640 --> 00:13:17.540
you know, I thought to myself, there's a real opportunity not only to help, help out, but to

00:13:17.540 --> 00:13:23.840
have him help me. I am teaching sometimes at this STEM place near me. And of course the writing,

00:13:23.840 --> 00:13:30.160
the articles is sort of like teaching. And plus I had taught many years ago and realized how difficult

00:13:30.160 --> 00:13:36.000
it is. And I was struggling at the STEM course with STEM place teaching kids. And I thought,

00:13:36.000 --> 00:13:40.560
you know, Rusty could really be helpful. And I, I've been in that position as a self-taught programmer.

00:13:40.560 --> 00:13:47.920
I learned myself all of the languages that I know. And so I've been subject to trying to figure things

00:13:47.920 --> 00:13:51.900
out. And I've been at the hands of divas who didn't really want to help me as much as give me a hard

00:13:51.900 --> 00:13:56.860
time. And I thought, you know, I could save Rusty some time and avoid that. I reached out to him

00:13:56.860 --> 00:14:01.960
through you to see if he'd be interested in connecting. And, and he was, which was great.

00:14:01.960 --> 00:14:06.780
That's really cool. And I'm pleasantly surprised to see that you all have gotten so much and made so

00:14:06.780 --> 00:14:12.280
much progress and done so much collaboration. That's, that's great. And so Rusty, I guess it's

00:14:12.280 --> 00:14:17.600
also maybe worth mentioning that you got a new position where you're actually doing more programming

00:14:17.600 --> 00:14:23.400
and this, this aspect of life is actually even more relevant to you these days, right?

00:14:23.600 --> 00:14:27.980
Yeah, it's, it was, it was really good that we had a new, with a change of kind of leadership

00:14:27.980 --> 00:14:33.380
and our tech team in the school district that I'm at. And the new guy was not as technical as perhaps

00:14:33.380 --> 00:14:39.580
the guy before him. So I got to help out with a lot of different reports that had to be filed and things,

00:14:39.580 --> 00:14:43.780
which the average person would probably not find that exciting, but it was great. I got to,

00:14:43.780 --> 00:14:48.040
you know, use some Python pandas to clean data and all the things I'd heard about basically listen to

00:14:48.040 --> 00:14:51.740
your podcast. And I was like, why would somebody want to use a Jupyter notebook? And then,

00:14:51.820 --> 00:14:56.300
you know, I figured out a reason why I might want to do that. Yeah, it was good. So now I'm the data

00:14:56.300 --> 00:15:01.300
manager for my district. I left teaching. I still leave in the middle of the day from programming and

00:15:01.300 --> 00:15:08.280
go and teach kindergarten. And then I will come back and finish off my day writing a SQL and,

00:15:08.280 --> 00:15:14.060
and plugins for a power school and things. But so it's an interesting break.

00:15:14.060 --> 00:15:19.800
No, they didn't have anybody to do it when I, when I took the job. So this year, so.

00:15:19.800 --> 00:15:21.620
Oh, you're a voluntold. I understand.

00:15:21.620 --> 00:15:24.140
Exactly. You can do this, but.

00:15:24.140 --> 00:15:28.400
Here's a, you got to help out here. That sounds wonderful. You describe it. It's always like

00:15:28.400 --> 00:15:32.840
these reports. A lot of people really wouldn't be that keen to do it or whatever. But I remember

00:15:32.840 --> 00:15:37.240
my first programming job, it could have been almost anything they were having me do. I'm just like,

00:15:37.540 --> 00:15:43.460
I'm sitting here at this computer. I was C++ at the time. Like I'm writing C++ code. They're paying

00:15:43.460 --> 00:15:48.580
me. And I have this book and I get to learn it while they're paying me. Like this is heaven,

00:15:48.580 --> 00:15:52.620
right? Like, I mean, it wasn't even that advanced to stuff. Right. But for me, it was like,

00:15:52.620 --> 00:15:56.780
I'm in, I can't believe it. Like, how have they not found out I don't belong here? I'm going to

00:15:56.780 --> 00:15:59.520
figure out this before they catch out onto it and get me out of here again.

00:15:59.520 --> 00:16:01.560
Yeah. Where's security being escorting me out?

00:16:01.560 --> 00:16:03.560
Exactly. Right. Exactly.

00:16:03.560 --> 00:16:08.580
It's been really good. I've been really enjoying the kind of the blending of, you know, education and

00:16:08.580 --> 00:16:13.180
programming at the same time. So I'm still involved in school and I've never had an adult job that

00:16:13.180 --> 00:16:17.100
didn't involve school, you know, working at school. So it's been, it's been a great process.

00:16:17.100 --> 00:16:24.160
This portion of Talk Python To Me is brought to you by Brilliant.org. Brilliant's mission is to help

00:16:24.160 --> 00:16:28.700
people achieve their learning goals. So whether you're a student, a professional brushing up,

00:16:28.700 --> 00:16:32.400
or learning cutting edge topics, or someone who just wants to understand the world better,

00:16:32.400 --> 00:16:37.060
you should check out Brilliant. Set a goal to improve yourself a little bit every day. Brilliant

00:16:37.060 --> 00:16:41.540
makes it easy with interactive explorations and a mobile app that you can use on the go.

00:16:41.540 --> 00:16:46.860
If you're naturally curious, want to build your problem solving skills, or need to develop confidence

00:16:46.860 --> 00:16:52.520
in your analytical abilities, then get Brilliant Premium to learn something new every day. Brilliant's

00:16:52.520 --> 00:16:58.040
thought-provoking math, science, and computer science content helps guide you to mastery by taking

00:16:58.040 --> 00:17:03.560
complex concepts and breaking them into bite-sized, understandable chunks. So get started at

00:17:03.560 --> 00:17:07.980
 talkpython.fm/brilliant, or just click the link in your show notes.

00:17:09.740 --> 00:17:18.040
Do you feel that schools, elementary, middle, high school types level of schools are underserved from

00:17:18.040 --> 00:17:20.920
like custom software or software that solves their problems?

00:17:20.920 --> 00:17:27.180
That is a perfect question. Yes, because we don't have the money that industry has. So all the services

00:17:27.180 --> 00:17:34.920
go towards people who can pay for it. And schools have to, we get this generic thing that can be bent to

00:17:34.920 --> 00:17:39.360
our will, but have a lack of resources amount of people who can do it. You know, there's a district

00:17:39.360 --> 00:17:44.720
down in, in Burlington. It's the big city in Vermont. And you know, there's a data team of six people.

00:17:44.720 --> 00:17:49.800
You know, they, they hired a data scientist and stuff. And, and in my school district on the,

00:17:49.800 --> 00:17:54.800
on the edge of civilization, we have me and I've been there for eight months, you know?

00:17:55.440 --> 00:17:57.280
You're on the outpost way out there.

00:17:57.280 --> 00:17:57.600
That's right.

00:17:57.600 --> 00:17:59.620
Yeah.

00:17:59.620 --> 00:18:08.120
Yeah. That's an interesting point because if I go to any major fortune 500 company or pretty much any

00:18:08.120 --> 00:18:13.280
startup, almost any startup or, you know, even middle-sized companies, right? They all have a

00:18:13.280 --> 00:18:16.320
software IT group, right? Right.

00:18:16.320 --> 00:18:20.680
Maybe it's only five people and they're not super advanced, but there's a team of people who write

00:18:20.680 --> 00:18:25.120
software to make that place run. Like the place I was telling you about where I was doing the C++

00:18:25.120 --> 00:18:31.140
stuff. That was like six people, you know, and they still had somebody hired to work there as a

00:18:31.140 --> 00:18:37.240
developer and build software. So I just feel like there's probably a lot of opportunity to give a

00:18:37.240 --> 00:18:43.280
little bit of programming skill to folks at the non-college, non-university level schools to empower

00:18:43.280 --> 00:18:44.560
them to do, do more.

00:18:44.560 --> 00:18:49.900
I agree. You always say that, you know, Python is maybe your superpower at work and it's very much true

00:18:49.900 --> 00:18:54.800
where we're at. You know, there's very few people have the time to slow down and write

00:18:54.800 --> 00:18:59.840
code like I do at the moment. A lot of people that have my job around the state, it's been added on.

00:18:59.840 --> 00:19:03.940
Oh yeah, you're going to do this data portion as well as whatever. And I'm in the pretty unique

00:19:03.940 --> 00:19:08.020
position where I was hired to do that. So it's, it's been, it's been great.

00:19:08.020 --> 00:19:10.580
That's cool. And you want to, right? You're not voluntold.

00:19:10.580 --> 00:19:11.520
Exactly. I asked.

00:19:11.520 --> 00:19:18.820
Nice. And Doug, you had mentioned that you're a self-taught developer. Like I am mostly, I took,

00:19:19.020 --> 00:19:24.920
I needed a couple of credits at the university for a minor in computer science and other types

00:19:24.920 --> 00:19:29.780
of stuff. But for the most part, I'm pretty much self-taught. So I'm pretty sympathetic about

00:19:29.780 --> 00:19:35.860
those sorts of challenges and whatnot, but maybe just give us the quick story of, of that for you.

00:19:35.860 --> 00:19:37.240
Cause I'm sure that'll resonate.

00:19:37.240 --> 00:19:42.020
I graduated with a BS in physics, which I tell the joke all the time with a BS in physics,

00:19:42.020 --> 00:19:45.060
I'm completely qualified to get coffee for the other physicists.

00:19:45.060 --> 00:19:54.080
But by the senior year, I did a project where we built a very primitive cat scanner, which was a

00:19:54.080 --> 00:19:58.420
computer controlled cat scanner. And I got hooked. I bought a Radio Shack color computer,

00:19:58.420 --> 00:20:04.500
taught myself a basic and a little bit of assembler. And that was enough to get my first

00:20:04.500 --> 00:20:09.800
job as an engineer after college, doing process control. And I was off and running doing

00:20:09.800 --> 00:20:16.600
programming and I worked in Fortran and Pascal and CC++ PHP and then now Python and

00:20:16.600 --> 00:20:17.620
JavaScript quite a bit.

00:20:17.620 --> 00:20:19.780
Yeah. You've seen a lot of them. That's, that's super cool.

00:20:19.780 --> 00:20:20.200
Yeah.

00:20:20.200 --> 00:20:24.740
Yeah. So that, that starts when there are books before the internet, before Stack Overflow, right?

00:20:24.740 --> 00:20:28.640
Oh, this was, this starts before that, before books, this was like BBSs.

00:20:31.140 --> 00:20:35.860
So BBSs, that's like the internet that you go to. That's really slow and it makes sound and only

00:20:35.860 --> 00:20:37.520
one person can be on at a time, right?

00:20:37.520 --> 00:20:42.100
Yeah. My education was continually slowed down by getting phone calls from friends.

00:20:42.100 --> 00:20:42.480
Yes.

00:20:42.480 --> 00:20:48.480
I remember that. We actually had two phone lines at my house just so my brothers and I could

00:20:48.480 --> 00:20:53.780
all be on either internet dial up or on BBSs at the same time. And it was still a problem,

00:20:53.780 --> 00:20:54.180
right?

00:20:54.240 --> 00:20:54.480
Yeah.

00:20:54.480 --> 00:21:00.900
We'd have like call waiting come in and knock us off and oh my God. All right. So fun,

00:21:00.900 --> 00:21:06.260
fun time. So tell me about what you guys have worked on, especially in the beginning, I guess,

00:21:06.260 --> 00:21:11.820
Rusty, go ahead and maybe start this conversation now. Like, so Doug reached out to you and you're

00:21:11.820 --> 00:21:16.940
like, wait, this guy, just this random guy on the internet. That's really, yeah, that's really

00:21:16.940 --> 00:21:20.700
knowledgeable, wants to help me out. Like, what is this? And so where did you start? And like,

00:21:20.700 --> 00:21:22.160
what was that like when you got that message?

00:21:22.160 --> 00:21:25.860
I'd said earlier that, well, I didn't say on the podcast, but it was great because Doug

00:21:25.860 --> 00:21:30.300
wanted to exchange kind of some teaching knowledge with Python knowledge. And I said that I basically

00:21:30.300 --> 00:21:35.360
won the lottery and got somebody who knew exactly what I wanted. And Doug lost out because he's

00:21:35.360 --> 00:21:41.020
already a good teacher, but I still needed lots of help. So I just started asking questions. I wanted

00:21:41.020 --> 00:21:46.880
to go further with Flask and started to build that, you know, database app, the kind of asynchronous

00:21:46.880 --> 00:21:54.400
kind of card playing app. And I had no experience with, with databases or not. So he kind of showed

00:21:54.400 --> 00:22:00.360
me a, luckily he was writing an article on something very similar and kind of talked me through starting

00:22:00.360 --> 00:22:07.620
to use SQLAlchemy. And it just kind of got started. And I asked him questions about database design and

00:22:07.620 --> 00:22:12.720
I would, I would craft emails. And then, you know, there's a, we had about one or two day delay just

00:22:12.720 --> 00:22:18.380
because we're both busy people and that's how we kind of started. And then I started to ask more and

00:22:18.380 --> 00:22:24.420
more questions and it helped a lot that we had a lot of common ground. We're both cyclists. We both

00:22:24.420 --> 00:22:29.700
enjoyed Python and teaching. So there was a lot of, you know, banter. And I tend to try and ask a lot

00:22:29.700 --> 00:22:33.220
of personal questions when I'm working with people as well, just to kind of get to know them better.

00:22:33.220 --> 00:22:40.080
So started to build my app and, and I was able to go, you know, and say, Hey, I'm having problems with

00:22:40.080 --> 00:22:44.520
this. I didn't have to explain everything from the beginning or, yeah, it was just a really

00:22:44.520 --> 00:22:51.000
wonderful experience for me to be able to, just have get stuck and, you know, within a day,

00:22:51.000 --> 00:22:54.500
be completely unstuck and probably looking at a different feature.

00:22:54.500 --> 00:22:59.180
Yeah. That's really interesting. You know, like those types of assistance or whatever,

00:22:59.180 --> 00:23:03.140
when you're new, you can be stuck on something for like five hours and you're like this,

00:23:03.140 --> 00:23:09.220
I just don't know. I just tried everything. And somebody who's gone through it a few times,

00:23:09.220 --> 00:23:13.540
like, Oh yeah, that's confusing. But when I figured it out, it was X. Right. And then,

00:23:13.540 --> 00:23:18.940
so there's a lot of effort and that's potentially for like staying in touch and coordinating, but

00:23:18.940 --> 00:23:23.280
sometimes you can just look at something, Oh, that's really easy. And it's, it's just such a

00:23:23.280 --> 00:23:28.500
service to you. Right. To just be able to receive that and go, Oh my gosh. Right. I so appreciate it.

00:23:28.500 --> 00:23:31.820
Whereas like the person who do it, like, it's okay. Well, I just called it out of my memory. Right. I kind

00:23:31.820 --> 00:23:36.900
of know. Right. Yeah. I put everything on GitHub. I was starting to get a big into GitHub,

00:23:37.040 --> 00:23:42.020
as much. I'm still afraid that I'm not going to be able to recover what, you know,

00:23:42.020 --> 00:23:46.320
two or three versions back. And so I don't have that much faith in it, but it was good to be able

00:23:46.320 --> 00:23:51.280
to have everything there. So you've moved on past the, I've made some progress on this project.

00:23:51.280 --> 00:23:53.940
Let me zip up the directory and give it like a version.

00:23:55.860 --> 00:23:57.940
Doug, you're laughing. Have you seen that as well?

00:23:57.940 --> 00:24:03.700
I knew GitHub was great before I knew how to use it. Yeah. So we were able to do that. And then I

00:24:03.700 --> 00:24:07.960
could just say, Hey, you know, I've, I've done the update and Doug could pull it down on his end and,

00:24:07.960 --> 00:24:12.320
and run it and see what the error was or whatever it might be that way. So that was pretty cool.

00:24:12.320 --> 00:24:16.640
I always made sure that before I asked a question, I wasn't going to waste his time that I had

00:24:16.640 --> 00:24:21.620
exhausted everything. So it wasn't a flippant. Oh, I'm stuck for five minutes. Go and do this. It was,

00:24:21.620 --> 00:24:25.780
you know, I'm really stuck here. So now I'm going to have to ask. Yeah. Yeah. And I, you know,

00:24:25.780 --> 00:24:30.020
I have some folks who periodically ask me questions, whatever. And when it's like that, I totally don't

00:24:30.020 --> 00:24:35.460
mind. It's fine. Right. The thing is, you know, sometimes you have people are just like, well,

00:24:35.460 --> 00:24:41.100
this isn't working. Why? And, you know, it's pretty obvious that like a little bit of take the

00:24:41.100 --> 00:24:45.800
error message, put it in Google would come up with a really good answer. you know, it's one of those

00:24:45.800 --> 00:24:51.200
types of things. And yeah, so that's really, I think an important part of trying to make something

00:24:51.200 --> 00:24:57.580
like this work is if you're going to work with Doug and ask him questions and, you know, basically

00:24:57.580 --> 00:25:03.080
take some of his extra time and energy, cause he's got so much when he's not working on his book or his

00:25:03.080 --> 00:25:10.420
book articles or all the other stuff he's doing that it's really like, you know, that someone's put a

00:25:10.420 --> 00:25:13.840
lot of effort into it because then it's like, okay, well they really tried and they're really stuck and

00:25:13.840 --> 00:25:19.260
I can probably help them as opposed to just this person didn't even Google it. Like I really don't want to,

00:25:19.260 --> 00:25:25.860
you know, it really was a lot more. Yeah. Sometimes people will shoot me a message and I'll

00:25:25.860 --> 00:25:30.280
ask, could you help me with this? I'm really, it's like clearly not like from one of my courses or

00:25:30.280 --> 00:25:34.880
from an episode. It's just like random Python question. I'll take the question, put it in Google,

00:25:34.880 --> 00:25:39.280
grab the link one and shoot it back and go, how about this? Oh my gosh, that totally fixed it.

00:25:39.380 --> 00:25:41.420
That's an incredible skill.

00:25:41.420 --> 00:25:41.900
Yeah.

00:25:41.900 --> 00:25:45.580
You need to let me Google that for you as a site.

00:25:45.580 --> 00:25:49.340
I know. Is it still a, is that still a thing?

00:25:49.360 --> 00:25:55.320
Yeah. It was mostly concepts that when I would get to, to ask, you know, that's, I needed to know

00:25:55.320 --> 00:26:01.340
how to go about something. And I had to be careful because Doug would actually just write me the

00:26:01.340 --> 00:26:06.060
program and send it back. And I would be like, oh my God, how long did this take? And it was like a

00:26:06.060 --> 00:26:12.160
complete, you know, Ajax program that updated your database for you. It wasn't exactly what I was doing.

00:26:12.160 --> 00:26:16.820
So I would still have to create my own, but it was a working example of here. This is what it might

00:26:16.820 --> 00:26:21.820
look like that I could go into it and dissect it. I would have to be like, okay, I'm at work right

00:26:21.820 --> 00:26:26.540
now. I'm going to need three hours at home to like, look through all this that he's just sent me. And so

00:26:26.540 --> 00:26:27.580
it was pretty good that way.

00:26:27.580 --> 00:26:28.260
That's awesome.

00:26:28.260 --> 00:26:33.880
For me, that was the key with Russell was that he would always ask me, you know, I could see that he

00:26:33.880 --> 00:26:38.280
had looked for stuff and well-researched and intelligent questions, which was great for me because I,

00:26:38.280 --> 00:26:42.060
you know, I don't have a lot of time to spend, but the other thing was,

00:26:42.140 --> 00:26:47.540
I often didn't give him complete solutions. I would do the left as an exercise for the reader

00:26:47.540 --> 00:26:54.640
kind of thing where I would give him a sample that I knew that he could extend and extrapolate

00:26:54.640 --> 00:26:57.920
from in order to solve the bigger problems he was facing.

00:26:57.920 --> 00:27:02.960
Right. Like here's a really, really simple proof of concept of like some Ajax thing or something,

00:27:02.960 --> 00:27:03.240
right?

00:27:03.240 --> 00:27:08.940
Yeah. Some of the things were just conceptual Python stuff, like, you know, moving away from

00:27:08.940 --> 00:27:12.120
everything as a dictionary. Dictionaries are extraordinarily powerful.

00:27:12.120 --> 00:27:17.320
but to get into object oriented stuff, it's kind of a hurdle, but it has a really great

00:27:17.320 --> 00:27:21.060
use. And I knew that I wanted to take him, you know, from, from dictionaries to object oriented

00:27:21.060 --> 00:27:26.460
and then onto SQLAlchemy, which of course is dependent on objects to get into databases.

00:27:26.460 --> 00:27:56.440
Yeah, absolutely. I think SQLAlchemy is really special and ORMs in general. I think they're very special because I remember when I was learning to talk to databases and you had to write SQL embedded in strings, embedded in your programming language. You're like, I just want to like get some data. Why do I have to learn a whole new programming language for this? And then, you know, you got to go and put stuff back in the database and like, how do you get the right types? And then obviously you can't string.

00:27:56.440 --> 00:28:15.800
concatenate it. You got to figure out how to use parameters. There's just, there's all those layers of either best practices or just understanding or, you know, lazy loading or whatever. And with SQLAlchemy, you can kind of learn a skill that is also applicable in general Python, this object story. And databases are easy again. It's wonderful.

00:28:15.960 --> 00:28:31.080
Yeah. I mean, I've been in, had both feet in the object oriented camp since C++, you know, 20 years ago. And I didn't really want to have to deal with tables of raw data from SQL. I wanted things to come to me in an object form because I want to think in terms of objects.

00:28:31.240 --> 00:28:42.580
Yeah. I mean, usually a real common pattern, if you weren't using an ORM would be to do a query and then load up an object with the data that you caught back and then give that back, give that over. Right. It's like, well, why am I doing this?

00:28:42.580 --> 00:28:48.520
Like from an object and once coming in and then trying to update the database and make, Oh, this is fun.

00:28:48.620 --> 00:29:18.080
Yeah, exactly. Couldn't we let a framework do this? Which, which is really nice. And it creates the tables for you and all that. So I guess I'll throw this out to either of you. I don't know which one wants to take it, but Rusty, you spoke about using Git and source control and how that was a little bit mysterious. Like you knew it would be good for you and you knew you should do it, but it was kind of something you didn't really know. So it was just another layer of something you have to deal with while you're trying to learn all these things. And finally you got there. So that worked out as a super way for collaborating, right?

00:29:18.080 --> 00:29:47.440
Yeah, it was fantastic. I was using it really to go from my work computer to my home computer. You know, if I had 10 minutes at work for lunch or 20 minutes, I would go ahead and, you know, it'd work on my program and then sync it, upload it and then get home and then pop it, keep going. So that was pretty cool that I could switch between computers. That was kind of my initial impetus for using it. And then when Doug actually asked to be a contributor one time, so he could do a pull request. Then I had to like do like two hours worth of research when that came back to figure out how to merge and things like that.

00:29:47.540 --> 00:29:50.140
I think I did it right because it worked afterwards, but

00:29:50.140 --> 00:29:51.860
Oh my gosh, there's a merge conflict.

00:29:51.860 --> 00:29:52.780
What are we going to do?

00:29:52.780 --> 00:30:15.320
Yeah. So that took some time, but you know, we, I figured that out and I use GitHub for all my, my projects now just to kind of keep it there. But yeah, that was a part of the learning curve as well. It was really cool. I was still the only time I've ever collaborated with someone on GitHub. I've, I'm actually to the point now where I'm, I'm asking questions of a plugin, not plugin, package authors on GitHub as well, which has been pretty cool.

00:30:15.320 --> 00:30:24.720
It's a really nice place to be able to go and have a conversation as well. Right. We've had source control for a long time, but the fact that it's got this kind of social component to it is really cool.

00:30:24.800 --> 00:30:25.200
Yeah. Yeah.

00:30:25.200 --> 00:30:40.440
For me, it was great because, you know, Rusty and I had used a couple of ways to collaborate email, of course, and then we had done some screen captures and then screen capture movies and Skyping. And, some of that, you know, that was useful to me, but sometimes I was like, what is he talking about?

00:30:41.080 --> 00:30:53.480
I need to see this thing because I needed the context of, what it was running. And so having access to the whole code base through GitHub was really helpful for me for that context. And you know what the goal was that he was trying to achieve.

00:30:53.480 --> 00:31:06.240
Absolutely. I've certainly had people send me videos of like, here's what I'm trying to do this part. I'm stuck on, but when I click this, here's what's happens. And you know, that is actually really better than just a random email trying to describe it.

00:31:06.240 --> 00:31:09.660
But it's not necessarily as good as being able to just poke around yourself.

00:31:09.660 --> 00:31:10.020
Yeah.

00:31:10.020 --> 00:31:25.680
I'll make a video in, you know, in 30 seconds that would take me, you know, 20 minutes to type. So I'm definitely much more and I'm more comfortable in front of the camera and I've been using it in teaching for a long time to, to make videos. So that was probably the most common way I would send issues. I would say.

00:31:25.680 --> 00:31:42.160
That was great for me too, because I could think at length and, you know, I sort of could type my way to an answer within code instead of keeping rusty on the phone or trying to send another video back and forth. Cause some of those concepts are kind of abstract, like, you know, OO and things like that are a little abstract to try to talk about.

00:31:42.160 --> 00:31:55.020
Yeah, definitely. A good written example is nice there. You know, I've used that screen recording trick for bug reports, you know, for like random software. Like, I know you say this is not a problem, but here I've recorded it.

00:31:55.780 --> 00:32:20.680
This button that says do X, it doesn't do X anymore. Can you just help me out here? And that's pretty effective as well, but it's not so much of a mentorship, I have a relationship as well. Now, one of your philosophies, Rusty, is that you're not keen to use code that you don't understand outside of say pip install a thing and just leverage that directly. So how'd that play into this whole interaction?

00:32:20.680 --> 00:32:48.500
Like I say, unless it's a package, I'm really not that comfortable. Like if, you know, if somebody were to give me, here's a bunch of code that does exactly what you want. Now I wasn't doing this for a job at the time. These were personal projects that I was trying to learn. And I really feel like if that happens and I try and debug it, I, and I don't understand what's going on. It's going to be really, really tough for me to use that in any kind of a meaningful way. And that's one of the things that Doug helped me understand was actually, I listened to his interview on your show.

00:32:48.500 --> 00:33:02.700
And he was saying that he doesn't understand why people don't use an editor that has a debugger in it. And now I wouldn't now, you know, if I was going to write something because it's just that important. And I didn't really understand how important it was being able to look inside the variables would be.

00:33:02.900 --> 00:33:23.880
So I just really want to understand it at its base level because I just feel it's going to be so much better going forward. So yeah, there's even some packages I wouldn't use that took over my Flask app in a way like the Flask users package is just this huge invasive thing. And I didn't really understand what I wanted to do. If I was building something that I was just going to build it for a month and then leave it or whatever, I might use it.

00:33:23.940 --> 00:33:30.240
But otherwise, I'd rather understand that whole process so I could use it later on or use that knowledge later on.

00:33:30.240 --> 00:33:34.140
Yeah, I totally agree. And that Flask example is pretty interesting because I feel the same way.

00:33:34.640 --> 00:33:47.520
Right. Like I put together a course on Flask and it doesn't have any of the extensions, right? It doesn't use Flask login or any of that stuff because I just want to talk about the primary thing and every one of those layers.

00:33:47.520 --> 00:34:00.180
While it saves you a few lines here, it adds layers of complexity and understanding along the way. If people want to go grab that later, that's fine, right? They can go use that. But sometimes you just want to just like, what is the essence of what I'm doing? Right?

00:34:00.520 --> 00:34:03.720
Yeah. What do you think? How's your philosophy around this, Doug?

00:34:03.720 --> 00:34:13.300
I do like to use packages, mostly because I work particularly. I just don't have the time to build everything myself. But I spend a lot of time vetting stuff that I want to use.

00:34:13.520 --> 00:34:26.000
For instance, we write a lot of REST APIs and I looked around a lot to find a tool that I thought worked for me, which is why I use this thing called connection rather than some of the Flask RESTful stuff.

00:34:26.220 --> 00:34:40.520
Because it just fit my style of work. It seems well supported. It has current updates and all that stuff. There are things that I do want to build myself because I have to have that much control. It depends on how much my OCD kicks in.

00:34:40.520 --> 00:34:43.720
If I build it myself or use a package.

00:34:43.920 --> 00:34:58.040
Yeah, I think there's just so many trade-offs. And it's interesting to talk about because it's like, what's the right action? What's the right choice? You know, for example, like just take like Flask login or authentication or Flask users as an idea.

00:34:58.700 --> 00:35:18.340
On one hand, it's great to let that whole thing be someone else's problem. But as soon as it doesn't do what you need and you're like outside of its box, then all of a sudden you're jumping through all these hoops to try to understand how to juggle it plus what you're doing and so on. Right. And so it's just attention. I think people just got to get used to.

00:35:18.340 --> 00:35:32.520
When you download a good package like Flask users, it's great that a lot of that works for you with some hidden complexity. It's like a black box. But when you have to open the black box and try to do something with it, that can be a bit of a hassle.

00:35:32.520 --> 00:35:47.040
This portion of Talk Python To Me is brought to you by Linode. Whether you're working on a personal project or managing your enterprise's infrastructure, Linode has the pricing, support, and scale that you need to take your project to the next level.

00:35:47.540 --> 00:36:01.700
With 11 data centers worldwide, including their newest data center in Sydney, Australia, enterprise-grade hardware, S3-compatible storage, and the next-generation network, Linode delivers the performance that you expect at a price that you don't.

00:36:01.700 --> 00:36:16.700
Get started on Linode today with a $20 credit and you get access to native SSD storage, a 40-gigabit network, industry-leading processors, their revamped cloud manager at cloud.linode.com, root access to your server, along with their newest API and a Python CLS.

00:36:16.740 --> 00:36:25.780
Python CLI. Just visit talkpython.fm/Linode when creating a new Linode account, and you'll automatically get $20 credit for your next project.

00:36:25.780 --> 00:36:32.280
Oh, and one last thing. They're hiring. Go to linode.com slash careers to find out more. Let them know that we sent you.

00:36:35.140 --> 00:36:54.660
One of the things I think could be helpful from a mentor-mentee relationship is when you're new in writing code, and I kind of touched on this a little bit earlier, Rusty, when I asked you the question about going back to your other project, is a lot of times beginners, when they're working on something, they're like, if I can just get this to work, that's it.

00:36:54.660 --> 00:37:05.600
It's working now, right? But then there's the, oh, this is not very Pythonic, or did you know that Python has this language feature that makes those five lines be one, and it's real simple?

00:37:05.600 --> 00:37:10.360
Or even there's a standard library thing, like, why are you sorting this by hand? You know what I mean? Things like that.

00:37:10.520 --> 00:37:16.800
So maybe talk a little bit about, kind of helped him make his code more Pythonic, or make it a little more professional, or whatever.

00:37:16.800 --> 00:37:28.660
Well, I guess one of the early things that I did, or I tried to do, is when we first started to work together on the Flask app that Rusty put together, I recall it being a single file. It was a single Python file.

00:37:29.680 --> 00:37:38.280
And for me, I got, you know, I looked at that, and I said, oh, this is, it's hard for me to keep all of what's happened, this giant file, in my mental model all at once.

00:37:38.280 --> 00:37:41.300
The cognitive load on me was just too much.

00:37:41.300 --> 00:37:59.660
One of the things I did, and I think in one of the pull requests, was to introduce the idea of modules, and how to break code up into logical modules, where, you know, this kind of stuff should live here, this kind of stuff should live here, because you could think about, that sort of separates the work, or what you're doing, into a domain, a little domain, where that's all it really does.

00:37:59.660 --> 00:38:06.180
And you can sort of depend upon that. It makes the amount of stuff you have to keep in your brain a little bit smaller and more manageable.

00:38:06.180 --> 00:38:12.600
And then, you know, the idea of how to, creating your own modules, how to import your own modules, rather than just the system modules.

00:38:12.600 --> 00:38:21.580
I think for me, that was a big step that we took forward into making the work that Rusty was doing more along the lines of a developer, rather than just a programmer.

00:38:21.580 --> 00:38:24.520
Yeah, yeah, I certainly agree with that.

00:38:24.520 --> 00:38:26.540
It was great. Blueprints was a big part of that.

00:38:26.540 --> 00:38:27.920
Blueprints are interesting.

00:38:27.920 --> 00:38:29.700
These are things in Flask.

00:38:29.700 --> 00:38:42.980
You know, Flask, through, I don't know if I would put this on the people who were, like, writing the early tutorials for Flask, or just other people who are passionate about Flask and written tutorials.

00:38:42.980 --> 00:38:48.820
But whatever the origin is, it feels like Flask a lot of times gets sold as, like, Flask is amazing.

00:38:48.820 --> 00:38:51.420
It's so simple, you just need this one file.

00:38:51.420 --> 00:38:52.780
Just put your stuff there.

00:38:52.780 --> 00:38:53.300
Go.

00:38:53.300 --> 00:38:54.460
You know what I mean?

00:38:54.960 --> 00:38:56.080
You can do that.

00:38:56.080 --> 00:38:56.140
You can do that.

00:38:56.140 --> 00:38:58.660
For the really simple example, it's fine.

00:38:58.660 --> 00:38:58.860
Yeah.

00:38:58.860 --> 00:39:00.160
When your website has 300 views.

00:39:00.160 --> 00:39:01.540
For the whole world on a browser, that's fine.

00:39:01.540 --> 00:39:02.740
Yeah.

00:39:02.740 --> 00:39:05.700
You have 300 views and 10 database classes.

00:39:05.700 --> 00:39:06.960
And yeah, it's crazy.

00:39:06.960 --> 00:39:12.420
What nobody could get through to me until Doug and I worked together was why you'd want Blueprints.

00:39:12.580 --> 00:39:16.620
You know, while we got to a point where, like, you needed to break it up into these different pieces.

00:39:16.620 --> 00:39:20.460
And he must have shown me Blueprints two or three times before it finally clicked with me.

00:39:20.460 --> 00:39:25.620
Because I'd watched YouTube videos of the Flask site itself, or the docs.

00:39:25.620 --> 00:39:25.820
Yeah.

00:39:25.820 --> 00:39:28.560
Assumes you already know exactly why you'd want to do them.

00:39:28.560 --> 00:39:29.260
And yeah.

00:39:29.260 --> 00:39:31.740
So I just didn't understand why I'd want to start to break it up.

00:39:31.740 --> 00:39:37.360
I mean, one of the great things about Python is that it's supposed to be written clearly instead of cleverly, I suppose.

00:39:37.360 --> 00:39:39.560
You know, overly clever, I should say, rather.

00:39:39.560 --> 00:39:45.640
So Blueprints allowed you to kind of break that up, just like you would break up, you know, a function into smaller pieces, which was awesome.

00:39:45.640 --> 00:39:47.120
But yeah, it took a long time.

00:39:47.120 --> 00:39:49.400
And then even then, it's not super well documented.

00:39:49.660 --> 00:39:53.500
So watching somebody, a pro who had done it before was instrumental.

00:39:53.500 --> 00:39:57.480
And it really, really opened my eyes to why you'd want to do that.

00:39:57.480 --> 00:39:58.600
But it took a lot.

00:39:58.600 --> 00:39:59.180
Yeah, yeah.

00:39:59.180 --> 00:40:00.340
It's definitely one of those things.

00:40:00.340 --> 00:40:01.600
It's hard to sell.

00:40:01.600 --> 00:40:02.720
Like, why do I need this?

00:40:02.720 --> 00:40:05.760
Because a lot of times when you're getting started, you have three views.

00:40:05.760 --> 00:40:07.380
You're like, you're just making it complicated.

00:40:07.380 --> 00:40:09.680
Like, why are you putting all this stuff everywhere else?

00:40:09.680 --> 00:40:14.920
But when you have 300, all of a sudden, you know, having those categorized, like, here's the stuff about users.

00:40:14.920 --> 00:40:16.180
Here's the admin stuff.

00:40:16.180 --> 00:40:19.220
Here's the, I don't know, the blog stuff, whatever you're writing, right?

00:40:19.280 --> 00:40:20.660
Like, it's massive.

00:40:20.660 --> 00:40:22.500
And it's kind of like you said, Doug.

00:40:22.500 --> 00:40:31.720
I think one of the things that's really important for people to, as they're getting into programming to learn, is that you can think at different levels of building blocks, right?

00:40:31.720 --> 00:40:34.240
You can think, you talked about this with modules as well.

00:40:34.240 --> 00:40:37.360
Like, you can think of line by line what's happening.

00:40:37.360 --> 00:40:38.980
Or you can think of function by function.

00:40:38.980 --> 00:40:44.960
But if you use modules, you can sort of think, okay, that's the thing that I use for working with sending email.

00:40:45.340 --> 00:40:49.180
And I go to it and I say, send email, send debug message, send error.

00:40:49.180 --> 00:40:51.300
And that's, I don't care what, how that happens.

00:40:51.300 --> 00:40:52.740
I just ask it to do those three things.

00:40:52.740 --> 00:40:57.600
And so now you're just thinking at the, here's my email building blocks for the rest of my app.

00:40:57.600 --> 00:41:00.740
And so there's like these different conceptual layers that you go.

00:41:00.840 --> 00:41:07.620
And I think that's kind of being productive is really about identifying the right level and thinking of those Lego pieces, right?

00:41:07.620 --> 00:41:08.160
Oh, yeah.

00:41:08.160 --> 00:41:10.680
I mean, you know, that whole, why would I want to do this?

00:41:10.680 --> 00:41:15.680
You know, you start out simple and you think, oh, this is, you know, I can get something running pretty quickly.

00:41:15.920 --> 00:41:18.240
And then it starts to get more and more complex.

00:41:18.240 --> 00:41:20.180
And why would I want to do this?

00:41:20.180 --> 00:41:27.600
It's like, from my point of view, it's like, well, you know, you're already running into name conflicts with functions because you've got so many of them in one module.

00:41:27.920 --> 00:41:31.500
And you're crossing over where you're sending email in 10 different places.

00:41:31.500 --> 00:41:35.160
And it's hard to, it's hard to think about, you know, all those things that are going on there.

00:41:35.160 --> 00:41:40.300
If you put it in a module or the namespace and even, you know, what a namespace is, is so useful.

00:41:40.300 --> 00:41:50.020
And what Rusty said about that, we were over this a few times, part of the benefit for me, besides just enjoying helping him, was for me to find the right way to phrase it.

00:41:50.020 --> 00:41:54.480
You know, how do I convey this information that would help him hit?

00:41:54.700 --> 00:41:58.340
Because it's not like I gave him perfect examples and he took off of it.

00:41:58.340 --> 00:42:07.740
What I was doing was trying to find a way to show him an example or say it in a way where Rusty arrived at that aha moment all by himself.

00:42:07.740 --> 00:42:11.800
And suddenly realized, oh, this is why I want to do that.

00:42:11.800 --> 00:42:17.160
And then he would pursue it because it's not just because I told him to, it's because he suddenly saw the value of it.

00:42:17.160 --> 00:42:23.660
I think half the time he spent just stripping out my imports and everything imported in every single file.

00:42:23.780 --> 00:42:26.180
And that's one of the things I learned as well.

00:42:26.180 --> 00:42:27.800
Just in case you need it.

00:42:27.800 --> 00:42:34.580
I guess it's worth really quickly, just for folks who are out there who are using Flask, but they're like, wait, Flask Blueprints?

00:42:34.580 --> 00:42:36.300
Is this like an extra package or something?

00:42:36.300 --> 00:42:41.300
Flask Blueprints are awesome and I massively encourage people to use them.

00:42:41.300 --> 00:42:45.100
But Doug, maybe give us the quick elevator pitch on what those are.

00:42:45.100 --> 00:42:49.460
For me, Blueprints is a way to segregate functionality in the Flask app.

00:42:49.460 --> 00:42:59.580
So if you have a lot of URL endpoints, some of those are going to be related together like logins or these are the endpoints that I need to feed a page or provide a view.

00:43:00.120 --> 00:43:03.920
And you can have, you know, you have in a basic Flask app, you have one templates folder.

00:43:03.920 --> 00:43:07.880
And in that templates folder, you might have JavaScript and CSS and HTML.

00:43:07.880 --> 00:43:14.180
But as you get more pages in an app, that starts to pile up and you start coming in with these weird names and stuff like that.

00:43:14.180 --> 00:43:17.240
And then across, they don't really logically go together.

00:43:17.240 --> 00:43:27.160
So Blueprints is a way to separate the URL endpoints, the API, I guess, into modules which exist in separate files.

00:43:27.160 --> 00:43:40.040
And now you have all of these modules that contain that functionality, which they have their own template files, their own static files, you know, all those other things that make up the functionality of that page.

00:43:40.040 --> 00:43:43.440
I usually try to break it up by page because that's always complex enough for me.

00:43:43.820 --> 00:43:50.220
You have all the functionality of that page in one place, which is super handy because you can think about it in one place to the other.

00:43:50.220 --> 00:43:51.840
And nothing else in there, right?

00:43:51.840 --> 00:43:52.580
And nothing else.

00:43:52.580 --> 00:44:09.340
The other great thing, I haven't done this too much, but the other great thing is you can actually take that module, that Blueprint module, and use it in a separate app just by picking up that, you know, copying that directory or that folder, the project, what do they call it, a package, to another Flask app.

00:44:09.340 --> 00:44:10.140
And it would work.

00:44:10.240 --> 00:44:14.680
In my project, I had the main part where you actually played your cards or whatever.

00:44:14.680 --> 00:44:16.320
And then I just made another Blueprint.

00:44:16.320 --> 00:44:18.200
That was the member section.

00:44:18.200 --> 00:44:22.780
So then you'd check in, it'd pick up your deck, and then it'd shoot you over to that other module.

00:44:22.780 --> 00:44:26.660
And then there was a little point where it said, oh, if you're logged in, go back to here.

00:44:26.660 --> 00:44:27.520
Then you'd have to wait.

00:44:27.640 --> 00:44:31.060
And then when I wanted to build an admin section, that was a whole other Blueprint.

00:44:31.060 --> 00:44:31.600
Boom.

00:44:31.600 --> 00:44:33.900
Then I could work on that completely separate.

00:44:33.900 --> 00:44:34.180
Yeah.

00:44:34.180 --> 00:44:35.360
And so it's beautiful.

00:44:35.360 --> 00:44:46.420
So the reason I think it's less obvious in Flask and also, but still important, is Flask normally has you go app.route on all the view methods.

00:44:46.420 --> 00:44:49.620
And the place you create that route is in the main thing.

00:44:49.620 --> 00:44:53.820
So it's hard to share it to other files, which then have to be pre-imported.

00:44:53.820 --> 00:44:57.620
And it creates like this circular nightmare that you run into.

00:44:57.620 --> 00:44:59.240
And so it gets challenging.

00:44:59.240 --> 00:45:02.020
So people should, if they're not using them, they should definitely check into Blueprints.

00:45:02.020 --> 00:45:05.440
I use this idea even more extreme than that, maybe.

00:45:05.440 --> 00:45:10.140
So I've got separate modules for my related view methods, like say stuff about admin.

00:45:10.140 --> 00:45:15.240
And then there's functions in there that handle the views.

00:45:15.240 --> 00:45:18.200
And then I have my templates organized that way as well.

00:45:18.200 --> 00:45:20.880
So my template folders has maybe an admin subfolder.

00:45:21.040 --> 00:45:24.720
And then the names of the template files are the names of the functions.

00:45:24.720 --> 00:45:28.700
So there's like this kind of hierarchy of, I'm here, I know exactly where to go.

00:45:28.700 --> 00:45:30.860
There's not 500 templates in one file.

00:45:30.860 --> 00:45:40.520
And I also use this idea of view models, which is like classes that exchange and validate the data between the HTML request and the rest of your site.

00:45:40.520 --> 00:45:45.120
So like this data comes from the URL, this data comes from the form, this data comes from a header.

00:45:45.120 --> 00:45:47.240
Let's validate that and pass it on.

00:45:47.240 --> 00:45:49.120
And those also have the same structure, right?

00:45:49.120 --> 00:45:53.440
They're view models and then the module name and then the name that's associated.

00:45:53.440 --> 00:45:55.700
So I really love this idea of organizing it.

00:45:55.700 --> 00:46:00.980
It just, it means like almost no matter how complex your project grows, you just follow.

00:46:00.980 --> 00:46:04.960
It's like a little tree traversal and you found what you need on all the different layers.

00:46:04.960 --> 00:46:05.420
I love it.

00:46:05.540 --> 00:46:08.560
I think that's a really valuable part of Blueprints.

00:46:08.560 --> 00:46:22.400
I think one of the things you're alluding to, one of the more difficult parts of using Blueprints as a, not being familiar with it, is that idea of the app, the app instance and how to, how to share that in the other, the other modules in the Blueprints.

00:46:22.400 --> 00:46:23.580
Still working on that one.

00:46:23.920 --> 00:46:24.120
Yeah.

00:46:24.120 --> 00:46:27.740
Cause you, you created in the, in the main Flask app and then how do you access it elsewhere?

00:46:27.740 --> 00:46:28.840
That's, that's hard.

00:46:28.840 --> 00:46:30.500
I tried and said, I couldn't.

00:46:30.500 --> 00:46:31.820
My dog crashed.

00:46:31.820 --> 00:46:32.240
It won't let me.

00:46:32.240 --> 00:46:33.820
You start breaking up your code like this.

00:46:33.820 --> 00:46:38.700
You need to do it before you understand why you reach a point past where you should have done it.

00:46:38.720 --> 00:46:41.320
And then you start to understand that maybe I needed to start doing that.

00:46:41.320 --> 00:46:45.400
So having somebody there to kind of help you along with that process was, it's pretty key.

00:46:45.400 --> 00:46:45.760
Yeah.

00:46:45.760 --> 00:46:47.900
To kind of precipitate it and get it started.

00:46:47.900 --> 00:46:48.580
That's for sure.

00:46:48.580 --> 00:46:52.280
So what are some of the other tools you talked about using GitHub?

00:46:52.280 --> 00:46:55.020
You talked about recording, like sharing screen recordings.

00:46:55.020 --> 00:46:58.280
What are some of the other communication tooling that you used?

00:46:58.280 --> 00:46:59.660
Well, we just talked on the phone.

00:46:59.660 --> 00:47:00.720
Yep.

00:47:00.720 --> 00:47:03.500
It was harder to set up cause we're both busy folks.

00:47:03.500 --> 00:47:04.220
It's harder.

00:47:04.220 --> 00:47:07.260
It was harder to get the actual conversations, but it was great.

00:47:07.360 --> 00:47:14.040
So I would say every couple of weeks we'd chat on the phone and then we actually set up a video conference once as well, which was good.

00:47:14.040 --> 00:47:16.500
That was, that took a lot of doing to make sure we were both at a place.

00:47:16.500 --> 00:47:19.140
Cause you know, you can't do that necessarily quickly at work or whatever.

00:47:19.140 --> 00:47:19.920
Yeah.

00:47:19.920 --> 00:47:20.680
That can be challenging.

00:47:20.680 --> 00:47:23.560
It's also fortunate that the Rusty and I are both on the East coast.

00:47:23.560 --> 00:47:29.280
So there's no time zone issue for that video conferencing or trying to share a Skype call or something.

00:47:29.280 --> 00:47:30.380
Yeah.

00:47:30.380 --> 00:47:36.840
I do think that the tooling is around to make this much more possible for distributed folks.

00:47:36.940 --> 00:47:41.160
It's not like, well, I've got to find somebody in my town to help, which that may be great.

00:47:41.160 --> 00:47:41.460
Right.

00:47:41.460 --> 00:47:42.720
It may be great to find someone locally.

00:47:42.720 --> 00:47:47.540
Cause then you could just, Hey, every Wednesday, let's get lunch together and I'll bring our laptops or something like that.

00:47:47.540 --> 00:47:52.600
But you know, that limits the options of who you can work with pretty dramatically.

00:47:52.600 --> 00:47:54.660
If you restrict it to your town versus the world.

00:47:54.660 --> 00:48:07.860
Well, one of the other things that I tried to do, which I think is important for me as a mentor is that I try to be responsive to Rusty, that he sends me a question or he's updated his, the Git repository and asked me something about it.

00:48:07.920 --> 00:48:12.280
Is that I try to look at it pretty quickly because one, I want to help him.

00:48:12.280 --> 00:48:16.600
But two, I don't want to fall behind where he's, he's moved on because he hasn't heard from me.

00:48:16.600 --> 00:48:18.960
And, you know, suddenly my assistance is irrelevant.

00:48:18.960 --> 00:48:20.220
Right.

00:48:20.220 --> 00:48:20.500
Right.

00:48:20.500 --> 00:48:20.800
Right.

00:48:20.800 --> 00:48:22.800
You've already gone so far to help him out.

00:48:22.800 --> 00:48:23.940
You gotta, gotta keep going.

00:48:24.280 --> 00:48:37.100
Doug, how did you work with the, I guess there's probably this tension around, am I just doing the work for him versus teaching him, you know, give him a fish versus teaching him to fish?

00:48:37.100 --> 00:48:39.200
Yeah.

00:48:39.200 --> 00:48:52.960
Well, I think about that a lot because I teach at a STEM place where, with kids, you know, that range from age from eight to 16 and, they'd be happy to have me give them all the fish I have rather than figure it out themselves.

00:48:53.140 --> 00:48:54.640
So I'm onto that trick.

00:48:54.640 --> 00:48:59.460
Not that Rusty does that, but, oftentimes I guess one of the, I guess I do two things.

00:48:59.460 --> 00:49:09.660
I don't try to solve the entire problem for me and I'll give him a working example, but it's really a prototype that he's going to have to extrapolate from in order to do everything that he intends to do.

00:49:09.940 --> 00:49:20.280
And then the other thing I try to do is I really try to listen more than talk because I've found, I'm sure both of you have seen this, over time, over time.

00:49:20.700 --> 00:49:27.780
Listening more gives the person a chance to put their thoughts into words in a way that they're trying to explain it to them.

00:49:27.780 --> 00:49:28.900
They just keep nodding.

00:49:28.900 --> 00:49:34.360
Some, but quite often they come to the solution themselves by the act of expressing it.

00:49:34.360 --> 00:49:34.720
Yeah.

00:49:34.720 --> 00:49:40.540
You've kind of shaken up their thought patterns and got them to focus from a different perspective, right?

00:49:40.540 --> 00:49:42.140
To try to verbalize it and whatnot.

00:49:42.140 --> 00:49:42.580
Yeah.

00:49:42.580 --> 00:49:43.500
Silence is powerful.

00:49:43.500 --> 00:49:44.000
Yeah.

00:49:44.000 --> 00:49:47.020
Plus I know that, you know, I can tend to ramble on and on myself.

00:49:47.020 --> 00:49:51.780
So I want to give, I want to give him an opportunity to tell me what he's really trying to do.

00:49:51.780 --> 00:49:56.840
Well, that was a great story you told me, Doug, but that's not what I was asking.

00:49:56.840 --> 00:50:00.000
That's a real possibility.

00:50:00.000 --> 00:50:01.040
Yeah.

00:50:01.040 --> 00:50:01.440
Yeah.

00:50:01.440 --> 00:50:02.160
Well, for me too.

00:50:02.160 --> 00:50:06.080
So this sounds like this has been working out really well for you guys.

00:50:06.080 --> 00:50:12.560
And certainly I think it's great, Rusty, that you've got this job where it sounds just looking in from the outside.

00:50:12.560 --> 00:50:23.120
It sounds to me like you've leveled up a little bit in terms of what you're doing with Python and with code and the impact that you're able to have doing more analysis of what's going on and so on.

00:50:23.120 --> 00:50:26.180
And I'm sure this, this hasn't hurt that process at all.

00:50:26.180 --> 00:50:28.720
So it sounds like it's going really well.

00:50:28.720 --> 00:50:41.120
And I guess maybe the last thing I'd like to explore while we're together is just, you know, how do we help other people make these connections and help each other out and, you know, get, get benefits on both sides.

00:50:41.120 --> 00:50:42.200
It's a tough one.

00:50:42.200 --> 00:50:50.200
And I think before I actually connected with you to talk about, you know, kind of learning Python by myself, I'd gone to a couple of meetups in Burlington.

00:50:50.200 --> 00:50:55.120
And, you know, for me, it's an hour drive down there, an hour drive home and, and stuff.

00:50:55.120 --> 00:50:59.800
And I ended up there and everybody there is like working at a startup and, you know, is, is pretty savvy.

00:50:59.800 --> 00:51:02.320
And we had this like presentation.

00:51:02.320 --> 00:51:03.180
We're doing this with Dockers.

00:51:03.180 --> 00:51:05.020
And here's the thing about Kubernetes cluster.

00:51:05.020 --> 00:51:06.460
You're like, what is a loop?

00:51:07.040 --> 00:51:15.020
It was a lot of people who knew each other, you know, from different projects and stuff, you know, it was kind of a, an old boys club kind of thing or young boys club, I guess.

00:51:15.680 --> 00:51:22.680
And I, we had a presentation one night when I was there, there's a bunch of different organizations came out and said what they were doing with code in the area.

00:51:22.680 --> 00:51:32.160
And I would actually, I was thinking to myself, well, I'm just going to, next time there's one of these things, I'm going to show up with a slideshow and say, Hey, I want to try and bring, you know, coding to Franklin County as a teacher.

00:51:32.480 --> 00:51:36.020
And if I could have a mentor, I think I could get to the point where I could do that kind of thing.

00:51:36.020 --> 00:51:46.100
So I was not necessarily that desperate, but I was like, that was like my next big plan because I didn't really have anything else up my sleeve, you know, to try and make connections as far as that goes.

00:51:46.100 --> 00:51:46.680
It is tricky.

00:51:46.680 --> 00:51:49.160
I do think these meetups are very valuable.

00:51:49.160 --> 00:51:56.660
People are pretty humble or they're not really, you know, they, even though I'm sure people are doing stuff that sounds intimidating.

00:51:56.660 --> 00:52:05.240
I don't find very many people are condescending, I guess is what I was looking for is like, they're pretty welcoming of newcomers, especially in the Python meetups.

00:52:05.240 --> 00:52:10.400
And so I do think coming out to these are, you can really make some good connections at them.

00:52:10.400 --> 00:52:10.660
Yep.

00:52:10.660 --> 00:52:15.940
This was a general, like, I don't think there is, there is a Python group there, but it never has a meetup.

00:52:15.940 --> 00:52:17.180
So it was just kind of a general code.

00:52:17.180 --> 00:52:23.960
But it was a, you know, it was a comfortable atmosphere, but I wasn't necessarily going to walk out, you know, with the kind of connections that I was looking for.

00:52:23.960 --> 00:52:24.700
I don't know.

00:52:24.700 --> 00:52:30.240
I think I just kind of got lucky to get connected with Doug.

00:52:30.240 --> 00:52:32.960
So yeah, I don't know that I have any help.

00:52:32.960 --> 00:52:33.200
Yeah.

00:52:33.200 --> 00:52:34.740
It's funny how life takes these turns, right?

00:52:34.740 --> 00:52:35.080
Yeah.

00:52:35.080 --> 00:52:37.600
Doug, what do you think about finding mentors?

00:52:37.600 --> 00:52:40.480
Well, I think for me is, it's interesting.

00:52:40.480 --> 00:52:46.500
You know, I approached, I approached Rusty because there were some things that I wanted to help him with, but there's also some things I wanted to help me with.

00:52:46.500 --> 00:52:49.300
And so it's kind of a two way street about the mentoring.

00:52:49.300 --> 00:52:54.560
But I think part of it is just asking someone to do so is probably a big thing.

00:52:54.620 --> 00:53:00.560
I go to a Python meetup in Hartford, Connecticut, and I've given presentations there and I've met a lot of people.

00:53:00.560 --> 00:53:06.120
And some people, you know, have gotten in touch with me afterwards and, you know, enjoyed the presentation or whatever.

00:53:06.120 --> 00:53:08.420
But very few of them have asked me for help.

00:53:08.420 --> 00:53:12.020
And at the meetup, it was clear to me that they were really looking for help.

00:53:12.080 --> 00:53:14.640
And I thought, just ask me, you know, why not?

00:53:14.640 --> 00:53:15.440
Yeah.

00:53:15.440 --> 00:53:15.720
Yeah.

00:53:15.720 --> 00:53:18.320
Just, you know, the worst that could happen if somebody says no.

00:53:18.460 --> 00:53:21.080
I don't know how prevalent this is.

00:53:21.080 --> 00:53:31.720
And I honestly haven't been to it here in Portland, but at least in Portland, one of the Python meetups here has like a weekly, I'm sorry, not weekly, a monthly project night or something.

00:53:31.880 --> 00:53:36.300
Where you just come with whatever project you're working on and you could just talk to other people.

00:53:36.300 --> 00:53:40.140
And either they have a project or they're just there to give advice or whatever.

00:53:40.520 --> 00:53:44.220
And that seems like a really great thing to set up if it doesn't exist near you.

00:53:44.220 --> 00:53:47.800
I suggested that to the guy who runs the Hartford meetup that I've gone to.

00:53:47.800 --> 00:53:52.720
You know, they usually have two presentations a night and then he's had hackathon kind of things.

00:53:52.720 --> 00:53:54.100
But they're sort of free form.

00:53:54.100 --> 00:54:02.900
And I suggested to him that they might do exactly what you suggested is a tutorial night where people, somebody comes and they focus on a thing.

00:54:02.900 --> 00:54:06.840
And they work on that thing to try to kind of like a class, I guess.

00:54:06.840 --> 00:54:07.680
Yeah.

00:54:07.680 --> 00:54:07.840
Yeah.

00:54:07.840 --> 00:54:12.180
Like we'll do a hands-on workshop on SQLAlchemy or something like that.

00:54:12.180 --> 00:54:13.060
Yeah, exactly.

00:54:13.060 --> 00:54:13.400
Yeah.

00:54:13.400 --> 00:54:34.740
You know, another thing I'll throw out there, it doesn't work for super, super beginner, but it does work, I think, for even intermediate, like advanced beginner, I guess I would call it, is one of the things that really changed the interaction and trajectory for me was when I started doing presentations at my local meetup.

00:54:34.840 --> 00:54:35.240
Yeah.

00:54:35.240 --> 00:54:35.920
And at CodeCamps.

00:54:35.920 --> 00:54:40.400
Because other people who were really bright and really experienced, like, oh, that was really interesting.

00:54:40.400 --> 00:54:44.140
I didn't know that thing, but they knew other stuff that I definitely needed help with, right?

00:54:44.140 --> 00:54:48.740
And so I had dove into some small area and wanted to present on it.

00:54:48.960 --> 00:54:58.940
And that got me sort of connections, not exactly like a mentorship, but like a peer group that I could then start talking to them about these other things that I needed.

00:54:58.940 --> 00:55:01.680
And that actually really made a huge difference.

00:55:01.680 --> 00:55:05.640
And I know a lot of these meetups, they're looking for people to present.

00:55:05.640 --> 00:55:07.480
And you don't have to be an expert in everything.

00:55:07.480 --> 00:55:14.200
If you just know one thing you can spend 15 minutes on, there's a good chance you could talk about it and get connections you would otherwise wouldn't.

00:55:14.200 --> 00:55:14.920
Oh, absolutely.

00:55:14.920 --> 00:55:23.940
I mean, I got started writing articles to publish because I was doing presentations at works at our various engineering all hands at work.

00:55:24.480 --> 00:55:28.540
And people responded well to these presentations about various things in Python.

00:55:28.540 --> 00:55:31.420
And I got the idea to turn them into some articles.

00:55:31.420 --> 00:55:35.160
And I've been working with Dan Bader at RealPython.

00:55:35.160 --> 00:55:36.700
And they've been very popular.

00:55:36.700 --> 00:55:38.440
So that's what got me into that.

00:55:38.440 --> 00:55:43.440
I think the short form, I think, is probably the key there to getting people up to present.

00:55:43.440 --> 00:55:52.820
If you only had 10 minutes or 15 minutes to say something, that's a lot less intimidating than if you were going to give a half hour, 45-minute presentation and then take questions.

00:55:53.600 --> 00:55:57.900
If you could, you know, everybody stand up and do like a lightning, you know, here's 10 or 15 minutes.

00:55:57.900 --> 00:55:58.720
A lightning talk, yeah.

00:55:58.720 --> 00:56:00.320
Yeah, absolutely.

00:56:00.320 --> 00:56:01.560
I think that would be huge.

00:56:01.560 --> 00:56:02.420
I don't know.

00:56:02.420 --> 00:56:06.980
I guess part of it is, look, if you're looking for a mentor, you've got to take a few steps to get out there, right?

00:56:06.980 --> 00:56:14.560
Certainly sitting behind your computer at home and not talking to anyone is not going to get anyone to help you because they don't even know that you're out there.

00:56:14.560 --> 00:56:18.700
But also, you know, it's also a bit of a give and take, right?

00:56:18.700 --> 00:56:22.340
Like you said, you both helped each other with various things and whatnot.

00:56:22.620 --> 00:56:29.480
I guess the one other thing to maybe mention is there are people who help with speaking in the Python space.

00:56:29.480 --> 00:56:37.400
Like if you apply to PyCon, you can get a mentor that will help you craft your application and craft your presentation.

00:56:37.400 --> 00:56:42.240
Basically, whatever it is you're going to present, they'll give you feedback and advice on that.

00:56:42.240 --> 00:56:44.720
I guess the danger is that they accept it.

00:56:44.720 --> 00:56:47.000
Yeah, then you're committed.

00:56:48.200 --> 00:56:49.760
Oh, we've chosen you for the keynote.

00:56:49.760 --> 00:56:50.460
Oh, super.

00:56:50.460 --> 00:56:51.320
Oh, my God.

00:56:51.320 --> 00:56:52.380
This is going to make me sweat.

00:56:52.380 --> 00:56:56.980
But yeah, it's still, I think, I do think there's ways out there.

00:56:56.980 --> 00:56:58.580
I mean, obviously, there's communities.

00:56:58.580 --> 00:57:01.560
You can join like different Slack communities and whatnot.

00:57:02.020 --> 00:57:03.720
There's codementor.io.

00:57:03.720 --> 00:57:05.080
Never use them.

00:57:05.080 --> 00:57:06.900
Not a recommendation or endorsement.

00:57:06.900 --> 00:57:08.440
I just know they're out there and you can.

00:57:08.440 --> 00:57:11.280
I think it might even be a paid relationship.

00:57:11.280 --> 00:57:13.500
But if you're like, I really need somebody to help me with this project.

00:57:13.500 --> 00:57:17.220
And if I spent a month or two, maybe, you know, with one-on-one help, it might help.

00:57:17.220 --> 00:57:19.840
So, you know, that's another thing that you could do.

00:57:19.840 --> 00:57:21.620
I don't know if anyone has experience with that.

00:57:21.620 --> 00:57:22.080
Yeah.

00:57:22.360 --> 00:57:27.460
I went to, this is a long time ago now, but I went to Toastmasters near me for a while

00:57:27.460 --> 00:57:31.520
to help with public speaking, which is not necessarily, it's certainly not code oriented,

00:57:31.520 --> 00:57:35.080
but it helped me a lot to improve my public speaking.

00:57:35.080 --> 00:57:37.100
I wish a lot of people who I work with would go.

00:57:37.100 --> 00:57:39.440
Sure.

00:57:39.440 --> 00:57:40.640
Well, I hear you.

00:57:40.640 --> 00:57:44.960
And I was going to say that one of the really important things that you can learn that is

00:57:44.960 --> 00:57:51.080
not taught in any sort of computer programming background is this public speaking, putting

00:57:51.080 --> 00:57:51.900
yourself out there.

00:57:51.900 --> 00:57:52.660
Yeah.

00:57:52.660 --> 00:57:55.700
It really makes a big difference on a lot of different levels.

00:57:55.700 --> 00:58:00.920
And so, whether it's Toastmasters or it's more like organic, hey, I started giving talks

00:58:00.920 --> 00:58:06.100
at my local meetup and then at, you know, small local PyCons or whatever, like I highly encourage

00:58:06.100 --> 00:58:06.240
it.

00:58:06.240 --> 00:58:07.540
It's a rare skill.

00:58:07.540 --> 00:58:09.920
And if you have it, it'll put you in a different place.

00:58:09.920 --> 00:58:12.940
Oh, I really think it helps your career to be able to do that.

00:58:12.940 --> 00:58:16.740
I've been telling my own kids that for a long time, dealing with kids, you know, in public

00:58:16.740 --> 00:58:20.100
schools and things like that, that if they can just communicate and get their information

00:58:20.100 --> 00:58:23.200
out there and they don't mind putting themselves out there a little bit, that's going to be,

00:58:23.200 --> 00:58:24.360
that's going to be like Python.

00:58:24.360 --> 00:58:25.980
It's going to be like your superpower at work.

00:58:25.980 --> 00:58:30.080
You can actually communicate it because, you know, these kids have their heads in their phones

00:58:30.080 --> 00:58:33.660
and, you know, I'm not saying that's horrible, but there's not a lot of my own children are

00:58:33.660 --> 00:58:34.960
scared to call people on the phone.

00:58:34.960 --> 00:58:35.620
You know, it's.

00:58:35.620 --> 00:58:35.840
Yeah.

00:58:35.840 --> 00:58:36.100
Yeah.

00:58:36.100 --> 00:58:36.340
Yeah.

00:58:36.340 --> 00:58:39.940
I know like my daughters are not huge fans of talking on the phone either.

00:58:39.940 --> 00:58:40.480
Yeah.

00:58:40.560 --> 00:58:45.380
I think they mostly hate the numbering system dial 472 for this system or whatever.

00:58:45.380 --> 00:58:45.620
Right.

00:58:45.620 --> 00:58:46.500
So I understand it.

00:58:46.500 --> 00:58:50.800
Like they don't want to wait there for 20 minutes, but yeah, I do think that this is a

00:58:50.800 --> 00:58:54.200
skill that is going to be more special, not less.

00:58:54.200 --> 00:58:55.920
It's not like everyone's now a good speaker.

00:58:55.920 --> 00:58:59.360
When I was a kid, no one was, but now everyone's so good at public.

00:58:59.360 --> 00:59:00.380
Like, no, that's not true.

00:59:00.380 --> 00:59:00.660
Right.

00:59:00.660 --> 00:59:01.940
It's certainly not.

00:59:02.000 --> 00:59:04.500
So I think it's really a great thing as well.

00:59:04.500 --> 00:59:09.260
I mean, it's not directly related to being a mentor in a technical space, but I do think

00:59:09.260 --> 00:59:12.180
having that, you know, I think it helps you with other places.

00:59:12.180 --> 00:59:14.420
Like I talked about like presenting the meetups and whatnot.

00:59:14.420 --> 00:59:14.800
Sure.

00:59:14.800 --> 00:59:15.180
Yeah.

00:59:15.180 --> 00:59:19.480
Which gives you an opportunity to meet other people who you could either ask to be a mentor

00:59:19.480 --> 00:59:20.360
or be a mentor to.

00:59:20.360 --> 00:59:21.160
Yeah, absolutely.

00:59:21.160 --> 00:59:21.760
Yeah.

00:59:21.760 --> 00:59:22.460
That's very cool.

00:59:22.460 --> 00:59:23.100
All right.

00:59:23.100 --> 00:59:27.040
Well, you guys, this is a really interesting story and I appreciate you coming on here to

00:59:27.040 --> 00:59:27.480
share it.

00:59:27.480 --> 00:59:27.960
Glad to.

00:59:27.960 --> 00:59:28.540
Excellent.

00:59:28.540 --> 00:59:28.860
Yeah.

00:59:29.340 --> 00:59:33.760
And Doug, I do want to ask you really quickly before we move on to the last two questions.

00:59:33.760 --> 00:59:34.840
Just really quick.

00:59:34.840 --> 00:59:35.840
You talked about your book.

00:59:35.840 --> 00:59:36.680
When's it going to be out?

00:59:36.680 --> 00:59:41.080
Well, it won't be out probably till 2021 because it's, I've only gotten four chapters written

00:59:41.080 --> 00:59:43.900
and I've got 16 total to do.

00:59:43.900 --> 00:59:49.480
So I got a while to go, but I'm supposed to be producing one chapter a month for the Manning's

00:59:49.480 --> 00:59:50.440
early release program.

00:59:50.440 --> 00:59:52.400
So I'll be chugging away.

00:59:52.400 --> 00:59:52.840
That's cool.

00:59:52.840 --> 00:59:54.740
Well, keep slow and steady.

00:59:54.740 --> 00:59:55.400
All right.

00:59:55.400 --> 00:59:56.060
That's the way to do it.

00:59:56.060 --> 00:59:57.180
That's, it's cool though.

00:59:57.180 --> 00:59:57.860
I'm looking forward to it.

00:59:57.860 --> 00:59:58.300
It sounds great.

00:59:58.300 --> 00:59:58.540
Yeah.

00:59:58.540 --> 00:59:58.960
Thank you.

00:59:59.100 --> 00:59:59.360
All right.

00:59:59.360 --> 01:00:02.460
Now, before you all get out here, the last two questions.

01:00:02.460 --> 01:00:06.840
So when you write some Python code, I'll go with you, Doug, first.

01:00:06.840 --> 01:00:07.960
What editor do you use?

01:00:07.960 --> 01:00:14.940
I primarily use PyCharm, which I really like, but I'm getting up to speed on Visual Studio

01:00:14.940 --> 01:00:19.240
code because that's what I recommend in the book because it's freely available and it's

01:00:19.240 --> 01:00:19.880
a great tool.

01:00:19.880 --> 01:00:20.180
Yeah.

01:00:20.180 --> 01:00:21.080
Those are both really good.

01:00:21.080 --> 01:00:25.940
Obviously, I'm a huge fan of PyCharm, but basically I use VS Code for anything that's not

01:00:25.940 --> 01:00:27.820
a Python project as well.

01:00:27.820 --> 01:00:29.900
So yeah, it's definitely a good one.

01:00:29.900 --> 01:00:30.800
Rusty, how about you?

01:00:30.800 --> 01:00:35.060
I prefer Adam if I'm going to do something that's a one-off or if I'm going to be working

01:00:35.060 --> 01:00:36.340
in multiple languages.

01:00:36.340 --> 01:00:40.120
Jupyter Notebooks has been really big for me this year as well.

01:00:40.120 --> 01:00:43.180
And if it's a big project, I do PyCharm.

01:00:43.380 --> 01:00:47.000
But like I say, I'm in a relationship with PyCharm, but willing to try new things.

01:00:47.000 --> 01:00:50.000
I've really lost all of my love for it.

01:00:50.000 --> 01:00:55.340
My PyCharm stopped telling me when my functions are used or it stops telling me if I need an

01:00:55.340 --> 01:00:56.460
import and things like that.

01:00:56.460 --> 01:00:57.760
And I can't figure out how to fix it.

01:00:57.760 --> 01:00:58.540
So yeah.

01:00:58.540 --> 01:00:59.500
Oh, that's not good.

01:00:59.880 --> 01:01:04.580
There is a way in the settings that you can go in and tell it to clear its cache.

01:01:04.580 --> 01:01:06.260
I've done it all.

01:01:06.260 --> 01:01:06.520
Okay.

01:01:06.520 --> 01:01:11.740
Well, what a bummer.

01:01:11.740 --> 01:01:12.520
Yeah.

01:01:13.000 --> 01:01:13.640
All right.

01:01:13.640 --> 01:01:13.900
Cool.

01:01:13.900 --> 01:01:14.880
Well, yeah.

01:01:14.880 --> 01:01:16.140
So Adam, that's cool.

01:01:16.140 --> 01:01:20.100
That's like the grandfather of VS Code in a sense, I guess.

01:01:20.100 --> 01:01:22.080
That's where Electron came from, right?

01:01:22.080 --> 01:01:23.080
I really like it.

01:01:23.080 --> 01:01:25.960
It's really, really, really customizable and really fun.

01:01:25.960 --> 01:01:31.060
And until I really enjoyed it until Doug convinced me that I needed a debugger and there's no good

01:01:31.060 --> 01:01:32.000
debugger built in.

01:01:32.000 --> 01:01:33.580
So yeah, I had to switch.

01:01:33.580 --> 01:01:37.320
I couldn't let him go down the path of being one of those Vim guys who just loads his code

01:01:37.320 --> 01:01:38.080
with a print statement.

01:01:38.080 --> 01:01:41.240
Nice.

01:01:41.240 --> 01:01:42.760
Nice, nice.

01:01:42.840 --> 01:01:46.060
And while we're talking about this, it's not either of your answers, but let me just

01:01:46.060 --> 01:01:47.640
throw it out because it's pretty interesting.

01:01:47.640 --> 01:01:52.380
So Rusty, you bring up Jupyter Notebooks, which is super common in the data world.

01:01:52.380 --> 01:01:57.000
Have either of you all heard about Carnets, C-A-R-N-E-T-S?

01:01:57.000 --> 01:01:57.380
No.

01:01:57.380 --> 01:02:04.580
So Carnets is an open source, free, local Jupyter Notebook platform for iOS.

01:02:04.580 --> 01:02:05.080
Wow.

01:02:05.080 --> 01:02:10.040
So yeah, it comes with like NumPy, SciPy, Matplotlib, all that.

01:02:10.100 --> 01:02:14.460
And it runs like on the device, not just a browser talking to something.

01:02:14.460 --> 01:02:16.000
So it works with no internet and stuff like that.

01:02:16.000 --> 01:02:20.200
Anyway, who knows how long it'll be until someone says that's their answer, but it's still a pretty

01:02:20.200 --> 01:02:22.240
cool little option to help people about.

01:02:22.240 --> 01:02:22.920
That's cool.

01:02:22.920 --> 01:02:24.240
Yeah, for sure.

01:02:24.320 --> 01:02:26.400
And then notable PyPI packages.

01:02:26.400 --> 01:02:27.520
Doug, you want to go first?

01:02:27.520 --> 01:02:29.000
Well, I have two kind of.

01:02:29.000 --> 01:02:30.800
One is not a PyPI package.

01:02:30.800 --> 01:02:36.880
I've been using P-Y-E-N-V to run multiple Python versions, which I find fantastic.

01:02:36.880 --> 01:02:38.160
Very handy.

01:02:38.160 --> 01:02:41.420
I was just thinking this morning, like I should probably start playing with that more because

01:02:41.420 --> 01:02:45.820
it was nice to say this one is a 3.6 one and this one is a 3.8 one.

01:02:45.820 --> 01:02:46.280
Yeah.

01:02:46.280 --> 01:02:46.720
Right?

01:02:46.720 --> 01:02:51.420
And with the book, I've had to update my Python version for the book twice already.

01:02:51.420 --> 01:02:55.320
It's probably going to happen two more times.

01:02:55.320 --> 01:02:55.920
Yeah, right.

01:02:55.920 --> 01:02:56.440
Exactly.

01:02:56.980 --> 01:03:00.480
And then the other one that I like, I just discovered this a couple of days ago is this

01:03:00.480 --> 01:03:02.500
thing called JustPY, all one word.

01:03:02.500 --> 01:03:08.920
It's an object-oriented web framework, but everything is done in Python, including the rich JavaScript

01:03:08.920 --> 01:03:13.120
web application, which uses Vue, but is embedded in the Python.

01:03:13.120 --> 01:03:15.440
Yeah, this is really interesting over at JustPY.io.

01:03:15.440 --> 01:03:16.720
I just learned about it as well.

01:03:16.720 --> 01:03:19.980
And it's like, yeah, it's a pretty cool little framework for sure.

01:03:19.980 --> 01:03:20.720
Cool.

01:03:20.720 --> 01:03:21.260
All right.

01:03:21.260 --> 01:03:22.880
Well, that's a good recommendation as well.

01:03:22.880 --> 01:03:25.280
I have no idea if you can pay up and install it, but it's definitely cool.

01:03:25.280 --> 01:03:26.280
Rusty, how about you?

01:03:26.280 --> 01:03:26.920
Package?

01:03:27.220 --> 01:03:28.120
I'm going to go with pandas.

01:03:28.120 --> 01:03:34.220
I've been cleaning data for 2,000 students for about six months, and it's been amazing.

01:03:34.220 --> 01:03:38.720
And I never really knew why I'd want it before, but yeah, it's been a lot of fun to use, actually.

01:03:38.720 --> 01:03:39.600
Yeah.

01:03:39.600 --> 01:03:41.840
I wish it looked like the rest of Python, but...

01:03:41.840 --> 01:03:43.440
It's its own special thing.

01:03:43.440 --> 01:03:43.900
Yes.

01:03:43.900 --> 01:03:45.920
So that's cool.

01:03:45.920 --> 01:03:52.480
And something I just learned about recently is through Brian Okken, who I think learned

01:03:52.480 --> 01:03:56.580
about it through another one of our Python Bytes listeners, is detail.

01:03:56.580 --> 01:03:59.880
details, but D-T-A-L-E.

01:03:59.880 --> 01:04:04.880
I don't know if you guys are familiar with that, but it's a cool framework that lets you

01:04:04.880 --> 01:04:06.900
visualize Panda data frame.

01:04:06.900 --> 01:04:11.480
So if you click on the link, you can click on, there's like a little interactive demo tutorial

01:04:11.480 --> 01:04:13.160
thing you can check out somewhere.

01:04:13.160 --> 01:04:15.060
There's a live demo right at the top.

01:04:15.880 --> 01:04:21.840
But it's like, think a super reactive Excel hype thing that you just point at your data

01:04:21.840 --> 01:04:25.760
frame and it just comes to life and you can even see like example data.

01:04:25.760 --> 01:04:26.160
Wow, that's cool.

01:04:26.160 --> 01:04:27.480
Yeah, it's super cool.

01:04:27.480 --> 01:04:32.340
So anyway, if people are taking your advice and using pandas, they might also want to check

01:04:32.340 --> 01:04:32.640
that out.

01:04:32.640 --> 01:04:34.100
It's a pretty cool little visualizer.

01:04:34.100 --> 01:04:34.660
Excellent.

01:04:34.660 --> 01:04:35.020
Yep.

01:04:35.180 --> 01:04:35.580
All right.

01:04:35.580 --> 01:04:37.160
So final call to action.

01:04:37.160 --> 01:04:38.060
People are out there.

01:04:38.060 --> 01:04:43.120
Either side of this relationship that they're looking to set up to work together, what do

01:04:43.120 --> 01:04:43.360
they do?

01:04:43.360 --> 01:04:45.080
Well, just reach out and make themselves public.

01:04:45.080 --> 01:04:46.460
Put yourself out there.

01:04:46.460 --> 01:04:50.980
And yeah, just got to take the chance and maybe somebody will take you up on it.

01:04:50.980 --> 01:04:51.660
On both sides.

01:04:51.880 --> 01:04:57.980
I reached out to Rusty to think that I could help him out and he was willing to let me

01:04:57.980 --> 01:05:00.660
do so, which was very great of him.

01:05:00.660 --> 01:05:02.020
That's awesome.

01:05:02.020 --> 01:05:03.640
Yeah, I'm sure he didn't see it that way.

01:05:03.640 --> 01:05:04.140
That's awesome.

01:05:04.140 --> 01:05:07.840
I could have had no information at all on the national offering to help him.

01:05:07.840 --> 01:05:11.320
This crazy guy that has no idea about programming.

01:05:11.320 --> 01:05:12.760
Let's talk about the program on the internet.

01:05:12.760 --> 01:05:16.420
No, obviously he knew you were on the show and stuff, right?

01:05:16.420 --> 01:05:17.240
So very cool.

01:05:17.240 --> 01:05:18.820
Great.

01:05:18.820 --> 01:05:19.760
I think that's good advice.

01:05:19.760 --> 01:05:21.860
And I do think that that is what it takes, right?

01:05:21.860 --> 01:05:25.500
No one is going to be willing to help you if you don't get out in the community, make

01:05:25.500 --> 01:05:27.540
some connections and take some steps, right?

01:05:27.540 --> 01:05:32.700
Like if there is someone showing effort to make progress, you're way more willing to put

01:05:32.700 --> 01:05:36.340
in a little effort to help them rather than someone just like, you know, looking to get

01:05:36.340 --> 01:05:37.960
someone to figure stuff out for them.

01:05:37.960 --> 01:05:38.760
Yeah, absolutely.

01:05:38.760 --> 01:05:39.320
Awesome.

01:05:39.320 --> 01:05:39.720
All right.

01:05:39.720 --> 01:05:43.180
Well, this is really interesting peek inside what you guys have been up to and I'm sure it'll

01:05:43.180 --> 01:05:44.880
help some folks along the way.

01:05:44.880 --> 01:05:45.560
I hope so too.

01:05:45.560 --> 01:05:45.940
Yep.

01:05:45.940 --> 01:05:46.640
Thanks for being on the show.

01:05:46.640 --> 01:05:47.460
Thank you very much.

01:05:47.460 --> 01:05:47.980
Thanks, Michael.

01:05:47.980 --> 01:05:48.620
Thanks, Rusty.

01:05:48.620 --> 01:05:48.840
Yep.

01:05:48.840 --> 01:05:49.200
Bye guys.

01:05:49.200 --> 01:06:19.180
Bye guys.

01:06:19.180 --> 01:06:21.980
you'll automatically get a $20 credit when you create a new account.

01:06:21.980 --> 01:06:23.780
Want to level up your Python?

01:06:23.780 --> 01:06:28.620
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.

01:06:28.620 --> 01:06:30.900
Or if you're looking for something more advanced,

01:06:30.900 --> 01:06:34.980
check out our new Async course that digs into all the different types of

01:06:34.980 --> 01:06:36.780
async programming you can do in Python.

01:06:36.780 --> 01:06:39.580
And of course, if you're interested in more than one of these,

01:06:39.580 --> 01:06:41.440
be sure to check out our Everything Bundle.

01:06:41.440 --> 01:06:43.340
It's like a subscription that never expires.

01:06:43.340 --> 01:06:45.480
Be sure to subscribe to the show.

01:06:45.480 --> 01:06:47.980
Open your favorite podcatcher and search for Python.

01:06:47.980 --> 01:06:49.120
We should be right at the top.

01:06:49.460 --> 01:06:52.020
You can also find the iTunes feed at /itunes,

01:06:52.020 --> 01:06:53.940
the Google Play feed at /play,

01:06:53.940 --> 01:06:58.100
and the direct RSS feed at /rss on talkpython.fm.

01:06:58.100 --> 01:07:00.180
This is your host, Michael Kennedy.

01:07:00.180 --> 01:07:01.680
Thanks so much for listening.

01:07:01.680 --> 01:07:02.720
I really appreciate it.

01:07:02.720 --> 01:07:04.480
Now get out there and write some Python code.

01:07:18.080 --> 01:07:25.460
I'll see you next time.

