WEBVTT

00:00:00.001 --> 00:00:05.580
You'll find this episode to be part discussion on how to teach and learn Django, as well as why

00:00:05.580 --> 00:00:11.060
learning web development can be hard, and part meta, where Will, Vincent, and I discuss the

00:00:11.060 --> 00:00:16.520
business of creating content and teaching around Python. I think you'll enjoy both parts on this

00:00:16.520 --> 00:00:20.720
episode of Talk Python To Me, recorded December 6th, 2018.

00:00:20.720 --> 00:00:38.780
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the

00:00:38.780 --> 00:00:43.380
ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter

00:00:43.380 --> 00:00:48.060
where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm,

00:00:48.060 --> 00:00:52.860
and follow the show on Twitter via at talkpython. Will, welcome to Talk Python To Me.

00:00:52.860 --> 00:00:53.560
Thanks for having me.

00:00:53.560 --> 00:00:59.480
It's great to have you here. I'm super excited to talk to you about teaching developers in

00:00:59.480 --> 00:01:04.800
general and teaching Django in particular, and even how do people go about making that

00:01:04.800 --> 00:01:09.400
kind of stuff part of their job and stuff. So I think there's a lot of interesting angles

00:01:09.400 --> 00:01:13.160
to touch on here. But before we get to them, let's start with your story. How did you get

00:01:13.160 --> 00:01:14.080
into programming in Python?

00:01:14.080 --> 00:01:18.580
Sure. So I got into programming later in life. I didn't grow up coding. Computers were

00:01:18.580 --> 00:01:20.040
just scary and frustrating for me.

00:01:20.040 --> 00:01:21.180
Define later.

00:01:21.180 --> 00:01:28.220
Later would be... So I first coded a site in 2008 when I was 27. I started my career as a

00:01:28.220 --> 00:01:32.680
book editor, which you probably haven't heard before. And I noticed that two things were

00:01:32.680 --> 00:01:35.980
happening. Amazon was coming in and telling all the publishers what to do, and they were

00:01:35.980 --> 00:01:41.120
sticking their head in the sands. And I also noticed that we were spending $10,000 on a website.

00:01:41.600 --> 00:01:47.340
And I thought, I could do that. So I decided to get an MBA, diversify my options, because

00:01:47.340 --> 00:01:51.360
publishing seemed to be going the wrong way. And I learned how to build websites. So I built

00:01:51.360 --> 00:01:56.440
websites for a bunch of my former authors. And that was a side business I did throughout my

00:01:56.440 --> 00:02:02.340
MBA. It was a frustrating experience. It wasn't that fun. I just sort of pushed through it.

00:02:02.660 --> 00:02:09.120
And then I was able to join a startup called Quizlet in 2010 as the third employee we could talk about.

00:02:09.120 --> 00:02:09.480
What did they do?

00:02:09.480 --> 00:02:14.460
So they're the largest education site in the US, at least. They're a top 20 website.

00:02:14.460 --> 00:02:20.700
It's study tools, flashcards, and games for students. So when I joined, it was just a couple of us. And

00:02:20.700 --> 00:02:25.780
when I left in 2013, there were 10 of us, but it was a top 100 website, I think. And now it's

00:02:25.780 --> 00:02:29.660
a top 20 website and I think something like 200 people.

00:02:29.660 --> 00:02:32.900
Yeah, it's a good looking place. Do you know, is it done in Python?

00:02:32.900 --> 00:02:35.900
No. Well, I think they do some scripting now. It's PHP.

00:02:35.900 --> 00:02:36.380
Okay.

00:02:36.460 --> 00:02:41.320
They're so big now. I'm sure they do some Python stuff, but yeah, PHP. So I did a lot of the hiring

00:02:41.320 --> 00:02:46.480
there or I helped with a lot of the hiring there to be accurate. And even back then, PHP wasn't hot.

00:02:46.480 --> 00:02:53.060
Everyone wanted to do, you know, it was a disadvantage hiring MIT Stanford grads with PHP. They wanted to

00:02:53.060 --> 00:02:54.840
do Node or Rails at the time.

00:02:54.840 --> 00:02:56.740
Right. At the time. Yeah. Makes sense.

00:02:56.740 --> 00:02:57.040
Yeah.

00:02:57.040 --> 00:03:00.900
Okay. So I think this is really interesting. So let me stick into this for a minute before we move on.

00:03:00.900 --> 00:03:07.400
Like you were doing book editing and then you went to get your MBA and also learned programming.

00:03:07.400 --> 00:03:13.380
And that those sound at first blush, like completely two different directions. But I think there's

00:03:13.380 --> 00:03:19.460
actually a lot of intersection in people who want to create their business or enable their business.

00:03:19.460 --> 00:03:23.820
They have an MBA. And I think these programming powers are like really important actually.

00:03:23.820 --> 00:03:24.240
Yes.

00:03:24.240 --> 00:03:29.720
Yeah. They're incredibly important. I mean, and back when I was doing this 10 years ago,

00:03:29.900 --> 00:03:33.560
which is weird to say, you know, tech wasn't cool. I think it was still,

00:03:33.560 --> 00:03:37.240
we're just coming off of real estate. I was sitting in a finance class when the market crashed in

00:03:37.240 --> 00:03:39.220
2008, learning about efficient markets.

00:03:39.220 --> 00:03:39.440
Wow.

00:03:39.440 --> 00:03:41.940
They had to throw away the book and start over.

00:03:41.940 --> 00:03:44.300
Not quite.

00:03:44.300 --> 00:03:50.700
Yeah. We could talk more about that, but tech wasn't sexy. Startups weren't sexy. I knew I wanted to go to

00:03:50.700 --> 00:03:54.040
San Francisco because I'd come from an industry publishing that was being

00:03:54.040 --> 00:03:58.680
disrupted. And I thought it'd be better to be on the side of change rather than defense.

00:03:58.900 --> 00:04:03.340
But yeah, it wasn't, people were still in traditional mindset. I mean, now where I went,

00:04:03.340 --> 00:04:07.160
I got my MBA at Tuck, which is the business school at Dartmouth in New Hampshire. Now

00:04:07.160 --> 00:04:12.020
tech is the biggest thing by far. I think it even exceeds finance and consulting. Everyone goes to

00:04:12.020 --> 00:04:17.080
Amazon and or becomes product managers. So, you know, digital literacy is really, really important.

00:04:17.080 --> 00:04:21.480
That's actually a course I'd love to teach at some point. Some schools have this, you know,

00:04:21.480 --> 00:04:25.300
you say, okay, you're going to go in and be a manager. You know, what do you need to know,

00:04:25.360 --> 00:04:28.760
right? Like you should build a static website. You should know how the internet works. You should

00:04:28.760 --> 00:04:33.620
have some basic concepts. I'm not sure that they're doing that yet, but they're aware that they need to,

00:04:33.620 --> 00:04:38.240
you know, educate the managers about how the modern world works because everything is tech. I mean,

00:04:38.240 --> 00:04:42.360
even marketing, they, I'm not sure if they've changed this, but used to be really advanced,

00:04:42.360 --> 00:04:47.360
you know, Excel macros, which sounded sexy. But the reality is, you know, if you're an MBA going to a

00:04:47.360 --> 00:04:52.200
company, you need to learn SQL or Python scripting. Like that's going to be much more valuable

00:04:52.200 --> 00:04:56.300
today. So yeah, so I think it's exciting. They didn't teach it back then. Now everyone's kind

00:04:56.300 --> 00:05:00.040
of catching up. It almost makes me think tech has peaked a little bit that everyone wants to go into

00:05:00.040 --> 00:05:00.640
tech, but.

00:05:00.640 --> 00:05:06.860
That's right. Well, I think, I don't know if I agree with, I think if you want to go into tech for pure

00:05:06.860 --> 00:05:11.600
tech, maybe, right. Just, I just want to be a straight programmer and I don't have any specialties.

00:05:11.600 --> 00:05:16.460
I'm not sure I would say that, but that's a possibility. But I think there are just so many

00:05:16.460 --> 00:05:20.320
opportunities to take the thing I'm building, the thing I'm doing, the thing I'm special at,

00:05:20.400 --> 00:05:25.280
and just 10 exit with software that that's going to have a really long run.

00:05:25.280 --> 00:05:29.000
Yeah. I think you, yeah. If you had like an MVP for MBAs course, that would,

00:05:29.000 --> 00:05:30.880
I think that would make a lot of sense.

00:05:30.880 --> 00:05:32.240
Yep.

00:05:32.240 --> 00:05:36.520
But yeah, but we'll just to finish my story. So I was at Quizlet, which is fantastic opportunity.

00:05:36.520 --> 00:05:42.440
And then I decided to leave. I thought, you know, I could go again, as an MBA person,

00:05:42.440 --> 00:05:45.480
I could go raise some money and try to hire people for the startup idea I had,

00:05:45.560 --> 00:05:50.660
or I could teach myself how to properly code over the next two years. And I decided on the latter,

00:05:50.660 --> 00:05:55.080
knowing that, you know, most startups fail. The one I worked on didn't work out. So we left San

00:05:55.080 --> 00:05:59.120
Francisco, my wife and I, and I basically locked myself in a room for two years and learned how to

00:05:59.120 --> 00:06:04.500
code, which was kind of awful, but for various family reasons was the way it had to be done.

00:06:04.500 --> 00:06:07.760
You know, I had that optimism. I'd just been at Quizlet, right? It just worked.

00:06:08.080 --> 00:06:11.840
So I assumed everything, you know, would kind of work for me. I'm curious, you know, for you,

00:06:11.840 --> 00:06:15.220
like you've gone out on your own, there's trajectory of like the first year, you're so excited,

00:06:15.220 --> 00:06:18.500
right? It's like, you're doing your own thing. You're so efficient, right? You have days where

00:06:18.500 --> 00:06:21.680
you work two hours and you go like, that's more than I would have done in like a week,

00:06:21.680 --> 00:06:25.480
maybe at my last job without all the responsibilities I had. But then, you know,

00:06:25.480 --> 00:06:29.880
year two, three comes in and it gets a little more real. And, you know, you're kind of like,

00:06:29.880 --> 00:06:36.140
huh, you know, I'm on year five now. So without arguably a big win. So it's an interesting

00:06:36.140 --> 00:06:39.760
trajectory. It's so fun to do for a year or two. Like, I think everybody, if they can,

00:06:39.760 --> 00:06:43.900
should try to, it's like the sign I saw on a school bus as a kid. It was like, kids,

00:06:43.900 --> 00:06:47.160
like leave school now, go out on your own before, you know, while you still know everything.

00:06:47.160 --> 00:06:52.060
It's a little bit like that, right? Because now sometimes you're like, oh, a big company.

00:06:52.060 --> 00:06:52.780
That'd be nice.

00:06:52.780 --> 00:06:53.920
Yeah. The stability.

00:06:53.920 --> 00:06:54.880
Exactly.

00:06:54.880 --> 00:07:00.300
I will have a vacation or that I will get paid this much that I can plan around it. Yeah.

00:07:00.300 --> 00:07:02.700
I still don't know what I'm going to get paid. It's, it's all over the map,

00:07:02.700 --> 00:07:08.280
but on my side, like I can't, I can't complain. Things are super going super well. You know,

00:07:08.280 --> 00:07:14.280
listeners are really supportive of the podcast. Businesses are sponsoring the podcast are really

00:07:14.280 --> 00:07:19.200
great. And I've been with me for a long time. The courses I'm doing, you know, people really

00:07:19.200 --> 00:07:25.160
seem to appreciate them. So I, in that regard, like I have absolutely no complaints. It's just great.

00:07:25.160 --> 00:07:32.620
But I do sort of feel the drag of reality, if you will. I mean, it's in that, you know,

