Deploy Your App: Announcing the Talk Python in Production book.

Teaching Django

Episode #190, published Tue, Dec 11, 2018, recorded Thu, Dec 6, 2018

You'll find this episode to be part discussion on how to teach and learn Django as well as why learning web development can be hard and part meta where Will Vincent and I discuss the business of creating content and teaching around Python.

Episode Deep Dive

Guest Introduction and Background

Will Vincent came to programming later in life after starting his career as a book editor. He learned web development (initially with basic HTML/CSS and PHP) while earning his MBA and then joined the startup Quizlet. Afterward, he spent a couple of years locking himself away to deeply learn programming and Django. He has since authored multiple Django-focused books - such as Django for Beginners - and speaks at conferences like DjangoCon, sharing his passion for teaching Django and Python.

What to Know If You're New to Python

If you're brand new to Python and want to understand this episode, here are a few points to keep in mind:

  • You don’t have to master every topic at once. Focus first on setting up a simple Python environment and understanding basic syntax.
  • Be prepared for a little frustration with setup: Installing Python, learning the terminal, and getting virtual environments running can be tricky, but it’s normal.
  • Knowing some HTML, CSS, and JavaScript helps if you want to dive deeper into Django’s web development story.

Key Points and Takeaways

  1. Learning Django by Building Multiple Apps Will’s teaching approach emphasizes creating small, focused projects rather than one massive app. This method gives learners quick wins, builds confidence, and allows them to see tangible progress much faster. It can also help avoid the “lost in a giant project” syndrome, especially for newcomers. It’s a more natural learning curve to build and iterate on several concepts in separate, smaller web apps.
  2. The Challenge of Web Development for Beginners Django isn't necessarily more difficult than other frameworks - rather, web development itself can be tough due to many interlocking technologies (HTML, CSS, JavaScript, Python, databases, etc.). Beginners often blame the framework for the complexity, but much of the struggle is learning how the web works at a deeper level. This is one reason thorough beginner-focused content and step-by-step instructions are so important.
  3. Empathy in Teaching and Documentation Will started coding as an adult and remembers where the “sharp edges” are when beginning Django. Keeping empathic awareness of common pitfalls (e.g., setup, environments, custom user models) is key to good teaching. Official Django docs are excellent but typically assume intermediate-level web knowledge, so “friendly” documentation from community members is essential.
  4. Custom User Models and Authentication in Django Django’s default user model can be limiting once you realize you need custom fields. Will highlighted that it’s best to configure a custom model from the start. This approach saves you from major migrations or rewrites later - especially if you need advanced auth features like social login, which many developers implement through packages such as django-allauth.
  5. Maintaining Confidence and Avoiding Burnout Transitioning from a regular job to a self-directed content creator (or even full-time coding) can be both empowering and stressful. Will noted how easy it is to focus too much on coding for months on end without a break, leading to burnout. Scheduling your day, taking breaks, and stepping away when frustrated are essential for long-term productivity.
  6. Business of Creating Content in Python Producing tutorials, courses, or books combines multiple skill sets: in-depth programming knowledge, strong communication, and some marketing skill. Many potentially great teachers hesitate because marketing feels “dirty.” However, if you genuinely believe in the value of your material, letting people know it exists is both valid and necessary.
  7. Seeing Real People Use Your Content Conferences like DjangoCon or PyCon offer human connections that turn abstract “download numbers” and “Amazon reviews” into actual faces and success stories. This feedback loop is motivating and highlights open-source’s humanity. It also helps maintain empathy with beginners and newcomers.
  8. Community Contributions and Django’s Core Developers Despite having a huge user base, Django has a small core team with a few dedicated maintainers. They welcome newcomers to contribute - whether it’s code, documentation, or smaller start-project enhancements. Even if large technical changes seem intimidating, improvements to docs or templates can be just as valuable.
  9. Django Hunter for Security Best Practices Accidentally pushing debug mode or leaving behind sensitive information in your live app can be a major security risk. Tools like Django Hunter help identify common misconfigurations and security oversights. It’s especially handy for beginners who are juggling multiple new concepts.
  10. Web Framework Choices: Django vs. Flask vs. Others Django’s “batteries included” philosophy appeals to those who prefer a full-featured framework that makes decisions for you. Micro-frameworks like Flask can be simpler at the start but might need many extensions. Will’s experience taught him that Django’s cohesive structure can be more beginner-friendly once you’re comfortable with its conventions.

Interesting Quotes and Stories

“I didn't grow up coding. Computers were just scary and frustrating for me.” - Will Vincent

“You can build a website in ten minutes, but if you’re on Windows, you might spend an hour just installing Python and fighting with the environment.” - Will Vincent

“I think there's a big difference between ‘I get paid to spend my time’ and ‘I get paid to create value.’ Once you're an entrepreneur or teacher, you learn that lesson fast.” - Michael Kennedy

Key Definitions and Terms

  • Custom User Model (Django): A Django model that extends or replaces the default user fields and behavior. Essential for apps needing flexible authentication.
  • Virtual Environments: Isolated Python environments, preventing version conflicts and ensuring dependencies don’t collide across projects.
  • Deployment: The process of placing a web application on a live server. In Django’s case, commonly involving tools like gunicorn, nginx, or specialized PaaS offerings.
  • Bootcamps: Intensive programming training programs aimed at quickly upskilling or reskilling individuals in web dev or data science.

Learning Resources

Overall Takeaway

Learning Django can be both exciting and daunting, particularly because web development itself involves mastering multiple layers of technology. Will Vincent’s story shows that a later start in coding can lead to a fulfilling career in Python. Consistent practice, well-structured tutorials, empathy for beginners’ struggles, and community support all play crucial roles in mastering Django (or any framework). By combining small practical projects with an eye toward best practices and continual learning, anyone can become confident in Django development and even pass on that knowledge to others.

Will's website: wsvincent.com
Django for Beginners Book: djangoforbeginners.com
REST APIs with Django Book: restapiswithdjango.com
DjangoX - Starter Project for Django: github.com
DRFX - Starter Project for Django REST Framework: github.com
DjangoCon 2018: Finally Understand Authentication in Django REST Framework (video): youtu.be/pY-oje5b5Qk
DjangoBoston 2018: Django APIs and React (slides): tinyurl.com/drf-react
Django Core no more: b-list.org
Django Async Roadmap: aeracode.org
django-hunter: github.com
Episode transcripts: talkpython.fm

--- Stay in touch with us ---
Subscribe to Talk Python on YouTube: youtube.com
Talk Python on Bluesky: @talkpython.fm at bsky.app
Talk Python on Mastodon: talkpython
Michael on Bluesky: @mkennedy.codes at bsky.app
Michael on Mastodon: mkennedy

Episode Transcript

Collapse 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.

Talk Python's Mastodon Michael Kennedy's Mastodon