Teaching Django
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
- 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.
- Links and Tools:
- 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.
- Links and Tools:
- 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.
- Links and Tools:
- Django for Beginners Book (Authored by Will Vincent)
- Simple is Better Than Complex
- Links and Tools:
- 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
.- Links and Tools:
- 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.
- Links and Tools:
- Pomodoro technique (general productivity tool)
- Links and Tools:
- 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.
- Links and Tools:
- TestDriven.io (tutorials and courses focusing on web dev and testing)
- Corey Schafer’s YouTube channel
- Links and Tools:
- 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.
- 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.
- Links and Tools:
- 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.
- Links and Tools:
- 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
- Django: Getting Started – For a structured, project-based intro to Django.
- Python for Absolute Beginners – Perfect if you're entirely new to programming and Python.
- HTMX + Django: Modern Python Web Apps, Hold the JavaScript – To build interactive Django applications without heavy JavaScript front-end frameworks.
- Will Vincent’s Website – Contains free articles and code examples focused on Django.
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.
Links from the show
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.