00:07:32.620 --> 00:07:40.240
like I probably spend 30% of my time just doing paperwork, answering like what sometimes are mundane

00:07:40.240 --> 00:07:43.380
emails. Sometimes they're amazing stuff I get from people, but a lot of times it's just like,

00:07:43.380 --> 00:07:48.940
I got to keep this moving, that going. And there's just more friction in the world. So yeah,

00:07:48.940 --> 00:07:49.420
I hear you.

00:07:49.420 --> 00:07:53.320
Yeah. And I think it's, I think it's the grass is greener. I mean, there's friction in every job,

00:07:53.320 --> 00:07:57.500
but, but it's, yeah. And I think it's too, as you mentioned vacations, like, I mean,

00:07:57.500 --> 00:08:01.880
I can speak honestly, like I'm super burned out right now. Like I haven't taken a, from coding

00:08:01.880 --> 00:08:05.840
anyways, I haven't taken a coding break in, you know, five years of more than a couple of days.

00:08:05.840 --> 00:08:06.640
Yeah.

00:08:06.640 --> 00:08:11.200
I have one plan coming up and I'm sort of aware that I need to make it, but I'm also aware that

00:08:11.200 --> 00:08:15.700
I'm not, you know, making great decisions right now. So I'm sort of like, I'm going to wait on that.

00:08:15.820 --> 00:08:20.620
But yeah, as you said, like with the drag of success, like, I think that's an important point

00:08:20.620 --> 00:08:25.440
is that two things. One is that sometimes a moderate success is the hardest thing because you don't know

00:08:25.440 --> 00:08:30.120
if it's, if you should stick with it or not. Right. Like it's better to fail fast or fail big when you're

00:08:30.120 --> 00:08:33.480
kind of in the middle, you're like, you get the self-questioning loop, which is not productive.

00:08:33.480 --> 00:08:38.500
But then, yeah, for me, like I'm, you know, this is my first year doing this full time. You know,

00:08:38.500 --> 00:08:43.140
I have to hire an accountant. I have to emails, you know, just more distractions, you know,

00:08:43.140 --> 00:08:47.120
positive things. I'm still working out how to deal with that. You know, it's just me. I don't,

00:08:47.120 --> 00:08:50.640
I know I don't have the ability to hire someone. Even if I did, I sort of feel like it'd be almost

00:08:50.640 --> 00:08:55.980
be easier to hire six people than one person. Yeah. Oh, I totally hear you. What I would say,

00:08:55.980 --> 00:09:02.860
at least around that, at least those are the kinds of things that you sort of go on autopilot with to

00:09:02.860 --> 00:09:07.060
a large degree. It's like driving. Like when you first learned to drive, I taught my daughters

00:09:07.060 --> 00:09:11.960
recently how to drive. And like every interaction with the mirrors, with the gauges, with the controls,

00:09:11.960 --> 00:09:16.220
it's just like, I can't do all this at once as dad. I'm like, I understand now that you feel that

00:09:16.220 --> 00:09:20.380
way. You need to learn how to do it. And then it's going to be fine. And I know it doesn't like

00:09:20.380 --> 00:09:25.600
completely fix it, but a lot of like the accounting stuff and whatnot, it does at first, it's such a

00:09:25.600 --> 00:09:30.100
challenge. And then it doesn't become, it becomes not so much. I think it's speed bumps rather than,

00:09:30.100 --> 00:09:34.400
you know, a parachute. Yeah. I'm guilty. You know, I have an MBA, so I'm a little bit like,

00:09:34.400 --> 00:09:37.940
I know how to do accounting, but I don't know how to do accounting. And even if I did,

00:09:38.080 --> 00:09:41.320
I wouldn't want to do it. So there's a priority stack, right? So that's sort of the,

00:09:41.320 --> 00:09:45.840
the nice thing about a big job is like, I want to hire me to tell me what to do sometimes.

00:09:45.840 --> 00:09:49.880
Right. It's like the curse of autonomy. It's like, so I've actually like, you know,

00:09:49.880 --> 00:09:54.840
I've gotten much more disciplined with making time to schedule my days. Like,

00:09:54.840 --> 00:09:58.460
so I come into each day and I've, I just execute rather than think about it.

00:09:58.460 --> 00:10:02.020
Yeah. I think that's important for anyone who's like, maybe they just work for themselves

00:10:02.020 --> 00:10:07.920
or they work from home. They're trying to do their own business. If you don't create this

00:10:07.920 --> 00:10:11.700
structure again for yourself, it can get really overwhelming or it feels like you're spinning

00:10:11.700 --> 00:10:14.760
your wheels. It's weird to think about how, you know, if I think like for you, right,

00:10:14.760 --> 00:10:19.320
like how productive we can be, even though sometimes we sit here and think, what am I doing today?

00:10:19.320 --> 00:10:22.660
Right. Like you have the podcast, you have your courses, you have everything else. Like

00:10:22.660 --> 00:10:27.500
I was looking back on my year and it's like, it's been a big year for me in terms in the aggregate,

00:10:27.500 --> 00:10:30.700
but day to day, it's a lot of, you know, you don't have wasted time, right? Like when you have a

00:10:30.700 --> 00:10:33.440
normal job, you have the water cooler, you have this, that, or you have days where you're like,

00:10:33.440 --> 00:10:37.560
you know what, it's three o'clock. Like I'm going to do low level stuff. There's really no low level

00:10:37.560 --> 00:10:42.840
stuff, which is a blessing, but it means that I need to, you know, go take a walk instead of

00:10:42.840 --> 00:10:47.560
banging my head on something. So yeah. So those are all challenges around, you know, being self-employed

00:10:47.560 --> 00:10:51.640
and creating content. Yeah. I think, you know, I don't want to go too far into this because it's not

00:10:51.640 --> 00:10:55.560
the main topic necessarily, but it is super interesting to me. So I'm going to have to resist the urge

00:10:55.560 --> 00:11:00.660
in a hard way. So I think one of the big differences that people are trying to create content

00:11:00.660 --> 00:11:04.820
for themselves, they're trying to be self-employed, maybe even in a consultant role,

00:11:04.820 --> 00:11:12.200
they're trying to be a book author, whatever, is you have to shift your mindset from, I get paid to

00:11:12.200 --> 00:11:20.220
create value. I know not, I get paid to spend my time. Right. So if I, if I, I've worked at plenty of

00:11:20.220 --> 00:11:25.780
like large companies or in small companies as well, but even if I have a bad day, if I show up and I

00:11:25.780 --> 00:11:29.720
have like, Oh, I wasn't so productive today. It's like, whatever. Like I get paid exactly the same.

00:11:29.720 --> 00:11:35.020
Cause I exchanged my time for money, but now it's like, I've worked on projects that were super

00:11:35.020 --> 00:11:40.260
successful for a month. And I've worked on projects that would be like bad, bad pay for a month, you

00:11:40.260 --> 00:11:46.360
know, like, and you just have to, realign your thinking of, I get paid for the value I create.

00:11:46.920 --> 00:11:49.200
How do I do that? And just optimize around that.

00:11:49.200 --> 00:11:52.240
Yeah. Yes, exactly. I think about this a lot.

00:11:52.240 --> 00:11:56.960
Easier said than done, but yeah. I mean, because you have days where you, you know, like a weekend,

00:11:56.960 --> 00:12:02.260
right? Like I try not to work on weekends cause I have a family and generally I have higher sales on

00:12:02.260 --> 00:12:09.200
weekends. So it feels pretty awesome to not work and get paid. Then again, sometimes I'll really work

00:12:09.200 --> 00:12:13.600
hard for an extended period of time during the week and sales are low, which, you know, this is a bad

00:12:13.600 --> 00:12:18.500
habit. I, I, because I'm self-published, I can see my daily hourly, you know, minute by minute sales.

00:12:18.500 --> 00:12:19.520
Minute by minute. Yeah.

00:12:19.520 --> 00:12:24.160
I've gotten better at not looking at it, but it is a weird shift, right? And the challenging for,

00:12:24.160 --> 00:12:28.600
you know, tech content is it's not, it's not really an annuity. It requires constant upkeep,

00:12:28.600 --> 00:12:33.740
which is a challenge for burnout, but also an opportunity because most people don't update

00:12:33.740 --> 00:12:38.640
stuff, you know, especially frameworks, right? Like I'm a little bit envious or people who work

00:12:38.640 --> 00:12:43.000
with programming languages because you have a larger audience and probably more competition,

00:12:43.000 --> 00:12:51.420
but Python, you know, 3.6 versus 3.7 isn't changing as much as Django 2.1 to 2.2. You know,

00:12:51.420 --> 00:12:55.600
Django has two major updates coming out next year, which is fantastic for the language, for the

00:12:55.600 --> 00:13:02.200
community and for developers. But, you know, like I published my first book in, you know,

00:13:02.200 --> 00:13:05.580
March, I had to update it this fall. I'm going to have to update them again in April. I'm going to

00:13:05.580 --> 00:13:10.780
update them again in December and I'll have three books out. So there's, you know, it's a chance.

00:13:10.780 --> 00:13:15.020
I like the idea of constantly iterating on my stuff and with text as opposed to video,

00:13:15.020 --> 00:13:20.140
it's very easy for me to do. I probably do changes every week, small things making them better, but

00:13:20.140 --> 00:13:24.100
yeah, it's a challenge and opportunity. I mean, that's partly why, you know, there's so few books on

00:13:24.100 --> 00:13:29.180
frameworks. It's just so hard to keep up. Right. You don't want to be behind, but got to put a stake

00:13:29.180 --> 00:13:33.880
in the ground somewhere. I guess the best bet is just pick the newest possible framework you can go

00:13:33.880 --> 00:13:39.980
with. I think so. Yeah. Or I'd say, I think, I think that the key is to not do everything. It's to,

00:13:39.980 --> 00:13:43.760
it's okay to be known for one thing. Sure. I've thought a lot about this because I,

00:13:43.760 --> 00:13:47.620
I use Django. I like Django. I also write a lot of JavaScript. I've done a lot of React.

00:13:47.820 --> 00:13:52.780
You know, I want to do everything, but really it's better to, you know, look through the world

00:13:52.780 --> 00:13:57.060
through a keyhole. And, I think that's better for people too, right. To be known as like, I need

00:13:57.060 --> 00:14:02.300
to learn Django. I think Django in particular, if I had to bet is going in the right direction on that

00:14:02.300 --> 00:14:07.540
stuff. So, but it's a little scary bet, right. To sort of say like, I'm attaching myself to this

00:14:07.540 --> 00:14:12.100
train. I mean, we do it all the, like we do it across the spectrum though. Right. If,

00:14:12.100 --> 00:14:18.080
if I'm developer at a company and we're going to start a new website, I've got to pick a web

00:14:18.080 --> 00:14:24.600
framework. If I'm a book author, like, like you, I got to pick a framework, right? if I do

00:14:24.600 --> 00:14:28.620
training, same thing you're going to like, you can't do it all. So like you said, you got to

00:14:28.620 --> 00:14:33.260
specialize. I'll say it across the board. I think picking the frameworks and making these kinds of

00:14:33.260 --> 00:14:38.180
technology bets are super important for our careers, no matter where we are. Like imagine

00:14:38.180 --> 00:14:42.980
you just work in like cubicle. You don't do anything public. You just, you, you pick to work

00:14:42.980 --> 00:14:48.100
on this one project or whatever, right? Like if you decide to change careers, if you worked on say

00:14:48.100 --> 00:14:54.400
some obscure framework versus Django, when that switch or that, that choice didn't seem obvious,

00:14:54.400 --> 00:14:58.860
well, it looks pretty like a pretty good choice now, right? When you go to get that next job.

