#190: Teaching Django Transcript
00:00 You'll find this episode to be part discussion on how to teach and learn Django, as well as why
00:05 learning web development can be hard, and part meta, where Will, Vincent, and I discuss the
00:11 business of creating content and teaching around Python. I think you'll enjoy both parts on this
00:16 episode of Talk Python to Me, recorded December 6th, 2018.
00:20 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the
00:38 ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter
00:43 where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm,
00:48 and follow the show on Twitter via at talkpython. Will, welcome to Talk Python to Me.
00:52 Thanks for having me.
00:53 It's great to have you here. I'm super excited to talk to you about teaching developers in
00:59 general and teaching Django in particular, and even how do people go about making that
01:04 kind of stuff part of their job and stuff. So I think there's a lot of interesting angles
01:09 to touch on here. But before we get to them, let's start with your story. How did you get
01:13 into programming in Python?
01:14 Sure. So I got into programming later in life. I didn't grow up coding. Computers were
01:18 just scary and frustrating for me.
01:20 Define later.
01:21 Later would be... So I first coded a site in 2008 when I was 27. I started my career as a
01:28 book editor, which you probably haven't heard before. And I noticed that two things were
01:32 happening. Amazon was coming in and telling all the publishers what to do, and they were
01:35 sticking their head in the sands. And I also noticed that we were spending $10,000 on a website.
01:41 And I thought, I could do that. So I decided to get an MBA, diversify my options, because
01:47 publishing seemed to be going the wrong way. And I learned how to build websites. So I built
01:51 websites for a bunch of my former authors. And that was a side business I did throughout my
01:56 MBA. It was a frustrating experience. It wasn't that fun. I just sort of pushed through it.
02:02 And then I was able to join a startup called Quizlet in 2010 as the third employee we could talk about.
02:09 What did they do?
02:09 So they're the largest education site in the US, at least. They're a top 20 website.
02:14 It's study tools, flashcards, and games for students. So when I joined, it was just a couple of us. And
02:20 when I left in 2013, there were 10 of us, but it was a top 100 website, I think. And now it's
02:25 a top 20 website and I think something like 200 people.
02:29 Yeah, it's a good looking place. Do you know, is it done in Python?
02:32 No. Well, I think they do some scripting now. It's PHP.
02:35 Okay.
02:36 They're so big now. I'm sure they do some Python stuff, but yeah, PHP. So I did a lot of the hiring
02:41 there or I helped with a lot of the hiring there to be accurate. And even back then, PHP wasn't hot.
02:46 Everyone wanted to do, you know, it was a disadvantage hiring MIT Stanford grads with PHP. They wanted to
02:53 do Node or Rails at the time.
02:54 Right. At the time. Yeah. Makes sense.
02:56 Yeah.
02:57 Okay. So I think this is really interesting. So let me stick into this for a minute before we move on.
03:00 Like you were doing book editing and then you went to get your MBA and also learned programming.
03:07 And that those sound at first blush, like completely two different directions. But I think there's
03:13 actually a lot of intersection in people who want to create their business or enable their business.
03:19 They have an MBA. And I think these programming powers are like really important actually.
03:23 Yes.
03:24 Yeah. They're incredibly important. I mean, and back when I was doing this 10 years ago,
03:29 which is weird to say, you know, tech wasn't cool. I think it was still,
03:33 we're just coming off of real estate. I was sitting in a finance class when the market crashed in
03:37 2008, learning about efficient markets.
03:39 Wow.
03:39 They had to throw away the book and start over.
03:41 Not quite.
03:44 Yeah. We could talk more about that, but tech wasn't sexy. Startups weren't sexy. I knew I wanted to go to
03:50 San Francisco because I'd come from an industry publishing that was being
03:54 disrupted. And I thought it'd be better to be on the side of change rather than defense.
03:58 But yeah, it wasn't, people were still in traditional mindset. I mean, now where I went,
04:03 I got my MBA at Tuck, which is the business school at Dartmouth in New Hampshire. Now
04:07 tech is the biggest thing by far. I think it even exceeds finance and consulting. Everyone goes to
04:12 Amazon and or becomes product managers. So, you know, digital literacy is really, really important.
04:17 That's actually a course I'd love to teach at some point. Some schools have this, you know,
04:21 you say, okay, you're going to go in and be a manager. You know, what do you need to know,
04:25 right? Like you should build a static website. You should know how the internet works. You should
04:28 have some basic concepts. I'm not sure that they're doing that yet, but they're aware that they need to,
04:33 you know, educate the managers about how the modern world works because everything is tech. I mean,
04:38 even marketing, they, I'm not sure if they've changed this, but used to be really advanced,
04:42 you know, Excel macros, which sounded sexy. But the reality is, you know, if you're an MBA going to a
04:47 company, you need to learn SQL or Python scripting. Like that's going to be much more valuable
04:52 today. So yeah, so I think it's exciting. They didn't teach it back then. Now everyone's kind
04:56 of catching up. It almost makes me think tech has peaked a little bit that everyone wants to go into
05:00 tech, but.
05:00 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
05:06 tech, maybe, right. Just, I just want to be a straight programmer and I don't have any specialties.
05:11 I'm not sure I would say that, but that's a possibility. But I think there are just so many
05:16 opportunities to take the thing I'm building, the thing I'm doing, the thing I'm special at,
05:20 and just 10 exit with software that that's going to have a really long run.
05:25 Yeah. I think you, yeah. If you had like an MVP for MBAs course, that would,
05:29 I think that would make a lot of sense.
05:30 Yep.
05:32 But yeah, but we'll just to finish my story. So I was at Quizlet, which is fantastic opportunity.
05:36 And then I decided to leave. I thought, you know, I could go again, as an MBA person,
05:42 I could go raise some money and try to hire people for the startup idea I had,
05:45 or I could teach myself how to properly code over the next two years. And I decided on the latter,
05:50 knowing that, you know, most startups fail. The one I worked on didn't work out. So we left San
05:55 Francisco, my wife and I, and I basically locked myself in a room for two years and learned how to
05:59 code, which was kind of awful, but for various family reasons was the way it had to be done.
06:04 You know, I had that optimism. I'd just been at Quizlet, right? It just worked.
06:08 So I assumed everything, you know, would kind of work for me. I'm curious, you know, for you,
06:11 like you've gone out on your own, there's trajectory of like the first year, you're so excited,
06:15 right? It's like, you're doing your own thing. You're so efficient, right? You have days where
06:18 you work two hours and you go like, that's more than I would have done in like a week,
06:21 maybe at my last job without all the responsibilities I had. But then, you know,
06:25 year two, three comes in and it gets a little more real. And, you know, you're kind of like,
06:29 huh, you know, I'm on year five now. So without arguably a big win. So it's an interesting
06:36 trajectory. It's so fun to do for a year or two. Like, I think everybody, if they can,
06:39 should try to, it's like the sign I saw on a school bus as a kid. It was like, kids,
06:43 like leave school now, go out on your own before, you know, while you still know everything.
06:47 It's a little bit like that, right? Because now sometimes you're like, oh, a big company.
06:52 That'd be nice.
06:52 Yeah. The stability.
06:53 Exactly.
06:54 I will have a vacation or that I, I will get paid this much that I can plan around it. Yeah.
07:00 I still don't know what I'm going to get paid. It's, it's all over the map,
07:02 but on my side, like I can't, I can't complain. Things are super going super well. You know,
07:08 listeners are really supportive of the podcast. Businesses are sponsoring the podcast are really
07:14 great. And I've been with me for a long time. The courses I'm doing, you know, people really
07:19 seem to appreciate them. So I, in that regard, like I have absolutely no complaints. It's just great.
07:25 But I do sort of feel the, the drag of reality, if you will. I mean, it's in that, you know,
07:32 like I probably spend 30% of my time just doing paperwork, answering like what sometimes are mundane
07:40 emails. Sometimes they're amazing stuff I get from people, but a lot of times it's just like,
07:43 I got to keep this moving, that going. And there's just more friction in the world. So yeah,
07:48 I hear you.
07:49 Yeah. And I think it's, I think it's the grass is greener. I mean, there's friction in every job,
07:53 but, but it's, yeah. And I think it's too, as you mentioned vacations, like, I mean,
07:57 I can speak honestly, like I'm super burned out right now. Like I haven't taken a, from coding
08:01 anyways, I haven't taken a coding break in, you know, five years of more than a couple of days.
08:05 Yeah.
08:06 I have one plan coming up and I'm sort of aware that I need to make it, but I'm also aware that
08:11 I'm not, you know, making great decisions right now. So I'm sort of like, I'm going to wait on that.
08:15 But yeah, as you said, like with the, the drag of success, like, I think that's an important point
08:20 is that two things. One is that sometimes a moderate success is the hardest thing because you don't know
08:25 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
08:30 kind of in the middle, you're like, you get the self-questioning loop, which is not productive.
08:33 But then, yeah, for me, like I'm, you know, this is my first year doing this full time. You know,
08:38 I have to hire an accountant. I have to emails, you know, just more distractions, you know,
08:43 positive things. I'm still working out how to deal with that. You know, it's just me. I don't,
08:47 I know I don't have the ability to hire someone. Even if I did, I sort of feel like it'd be almost
08:50 be easier to hire six people than one person. Yeah. Oh, I totally hear you. What I would say,
08:55 at least around that, at least those are the kinds of things that you sort of go on autopilot with to
09:02 a large degree. It's like driving. Like when you first learned to drive, I taught my daughters
09:07 recently how to drive. And like every interaction with the mirrors, with the gauges, with the controls,
09:11 it's just like, I can't do all this at once as dad. I'm like, I understand now that you feel that
09:16 way. You need to learn how to do it. And then it's going to be fine. And I know it doesn't like
09:20 completely fix it, but a lot of like the accounting stuff and whatnot, it does at first, it's such a
09:25 challenge. And then it doesn't become, it becomes not so much. I think it's speed bumps rather than,
09:30 you know, a parachute. Yeah. I'm guilty. You know, I have an MBA, so I'm a little bit like,
09:34 I know how to do accounting, but I don't know how to do accounting. And even if I did,
09:38 I wouldn't want to do it. So there's a priority stack, right? So that's sort of the,
09:41 the nice thing about a big job is like, I want to hire me to tell me what to do sometimes.
09:45 Right. It's like the curse of autonomy. It's like, so I've actually like, you know,
09:49 I've gotten much more disciplined with making time to schedule my days. Like,
09:54 so I come into each day and I've, I just execute rather than think about it.
09:58 Yeah. I think that's important for anyone who's like, maybe they just work for themselves
10:02 or they work from home. They're trying to do their own business. If you don't create this
10:07 structure again for yourself, it can get really overwhelming or it feels like you're spinning
10:11 your wheels. It's weird to think about how, you know, if I think like for you, right,
10:14 like how productive we can be, even though sometimes we sit here and think, what am I doing today?
10:19 Right. Like you have the podcast, you have your courses, you have everything else. Like
10:22 I was looking back on my year and it's like, it's been a big year for me in terms in the aggregate,
10:27 but day to day, it's a lot of, you know, you don't have wasted time, right? Like when you have a
10:30 normal job, you have the water cooler, you have this, that, or you have days where you're like,
10:33 you know what, it's three o'clock. Like I'm going to do low level stuff. There's really no low level
10:37 stuff, which is a blessing, but it means that I need to, you know, go take a walk instead of
10:42 banging my head on something. So yeah. So those are all challenges around, you know, being self-employed
10:47 and creating content. Yeah. I think, you know, I don't want to go too far into this because it's not
10:51 the main topic necessarily, but it is super interesting to me. So I'm going to have to resist the urge
10:55 in a hard way. So I think one of the big differences that people are trying to create content
11:00 for themselves, they're trying to be self-employed, maybe even in a consultant role,
11:04 they're trying to be a book author, whatever, is you have to shift your mindset from, I get paid to
11:12 create value. I know not, I get paid to spend my time. Right. So if I, if I, I've worked at plenty of
11:20 like large companies or in small companies as well, but even if I have a bad day, if I show up and I
11:25 have like, Oh, I wasn't so productive today. It's like, whatever. Like I get paid exactly the same.
11:29 Cause I, I exchanged my time for money, but now it's like, I've worked on projects that were super
11:35 successful for a month. And I've worked on projects that would be like bad, bad pay for a month, you
11:40 know, like, and you just have to, realign your thinking of, I get paid for the value I create.
11:46 How do I do that? And just optimize around that.
11:49 Yeah. Yes, exactly. I think about this a lot.
11:52 Easier said than done, but yeah. I mean, because you have days where you, you know, like a weekend,
11:56 right? Like I try not to work on weekends cause I have a family and generally I have higher sales on
12:02 weekends. So it feels pretty awesome to not work and get paid. Then again, sometimes I'll really work
12:09 hard for an extended period of time during the week and sales are low, which, you know, this is a bad
12:13 habit. I, I, because I'm self-published, I can see my daily hourly, you know, minute by minute sales.
12:18 Minute by minute. Yeah.
12:19 I've gotten better at not looking at it, but it is a weird shift, right? And the challenging for,
12:24 you know, tech content is it's not, it's not really an annuity. It requires constant upkeep,
12:28 which is a challenge for burnout, but also an opportunity because most people don't update
12:33 stuff, you know, especially frameworks, right? Like I'm a little bit envious or people who work
12:38 with programming languages because you have a larger audience and probably more competition,
12:43 but Python, you know, 3.6 versus 3.7 isn't changing as much as Django 2.1 to 2.2. You know,
12:51 Django has two major updates coming out next year, which is fantastic for the language, for the
12:55 community and for developers. But, you know, like I published my first book in, you know,
13:02 March, I had to update it this fall. I'm going to have to update them again in April. I'm going to
13:05 update them again in December and I'll have three books out. So there's, you know, it's a chance.
13:10 I like the idea of constantly iterating on my stuff and with text as opposed to video,
13:15 it's very easy for me to do. I probably do changes every week, small things making them better, but
13:20 yeah, it's a challenge and opportunity. I mean, that's partly why, you know, there's so few books on
13:24 frameworks. It's just so hard to keep up. Right. You don't want to be behind, but got to put a stake
13:29 in the ground somewhere. I guess the best bet is just pick the newest possible framework you can go
13:33 with. I think so. Yeah. Or I'd say, I think, I think that the key is to not do everything. It's to,
13:39 it's okay to be known for one thing. Sure. I've thought a lot about this because I,
13:43 I use Django. I like Django. I also write a lot of JavaScript. I've done a lot of React.
13:47 You know, I want to do everything, but really it's better to, you know, look through the world
13:52 through a keyhole. And, I think that's better for people too, right. To be known as like, I need
13:57 to learn Django. I think Django in particular, if I had to bet is going in the right direction on that
14:02 stuff. So, but it's a little scary bet, right. To sort of say like, I'm attaching myself to this
14:07 train. I mean, we do it all the, like we do it across the spectrum though. Right. If,
14:12 if I'm developer at a company and we're going to start a new website, I've got to pick a web
14:18 framework. If I'm a book author, like, like you, I got to pick a framework, right? if I do
14:24 training, same thing you're going to like, you can't do it all. So like you said, you got to
14:28 specialize. I'll say it across the board. I think picking the frameworks and making these kinds of
14:33 technology bets are super important for our careers, no matter where we are. Like imagine
14:38 you just work in like cubicle. You don't do anything public. You just, you, you pick to work
14:42 on this one project or whatever, right? Like if you decide to change careers, if you worked on say
14:48 some obscure framework versus Django, when that switch or that, that choice didn't seem obvious,
14:54 well, it looks pretty like a pretty good choice now, right? When you go to get that next job.
14:59 So I think having this, this vision for what is the right, like where are things and where are they
15:04 going is actually something everybody should continuously cultivate in themselves.
15:08 Right. Well, I think with content, I'm curious on your thoughts. There's, you know, the levels of
15:12 like, who do you, who do you do the content for? I think teaching is all about levels. And if there's,
15:16 you know, three levels, beginner, intermediate, advanced, beginners don't know anything and don't
15:21 value their time. So they won't pay for stuff. Generally speaking, intermediate is probably where you
15:26 can say, Hey, I'll save you 20 hours instead of one or, you know, the inverse of that. And then
15:31 advanced, assume that they can read the manual and figure it out. So most content I think is at that
15:36 intermediate level for that reason, but it's, you know, it's something we have to figure out,
15:40 right? Like with your courses, I'm, I think about this all the time. I try to not skip a step,
15:44 but I try to make it intermediate level. And then I often get emails about, you know, why didn't you go
15:49 advanced on this? It's like, well, I'd love to actually, that would be more interesting for me
15:54 as a developer. But I think that's not where the, I'd rather get people up that curve and, you know,
16:00 and take all the steps to go like, you know, building projects. So, so my first book, you build
16:04 five different web apps. It's not a book length, one project where at some point you make a mistake
16:10 and you fall off and you're just like, and you're done, you're done, right? Like, cause that's how
16:14 I learn. I mean, that's, you know, I know with your courses, you do that. I think everyone says,
16:18 oh, how do I learn this? Like go build a bunch of projects. Okay. Where do I do that? Where do I see
16:23 that? The answer is like nowhere. Yeah. You know, even with Django, as big as Django is, if I've asked
16:27 this people and I wondered this, wondered this five years ago, where do I see a Django blog implementation?
16:32 Where do I see that list of 10 Django sites? If it even exists, it's out of date in a year or two.
16:38 So the first book that I wrote was just my own notes to myself just to remember this stuff.
16:44 And then I eventually put online and eventually I decided to call it a book, but you know, I didn't,
16:49 wasn't aware of anything else that really did it like that. I still don't know if there's anything
16:53 that goes and builds multiple apps in a book format. I think most things are one big mega project,
16:58 which I don't know if that's my learning style or what, but I like the repetition of, you know,
17:03 in my book, each thing builds upon itself. So I don't re-explain stuff, but it's like, okay,
17:07 we've seen this before. I think that that's such a valuable one. And so this book that you're talking
17:11 about is Django for beginners, right?
17:12 Yes.
17:13 Yeah. Okay. So I really liked the format. You have the five different web apps that you build. They
17:18 start out really, really simple and they get a little more advanced and a little more advanced,
17:22 like, oh yeah, let's now talk about databases. And now let's talk about user authentication.
17:27 And it builds up. And I really think that that is the way that people learn.
17:30 Well, it's how I learn. So it's hard to know, right? I mean, I just threw it out there thinking,
17:34 who knows what will happen. And the reason I kept doing it is because the online sites started getting
17:39 traction because I looked at it, you know, when I, back in 2012, when I first thought about this,
17:43 to me, I was thinking, well, I'm going to do Rails or Django because those were the two hot things in
17:48 San Francisco. And Rails was a lot hotter. Rails had a much better beginner community. I would say,
17:53 it had the Rails tutorial, but I, for whatever reason, I just picked Python and Django, maybe
17:58 because I thought Python was more useful, but I knew that I was like, I just got to stick with one
18:02 for a couple of years and do it, but it was really rough. So that book in the, originally was my attempt
18:07 to do like a Rails tutorial, you know, the Michael Hartle Rails tutorial, because I think that once I
18:13 understood Django, I thought it wasn't that Django itself was so complicated. It was that the explanations
18:18 assumed a level of knowledge that people didn't have. And I think this, you know,
18:22 I'm curious on your thoughts. This is a thought I have on the Python community that many people
18:27 are more advanced. You don't just jump into Python. Like you usually come from HTML, CSS, JavaScript,
18:34 or maybe you're doing, you know, Java or something in a university. And you already have a lot more
18:41 experience before you get to Python. And then before you get to Django. So the Django docs, like the Django
18:46 docs are fantastic, but they're written for an intermediate web developer new to Django.
18:52 So if you're new to web development, it's just like, ah, yeah, you're in for a world of hurt. I mean,
18:57 that's why I just submitted a talk to PyCon for next year on, you know, why learning Django is hard.
19:02 And I think the biggest reason is because web development is hard. And if it's your first time
19:07 learning web development, you're going to associate all that pain with the framework that you choose,
19:12 which is unfair, but that's how it is. So anyway, so that first book was, you know, a couple of years in,
19:17 I thought, you know, Django is fantastic, but why isn't there actually truly beginner?
19:21 Why isn't there better?
19:22 Why isn't there better stuff? You know, in the, in the docs and most tutorials assume
19:25 they just kind of jump in halfway. It's, it's how you and I would discuss a project,
19:29 but you know, like one of the, I think best things I do is I literally say to people, okay,
19:34 we're going to create a directory for the code and here's where to put it. And here's the commands.
19:40 And that seems so basic, but so many people can't even get to that step. So they just fall off.
19:46 I did like that about your book. Yeah. Yeah. When I was looking through, I really liked that.
19:49 I find it interesting. I think I'll run this by you. You let me know what you think. Cause
19:55 I learned to do programming later than a lot of folks. I don't know, like a medium age,
20:01 I would say I learned proper programming junior, senior year of college. Right. So I didn't start out
20:08 like programming when I was young. I fiddle around. I love computers and stuff, but I didn't really get
20:13 into programming until I was almost done with college. And I feel like people who learn programming
20:18 a little bit later in life, the, the sharp edges and the, the pain that you hit on these things you
20:24 get hung up on are the memory is more recent. Right. And I think that's actually a super important
20:31 aspect of being a good teacher, either in books or videos or in person or whatever,
20:37 even just speaking at a conference is remembering the sharp edges because a lot of the people out
20:44 there are just about to bump into them or they just recently bumped into them. And if you have that
20:48 empathy and that shared experience a little more deeply, then it's, it's a little bit easier to help
20:52 and go like, actually, no, don't just say create a virtual environment. Say, these are the four commands
20:57 to create the folder and then the virtual environment, then activate it. Because if you
21:00 don't write some people, let's just go, ah, so frustrating. Right. Yeah. It's empathy. Right.
21:05 I think empathy is what makes a great teacher. And yeah. When you learn programming later in life,
21:09 I think it's two things. It's more recent. I think the bigger thing is you, you have experience,
21:14 you've learned other things. When you're a kid, you just accept everything as at face value. And I think
21:19 this has changed, but 10 years ago, a lot of people who knew how to program learned how to program
21:23 because they weren't playing sports or doing traditional activities, they were at home
21:27 on their own or in online communities, learning how to code. And they became known for coding and
21:33 it sort of builds up. They just get used to it. Right. It's just normal to them. Whereas,
21:37 you know, as an adult, I mean, I was 32, I think when I got serious about coding and,
21:42 you know, I have a brain, I work hard. I've never been so frustrated in my life. Right. And so you get a
21:47 little bit of the Stockholm syndrome. You're like, is it me or is it coding? And I think it's really
21:51 just that it's could be explained better. I don't think that programming is any,
21:55 and this is interesting thinking about programmers. Like I feel like programmers are the group that's
22:00 most prone to telling themselves that they're smart that I've worked in. I've worked with a lot of
22:06 smart people. And I think maybe it's to do with the fact that our field changes and it is, you know,
22:12 very mentally challenging, but yeah, there's sort of that like macho nerd attitude that's prevalent in
22:17 engineering that I find incredibly off-putting. I think most people do. But yeah, so for me
22:22 personally, like my role model is Julia Child actually, because most people don't know this,
22:26 that she didn't learn how to code until she was, I think 32 as well. She was well into her thirties.
22:30 And so is she the world's best cook? No, like I'm not going to be the world's best programmer,
22:34 but she's really good at explaining it because she, again, as you say, has that experience,
22:39 that empathy. And the challenge for me now actually is with this Django stuff that I,
22:43 I've internalized a lot of it, but I respond to so many emails from users that I, I use that to sort
22:48 of not lose touch with how hard this is because it, because it is, it is easy to do to just,
22:54 you know, even just the other day, I was trying to show someone, I was like, Oh, you can build a
22:58 website and throw it up online in 10 minutes. And it's hard to do even my book. Right. I was like,
23:02 Hey, here's my book. You can do it. Like, let's do it. Bang, bang, bang. He's on a windows machine.
23:06 An hour later we had Python installed. Yeah. Right. So these are the things too,
23:09 like, like virtual environments, you know, installing Python. Some of my most popular
23:12 posts on my website are how to install Python because right. As you know, there's, it's hard
23:18 to do and there's actually multiple ways to do it. And generally an engineer will say,
23:22 well, here's the five ways to do it. Here are the pros and cons. When a beginner just wants you to say,
23:26 do it this way. What is the best way? Just tell me that. I don't need to know this.
23:29 So in my book, I don't get into these, there's debates within the Django world about structure and
23:34 some other things we can get into, but I don't bring them up. I may quickly reference them,
23:38 but I just say, here's how to do it because I don't think that that matters at the beginner stage.
23:43 I think you want to get the confidence, you want to get stuff going. And then later on,
23:46 you can have those debates. And even now, like we could talk about like with virtual environments,
23:50 PipM is in the news, which I use in my book. There's these kinds of religious debates that are
23:55 beginners don't understand. And on some level I think are counterproductive,
23:59 but kind of just are, and I've internalized them.
24:01 Yeah. This portion of Talk Python to Me is brought to you by us. Have you heard that Python is not good
24:10 for concurrent programming problems? Whoever told you that is living in the past because it's prime
24:15 time for Python's asynchronous features. With the widespread adoption of async methods and the async
24:21 and await keywords, Python's ecosystem has a ton of new and exciting frameworks based on async and await.
24:27 That's why we created a course for anyone who wants to learn all of Python's async capabilities,
24:32 async techniques and examples in Python. Just visit talkpython.fm/async and watch the intro video
24:39 to see if this course is for you. It's only $49 and you own it forever. No subscriptions.
24:44 And there are discounts for teams as well.
24:49 One real quick thing on the sharp edges and stuff. I think having these different little apps helps you
24:55 take these first few steps onboarding into the programming world. You do with your five web apps,
25:00 I have my 10 apps course that you build the 10 apps. They get increasingly hard.
25:03 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
25:10 survived, survived it. Whereas if you have like one long tutorial or one long thing in a book or
25:15 something, you're punished along the way. And if you don't withstand all the punish, it's like running
25:20 a marathon versus a mile, right? You got to run the mile to learn to run the marathon, but you don't
25:25 have to run the marathon first, right? So you can do these steps and you can get these early wins and
25:29 build the confidence. You had mentioned installing Python. And what I liked, one thing I saw in your
25:35 book that I thought was pretty cool was you talked about installing Python on macOS with Homebrew
25:41 on say Ubuntu or something. You just app install the package, right? But I doubt too many of the
25:46 beginners are using Linux. Maybe they are, but... Well, yeah, actually I get a lot, I get quite a few
25:51 questions from Linux users. And I've always assumed if you're on Linux, you know what you're doing, but
25:56 people are on Linux for very strange reasons. Yeah, sure. You can't assume anything, but yeah.
26:01 Yeah. Well, I guess there's traditionally been this way of like, you run this command, you get Python
26:05 on Linux. And that's not traditionally existed on macOS until people started to use Homebrew and it
26:11 barely or doesn't exist on Windows. So I think the leveraging these things is really quite powerful.
26:19 Yeah. I think if, I mean, if I could wave a wand with Python to solve installation, it's a much bigger
26:25 deal than people think because most people don't own their own computer or they're on Windows where it's,
26:30 you know, much harder than on a Mac, you know, a school setting Chromebooks, you can kind of do it
26:35 with Anaconda, but it's messy. So most Python people I talk to are just like, oh, how hard is it to install
26:41 it? And I just think there's a general, yeah, I don't know. I just think people should go and try to
26:46 teach someone up because, you know, we were talking about the easy wins. I think that first win, like
26:51 when I've taught like at the college level and when I show people create an HTML file, put anything in it,
26:56 double click it with your mouse and it shows up on the screen, that wow moment, the look on their face,
27:02 the feeling they have is so powerful and that sustains them through so many things. And I think,
27:08 and those wins kind of, they get harder as you progress in programming, but I think you need those
27:12 wins. Like we're in agreement on this. Like you need that confidence. You need the ability to share
27:18 your stuff with friends and family and have them go, oh, that's cool. Or you can show them how to do
27:22 tracking codes and say, hey, like, I know you didn't look at my site, right? There's all these
27:25 aha moments. And I think, I think very top down in terms of teaching with, I want to maximize the aha
27:31 moments, you know, and say too, like, here's what we're going to build. There's a lot of courses and
27:36 books that just jump into it. And it's like, what are we doing? I think you should always say, here's
27:40 where we're going. We're going to struggle, but we're going to get there. I have that debate with other
27:44 teachers. I mean, Andrew Pinkham, who did Django Unleashed, you know, his book is a fantastic book
27:49 and he goes bottom up with stuff and I go top down and yeah, it's a pedagogical difference,
27:54 I guess. Yeah, it definitely is. And I think at the heart of that difference is how long will
28:00 somebody persist learning arbitrarily small details towards a far goal? If they're willing to go through
28:06 as many details as it takes, you could probably be more efficient that way. But that's not the,
28:10 I don't believe that's the reality. People need these early wins. Yeah. Well, that, and that's the
28:14 challenge with a CS degree is you, you get all the things you need without the context to know why you
28:19 need it. It's like, nobody studies music theory for the sake of it. They hear a song and they want to
28:23 play it. And yet, why do we assume that people need to take all this theory without any context?
28:29 If I could redo everything, I would get a bunch of these early wins, have them feel some pain,
28:35 and then understand why data structures are amazing, right? They're mind blowing when you've
28:40 been frustrated on it, but when they just given it, I think it doesn't mean as much, but that's like
28:45 everything in life, right? Like, you know, the answer is you have to live it to understand them.
28:49 There's something about this experience thing. So I guess experience, one thing that might be a little
28:55 bit different is when I, certainly when I learned a program, this was...
28:59 Are you going to use yours?
29:00 Yeah. I was going to use, I'm just trying to think, when was I a junior in college? This would be like
29:06 1995. World Wide Web was created two years before then. And so there was not much to learn. It was like,
29:12 you get a book and you sit down and you learn it. I suspect there was some differences from say 2013
29:18 when you learned versus say now. Like, how have you seen that change even in the five, six years?
29:24 Yeah, I think it's just a lot better. Bootcamps just started in San Francisco then. There wasn't
29:30 really this idea that anyone could code, but many people were feeling as I did that you feel like a
29:34 second class citizen. You work at these companies. I mean, I was, you know, an MBA well into my career hiring
29:40 people right out of school making more than I was. And so sort of...
29:45 Yeah, that feels great, right?
29:46 Well, you know, it is what it is. I mean, it's deja vu of my publishing career, right? I became a book
29:51 editor, you know, in three years, which I figured would take 10 or 15. And so I was like, okay,
29:57 what does this look like for the rest of my life? And same thing again, you know,
30:00 and I didn't actually go into it thinking I wanted to be a programmer. I got into it thinking
30:04 my glaring weakness is not being a better programmer for someone who's on the business side.
30:10 And I still think if I was, you know, rational about it, how could I make the most money? It would
30:14 be to be a tech whisperer to a CEO or a COO. Because it's that middle management position. It's that,
30:21 you know, explaining tech to people who don't know tech. That's actually the sticking point for a lot
30:26 of stuff. But yeah, but in general, 2018 is so much better. YouTube is a thing. There's video courses.
30:31 There was no one really doing self-published content. I think there was lynda.com.
30:34 Yeah.
30:34 And I think there's more just communities around, hey, it's okay to learn how to code and do it
30:38 together. Because the isolation that I felt that many people feel, that's the really hard part.
30:42 You feel like you're in this tunnel and you can spend a week in Stack Overflow hell. And you ask
30:48 questions in Stack Overflow and people are mean to you.
30:50 Yeah, they're super mean. Like, you asked it wrong. Go away. I was really frustrated. I had to,
30:55 like, I'm just, I'm sorry.
30:56 Yeah, read the manual. I know. I will say though, that something about Stack Overflow,
31:01 that I still keep with me is the idea that there's a community of engineers that will answer
31:06 my specific question and help me for free is mind-blowing in a non-tech context. That is,
31:14 I remember the first couple of times I asked questions and people quickly, you know, that's
31:18 what I love about engineering is that it really generally comes from a really good place of
31:22 we're all learning together and we want to help. And that is not the case in finance,
31:25 consulting, all these other fields.
31:27 Sure. There's probably not a Stack Overflow of, you know, financial analysts or for lawyers or
31:33 things like that, I would guess.
31:34 Yeah. But, you know, the flip side is that engineers' passion gets abused. You know,
31:38 there's a lot of, you know, open source, there's burnout and all these things. So,
31:42 you know, it's one of those jobs where programmers really like what they do,
31:44 but then you sort of pay a price for it.
31:47 It's on net, it's fantastic. Like I love doing something that I'm interested in that challenges
31:51 me, but it's, it's really hard to, most of my friends are not programmers. It's really hard to
31:55 explain what I do to non-programmers, right? I mean, I spend most of my day deeply frustrated and my,
32:02 my tolerance has increased, but I don't, you know, get pats on the back for anything, right? Right.
32:07 Because we, we automate what we know and then we move on. And that, you know, I think ties in probably to
32:13 some of the mental health stuff for programmers, but yeah, it's, you know, I'm like constantly
32:16 learning, but I'm also constantly learning. And that's why you need content, you know, people like,
32:20 like yourself and, and others who say, Hey, this isn't, this can be done so much faster, right?
32:26 Like not everyone can read the manual and grok it. And that's a surprising thing to me is the audience
32:31 that I have, I'd be curious about yours. You know, I have people who been programming for decades,
32:35 people who've been programming in Python for over 10 years, but they're not doing web and they,
32:42 you know, in Django's the web is hard to learn or people coming, you know, yesterday, someone kind
32:48 of grumpily emailed me saying, I actually put a review on Amazon and said, yeah, I'm from a PHP shop
32:54 and we have to learn Python Django. And yeah, this book is good, but it doesn't go into like where I put
32:58 the business logic. So four to five stars, you know, I'm grateful for him for writing the review.
33:03 Everyone should write reviews for tech books, but you know, it's like you, you sort of, yeah,
33:09 you can't win. And there's a very wide audience of people who, yeah, well, that's one of the
33:12 tensions where if you had put too much emphasis on that, people are like, I don't need that right
33:16 now. This is, why do I need all this detail? Right. So it's, you can't have that many variations,
33:22 right? You just gotta, you just gotta decide and try to help as many people. I guess one of the things,
33:27 you know, if, if you're writing these books and you're helping people, a lot of people learn Django,
33:32 maybe touch on some of the things you feel like Django has done right, or Django makes getting
33:38 going in web programming easier, better than say like Flask or Pyramid or something like that.
33:43 Why Django for you, I guess?
33:45 Yeah. So why Django? Because it's in Python, which is a fantastic growing language, which is easy to learn
33:52 and you can use your whole career because I like Django over Flask. That's a little bit of a religious
33:59 debate. You know, it comes down to, do you like to paint between the lines or not? I'm fine with
34:05 decision, not having to make all the decisions, even if I don't agree with all of them, you know,
34:08 Flask and other micro frameworks, people really, really seem to like that. I think that the trap is,
34:13 I think a lot of beginners look at the hello world script for, you know, Flask versus Django and Flask
34:18 is fantastic. You're up and running. It looks so easy. Yeah. It looks so easy and it is so easy,
34:22 but then you add a dozen packages. Where do I find them? Are they up to date?
34:27 It quickly becomes quite advanced. Whereas Django just puts you between the lines in the same way
34:33 that Rails does. And I really appreciate not having to deal with that. Partly, I think, you know, I spent
34:39 over a year working on a startup that used Meteor.js, which is a JavaScript framework, which was fantastic
34:44 to use, but was constantly changing. And, you know, the stability of Django is an underrated feature for
34:49 beginners. It's around, it's going to be around. There's all these benchmarks. It doesn't change that
34:54 much. Actually, those are huge wins for the Django community. You know, in terms of what's,
34:59 the docs are fantastic. The community is really nice. There is a little bit of a learning curve,
35:03 but I try in the book to show, you know, hello world can be done pretty quickly. And actually,
35:09 pedagogically, there's, I have a post on three ways to do an about page, which could be any static page.
35:14 There's like the really fast way to do it. They're like kind of fast. And then like the way you would
35:18 do it with, you know, different apps, if you're going to build out a structure. So I just sort of give
35:22 that to people just to say, you know, it's going to be okay. We're going to, we're going to get
35:26 through this. Yeah. So yes. So those are all advantages of Django. And I was just at Django
35:30 con for the first time. The community is fantastic. Yeah. Did you give a presentation there? I did.
35:34 Yeah. I gave a talk on finally understand user authentication with Django rest framework. So not,
35:41 not a short, not a short title. And I think that that talks on YouTube now, but it was,
35:45 you know, realization I had is you don't really learn HTTP until you build an API,
35:50 or at least I didn't really understand it. It's a really interesting point is I feel like I didn't
35:54 either. And so I started building really restful services, right? You're like, Oh, I didn't even
35:59 know that you use the verbs in this way or that they had these meanings or these are cacheable and these
36:04 are not cacheable and these are modifying and these are not modifying. And the status codes are similar,
36:09 but not the same. Like, yeah, I remember just thinking, Oh, there's, there's get and there's post
36:13 and post is where you submit stuff back in the day. Right. And what's a put in. Yeah. I mean,
36:17 cause I, and I, I mean, I remember, you know, so I had a project where I needed to build an API and I
36:22 didn't know rest framework very well. And I was just so upset that it was hard to learn when I just
36:28 wrote a book on Django. Why is this hard to learn? And it's hard to learn because APIs are a whole big
36:34 bag of stuff and authentication is a hard thing. And I, and I made the point in the talk that I even asked,
36:39 I said, we talk a lot about headers and understanding what is an HTTP request and response,
36:43 like actually look like I asked the audience, I said, what's the bare minimum header I need to
36:48 include? Because in practice, there's so much cruft in there that you never even look at.
36:52 One of them is authentication headers. And even in that audience of, you know, over a hundred people,
36:57 first of all, almost nobody answered the question. You know, these are like the creators of Django.
37:02 And then I think maybe four or five people got it right. You know, the answer I, a question I asked
37:07 was, is it zero one, two or more? And you know, it's a trick question on purpose. It's just a
37:12 question to say like, nobody really knows it's in the headers because we don't need it until we need
37:15 it. The answer is for a get request in HTTP 1.1, you need one, which is, you need one thing,
37:24 which I'm forgetting what it is. It's like a loud host or something. You know, so it's a trick
37:28 question, but it's, it's this point that even the experts of this, you know, the abstraction exists
37:31 for a reason. But yeah, so that's that, that's, that talk was on. It was actually a pretty
37:35 advanced talk, but it was my personal frustration with learning how to build APIs.
37:41 You seem to, you have this habit of like, I go through this experience and then the sort of
37:46 making it all whole and well against write a book about it, right?
37:49 Yeah.
37:50 Because your other book is on restful APIs with Django Restway Mark.
37:53 Yeah. It's pain driven development or something. I mean, you know, there is an argument. I think
37:57 it's true that the best time to teach is when you're learning it because I, you know, I always make
38:01 notes of, and that actually brings up, you know, I'm the issue I have now with text-based
38:05 stuff is this idea of like happy path programming, right? Like if I were sitting down with someone,
38:10 I would want to show them how to mess things up. Like I would mess, I mess things up going through
38:14 my own books, trying to do it from scratch. So how do I, you know, how do I comfort the reader and make
38:19 them understand that these are normal and these are actually interesting and important, but not
38:22 overwhelm them. Cause I don't want to just give you the recipe and say this, then this, then this,
38:27 then this, I want to mix it up a little bit. But I think that for me, the big challenge of tech
38:32 writing is breaking beyond, you know, this, this, this, this, this, this, this, it's, it's
38:37 putting some empathy in there. It's trying to predict one or two things, but not too many
38:41 so that the reader feels like they're on, you're on their side and you kind of understand.
38:45 So, yeah. So in that, in that talk, you know, I started off saying like, what is the web?
38:49 What is the internet? Like I, I built it up even for that advanced crowd. Cause I think it's
38:54 important to do that. I mean, I even, I talked about custom user models, which in the Django world is
38:59 a big, big deal that Django has this built-in user model that everyone swaps out for a custom user
39:03 model, which again, you don't find out until you're well into your Django journey and you want to change
39:08 your user model and you go, Oh, I can't.
39:10 Right. So this is like, if you have a users in your website, there's a prebuilt model that has
39:16 prebuilt fields that just comes with Django, but you don't have to live with it. Yeah.
39:20 So it's a legacy issue. So Django has this fantastic built-in user model,
39:24 but the very first time you run migrate, it links up with the admin and throughout the rest of the,
39:29 you know, the framework. And it's very, very difficult to unwind that. And so there's been
39:34 a progression where people used to use profiles and now you can do a custom user model, which is
39:39 basically just a, just a copy of it. And then everything works. Okay. And I actually, I was
39:44 really heartened that when I gave that talk and I demonstrated how to do the custom user model,
39:47 cause that was a whole separate thing that I have a couple of popular posts on. I said,
39:51 why isn't there a simple way to do this? Like, you know, everyone seems to know how to do this,
39:56 but like the official docs do a pretty complex implementation. In my opinion, they use abstract
40:00 base user instead of abstract user, which we could talk about, but people, I don't know if they care
40:05 about that, but even, you know, I won't say who it is, but someone who's very, very, very accomplished
40:11 in the Django world came up to me after my talk and said, Oh, I've been doing user models the old way.
40:15 I didn't realize the new way could be so simple. I should do it that way,
40:18 which I think speaks, speaks to the, you know, humility of true masters, but also just, we're all learning,
40:24 you know, it's, it's worth covering the basics because you just can't assume the experts know
40:29 anything. There's too much to learn to know.
40:31 Sure. Yeah. It sounds like a really interesting talk. What was your experience? Like, what do you
40:36 learn from, from doing this presentation and being with these folks?
40:39 Yeah. It just humanized things for me. I mean, it was, it was, I thought a lot about whether
40:43 I wanted initially submitted the talk because I wanted to go, but I'm self-employed. So I didn't
40:47 have the funds to pay for it. But if you get accepted for a talk, you don't have to pay for a
40:51 ticket. I decided to do a 40 minute talk instead of a 20 minute talk, which is way more than twice the
40:57 effort. So I probably spent about a month of time on the talk and I gave it Django Boston first.
41:02 But yeah, it just made my own understanding rock solid. Even though I'd written the book,
41:06 I thought I really knew it. And I was like, Ooh, there's a couple of edge cases.
41:10 Yeah. It was a, it was a blast. It was really fun to, to see the people I know,
41:14 to see how welcoming everyone is, to go to the talks to, you know, I met people who'd read my
41:18 book because, you know, you probably have this too. For me, I just see numbers on a screen. It's,
41:23 it doesn't feel different having one reader or, you know, a thousand or 10,000, you know,
41:29 and it doesn't really feel different. So to, to get that validation was, was a confidence boost.
41:34 I think that it actually, I think it, it's a confidence boost, but it also,
41:38 at least for me to go to conferences like that and meet folks like that, which I,
41:43 it's one of the things I absolutely enjoy and look forward to and try to make a lot of time to do.
41:48 It just reminds me like there are real people actually getting like real value
41:53 from the work that I do. And it feels like to me, like you and I are speaking right now and that's
41:59 just, we could just be doing this in a coffee shop or over a beer or something. Right. But
42:03 there's lots, lots of people listening who, you know, maybe this is helping in some way. Right.
42:08 And, and having that experience, getting there and interacting with people is, it's really wonderful.
42:12 I suspect, you know, most people. Yeah. Yeah. It's like this, it's like this for days. So it's really nice to,
42:18 yeah. Yeah. Most people who just work on projects, right. Like Django rest framework,
42:23 for example, or API star, right. Tom Christie had a booth a while ago, like 2017, I think maybe 2016.
42:31 I can't remember which, but you know, it's like, Oh, the, all these people are coming to talk to me.
42:34 It's so amazing. And just, I think we all as contributors to the community feel that on one
42:38 hand. And then on the other, I definitely think it humanizes it a lot of, especially for beginners
42:44 because they, they see the tutorials, they see the code and it's like the humanity is largely stripped
42:49 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
42:54 of not there until you meet the people. Yeah. And the human side, especially if Python and Django is
42:59 fantastically giving. And, and I think you also, you know, I took away to how, how fragile Django is.
43:05 It's easy to think of it as this amorphous thing, you know, with millions of users, but Carlton Gibson
43:10 gave a fantastic keynote. So he's the Django fellow. So it's a halftime position. He's co-maintainer of
43:17 Django rest framework, talking about the fact that it's really about a half dozen people who really make
43:22 Django go. And then maybe another dozen more, and that drops off to, you know, one-offs. So as
43:29 as robust as it is, it really relies on a lot of these unsung heroes, largely doing it unpaid.
43:35 And so it's, it's a little scary, but it also is, you know, humanizes it. And you realize these are
43:40 people doing it because they want to, to be helpful and people contribute in different ways. I mean,
43:44 I think about, you know, how can I most contribute? Like there's certain things I'd love to do some
43:48 core contributions, but I think doing the teaching I'm doing now is also important and, you know,
43:53 you can only do so much, but yeah, that's for sure. So people should go to conferences.
43:56 They're not scary. People are really nice.
43:58 Yeah. Some of my favorite times of the year are actually going to a PyCon and other,
44:03 other events like that. So people, if they're out there listening and they haven't gone,
44:07 you should definitely look into going if you at all can. It's really a great experience.
44:11 Yeah. And they, they do try to have financial support, you know, you have to apply, but they
44:15 try to make it as welcoming as they can. So try not to be scared off by the sticker price.
44:20 Yeah, for sure. So we talked about your books and some of the techniques in there and just the,
44:26 ideas about teaching programming and Django and so on, what are maybe some of the other
44:31 resources for learning Django you'd like to put out there for people?
44:34 So there's websites. There's Vitor does simple is better than complex, which is a fantastic site.
44:39 He's also started doing videos on YouTube. I think he has two series, which are fantastic.
44:44 Michael Herman, who was one of the original founders of real Python has a site testdriven.io.
44:50 It's not Django, but it's Python, Flask, React, Docker. And he has like, I have a Docker Stripe
44:56 tutorial on, on test driven. That's a great resource. Nige has a, you know, there's only,
45:01 there's only three books updated to 2.1 in Django and I've written two of them.
45:05 The other one is by Nige, building your first websites. That's fantastic. So yeah, the, the,
45:10 the usual stuff, I don't think there's, you know, there isn't a Django screencast. Well,
45:15 there's GoPro or go Django. Yeah. I think there should be more stuff, but those are, I guess those
45:19 are my greatest hits for stuff. There's, you know, two scoops book. Yeah. I'm curious for you,
45:23 like, what do you, are there, you know, you're in Python, but maybe not as deep in Django as I am.
45:28 What, what, you know, when someone says, I don't want to learn Django, like, where do you point them?
45:32 Yeah. I honestly, it's, it's a bit of a challenge as well. I've, there's a couple of like playlist
45:37 courses on, on YouTube. Yeah. The, the two scoops book is pretty good from Danny, but yeah, I don't
45:45 have a ton of resources. I point people at actually. Yeah. Yeah. Corey Schaefer has a really good YouTube
45:51 series. It's new. I guess I understand more now why it's hard to keep up with it, but I sometimes think,
45:56 you know, millions of people use this. Why isn't there more out there? It is interesting,
46:00 right? I mean, I know the answer, the answer is it's crass to say, but the answer is money
46:04 is because you make more as a programmer than you do as a teacher. So, you know, I think you have to
46:08 really, really want it or really take a hit to commit yourself to a teaching career. There,
46:13 there are people who are the, the, the outliers, but you don't need, you know, 30 Django teachers,
46:18 right? You really need like two. That's true. Once there's two or three top resources in a thing,
46:22 it's kind of, that's, that's kind of solved the problem. And we were touching on this before we
46:26 hit record, but to be a developer requires one set of skills to be a teacher requires a second set of
46:33 skills to be a teacher doing independent content on the internet, either in book form or video form
46:40 requires like a third set of skills. And I would say, you know, the farther you go down that path,
46:46 the more it requires skills that most developers don't have, which is marketing.
46:50 Yes.
46:50 Not in the dirty, gross marketing sense, but you, you have to be able to get the word out to people
46:55 because it, it almost doesn't matter how good it is. There's this layer of, you have to let people
47:01 know, or it just doesn't matter, which is unfortunate, but that's how it is.
47:04 Yeah. You have to let people know and you have to keep doing it for a long time.
47:07 I'm guilty of, you know, email marketing. I don't do any, you know, I, I give away the,
47:12 the online versions, the first couple of chapters, I should definitely throw up and require an email.
47:16 It's challenging. I mean, you know, I'm doing the podcast, so that's marketing for me anyways,
47:21 speaking as marketing, but it is, it does. Yeah. It feels dirty to a lot of developers. I mean,
47:26 but I look at it like, you know, your stuff is good. You need to tell people about it, right? Like
47:29 you think about a movie star, they spend more time marketing a movie than they do making it. And
47:35 it's gone in a couple of weeks. So when I think of that versus, you know, a course that has to be
47:41 updated or a book has to be updated every year. It doesn't sound so bad, but I think that the
47:46 challenge is that marketing doesn't feel as good as coding or teaching.
47:49 Yeah. And it's something most people just have no experience in, right? So you're an expert in this
47:54 one thing and you need to use this other skill to make it successful. And this other skill you have
48:00 no experience in. And I think it's a little bit of a, I think it's intimidating as well.
48:05 Yeah. But I think you just have to put out good stuff or my, you know, my personal goal for next
48:10 year is to do more with less. Like I feel like I've, you know, this year is almost three books,
48:15 DjangoCon talk, major project, a couple dozen articles on my personal site that get some traffic.
48:21 I've just been pumping content out and I need to personally, you know, figure out email marketing.
48:26 I need to keep my stuff up to date and just be smarter about it. I'm aware of that. I'm actually
48:33 kind of looking forward to it as a little bit of a break, but yeah, that's the number one,
48:36 the number one challenge for developers who want to make a career doing stuff is, is content. And I
48:41 could list a number of people I think are amazing teachers and they just don't have a heart for doing
48:45 marketing and that's why they're not able to do more of it.
48:47 Yep. Absolutely. So I did want, it took me a moment to look it up, but did want to come up,
48:51 but you talked about the core developers and there not being that many people who are actually
48:57 contributing day to day in Django and that makes sense, but it's, you know, it's kind of standard
49:01 open source. I mean, 12 people, that's actually a lot compared to many open source projects.
49:06 I was going to say, double check, double check my numbers. I know, you know, Carlton went over,
49:09 I know it was a half dozen that really do it and something like that. Yeah.
49:12 Yeah. Yeah. Sure. At least the scale sounds pretty right to me, but there was a post by James
49:18 Bennett called core no more, which is about restructuring the core developer relationship
49:25 and definition to try to bring more people in to contribute to Django and really the, the impression
49:32 of having core developers and other developers, it means a lot of times the other developers don't
49:38 feel worthy or have the power to actually make changes or start contributing. So the Django team
49:44 is trying to reorganize how they're doing this to help break down some of those barriers. And I think
49:48 that's pretty interesting. So I'll, I'll throw his article into the show notes as well.
49:53 Yeah. I think, you know, so a couple of the keynotes were from, you know, non-traditional
49:57 background location developers. Django is very aware of it. They're working hard. It's still, I think
50:03 all six are white males like you and me. So it's, and you know, from, you know, Australia,
50:10 North America, Europe. So yeah, they're very aware of it. Just the representation, even though
50:14 there's huge communities that use it outside of those places and the core distinction. Yeah. It's,
50:19 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
50:23 bit intimidating for me, right? Like who am I to, yeah, to change something?
50:26 Well, and it's such a long running, highly polished piece of software that it's not like,
50:33 oh, we're just going to, yeah, obviously does this wrong. We'll fix that. Right. Like a lot of
50:37 the super low hanging fruit has been picked. I've thought a lot about this. There's really two
50:42 types of things you can do. One is to fix like a highly technical problem. Like for example,
50:47 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,
50:53 we'll start a switch over to async. So there's a lot of work to be done there. That's technical.
50:57 And that's true. That's a, that's a fresh path sort of, right?
51:00 Yeah. But that's like a technical challenge, but then there's all these gray areas, you know? So
51:05 for example, when you start a new Django project, I think you should automatically default the user
51:10 into using a custom user model. Why do we have to configure it? And actually I talk, spoke online
51:16 with Tom Christie, the creator of Django rest framework. And he, that was his suggestion. I
51:19 was saying, why don't we go under the hood and change it? And he said, well, why don't we just
51:23 change the start project command, which is the command that you use to run a new Django project?
51:27 That's a great idea. I should probably do that. But you know, that's an example of that's not
51:31 changing what's under the hood. That's changing kind of how it's used. And that's potentially a
51:37 bigger benefit to the community, but that's a harder thing to get buy-in on because people have mixed
51:43 feelings. Whereas, you know, oh, let's make it async. That's a little more binary. So those are these,
51:48 these two big buckets of, you know, kind of gray areas that Django people can agree would,
51:53 could be better maybe. And then there's more pure technical challenges. And I think the latter are
51:58 actually a little bit easier to solve for that reason.
52:01 Sure. You know, some of these changes, they sound really easy, but they have far ranging consequences.
52:06 And so there's always like, sure, you could change the template to just generate this model. And it
52:11 would, I could do that this afternoon. Like, why don't we just do that? But then all the documentation
52:16 has to be written. All the screenshots got to be retaken. All the tutorials have got to be,
52:20 I mean, just like, you know what I mean? There's-
52:22 Well, for you and me, yeah.
52:23 Yeah, yeah. There's this sort of knock-on effect of, it looks like a small feature,
52:30 but then it becomes major. And I'm not saying it's not worth doing it. I'm just saying it,
52:33 a lot of times they look much simpler and quicker than the full-on externalities of it. You know,
52:41 like it's knock-on effect across the community.
52:44 Right. And that's why you need newcomers who don't know and don't care about that. And we'll go ahead
52:47 and do a patch and like get this started because, you know, the core developers are well aware of
52:51 these, some of these issues. And if someone just came in and said, boom, here it is, I think a lot
52:56 of them will be solved. You get a little bit of fatigue, I think, with some of the same issues over
53:00 time. So you need, that's why new blood is really important.
53:03 Yeah, for sure.
53:04 If you ask to a person, if you ask, you know, the Django core team, do they feel like amazing
53:08 developers? Almost none of them would say yes. They would all have their own version of imposter
53:12 syndrome, which I think is something beginners don't really realize is that everyone feels this.
53:17 It's just how it is in our field. And it's not unique.
53:20 Well, there's just too much to know. Like 20 years ago, you could pretty much know all of C++,
53:25 but try to know all of the packages on PyPI, right? You just, you just can't, right?
53:30 And this is a programming thing. Like I live in Boston, I'm surrounded by doctors. You know,
53:34 nobody says, oh, you're a, you're a pediatrician. Why don't you go do heart surgery?
53:38 Right. But it's like, oh, you're a PHP programmer. Why don't you go do Golang? Like the expectation
53:43 is, is there. And I think partly it's, we put it upon ourselves because we're all self-taught and
53:47 we love doing it. We're like, well, I could learn that. But the reality is, you know, even Python,
53:52 right? Like a lot of readers of my stuff have never done web before, even if they're, I'm sure,
53:57 much better at Python than I am. It's just a different realm. But yeah, it'd be nice. You know,
54:01 it'd be nice if those, those lines were a little more clearly defined. So we didn't beat ourselves
54:06 off about, you know, cause there's a progression of learning where you say, okay, I'll build a
54:09 website. Okay. HTML, CSS. Okay. Now what now JavaScript. Okay. Now, now deployment. Okay.
54:15 Now web framework. Oh, I gotta go learn Python or Ruby. Okay. Learn that. Okay. Now I gotta learn
54:20 Django. Okay. Now I gotta learn testing. Like it just, oh, I gotta build, oh, and then you build Django
54:25 and you find out, Hey, guess what? Everything is about APIs. Nobody cares about monolithic web stack.
54:29 You go, oh, okay. Now I gotta learn API. You know, it just never ends.
54:33 Yeah. So yeah, the web is especially hard though, because you're usually programming in four or five
54:38 different languages at once. You're doing Python or some other server side framework language. You're
54:44 doing probably some kind of data access. So SQL or Mongo query language, something like that.
54:49 You're doing CSS, you're doing HTML, you're doing JavaScript, and then you have the infrastructure.
54:54 You have all these things. It's not just, you know how to program in Python and you're good.
54:58 Right. And I think also I realized at DjangoCon is that, you know, most people who do professional Django,
55:04 they just do Django. You know, I was kind of shocked that they didn't know JavaScript very well,
55:09 but it should make sense, right? Like they, they don't do JavaScript, right? Like all those things
55:13 you mentioned, when you start off, when you say, I want to build my first web application,
55:16 you think you have to do everything. If you go join a company, nobody wants a generalist,
55:19 unless you're, you know, the software architect, they, you get very specialized very fast,
55:24 but the challenge, right, is that the world doesn't change around you. So even if you're doing right,
55:27 Django for Django APIs for three years, you know, it's Angular to view to react when you want to go
55:32 build your side project. You, I think there's enough people who will say I'd pay 50 bucks to have
55:36 someone like you explain to me how to use this thing rather than waste all this time. But yeah,
55:42 so that, again, that was another humanizing thing for me being like, oh, wow. Like I just assume
55:47 everyone, you know, knew 12 languages, like the back of their hand, including JavaScript. But you know,
55:51 there's, that's not the case, right? People are human. Yeah, absolutely. Definitely interesting
55:56 conversation. I guess we should probably leave it there. We're probably running a little low on time.
56:01 Cool books. Nice talking to you about teaching and learning. I think those are two sides of the
56:07 same coin, which is pretty interesting. Yeah. Yeah. Thanks so much for having me on. Yeah, you bet.
56:11 Now, before we get out here, there's the final two questions I always ask people. So if you're going
56:15 to write some Django code, what editor do you use? I hate this question, actually. I think it's a
56:21 question that interests you and me and it's incredibly off-putting to beginners. I use VS Code
56:26 because it's free. I was just in a university that's using my book and they're using PyCharm,
56:30 which I don't know very well. And I was blown away at how awesome PyCharm is, but also kind of worried
56:35 that they don't know how to use Terminal because it's all built in and they don't have to worry about
56:39 virtual environments. So that's the trade-off you make. So, you know, I think I probably would use PyCharm
56:44 if it was just me, but because I teach and I want to keep it accessible, I use VS Code. And,
56:48 you know, if you get your plugins right, you can mimic a lot of the functionality.
56:52 Yeah, that's cool. Yeah, VS Code's coming on super strong. And then notable PyPI packages?
56:57 So Django, well, PyPI packages. Yeah, Django REST.
57:01 They can be Django ones, that's fine.
57:02 Django REST framework is not part of Django. People don't realize that. It's a separate thing. I guess
57:08 the big one I would say is Django all off for user registration in Django, which we didn't really
57:13 touch upon, but is somewhat complicated. If you want to dig in and do it yourself, that's great.
57:17 If you want to just get up and going with user registration, Django all off is a popular and I
57:24 think great place to start with that.
57:26 Yeah, that sounds really cool. I guess I do want to throw out just this one package that I ran across
57:30 recently. I think we'll maybe help some folks called Django Hunter. Are you familiar with that?
57:35 Yeah, yeah. Please mention this. Yeah.
57:36 Yeah. So it's easy, especially as a beginner, you're trying to juggle 5,000 things in your head.
57:43 Okay, is Linux set up right? Am I logged into this? Have I got the database connection right? Is the
57:48 firewall set correctly for that? That you might accidentally push out some feature of Django
57:55 turned on that you don't actually want turned on, like having a full on debug mode, but also
58:00 other settings as well. So there's this project called Django Hunter that will go and look
58:05 at your project and tell you if any of those things are happening to it, which seems pretty
58:09 helpful.
58:09 Yeah, absolutely. And actually, that whole toy app to production is what my third book is on,
58:14 and it's really not a straight line at all. So it's fantastic to have tools like that.
58:18 Yeah. And when is that coming out? Well, how about this? What's the title?
58:22 I know, I'm happy to answer that. So initially, I took pre-orders for it for the first time. And I just
58:29 yesterday, I'm laughing because just yesterday, I emailed a couple hundred people and said,
58:33 look, I'm just not going to hit the deadline. It's causing me anxiety. It's going to be done
58:36 when it's done. And I felt better, but also kind of bad about that. But I got so many nice emails
58:41 from people just humanizing for me that people are supportive. So April, I can't see how it would
58:47 take that long, but I'm now saying April. But the short answer is it'll be done when it's done. And
58:52 I don't recommend authors assign deadlines to their projects.
58:56 Sure.
58:57 What's the title?
58:57 Django for Professionals.
58:59 Okay, cool. It sounds like another good project. I'm sure it'll be excellent. All right. So final
59:03 call to action. People are excited to learn Django or teach Django. What will you tell them?
59:07 Check out my books. There's a lot of good books out there, really. Any of the ones that are up to
59:11 date are probably pretty good. Personal site, wsvincent.com has a lot of articles. I mean,
59:16 if you want just an overview of Django, there's an awesome Django repo that I maintain with links to
59:22 lots of stuff that I personally think is good. Yeah, that's what I'd say. I wish there were an
59:25 easier answer, right? I wish you of all people, Michael, could say, here's where you go. Because
59:31 it's somewhat telling that even you struggle a little bit with Django.
59:34 It's true. It's true. All right. Well, thank you so much for being on the show, Will. It was great
59:40 to chat with you and fun to bounce these ideas around.
59:43 Great. Thanks for having me.
59:44 This has been another episode of Talk Python to Me. Our guest on this episode was Will Vincent.
59:51 And it's been brought to you by us over at Talk Python Training.
59:55 Want to level up your Python? If you're just getting started, try my Python Jumpstart by Building
01:00:00 10 Apps course. Or if you're looking for something more advanced, check out our new async course that
01:00:06 digs into all the different types of async programming you can do in Python. And of course,
01:00:11 if you're interested in more than one of these, be sure to check out our Everything Bundle. It's like
01:00:15 a subscription that never expires. Be sure to subscribe to the show. Open your favorite
01:00:19 podcatcher and search for Python. We should be right at the top. You can also find the iTunes feed at
01:00:24 /itunes, the Google Play feed at /play, and the direct RSS feed at /rss on talkpython.fm.
01:00:31 This is your host, Michael Kennedy. Thanks so much for listening. I really appreciate it.
01:00:36 Now get out there and write some Python code.
01:00:38 We'll see you next time.