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