00:14:59.040 --> 00:15:04.220
So I think having this, this vision for what is the right, like where are things and where are they

00:15:04.220 --> 00:15:08.480
going is actually something everybody should continuously cultivate in themselves.

00:15:08.480 --> 00:15:12.540
Right. Well, I think with content, I'm curious on your thoughts. There's, you know, the levels of

00:15:12.540 --> 00:15:16.560
like, who do you, who do you do the content for? I think teaching is all about levels. And if there's,

00:15:16.560 --> 00:15:21.160
you know, three levels, beginner, intermediate, advanced, beginners don't know anything and don't

00:15:21.160 --> 00:15:26.680
value their time. So they won't pay for stuff. Generally speaking, intermediate is probably where you

00:15:26.680 --> 00:15:31.560
can say, Hey, I'll save you 20 hours instead of one or, you know, the inverse of that. And then

00:15:31.560 --> 00:15:36.720
advanced, assume that they can read the manual and figure it out. So most content I think is at that

00:15:36.720 --> 00:15:40.760
intermediate level for that reason, but it's, you know, it's something we have to figure out,

00:15:40.760 --> 00:15:44.860
right? Like with your courses, I'm, I think about this all the time. I try to not skip a step,

00:15:44.860 --> 00:15:49.860
but I try to make it intermediate level. And then I often get emails about, you know, why didn't you go

00:15:49.860 --> 00:15:54.860
advanced on this? It's like, well, I'd love to actually, that would be more interesting for me

00:15:54.860 --> 00:16:00.360
as a developer. But I think that's not where the, I'd rather get people up that curve and, you know,

00:16:00.360 --> 00:16:04.380
and take all the steps to go like, you know, building projects. So, so my first book, you build

00:16:04.380 --> 00:16:10.260
five different web apps. It's not a book length, one project where at some point you make a mistake

00:16:10.260 --> 00:16:14.380
and you fall off and you're just like, and you're done, you're done, right? Like, cause that's how

00:16:14.380 --> 00:16:18.580
I learn. I mean, that's, you know, I know with your courses, you do that. I think everyone says,

00:16:18.580 --> 00:16:23.040
oh, how do I learn this? Like go build a bunch of projects. Okay. Where do I do that? Where do I see

00:16:23.040 --> 00:16:27.980
that? The answer is like nowhere. Yeah. You know, even with Django, as big as Django is, if I've asked

00:16:27.980 --> 00:16:32.840
this people and I wondered this, wondered this five years ago, where do I see a Django blog implementation?

00:16:32.840 --> 00:16:38.380
Where do I see that list of 10 Django sites? If it even exists, it's out of date in a year or two.

00:16:38.940 --> 00:16:44.260
So the first book that I wrote was just my own notes to myself just to remember this stuff.

00:16:44.260 --> 00:16:49.380
And then I eventually put online and eventually I decided to call it a book, but you know, I didn't,

00:16:49.380 --> 00:16:53.100
wasn't aware of anything else that really did it like that. I still don't know if there's anything

00:16:53.100 --> 00:16:58.360
that goes and builds multiple apps in a book format. I think most things are one big mega project,

00:16:58.360 --> 00:17:03.620
which I don't know if that's my learning style or what, but I like the repetition of, you know,

00:17:03.620 --> 00:17:07.440
in my book, each thing builds upon itself. So I don't re-explain stuff, but it's like, okay,

00:17:07.440 --> 00:17:11.060
we've seen this before. I think that that's such a valuable one. And so this book that you're talking

00:17:11.060 --> 00:17:12.800
about is Django for beginners, right?

00:17:12.800 --> 00:17:13.120
Yes.

00:17:13.120 --> 00:17:18.840
Yeah. Okay. So I really liked the format. You have the five different web apps that you build. They

00:17:18.840 --> 00:17:22.620
start out really, really simple and they get a little more advanced and a little more advanced,

00:17:22.620 --> 00:17:26.560
like, oh yeah, let's now talk about databases. And now let's talk about user authentication.

00:17:27.260 --> 00:17:30.760
And it builds up. And I really think that that is the way that people learn.

00:17:30.760 --> 00:17:34.600
Well, it's how I learn. So it's hard to know, right? I mean, I just threw it out there thinking,

00:17:34.600 --> 00:17:39.020
who knows what will happen. And the reason I kept doing it is because the online sites started getting

00:17:39.020 --> 00:17:43.380
traction because I looked at it, you know, when I, back in 2012, when I first thought about this,

00:17:43.380 --> 00:17:48.240
to me, I was thinking, well, I'm going to do Rails or Django because those were the two hot things in

00:17:48.240 --> 00:17:53.060
San Francisco. And Rails was a lot hotter. Rails had a much better beginner community. I would say,

00:17:53.160 --> 00:17:58.060
it had the Rails tutorial, but I, for whatever reason, I just picked Python and Django, maybe

00:17:58.060 --> 00:18:02.400
because I thought Python was more useful, but I knew that I was like, I just got to stick with one

00:18:02.400 --> 00:18:07.680
for a couple of years and do it, but it was really rough. So that book in the, originally was my attempt

00:18:07.680 --> 00:18:13.000
to do like a Rails tutorial, you know, the Michael Hartle Rails tutorial, because I think that once I

00:18:13.000 --> 00:18:18.780
understood Django, I thought it wasn't that Django itself was so complicated. It was that the explanations

00:18:18.780 --> 00:18:22.680
assumed a level of knowledge that people didn't have. And I think this, you know,

00:18:22.700 --> 00:18:27.080
I'm curious on your thoughts. This is a thought I have on the Python community that many people

00:18:27.080 --> 00:18:34.560
are more advanced. You don't just jump into Python. Like you usually come from HTML, CSS, JavaScript,

00:18:34.560 --> 00:18:41.680
or maybe you're doing, you know, Java or something in a university. And you already have a lot more

00:18:41.680 --> 00:18:46.220
experience before you get to Python. And then before you get to Django. So the Django docs, like the Django

00:18:46.220 --> 00:18:51.580
docs are fantastic, but they're written for an intermediate web developer new to Django.

00:18:52.240 --> 00:18:57.400
So if you're new to web development, it's just like, ah, yeah, you're in for a world of hurt. I mean,

00:18:57.400 --> 00:19:02.640
that's why I just submitted a talk to PyCon for next year on, you know, why learning Django is hard.

00:19:02.640 --> 00:19:07.020
And I think the biggest reason is because web development is hard. And if it's your first time

00:19:07.020 --> 00:19:12.680
learning web development, you're going to associate all that pain with the framework that you choose,

00:19:12.680 --> 00:19:17.040
which is unfair, but that's how it is. So anyway, so that first book was, you know, a couple of years in,

00:19:17.100 --> 00:19:21.700
I thought, you know, Django is fantastic, but why isn't there actually truly beginner?

00:19:21.700 --> 00:19:22.460
Why isn't there better?

00:19:22.460 --> 00:19:25.780
Why isn't there better stuff? You know, in the, in the docs and most tutorials assume

00:19:25.780 --> 00:19:29.560
they just kind of jump in halfway. It's, it's how you and I would discuss a project,

00:19:29.560 --> 00:19:34.960
but you know, like one of the, I think best things I do is I literally say to people, okay,

00:19:34.960 --> 00:19:40.060
we're going to create a directory for the code and here's where to put it. And here's the commands.

00:19:40.260 --> 00:19:46.320
And that seems so basic, but so many people can't even get to that step. So they just fall off.

00:19:46.320 --> 00:19:49.900
I did like that about your book. Yeah. Yeah. When I was looking through, I really liked that.

00:19:49.900 --> 00:19:55.240
I find it interesting. I think I'll run this by you. You let me know what you think. Cause

00:19:55.240 --> 00:20:01.300
I learned to do programming later than a lot of folks. I don't know, like a medium age,

00:20:01.300 --> 00:20:08.260
I would say I learned proper programming junior, senior year of college. Right. So I didn't start out

00:20:08.260 --> 00:20:13.560
like programming when I was young. I fiddle around. I love computers and stuff, but I didn't really get

00:20:13.560 --> 00:20:18.320
into programming until I was almost done with college. And I feel like people who learn programming

00:20:18.320 --> 00:20:24.700
a little bit later in life, the sharp edges and the pain that you hit on these things you

00:20:24.700 --> 00:20:31.460
get hung up on are the memory is more recent. Right. And I think that's actually a super important

00:20:31.460 --> 00:20:37.840
aspect of being a good teacher, either in books or videos or in person or whatever,

00:20:37.840 --> 00:20:44.100
even just speaking at a conference is remembering the sharp edges because a lot of the people out

00:20:44.100 --> 00:20:48.240
there are just about to bump into them or they just recently bumped into them. And if you have that

00:20:48.240 --> 00:20:52.900
empathy and that shared experience a little more deeply, then it's, it's a little bit easier to help

00:20:52.900 --> 00:20:57.040
and go like, actually, no, don't just say create a virtual environment. Say, these are the four commands

00:20:57.040 --> 00:21:00.300
to create the folder and then the virtual environment, then activate it. Because if you

00:21:00.300 --> 00:21:05.440
don't write some people, let's just go, ah, so frustrating. Right. Yeah. It's empathy. Right.

00:21:05.440 --> 00:21:09.680
I think empathy is what makes a great teacher. And yeah. When you learn programming later in life,

00:21:09.680 --> 00:21:14.000
I think it's two things. It's more recent. I think the bigger thing is you, you have experience,

00:21:14.000 --> 00:21:19.280
you've learned other things. When you're a kid, you just accept everything as at face value. And I think

00:21:19.280 --> 00:21:23.840
this has changed, but 10 years ago, a lot of people who knew how to program learned how to program

00:21:23.840 --> 00:21:27.980
because they weren't playing sports or doing traditional activities, they were at home

00:21:27.980 --> 00:21:33.020
on their own or in online communities, learning how to code. And they became known for coding and

00:21:33.020 --> 00:21:37.600
it sort of builds up. They just get used to it. Right. It's just normal to them. Whereas,

00:21:37.600 --> 00:21:42.380
you know, as an adult, I mean, I was 32, I think when I got serious about coding and,

00:21:42.380 --> 00:21:47.680
you know, I have a brain, I work hard. I've never been so frustrated in my life. Right. And so you get a

00:21:47.680 --> 00:21:51.900
little bit of the Stockholm syndrome. You're like, is it me or is it coding? And I think it's really

00:21:51.900 --> 00:21:55.960
just that it's could be explained better. I don't think that programming is any,

00:21:55.960 --> 00:22:00.860
and this is interesting thinking about programmers. Like I feel like programmers are the group that's

00:22:00.860 --> 00:22:06.380
most prone to telling themselves that they're smart that I've worked in. I've worked with a lot of

00:22:06.380 --> 00:22:12.180
smart people. And I think maybe it's to do with the fact that our field changes and it is, you know,

00:22:12.180 --> 00:22:17.360
very mentally challenging, but yeah, there's sort of that like macho nerd attitude that's prevalent in

00:22:17.360 --> 00:22:22.180
engineering that I find incredibly off-putting. I think most people do. But yeah, so for me

00:22:22.180 --> 00:22:26.380
personally, like my role model is Julia Child actually, because most people don't know this,

00:22:26.380 --> 00:22:30.480
that she didn't learn how to code until she was, I think 32 as well. She was well into her thirties.

00:22:30.480 --> 00:22:34.940
And so is she the world's best cook? No, like I'm not going to be the world's best programmer,

00:22:34.940 --> 00:22:39.420
but she's really good at explaining it because she, again, as you say, has that experience,

00:22:39.420 --> 00:22:43.260
that empathy. And the challenge for me now actually is with this Django stuff that I,

00:22:43.360 --> 00:22:48.780
I've internalized a lot of it, but I respond to so many emails from users that I use that to sort

00:22:48.780 --> 00:22:54.400
of not lose touch with how hard this is because it, because it is, it is easy to do to just,

00:22:54.400 --> 00:22:58.480
you know, even just the other day, I was trying to show someone, I was like, Oh, you can build a

00:22:58.480 --> 00:23:02.680
website and throw it up online in 10 minutes. And it's hard to do even my book. Right. I was like,

00:23:02.680 --> 00:23:06.040
Hey, here's my book. You can do it. Like, let's do it. Bang, bang, bang. He's on a windows machine.

00:23:06.040 --> 00:23:09.660
An hour later we had Python installed. Yeah. Right. So these are the things too,

00:23:09.720 --> 00:23:12.880
like, like virtual environments, you know, installing Python. Some of my most popular

00:23:12.880 --> 00:23:18.440
posts on my website are how to install Python because right. As you know, there's, it's hard

00:23:18.440 --> 00:23:22.120
to do and there's actually multiple ways to do it. And generally an engineer will say,

00:23:22.120 --> 00:23:26.320
well, here's the five ways to do it. Here are the pros and cons. When a beginner just wants you to say,

00:23:26.320 --> 00:23:29.740
do it this way. What is the best way? Just tell me that. I don't need to know this.

00:23:29.740 --> 00:23:34.360
So in my book, I don't get into these, there's debates within the Django world about structure and

00:23:34.360 --> 00:23:38.540
some other things we can get into, but I don't bring them up. I may quickly reference them,

00:23:38.600 --> 00:23:43.280
but I just say, here's how to do it because I don't think that that matters at the beginner stage.

00:23:43.280 --> 00:23:46.800
I think you want to get the confidence, you want to get stuff going. And then later on,

00:23:46.800 --> 00:23:50.600
you can have those debates. And even now, like we could talk about like with virtual environments,

00:23:50.600 --> 00:23:55.000
PipM is in the news, which I use in my book. There's these kinds of religious debates that are

00:23:55.000 --> 00:23:59.740
beginners don't understand. And on some level I think are counterproductive,

00:23:59.740 --> 00:24:01.600
but kind of just are, and I've internalized them.

00:24:01.600 --> 00:24:10.940
Yeah. This portion of Talk Python To Me is brought to you by us. Have you heard that Python is not good

00:24:10.940 --> 00:24:15.920
for concurrent programming problems? Whoever told you that is living in the past because it's prime

00:24:15.920 --> 00:24:21.680
time for Python's asynchronous features. With the widespread adoption of async methods and the async

00:24:21.680 --> 00:24:27.660
and await keywords, Python's ecosystem has a ton of new and exciting frameworks based on async and await.

00:24:27.800 --> 00:24:32.800
That's why we created a course for anyone who wants to learn all of Python's async capabilities,

00:24:32.800 --> 00:24:39.860
async techniques and examples in Python. Just visit talkpython.fm/async and watch the intro video

00:24:39.860 --> 00:24:44.620
to see if this course is for you. It's only $49 and you own it forever. No subscriptions.

00:24:44.620 --> 00:24:47.420
And there are discounts for teams as well.

00:24:49.480 --> 00:24:55.200
One real quick thing on the sharp edges and stuff. I think having these different little apps helps you

00:24:55.200 --> 00:25:00.660
take these first few steps onboarding into the programming world. You do with your five web apps,

00:25:00.660 --> 00:25:03.660
I have my 10 apps course that you build the 10 apps. They get increasingly hard.

00:25:03.660 --> 00:25:10.080
And it's, you make these wins. You're like, I built a thing. Like I've gone from beginning to end and I've

00:25:10.080 --> 00:25:15.220
survived, survived it. Whereas if you have like one long tutorial or one long thing in a book or

00:25:15.220 --> 00:25:20.220
something, you're punished along the way. And if you don't withstand all the punish, it's like running

00:25:20.220 --> 00:25:25.780
a marathon versus a mile, right? You got to run the mile to learn to run the marathon, but you don't

00:25:25.780 --> 00:25:29.900
have to run the marathon first, right? So you can do these steps and you can get these early wins and

00:25:29.900 --> 00:25:35.800
build the confidence. You had mentioned installing Python. And what I liked, one thing I saw in your

00:25:35.800 --> 00:25:41.220
book that I thought was pretty cool was you talked about installing Python on macOS with Homebrew

00:25:41.220 --> 00:25:46.920
on say Ubuntu or something. You just app install the package, right? But I doubt too many of the

00:25:46.920 --> 00:25:51.440
beginners are using Linux. Maybe they are, but... Well, yeah, actually I get a lot, I get quite a few

00:25:51.440 --> 00:25:56.200
questions from Linux users. And I've always assumed if you're on Linux, you know what you're doing, but

00:25:56.200 --> 00:26:01.580
people are on Linux for very strange reasons. Yeah, sure. You can't assume anything, but yeah.

00:26:01.580 --> 00:26:05.640
Yeah. Well, I guess there's traditionally been this way of like, you run this command, you get Python

00:26:05.640 --> 00:26:11.840
on Linux. And that's not traditionally existed on macOS until people started to use Homebrew and it

00:26:11.840 --> 00:26:19.540
barely or doesn't exist on Windows. So I think the leveraging these things is really quite powerful.

00:26:19.540 --> 00:26:25.100
Yeah. I think if, I mean, if I could wave a wand with Python to solve installation, it's a much bigger

00:26:25.100 --> 00:26:30.740
deal than people think because most people don't own their own computer or they're on Windows where it's,

00:26:30.740 --> 00:26:35.500
you know, much harder than on a Mac, you know, a school setting Chromebooks, you can kind of do it

00:26:35.500 --> 00:26:41.440
with Anaconda, but it's messy. So most Python people I talk to are just like, oh, how hard is it to install

00:26:41.440 --> 00:26:46.360
it? And I just think there's a general, yeah, I don't know. I just think people should go and try to

00:26:46.360 --> 00:26:51.260
teach someone up because, you know, we were talking about the easy wins. I think that first win, like

00:26:51.260 --> 00:26:56.860
when I've taught like at the college level and when I show people create an HTML file, put anything in it,

00:26:56.860 --> 00:27:02.820
double click it with your mouse and it shows up on the screen, that wow moment, the look on their face,

00:27:02.820 --> 00:27:08.060
the feeling they have is so powerful and that sustains them through so many things. And I think,

00:27:08.060 --> 00:27:12.880
and those wins kind of, they get harder as you progress in programming, but I think you need those

00:27:12.880 --> 00:27:18.000
wins. Like we're in agreement on this. Like you need that confidence. You need the ability to share

00:27:18.000 --> 00:27:22.260
your stuff with friends and family and have them go, oh, that's cool. Or you can show them how to do

00:27:22.260 --> 00:27:25.660
tracking codes and say, hey, like, I know you didn't look at my site, right? There's all these

00:27:25.660 --> 00:27:31.520
aha moments. And I think, I think very top down in terms of teaching with, I want to maximize the aha

00:27:31.520 --> 00:27:36.020
moments, you know, and say too, like, here's what we're going to build. There's a lot of courses and

00:27:36.020 --> 00:27:40.320
books that just jump into it. And it's like, what are we doing? I think you should always say, here's

00:27:40.320 --> 00:27:44.400
where we're going. We're going to struggle, but we're going to get there. I have that debate with other

00:27:44.400 --> 00:27:49.640
teachers. I mean, Andrew Pinkham, who did Django Unleashed, you know, his book is a fantastic book

00:27:49.640 --> 00:27:54.720
and he goes bottom up with stuff and I go top down and yeah, it's a pedagogical difference,

00:27:54.720 --> 00:28:00.820
I guess. Yeah, it definitely is. And I think at the heart of that difference is how long will

00:28:00.820 --> 00:28:06.420
somebody persist learning arbitrarily small details towards a far goal? If they're willing to go through

00:28:06.420 --> 00:28:10.740
as many details as it takes, you could probably be more efficient that way. But that's not the,

00:28:10.740 --> 00:28:14.860
I don't believe that's the reality. People need these early wins. Yeah. Well, that, and that's the

00:28:14.860 --> 00:28:19.180
challenge with a CS degree is you, you get all the things you need without the context to know why you

00:28:19.180 --> 00:28:23.660
need it. It's like, nobody studies music theory for the sake of it. They hear a song and they want to

00:28:23.660 --> 00:28:29.660
play it. And yet, why do we assume that people need to take all this theory without any context?

00:28:29.660 --> 00:28:35.140
If I could redo everything, I would get a bunch of these early wins, have them feel some pain,

00:28:35.140 --> 00:28:40.140
and then understand why data structures are amazing, right? They're mind blowing when you've

00:28:40.140 --> 00:28:45.320
been frustrated on it, but when they just given it, I think it doesn't mean as much, but that's like

00:28:45.320 --> 00:28:49.580
everything in life, right? Like, you know, the answer is you have to live it to understand them.

00:28:49.580 --> 00:28:55.920
There's something about this experience thing. So I guess experience, one thing that might be a little

00:28:55.920 --> 00:28:59.860
bit different is when I, certainly when I learned a program, this was...

00:28:59.860 --> 00:29:00.840
Are you going to use yours?

00:29:00.840 --> 00:29:06.260
Yeah. I was going to use, I'm just trying to think, when was I a junior in college? This would be like

00:29:06.260 --> 00:29:12.680
1995. World Wide Web was created two years before then. And so there was not much to learn. It was like,

00:29:12.740 --> 00:29:18.520
you get a book and you sit down and you learn it. I suspect there was some differences from say 2013

00:29:18.520 --> 00:29:24.740
when you learned versus say now. Like, how have you seen that change even in the five, six years?

00:29:24.740 --> 00:29:30.560
Yeah, I think it's just a lot better. Bootcamps just started in San Francisco then. There wasn't

00:29:30.560 --> 00:29:34.860
really this idea that anyone could code, but many people were feeling as I did that you feel like a

00:29:34.860 --> 00:29:40.480
second class citizen. You work at these companies. I mean, I was, you know, an MBA well into my career hiring

00:29:40.480 --> 00:29:45.260
people right out of school making more than I was. And so sort of...

00:29:45.260 --> 00:29:46.000
Yeah, that feels great, right?

00:29:46.000 --> 00:29:51.480
Well, you know, it is what it is. I mean, it's deja vu of my publishing career, right? I became a book

00:29:51.480 --> 00:29:57.820
editor, you know, in three years, which I figured would take 10 or 15. And so I was like, okay,

00:29:57.820 --> 00:30:00.900
what does this look like for the rest of my life? And same thing again, you know,

00:30:00.900 --> 00:30:04.780
and I didn't actually go into it thinking I wanted to be a programmer. I got into it thinking

00:30:04.780 --> 00:30:10.260
my glaring weakness is not being a better programmer for someone who's on the business side.

00:30:10.260 --> 00:30:14.960
And I still think if I was, you know, rational about it, how could I make the most money? It would

00:30:14.960 --> 00:30:21.200
be to be a tech whisperer to a CEO or a COO. Because it's that middle management position. It's that,

00:30:21.200 --> 00:30:26.240
you know, explaining tech to people who don't know tech. That's actually the sticking point for a lot

00:30:26.240 --> 00:30:30.740
of stuff. But yeah, but in general, 2018 is so much better. YouTube is a thing. There's video courses.

00:30:31.060 --> 00:30:34.340
There was no one really doing self-published content. I think there was lynda.com.

00:30:34.340 --> 00:30:34.660
Yeah.

00:30:34.660 --> 00:30:38.860
And I think there's more just communities around, hey, it's okay to learn how to code and do it

00:30:38.860 --> 00:30:42.880
together. Because the isolation that I felt that many people feel, that's the really hard part.

00:30:42.880 --> 00:30:48.300
You feel like you're in this tunnel and you can spend a week in Stack Overflow hell. And you ask

00:30:48.300 --> 00:30:50.500
questions in Stack Overflow and people are mean to you.

00:30:50.500 --> 00:30:55.900
Yeah, they're super mean. Like, you asked it wrong. Go away. I was really frustrated. I had to,

00:30:55.900 --> 00:30:56.920
like, I'm just, I'm sorry.

00:30:56.920 --> 00:31:01.040
Yeah, read the manual. I know. I will say though, that something about Stack Overflow,

00:31:01.040 --> 00:31:06.660
that I still keep with me is the idea that there's a community of engineers that will answer

00:31:06.660 --> 00:31:14.240
my specific question and help me for free is mind-blowing in a non-tech context. That is,

00:31:14.240 --> 00:31:18.140
I remember the first couple of times I asked questions and people quickly, you know, that's

00:31:18.140 --> 00:31:22.000
what I love about engineering is that it really generally comes from a really good place of

00:31:22.000 --> 00:31:25.880
we're all learning together and we want to help. And that is not the case in finance,

00:31:25.880 --> 00:31:27.700
consulting, all these other fields.

00:31:27.700 --> 00:31:33.320
Sure. There's probably not a Stack Overflow of, you know, financial analysts or for lawyers or

00:31:33.320 --> 00:31:34.380
things like that, I would guess.

00:31:34.380 --> 00:31:38.540
Yeah. But, you know, the flip side is that engineers' passion gets abused. You know,

00:31:38.540 --> 00:31:42.040
there's a lot of, you know, open source, there's burnout and all these things. So,

00:31:42.040 --> 00:31:44.960
you know, it's one of those jobs where programmers really like what they do,

00:31:44.960 --> 00:31:47.000
but then you sort of pay a price for it.

00:31:47.260 --> 00:31:51.380
It's on net, it's fantastic. Like I love doing something that I'm interested in that challenges

00:31:51.380 --> 00:31:55.720
me, but it's, it's really hard to, most of my friends are not programmers. It's really hard to

00:31:55.720 --> 00:32:02.280
explain what I do to non-programmers, right? I mean, I spend most of my day deeply frustrated and my,

00:32:02.280 --> 00:32:07.360
my tolerance has increased, but I don't, you know, get pats on the back for anything, right? Right.

00:32:07.360 --> 00:32:13.120
Because we, we automate what we know and then we move on. And that, you know, I think ties in probably to

00:32:13.120 --> 00:32:16.320
some of the mental health stuff for programmers, but yeah, it's, you know, I'm like constantly

00:32:16.320 --> 00:32:20.500
learning, but I'm also constantly learning. And that's why you need content, you know, people like,

00:32:20.500 --> 00:32:26.600
like yourself and, and others who say, Hey, this isn't, this can be done so much faster, right?

00:32:26.600 --> 00:32:31.340
Like not everyone can read the manual and grok it. And that's a surprising thing to me is the audience

00:32:31.340 --> 00:32:35.500
that I have, I'd be curious about yours. You know, I have people who been programming for decades,

00:32:35.500 --> 00:32:42.020
people who've been programming in Python for over 10 years, but they're not doing web and they,

00:32:42.260 --> 00:32:48.460
you know, in Django's the web is hard to learn or people coming, you know, yesterday, someone kind

00:32:48.460 --> 00:32:54.080
of grumpily emailed me saying, I actually put a review on Amazon and said, yeah, I'm from a PHP shop

00:32:54.080 --> 00:32:58.680
and we have to learn Python Django. And yeah, this book is good, but it doesn't go into like where I put

00:32:58.680 --> 00:33:03.540
the business logic. So four to five stars, you know, I'm grateful for him for writing the review.

00:33:03.540 --> 00:33:09.120
Everyone should write reviews for tech books, but you know, it's like you, you sort of, yeah,

00:33:09.340 --> 00:33:12.620
you can't win. And there's a very wide audience of people who, yeah, well, that's one of the

00:33:12.620 --> 00:33:16.980
tensions where if you had put too much emphasis on that, people are like, I don't need that right

00:33:16.980 --> 00:33:22.660
now. This is, why do I need all this detail? Right. So it's, you can't have that many variations,

00:33:22.660 --> 00:33:27.840
right? You just gotta, you just gotta decide and try to help as many people. I guess one of the things,

00:33:27.840 --> 00:33:32.220
you know, if, if you're writing these books and you're helping people, a lot of people learn Django,

00:33:32.420 --> 00:33:38.220
maybe touch on some of the things you feel like Django has done right, or Django makes getting

00:33:38.220 --> 00:33:43.900
going in web programming easier, better than say like Flask or Pyramid or something like that.

00:33:43.900 --> 00:33:45.520
Why Django for you, I guess?

00:33:45.520 --> 00:33:52.480
Yeah. So why Django? Because it's in Python, which is a fantastic growing language, which is easy to learn

00:33:52.480 --> 00:33:59.380
and you can use your whole career because I like Django over Flask. That's a little bit of a religious

00:33:59.380 --> 00:34:05.020
debate. You know, it comes down to, do you like to paint between the lines or not? I'm fine with

00:34:05.020 --> 00:34:08.560
decision, not having to make all the decisions, even if I don't agree with all of them, you know,

00:34:08.560 --> 00:34:13.540
Flask and other micro frameworks, people really, really seem to like that. I think that the trap is,

00:34:13.540 --> 00:34:18.880
I think a lot of beginners look at the hello world script for, you know, Flask versus Django and Flask

00:34:18.880 --> 00:34:22.680
is fantastic. You're up and running. It looks so easy. Yeah. It looks so easy and it is so easy,

00:34:22.680 --> 00:34:27.980
but then you add a dozen packages. Where do I find them? Are they up to date?

00:34:27.980 --> 00:34:33.660
It quickly becomes quite advanced. Whereas Django just puts you between the lines in the same way

00:34:33.660 --> 00:34:39.220
that Rails does. And I really appreciate not having to deal with that. Partly, I think, you know, I spent

00:34:39.220 --> 00:34:44.600
over a year working on a startup that used Meteor.js, which is a JavaScript framework, which was fantastic

00:34:44.600 --> 00:34:49.620
to use, but was constantly changing. And, you know, the stability of Django is an underrated feature for

00:34:49.620 --> 00:34:54.620
beginners. It's around, it's going to be around. There's all these benchmarks. It doesn't change that

00:34:54.620 --> 00:34:59.400
much. Actually, those are huge wins for the Django community. You know, in terms of what's,

00:34:59.700 --> 00:35:03.980
the docs are fantastic. The community is really nice. There is a little bit of a learning curve,

00:35:03.980 --> 00:35:09.140
but I try in the book to show, you know, hello world can be done pretty quickly. And actually,

00:35:09.140 --> 00:35:14.340
pedagogically, there's, I have a post on three ways to do an about page, which could be any static page.

00:35:14.340 --> 00:35:18.300
There's like the really fast way to do it. They're like kind of fast. And then like the way you would

00:35:18.300 --> 00:35:22.620
do it with, you know, different apps, if you're going to build out a structure. So I just sort of give

00:35:22.620 --> 00:35:26.720
that to people just to say, you know, it's going to be okay. We're going to, we're going to get

00:35:26.720 --> 00:35:30.900
through this. Yeah. So yes. So those are all advantages of Django. And I was just at Django

00:35:30.900 --> 00:35:34.880
con for the first time. The community is fantastic. Yeah. Did you give a presentation there? I did.

00:35:34.880 --> 00:35:41.020
Yeah. I gave a talk on finally understand user authentication with Django rest framework. So not,

00:35:41.020 --> 00:35:45.940
not a short, not a short title. And I think that that talks on YouTube now, but it was,

00:35:45.940 --> 00:35:50.100
you know, realization I had is you don't really learn HTTP until you build an API,

00:35:50.100 --> 00:35:54.500
or at least I didn't really understand it. It's a really interesting point is I feel like I didn't

00:35:54.500 --> 00:35:59.880
either. And so I started building really restful services, right? You're like, Oh, I didn't even

00:35:59.880 --> 00:36:04.360
know that you use the verbs in this way or that they had these meanings or these are cacheable and these

00:36:04.360 --> 00:36:09.160
are not cacheable and these are modifying and these are not modifying. And the status codes are similar,

00:36:09.160 --> 00:36:13.080
but not the same. Like, yeah, I remember just thinking, Oh, there's, there's get and there's post

00:36:13.080 --> 00:36:17.300
and post is where you submit stuff back in the day. Right. And what's a put in. Yeah. I mean,

00:36:17.300 --> 00:36:22.020
cause I, and I mean, I remember, you know, so I had a project where I needed to build an API and I

00:36:22.020 --> 00:36:28.520
didn't know rest framework very well. And I was just so upset that it was hard to learn when I just

00:36:28.520 --> 00:36:34.140
wrote a book on Django. Why is this hard to learn? And it's hard to learn because APIs are a whole big

00:36:34.140 --> 00:36:39.180
bag of stuff and authentication is a hard thing. And I, and I made the point in the talk that I even asked,

00:36:39.180 --> 00:36:43.320
I said, we talk a lot about headers and understanding what is an HTTP request and response,

00:36:43.320 --> 00:36:48.000
like actually look like I asked the audience, I said, what's the bare minimum header I need to

00:36:48.000 --> 00:36:52.620
include? Because in practice, there's so much cruft in there that you never even look at.

00:36:52.620 --> 00:36:57.200
One of them is authentication headers. And even in that audience of, you know, over a hundred people,

00:36:57.200 --> 00:37:02.020
first of all, almost nobody answered the question. You know, these are like the creators of Django.

00:37:02.020 --> 00:37:07.120
And then I think maybe four or five people got it right. You know, the answer I, a question I asked

00:37:07.120 --> 00:37:12.340
was, is it zero one, two or more? And you know, it's a trick question on purpose. It's just a

00:37:12.340 --> 00:37:15.920
question to say like, nobody really knows it's in the headers because we don't need it until we need

00:37:15.920 --> 00:37:24.700
it. The answer is for a get request in HTTP 1.1, you need one, which is, you need one thing,

00:37:24.700 --> 00:37:28.040
which I'm forgetting what it is. It's like a loud host or something. You know, so it's a trick

00:37:28.040 --> 00:37:31.960
question, but it's, it's this point that even the experts of this, you know, the abstraction exists

00:37:31.960 --> 00:37:35.360
for a reason. But yeah, so that's that, that's, that talk was on. It was actually a pretty

00:37:35.360 --> 00:37:41.180
advanced talk, but it was my personal frustration with learning how to build APIs.

00:37:41.180 --> 00:37:46.320
You seem to, you have this habit of like, I go through this experience and then the sort of

00:37:46.320 --> 00:37:49.800
making it all whole and well against write a book about it, right?

00:37:49.800 --> 00:37:50.180
Yeah.

00:37:50.180 --> 00:37:53.860
Because your other book is on restful APIs with Django Restway Mark.

00:37:53.860 --> 00:37:57.600
Yeah. It's pain driven development or something. I mean, you know, there is an argument. I think

00:37:57.600 --> 00:38:01.000
it's true that the best time to teach is when you're learning it because I, you know, I always make

00:38:01.000 --> 00:38:05.340
notes of, and that actually brings up, you know, I'm the issue I have now with text-based

00:38:05.340 --> 00:38:10.280
stuff is this idea of like happy path programming, right? Like if I were sitting down with someone,

00:38:10.280 --> 00:38:14.160
I would want to show them how to mess things up. Like I would mess, I mess things up going through

00:38:14.160 --> 00:38:19.040
my own books, trying to do it from scratch. So how do I, you know, how do I comfort the reader and make

00:38:19.040 --> 00:38:22.100
them understand that these are normal and these are actually interesting and important, but not

00:38:22.100 --> 00:38:27.880
overwhelm them. Cause I don't want to just give you the recipe and say this, then this, then this,

00:38:27.880 --> 00:38:32.600
then this, I want to mix it up a little bit. But I think that for me, the big challenge of tech

00:38:32.600 --> 00:38:37.700
writing is breaking beyond, you know, this, this, this, this, this, this, this, it's, it's

00:38:37.700 --> 00:38:41.740
putting some empathy in there. It's trying to predict one or two things, but not too many

00:38:41.740 --> 00:38:45.600
so that the reader feels like they're on, you're on their side and you kind of understand.

00:38:45.600 --> 00:38:49.860
So, yeah. So in that, in that talk, you know, I started off saying like, what is the web?

00:38:49.860 --> 00:38:54.300
What is the internet? Like I built it up even for that advanced crowd. Cause I think it's

00:38:54.300 --> 00:38:58.900
important to do that. I mean, I even, I talked about custom user models, which in the Django world is

00:38:59.540 --> 00:39:03.640
a big, big deal that Django has this built-in user model that everyone swaps out for a custom user

00:39:03.640 --> 00:39:08.000
model, which again, you don't find out until you're well into your Django journey and you want to change

00:39:08.000 --> 00:39:10.940
your user model and you go, Oh, I can't.

00:39:10.940 --> 00:39:16.220
Right. So this is like, if you have a users in your website, there's a prebuilt model that has

00:39:16.220 --> 00:39:20.740
prebuilt fields that just comes with Django, but you don't have to live with it. Yeah.

00:39:20.740 --> 00:39:24.440
So it's a legacy issue. So Django has this fantastic built-in user model,

00:39:24.440 --> 00:39:29.300
but the very first time you run migrate, it links up with the admin and throughout the rest of the,

00:39:29.300 --> 00:39:34.660
you know, the framework. And it's very, very difficult to unwind that. And so there's been

00:39:34.660 --> 00:39:39.260
a progression where people used to use profiles and now you can do a custom user model, which is

00:39:39.260 --> 00:39:44.160
basically just a, just a copy of it. And then everything works. Okay. And I actually, I was

00:39:44.160 --> 00:39:47.960
really heartened that when I gave that talk and I demonstrated how to do the custom user model,

00:39:47.960 --> 00:39:51.720
cause that was a whole separate thing that I have a couple of popular posts on. I said,

00:39:51.840 --> 00:39:56.180
why isn't there a simple way to do this? Like, you know, everyone seems to know how to do this,

00:39:56.180 --> 00:40:00.860
but like the official docs do a pretty complex implementation. In my opinion, they use abstract

00:40:00.860 --> 00:40:05.880
base user instead of abstract user, which we could talk about, but people, I don't know if they care

00:40:05.880 --> 00:40:11.040
about that, but even, you know, I won't say who it is, but someone who's very, very, very accomplished

00:40:11.040 --> 00:40:15.580
in the Django world came up to me after my talk and said, Oh, I've been doing user models the old way.

00:40:15.580 --> 00:40:18.320
I didn't realize the new way could be so simple. I should do it that way,

00:40:18.320 --> 00:40:24.020
which I think speaks, speaks to the, you know, humility of true masters, but also just, we're all learning,

00:40:24.020 --> 00:40:29.620
you know, it's, it's worth covering the basics because you just can't assume the experts know

00:40:29.620 --> 00:40:31.420
anything. There's too much to learn to know.

00:40:31.420 --> 00:40:36.100
Sure. Yeah. It sounds like a really interesting talk. What was your experience? Like, what do you

00:40:36.100 --> 00:40:39.180
learn from, from doing this presentation and being with these folks?

00:40:39.300 --> 00:40:43.000
Yeah. It just humanized things for me. I mean, it was, it was, I thought a lot about whether

00:40:43.000 --> 00:40:47.140
I wanted initially submitted the talk because I wanted to go, but I'm self-employed. So I didn't

00:40:47.140 --> 00:40:51.760
have the funds to pay for it. But if you get accepted for a talk, you don't have to pay for a

00:40:51.760 --> 00:40:57.040
ticket. I decided to do a 40 minute talk instead of a 20 minute talk, which is way more than twice the

00:40:57.040 --> 00:41:02.440
effort. So I probably spent about a month of time on the talk and I gave it Django Boston first.

00:41:02.440 --> 00:41:06.140
But yeah, it just made my own understanding rock solid. Even though I'd written the book,

00:41:06.200 --> 00:41:10.620
I thought I really knew it. And I was like, Ooh, there's a couple of edge cases.

00:41:10.620 --> 00:41:14.180
Yeah. It was a, it was a blast. It was really fun to, to see the people I know,

00:41:14.180 --> 00:41:18.860
to see how welcoming everyone is, to go to the talks to, you know, I met people who'd read my

00:41:18.860 --> 00:41:23.240
book because, you know, you probably have this too. For me, I just see numbers on a screen. It's,

00:41:23.240 --> 00:41:29.360
it doesn't feel different having one reader or, you know, a thousand or 10,000, you know,

00:41:29.360 --> 00:41:34.120
and it doesn't really feel different. So to, to get that validation was, was a confidence boost.

00:41:34.360 --> 00:41:38.920
I think that it actually, I think it, it's a confidence boost, but it also,

00:41:38.920 --> 00:41:43.700
at least for me to go to conferences like that and meet folks like that, which I,

00:41:43.700 --> 00:41:48.760
it's one of the things I absolutely enjoy and look forward to and try to make a lot of time to do.

00:41:48.760 --> 00:41:53.560
It just reminds me like there are real people actually getting like real value

00:41:53.560 --> 00:41:59.100
from the work that I do. And it feels like to me, like you and I are speaking right now and that's

00:41:59.100 --> 00:42:03.660
just, we could just be doing this in a coffee shop or over a beer or something. Right. But

00:42:03.660 --> 00:42:08.780
there's lots, lots of people listening who, you know, maybe this is helping in some way. Right.

00:42:08.780 --> 00:42:12.280
And, and having that experience, getting there and interacting with people is, it's really wonderful.

00:42:12.660 --> 00:42:18.320
I suspect, you know, most people. Yeah. Yeah. It's like this, it's like this for days. So it's really nice to,

00:42:18.320 --> 00:42:23.140
yeah. Yeah. Most people who just work on projects, right. Like Django rest framework,

00:42:23.140 --> 00:42:30.980
for example, or API star, right. Tom Christie had a booth a while ago, like 2017, I think maybe 2016.

00:42:31.220 --> 00:42:34.840
I can't remember which, but you know, it's like, Oh, the, all these people are coming to talk to me.

00:42:34.840 --> 00:42:38.860
It's so amazing. And just, I think we all as contributors to the community feel that on one

00:42:38.860 --> 00:42:44.060
hand. And then on the other, I definitely think it humanizes it a lot of, especially for beginners

00:42:44.060 --> 00:42:49.480
because they, they see the tutorials, they see the code and it's like the humanity is largely stripped

00:42:49.480 --> 00:42:54.040
away. And it's like just down to the essence of what do I need to do? And the human side of it is kind

00:42:54.040 --> 00:42:59.580
of not there until you meet the people. Yeah. And the human side, especially if Python and Django is

00:42:59.580 --> 00:43:05.000
fantastically giving. And, and I think you also, you know, I took away to how, how fragile Django is.

00:43:05.000 --> 00:43:10.880
It's easy to think of it as this amorphous thing, you know, with millions of users, but Carlton Gibson

00:43:10.880 --> 00:43:17.780
gave a fantastic keynote. So he's the Django fellow. So it's a halftime position. He's co-maintainer of

00:43:17.780 --> 00:43:22.800
Django rest framework, talking about the fact that it's really about a half dozen people who really make

00:43:22.800 --> 00:43:29.360
Django go. And then maybe another dozen more, and that drops off to, you know, one-offs. So as

00:43:29.360 --> 00:43:35.360
as robust as it is, it really relies on a lot of these unsung heroes, largely doing it unpaid.

00:43:35.360 --> 00:43:40.680
And so it's, it's a little scary, but it also is, you know, humanizes it. And you realize these are

00:43:40.680 --> 00:43:44.440
people doing it because they want to, to be helpful and people contribute in different ways. I mean,

00:43:44.440 --> 00:43:48.300
I think about, you know, how can I most contribute? Like there's certain things I'd love to do some

00:43:48.300 --> 00:43:53.380
core contributions, but I think doing the teaching I'm doing now is also important and, you know,

00:43:53.380 --> 00:43:56.620
you can only do so much, but yeah, that's for sure. So people should go to conferences.

00:43:56.620 --> 00:43:58.300
They're not scary. People are really nice.

00:43:58.300 --> 00:44:03.280
Yeah. Some of my favorite times of the year are actually going to a PyCon and other,

00:44:03.280 --> 00:44:07.500
other events like that. So people, if they're out there listening and they haven't gone,

00:44:07.500 --> 00:44:11.240
you should definitely look into going if you at all can. It's really a great experience.

00:44:11.240 --> 00:44:15.960
Yeah. And they, they do try to have financial support, you know, you have to apply, but they

00:44:15.960 --> 00:44:20.320
try to make it as welcoming as they can. So try not to be scared off by the sticker price.

00:44:20.320 --> 00:44:26.600
Yeah, for sure. So we talked about your books and some of the techniques in there and just the,

00:44:26.600 --> 00:44:31.520
ideas about teaching programming and Django and so on, what are maybe some of the other

00:44:31.520 --> 00:44:34.400
resources for learning Django you'd like to put out there for people?

00:44:34.400 --> 00:44:39.900
So there's websites. There's Vitor does simple is better than complex, which is a fantastic site.

00:44:39.900 --> 00:44:44.260
He's also started doing videos on YouTube. I think he has two series, which are fantastic.

00:44:44.260 --> 00:44:50.000
Michael Herman, who was one of the original founders of real Python has a site testdriven.io.

00:44:50.000 --> 00:44:56.320
It's not Django, but it's Python, Flask, React, Docker. And he has like, I have a Docker Stripe

00:44:56.320 --> 00:45:01.060
tutorial on, on test driven. That's a great resource. Nige has a, you know, there's only,

00:45:01.320 --> 00:45:05.300
there's only three books updated to 2.1 in Django and I've written two of them.

00:45:05.300 --> 00:45:10.580
The other one is by Nige, building your first websites. That's fantastic. So yeah, the, the,

00:45:10.580 --> 00:45:15.060
the usual stuff, I don't think there's, you know, there isn't a Django screencast. Well,

00:45:15.060 --> 00:45:19.400
there's GoPro or go Django. Yeah. I think there should be more stuff, but those are, I guess those

00:45:19.400 --> 00:45:23.760
are my greatest hits for stuff. There's, you know, two scoops book. Yeah. I'm curious for you,

00:45:23.760 --> 00:45:28.340
like, what do you, are there, you know, you're in Python, but maybe not as deep in Django as I am.

00:45:28.340 --> 00:45:32.120
What, what, you know, when someone says, I don't want to learn Django, like, where do you point them?

00:45:32.120 --> 00:45:37.400
Yeah. I honestly, it's, it's a bit of a challenge as well. I've, there's a couple of like playlist

00:45:37.400 --> 00:45:45.980
courses on, on YouTube. Yeah. The, the two scoops book is pretty good from Danny, but yeah, I don't

00:45:45.980 --> 00:45:51.000
have a ton of resources. I point people at actually. Yeah. Yeah. Corey Schaefer has a really good YouTube

00:45:51.000 --> 00:45:56.260
series. It's new. I guess I understand more now why it's hard to keep up with it, but I sometimes think,

00:45:56.260 --> 00:46:00.100
you know, millions of people use this. Why isn't there more out there? It is interesting,

00:46:00.100 --> 00:46:04.080
right? I mean, I know the answer, the answer is it's crass to say, but the answer is money

00:46:04.080 --> 00:46:08.940
is because you make more as a programmer than you do as a teacher. So, you know, I think you have to

00:46:08.940 --> 00:46:13.000
really, really want it or really take a hit to commit yourself to a teaching career. There,

00:46:13.000 --> 00:46:18.160
there are people who are the outliers, but you don't need, you know, 30 Django teachers,

00:46:18.160 --> 00:46:22.900
right? You really need like two. That's true. Once there's two or three top resources in a thing,

00:46:22.900 --> 00:46:26.920
it's kind of, that's, that's kind of solved the problem. And we were touching on this before we

00:46:26.920 --> 00:46:33.420
hit record, but to be a developer requires one set of skills to be a teacher requires a second set of

00:46:33.420 --> 00:46:40.180
skills to be a teacher doing independent content on the internet, either in book form or video form

00:46:40.180 --> 00:46:46.000
requires like a third set of skills. And I would say, you know, the farther you go down that path,

00:46:46.000 --> 00:46:50.060
the more it requires skills that most developers don't have, which is marketing.

00:46:50.060 --> 00:46:50.900
Yes.

00:46:50.900 --> 00:46:55.780
Not in the dirty, gross marketing sense, but you, you have to be able to get the word out to people

00:46:55.780 --> 00:47:01.780
because it, it almost doesn't matter how good it is. There's this layer of, you have to let people

00:47:01.780 --> 00:47:04.780
know, or it just doesn't matter, which is unfortunate, but that's how it is.

00:47:04.780 --> 00:47:07.660
Yeah. You have to let people know and you have to keep doing it for a long time.

00:47:07.660 --> 00:47:12.300
I'm guilty of, you know, email marketing. I don't do any, you know, I give away the,

00:47:12.400 --> 00:47:16.720
the online versions, the first couple of chapters, I should definitely throw up and require an email.

00:47:16.720 --> 00:47:21.200
It's challenging. I mean, you know, I'm doing the podcast, so that's marketing for me anyways,

00:47:21.200 --> 00:47:26.400
speaking as marketing, but it is, it does. Yeah. It feels dirty to a lot of developers. I mean,

00:47:26.400 --> 00:47:29.540
but I look at it like, you know, your stuff is good. You need to tell people about it, right? Like

00:47:29.540 --> 00:47:35.860
you think about a movie star, they spend more time marketing a movie than they do making it. And

00:47:35.860 --> 00:47:41.100
it's gone in a couple of weeks. So when I think of that versus, you know, a course that has to be

00:47:41.100 --> 00:47:46.040
updated or a book has to be updated every year. It doesn't sound so bad, but I think that the

00:47:46.040 --> 00:47:49.040
challenge is that marketing doesn't feel as good as coding or teaching.

00:47:49.040 --> 00:47:54.760
Yeah. And it's something most people just have no experience in, right? So you're an expert in this

00:47:54.760 --> 00:48:00.760
one thing and you need to use this other skill to make it successful. And this other skill you have

00:48:00.760 --> 00:48:05.480
no experience in. And I think it's a little bit of a, I think it's intimidating as well.

00:48:05.660 --> 00:48:10.040
Yeah. But I think you just have to put out good stuff or my, you know, my personal goal for next

00:48:10.040 --> 00:48:15.240
year is to do more with less. Like I feel like I've, you know, this year is almost three books,

00:48:15.240 --> 00:48:21.100
DjangoCon talk, major project, a couple dozen articles on my personal site that get some traffic.

00:48:21.100 --> 00:48:26.760
I've just been pumping content out and I need to personally, you know, figure out email marketing.

00:48:26.760 --> 00:48:33.100
I need to keep my stuff up to date and just be smarter about it. I'm aware of that. I'm actually

00:48:33.100 --> 00:48:36.800
kind of looking forward to it as a little bit of a break, but yeah, that's the number one,

00:48:36.800 --> 00:48:41.480
the number one challenge for developers who want to make a career doing stuff is, is content. And I

00:48:41.480 --> 00:48:45.660
could list a number of people I think are amazing teachers and they just don't have a heart for doing

00:48:45.660 --> 00:48:47.920
marketing and that's why they're not able to do more of it.

00:48:47.920 --> 00:48:51.780
Yep. Absolutely. So I did want, it took me a moment to look it up, but did want to come up,

00:48:51.780 --> 00:48:57.020
but you talked about the core developers and there not being that many people who are actually

00:48:57.020 --> 00:49:01.240
contributing day to day in Django and that makes sense, but it's, you know, it's kind of standard

00:49:01.240 --> 00:49:06.480
open source. I mean, 12 people, that's actually a lot compared to many open source projects.

00:49:06.480 --> 00:49:09.820
I was going to say, double check, double check my numbers. I know, you know, Carlton went over,

00:49:09.820 --> 00:49:12.700
I know it was a half dozen that really do it and something like that. Yeah.

00:49:12.700 --> 00:49:18.060
Yeah. Yeah. Sure. At least the scale sounds pretty right to me, but there was a post by James

00:49:18.060 --> 00:49:25.020
Bennett called core no more, which is about restructuring the core developer relationship

00:49:25.020 --> 00:49:32.400
and definition to try to bring more people in to contribute to Django and really the impression

00:49:32.400 --> 00:49:38.120
of having core developers and other developers, it means a lot of times the other developers don't

00:49:38.120 --> 00:49:44.080
feel worthy or have the power to actually make changes or start contributing. So the Django team

00:49:44.080 --> 00:49:48.400
is trying to reorganize how they're doing this to help break down some of those barriers. And I think

00:49:48.400 --> 00:49:53.400
that's pretty interesting. So I'll, I'll throw his article into the show notes as well.

00:49:53.400 --> 00:49:57.580
Yeah. I think, you know, so a couple of the keynotes were from, you know, non-traditional

00:49:57.580 --> 00:50:03.300
background location developers. Django is very aware of it. They're working hard. It's still, I think

00:50:03.300 --> 00:50:09.820
all six are white males like you and me. So it's, and you know, from, you know, Australia,

00:50:10.040 --> 00:50:14.640
North America, Europe. So yeah, they're very aware of it. Just the representation, even though

00:50:14.640 --> 00:50:19.700
there's huge communities that use it outside of those places and the core distinction. Yeah. It's,

00:50:19.700 --> 00:50:23.420
it's a hurdle. I mean, I haven't done a contribution to core Django. I mean, I'll be honest, it's a little

00:50:23.420 --> 00:50:26.920
bit intimidating for me, right? Like who am I to, yeah, to change something?

00:50:26.920 --> 00:50:33.100
Well, and it's such a long running, highly polished piece of software that it's not like,

00:50:33.180 --> 00:50:37.300
oh, we're just going to, yeah, obviously does this wrong. We'll fix that. Right. Like a lot of

00:50:37.300 --> 00:50:42.140
the super low hanging fruit has been picked. I've thought a lot about this. There's really two

00:50:42.140 --> 00:50:47.960
types of things you can do. One is to fix like a highly technical problem. Like for example,

00:50:47.960 --> 00:50:53.400
Django switching over to async. That's what it's 2.1. It'll be 2.2 next year. And then 3.0, 3.0,

00:50:53.400 --> 00:50:57.240
we'll start a switch over to async. So there's a lot of work to be done there. That's technical.

00:50:57.240 --> 00:51:00.560
And that's true. That's a, that's a fresh path sort of, right?

00:51:00.780 --> 00:51:05.140
Yeah. But that's like a technical challenge, but then there's all these gray areas, you know? So

00:51:05.140 --> 00:51:10.540
for example, when you start a new Django project, I think you should automatically default the user

00:51:10.540 --> 00:51:16.000
into using a custom user model. Why do we have to configure it? And actually I talk, spoke online

00:51:16.000 --> 00:51:19.500
with Tom Christie, the creator of Django rest framework. And he, that was his suggestion. I

00:51:19.500 --> 00:51:23.140
was saying, why don't we go under the hood and change it? And he said, well, why don't we just

00:51:23.140 --> 00:51:27.420
change the start project command, which is the command that you use to run a new Django project?

00:51:27.800 --> 00:51:31.920
That's a great idea. I should probably do that. But you know, that's an example of that's not

00:51:31.920 --> 00:51:37.840
changing what's under the hood. That's changing kind of how it's used. And that's potentially a

00:51:37.840 --> 00:51:43.880
bigger benefit to the community, but that's a harder thing to get buy-in on because people have mixed

00:51:43.880 --> 00:51:48.540
feelings. Whereas, you know, oh, let's make it async. That's a little more binary. So those are these,

00:51:48.540 --> 00:51:53.140
these two big buckets of, you know, kind of gray areas that Django people can agree would,

00:51:53.140 --> 00:51:58.660
could be better maybe. And then there's more pure technical challenges. And I think the latter are

00:51:58.660 --> 00:52:01.220
actually a little bit easier to solve for that reason.

00:52:01.220 --> 00:52:06.400
Sure. You know, some of these changes, they sound really easy, but they have far ranging consequences.

00:52:06.400 --> 00:52:11.740
And so there's always like, sure, you could change the template to just generate this model. And it

00:52:11.740 --> 00:52:16.120
would, I could do that this afternoon. Like, why don't we just do that? But then all the documentation

00:52:16.120 --> 00:52:20.260
has to be written. All the screenshots got to be retaken. All the tutorials have got to be,

00:52:20.260 --> 00:52:22.360
I mean, just like, you know what I mean? There's-

00:52:22.360 --> 00:52:23.620
Well, for you and me, yeah.

00:52:23.620 --> 00:52:30.340
Yeah, yeah. There's this sort of knock-on effect of, it looks like a small feature,

00:52:30.340 --> 00:52:33.720
but then it becomes major. And I'm not saying it's not worth doing it. I'm just saying it,

00:52:33.720 --> 00:52:41.840
a lot of times they look much simpler and quicker than the full-on externalities of it. You know,

00:52:41.840 --> 00:52:44.060
like it's knock-on effect across the community.

00:52:44.060 --> 00:52:47.780
Right. And that's why you need newcomers who don't know and don't care about that. And we'll go ahead

00:52:47.780 --> 00:52:51.460
and do a patch and like get this started because, you know, the core developers are well aware of

00:52:51.460 --> 00:52:56.620
these, some of these issues. And if someone just came in and said, boom, here it is, I think a lot

00:52:56.620 --> 00:53:00.820
of them will be solved. You get a little bit of fatigue, I think, with some of the same issues over

00:53:00.820 --> 00:53:03.240
time. So you need, that's why new blood is really important.

00:53:03.240 --> 00:53:04.020
Yeah, for sure.

00:53:04.020 --> 00:53:08.100
If you ask to a person, if you ask, you know, the Django core team, do they feel like amazing

00:53:08.100 --> 00:53:12.640
developers? Almost none of them would say yes. They would all have their own version of imposter

00:53:12.640 --> 00:53:17.440
syndrome, which I think is something beginners don't really realize is that everyone feels this.

00:53:17.440 --> 00:53:20.760
It's just how it is in our field. And it's not unique.

00:53:20.760 --> 00:53:25.100
Well, there's just too much to know. Like 20 years ago, you could pretty much know all of C++,

00:53:25.100 --> 00:53:30.560
but try to know all of the packages on PyPI, right? You just, you just can't, right?

00:53:30.560 --> 00:53:34.020
And this is a programming thing. Like I live in Boston, I'm surrounded by doctors. You know,

00:53:34.020 --> 00:53:37.720
nobody says, oh, you're a, you're a pediatrician. Why don't you go do heart surgery?

00:53:38.140 --> 00:53:43.360
Right. But it's like, oh, you're a PHP programmer. Why don't you go do Golang? Like the expectation

00:53:43.360 --> 00:53:47.520
is, is there. And I think partly it's, we put it upon ourselves because we're all self-taught and

00:53:47.520 --> 00:53:52.040
we love doing it. We're like, well, I could learn that. But the reality is, you know, even Python,

00:53:52.040 --> 00:53:57.320
right? Like a lot of readers of my stuff have never done web before, even if they're, I'm sure,

00:53:57.320 --> 00:54:01.780
much better at Python than I am. It's just a different realm. But yeah, it'd be nice. You know,

00:54:01.780 --> 00:54:06.080
it'd be nice if those, those lines were a little more clearly defined. So we didn't beat ourselves

00:54:06.080 --> 00:54:09.280
off about, you know, cause there's a progression of learning where you say, okay, I'll build a

00:54:09.280 --> 00:54:15.580
website. Okay. HTML, CSS. Okay. Now what now JavaScript. Okay. Now, now deployment. Okay.

00:54:15.580 --> 00:54:20.940
Now web framework. Oh, I gotta go learn Python or Ruby. Okay. Learn that. Okay. Now I gotta learn

00:54:20.940 --> 00:54:25.060
Django. Okay. Now I gotta learn testing. Like it just, oh, I gotta build, oh, and then you build Django

00:54:25.060 --> 00:54:29.680
and you find out, Hey, guess what? Everything is about APIs. Nobody cares about monolithic web stack.

00:54:29.680 --> 00:54:33.200
You go, oh, okay. Now I gotta learn API. You know, it just never ends.

00:54:33.200 --> 00:54:38.300
Yeah. So yeah, the web is especially hard though, because you're usually programming in four or five

00:54:38.300 --> 00:54:44.920
different languages at once. You're doing Python or some other server side framework language. You're

00:54:44.920 --> 00:54:49.360
doing probably some kind of data access. So SQL or Mongo query language, something like that.

00:54:49.360 --> 00:54:54.080
You're doing CSS, you're doing HTML, you're doing JavaScript, and then you have the infrastructure.

00:54:54.080 --> 00:54:58.940
You have all these things. It's not just, you know how to program in Python and you're good.

00:54:58.940 --> 00:55:04.000
Right. And I think also I realized at DjangoCon is that, you know, most people who do professional Django,

00:55:04.000 --> 00:55:09.060
they just do Django. You know, I was kind of shocked that they didn't know JavaScript very well,

00:55:09.060 --> 00:55:13.480
but it should make sense, right? Like they, they don't do JavaScript, right? Like all those things

00:55:13.480 --> 00:55:16.240
you mentioned, when you start off, when you say, I want to build my first web application,

00:55:16.240 --> 00:55:19.940
you think you have to do everything. If you go join a company, nobody wants a generalist,

00:55:19.940 --> 00:55:24.220
unless you're, you know, the software architect, they, you get very specialized very fast,

00:55:24.220 --> 00:55:27.920
but the challenge, right, is that the world doesn't change around you. So even if you're doing right,

00:55:27.920 --> 00:55:32.300
Django for Django APIs for three years, you know, it's Angular to view to react when you want to go

00:55:32.300 --> 00:55:36.560
build your side project. You, I think there's enough people who will say I'd pay 50 bucks to have

00:55:36.560 --> 00:55:42.600
someone like you explain to me how to use this thing rather than waste all this time. But yeah,

00:55:42.600 --> 00:55:47.060
so that, again, that was another humanizing thing for me being like, oh, wow. Like I just assume

00:55:47.060 --> 00:55:51.740
everyone, you know, knew 12 languages, like the back of their hand, including JavaScript. But you know,

00:55:51.740 --> 00:55:56.840
there's, that's not the case, right? People are human. Yeah, absolutely. Definitely interesting

00:55:56.840 --> 00:56:01.020
conversation. I guess we should probably leave it there. We're probably running a little low on time.

00:56:01.020 --> 00:56:07.540
Cool books. Nice talking to you about teaching and learning. I think those are two sides of the

00:56:07.540 --> 00:56:11.500
same coin, which is pretty interesting. Yeah. Yeah. Thanks so much for having me on. Yeah, you bet.

00:56:11.500 --> 00:56:15.760
Now, before we get out here, there's the final two questions I always ask people. So if you're going

00:56:15.760 --> 00:56:21.160
to write some Django code, what editor do you use? I hate this question, actually. I think it's a

00:56:21.160 --> 00:56:26.020
question that interests you and me and it's incredibly off-putting to beginners. I use VS Code

00:56:26.020 --> 00:56:30.180
because it's free. I was just in a university that's using my book and they're using PyCharm,

00:56:30.180 --> 00:56:35.480
which I don't know very well. And I was blown away at how awesome PyCharm is, but also kind of worried

00:56:35.480 --> 00:56:39.060
that they don't know how to use Terminal because it's all built in and they don't have to worry about

00:56:39.060 --> 00:56:44.340
virtual environments. So that's the trade-off you make. So, you know, I think I probably would use PyCharm

00:56:44.340 --> 00:56:48.720
if it was just me, but because I teach and I want to keep it accessible, I use VS Code. And,

00:56:48.720 --> 00:56:52.040
you know, if you get your plugins right, you can mimic a lot of the functionality.

00:56:52.040 --> 00:56:57.480
Yeah, that's cool. Yeah, VS Code's coming on super strong. And then notable PyPI packages?

00:56:57.480 --> 00:57:01.200
So Django, well, PyPI packages. Yeah, Django REST.

00:57:01.200 --> 00:57:02.560
They can be Django ones, that's fine.

00:57:02.560 --> 00:57:08.980
Django REST framework is not part of Django. People don't realize that. It's a separate thing. I guess

00:57:08.980 --> 00:57:13.420
the big one I would say is Django all off for user registration in Django, which we didn't really

00:57:13.420 --> 00:57:17.780
touch upon, but is somewhat complicated. If you want to dig in and do it yourself, that's great.

00:57:17.780 --> 00:57:24.020
If you want to just get up and going with user registration, Django all off is a popular and I

00:57:24.020 --> 00:57:26.100
think great place to start with that.

00:57:26.100 --> 00:57:30.860
Yeah, that sounds really cool. I guess I do want to throw out just this one package that I ran across

00:57:30.860 --> 00:57:35.620
recently. I think we'll maybe help some folks called Django Hunter. Are you familiar with that?

00:57:35.700 --> 00:57:36.980
Yeah, yeah. Please mention this. Yeah.

00:57:36.980 --> 00:57:43.540
Yeah. So it's easy, especially as a beginner, you're trying to juggle 5,000 things in your head.

00:57:43.540 --> 00:57:48.480
Okay, is Linux set up right? Am I logged into this? Have I got the database connection right? Is the

00:57:48.480 --> 00:57:55.520
firewall set correctly for that? That you might accidentally push out some feature of Django

00:57:55.520 --> 00:58:00.140
turned on that you don't actually want turned on, like having a full on debug mode, but also

00:58:00.140 --> 00:58:05.200
other settings as well. So there's this project called Django Hunter that will go and look

00:58:05.200 --> 00:58:09.300
at your project and tell you if any of those things are happening to it, which seems pretty

00:58:09.300 --> 00:58:09.540
helpful.

00:58:09.540 --> 00:58:14.920
Yeah, absolutely. And actually, that whole toy app to production is what my third book is on,

00:58:14.920 --> 00:58:18.760
and it's really not a straight line at all. So it's fantastic to have tools like that.

00:58:18.760 --> 00:58:22.880
Yeah. And when is that coming out? Well, how about this? What's the title?

00:58:22.880 --> 00:58:29.300
I know, I'm happy to answer that. So initially, I took pre-orders for it for the first time. And I just

00:58:29.300 --> 00:58:32.800
yesterday, I'm laughing because just yesterday, I emailed a couple hundred people and said,

00:58:33.140 --> 00:58:36.900
look, I'm just not going to hit the deadline. It's causing me anxiety. It's going to be done

00:58:36.900 --> 00:58:41.840
when it's done. And I felt better, but also kind of bad about that. But I got so many nice emails

00:58:41.840 --> 00:58:47.720
from people just humanizing for me that people are supportive. So April, I can't see how it would

00:58:47.720 --> 00:58:52.400
take that long, but I'm now saying April. But the short answer is it'll be done when it's done. And

00:58:52.400 --> 00:58:56.140
I don't recommend authors assign deadlines to their projects.

00:58:56.140 --> 00:58:56.800
Sure.

00:58:57.100 --> 00:58:57.860
What's the title?

00:58:57.860 --> 00:58:59.000
Django for Professionals.

00:58:59.000 --> 00:59:03.100
Okay, cool. It sounds like another good project. I'm sure it'll be excellent. All right. So final

00:59:03.100 --> 00:59:07.360
call to action. People are excited to learn Django or teach Django. What will you tell them?

00:59:07.360 --> 00:59:11.680
Check out my books. There's a lot of good books out there, really. Any of the ones that are up to

00:59:11.680 --> 00:59:16.280
date are probably pretty good. Personal site, wsvincent.com has a lot of articles. I mean,

00:59:16.280 --> 00:59:22.000
if you want just an overview of Django, there's an awesome Django repo that I maintain with links to

00:59:22.000 --> 00:59:25.640
lots of stuff that I personally think is good. Yeah, that's what I'd say. I wish there were an

00:59:25.640 --> 00:59:31.000
easier answer, right? I wish you of all people, Michael, could say, here's where you go. Because

00:59:31.000 --> 00:59:34.040
it's somewhat telling that even you struggle a little bit with Django.

00:59:34.040 --> 00:59:40.300
It's true. It's true. All right. Well, thank you so much for being on the show, Will. It was great

00:59:40.300 --> 00:59:43.180
to chat with you and fun to bounce these ideas around.

00:59:43.180 --> 00:59:44.080
Great. Thanks for having me.

00:59:44.080 --> 00:59:51.340
This has been another episode of Talk Python To Me. Our guest on this episode was Will Vincent.

00:59:51.340 --> 00:59:55.180
And it's been brought to you by us over at Talk Python Training.

00:59:55.180 --> 01:00:00.820
Want to level up your Python? If you're just getting started, try my Python Jumpstart by Building

01:00:00.820 --> 01:00:06.620
10 Apps course. Or if you're looking for something more advanced, check out our new async course that

01:00:06.620 --> 01:00:11.020
digs into all the different types of async programming you can do in Python. And of course,

01:00:11.020 --> 01:00:15.340
if you're interested in more than one of these, be sure to check out our Everything Bundle. It's like

01:00:15.340 --> 01:00:19.940
a subscription that never expires. Be sure to subscribe to the show. Open your favorite

01:00:19.940 --> 01:00:24.860
podcatcher and search for Python. We should be right at the top. You can also find the iTunes feed at

01:00:24.860 --> 01:00:31.700
/itunes, the Google Play feed at /play, and the direct RSS feed at /rss on talkpython.fm.

01:00:31.700 --> 01:00:36.360
This is your host, Michael Kennedy. Thanks so much for listening. I really appreciate it.

01:00:36.580 --> 01:00:38.120
Now get out there and write some Python code.

01:00:38.120 --> 01:00:59.520
We'll see you next time.

