← Back to Show Notes

Transcript: Mastering Django - Nigel George

Hello and welcome to another episode of Django Chat, a podcast on the Django Web Framework.

I'm Will Vincent, joined by Carlton Gibson. Hello, Carlton.

Hello, Will.

And this week we're joined by Nigel George, who runs DjangoBook.com, has written a number of books, has video courses, and lots more we'll get into.

Welcome, Nige.

Hi, Will. Hi, Carlton.

Hello, Nige. Thanks for coming on the show.

Sure. Thank you.

So maybe let's start with the big one, DjangoBook.com.

You took that over years ago.

How did you manage that?

I'm trying to remember how long ago it was, but it was just I was writing.

So I was writing under the MasteringDjango.com domain, and it started out being quite lazy.

I didn't want to start from scratch, and I'd always use the DjangoBook resource that Jacob

and um the guys at yeah yeah they they published and um i had the original book

and then there was the old green and yellow website that was there and um i just started

republishing that content because it was all all um open content and um started republishing it on

masteringjango.com and uh a few guys around the community i know uh danny um uh roy greenfield

he was he was harping at jacob can we do something about this site because everything points at it

and it's all hopelessly out of date um and and i threw into the community well here's mastering

jango.com and then i i sort of reached out to jacob and um said well i can take care of this

website for you um and he said yes and that was as simple as that he just he just checked it off

with with adrian and they they handed the domain over and i've pretty much been the

somewhat reluctant sometimes caretaker of it since so there you go well i don't yeah you know i think

probably maybe half our listeners are intimately familiar jango book and half maybe have no idea

what it was but it was the original jango book written by the creators and went through a number

of iterations right i forget how many they did this is how i got yeah they got to an unofficial

third edition which was the one that i picked up but that was always my my my favorite story about

django because i would get emails early in the piece from people just tagging me task for um

pinching the django docs and that i was a pirate and i was i was plagiarizing and i was this and

was that i had to patiently explain to a few people um this is the django book this was written

by the creators of django yeah it is going to look a bit like the docs so it was that that was that

was quite amusing to start off with but of course now that content has well and truly been retired

and it's all pretty much new stuff but there's there's bits where it's not though right because

there's like if you there's bits where it's like you know and if you're used to php then it's got

you know this like these and you know you might be familiar with this and that's just straight

straight from the original source it just hasn't been you know that's that that stuff should all

be gone um but the other thing is too is that the reason why i like the original django book is that

um they write very similar to the way i write like i write just sort of really quite laid back i've

got that that aussie attitude to my authorship is that i just i i tend not to to sort of add too

much fluff to the writing it's all very direct um and and adrian and uh jacob's writing was all

very similar and like the pragmatic programmer thing is pretty much my career you know i i was

the one that would always sit on the peripheral of of the language flame wars going guys really

honestly um and and and sort of have a ball from time to time but it was always like well stop

thinking about software as a religion and start thinking about it as a tool that you actually use

and and i have the same approach and i very much like that um but yeah i should have weeded out

most of the really old stuff and and php is an easy target honestly like you know this it's had

it's really interesting the laravel community because it really has a i don't know if the

renaissance is the right word but i i have a couple friends who swear by laravel and actually

there's a number of things i think django can adopt from that but php right has gone through

a lot of iterations in the language itself and i can't go too far because the django book website's

wordpress so yeah no but it's nobody's criticizing jang um php but like there was it was the dominant

thing at the time like two mid early 2000s like and it was like and the django book and the first

version of the docs and there are still references there's like these kind of sentences in the django

docs from from this epoch yeah he's like look here's a way of introducing django compared to

something that you'll already know it's not necessarily throwing shade or bagging on php

it's just this is different you'll be used to doing it that way and now i'll happily bag php

well maybe we can um talk about how you got into programming in django because especially you know

the attitude you have not everyone has i think carlton and i are more along the lines of you

know tool tool users rather than um are there still flame wars zealots do we there are but

we're too old for all right i sent carlton i sent carlton links on reddit about this and that and

jango just to get a rise and yeah you see it so a few times it's like okay we're still doing that

yeah i know they never went away we just lost interest in them

that's just like we should mention before we got on i was we were discussing uh i was saying the

u-shaped uh happiness in life where you're happiest when you're younger and then our age 40s 50s

it bottoms out and then you become happier because your expectations change not that your day-to-day

changes and you know so what like unless stuff however you manage less stuff worries you it's

like i yeah well that was yeah that was uh i i nicked up my car the other day and the guy was

asking me how much i wanted to spend to fix things like oh this thing is cosmetic and

do you care and i was like i got kids like nothing is perfect in my life so he's like yeah i get that

i was like i don't care about a scratch yeah well and that and that and you know what the world's

thrown at all of us over the last 18 months and that stuff it's like you know what priorities

change yeah i'm just happy when anything works yeah i think younger me was like why isn't

everything perfect now i'm like wow it's amazing anything so or any back back to your question

where we started was um so that that pragmatism that so i have never actually in my life been

employed as a computer programmer i've never actually been employed as a software developer

i'm an engineer i'm an electronics guy and um and programming came to me long before there

courses on programming so like i'm 50 next birthday um admitting that to the world um and

i got to see my first computer when i was 10 and computers were brand new when i was 10 um and

nobody knew what to do with the things so you know i remember i had my my god disc which was a dos 3.3

disc on a five and a quarter floppy which most people have never heard of before um you know

we have yeah yeah the generation now are going what what's a floppy um and that and um nobody

knew what it was so they handed it over to me and the the basic and the dosk dos manuals which

came with computers way back then he used to get a manual used to get a manual they were amazing

yeah and then and i jumped on to the school's apple 2e um which was a recent import to australia

from from the great united states and um i started from there and um started programming so by the

time i left school i was playing with electronics i was working with computers and this is what i

wanted to do but i went into engineering so software was something that just came as a part

of the the job the role or whatever i i'm entrepreneurial so i actually run my own

I ran my own computer hardware and software business

for a few years in the 90s, right up to the Millennium Bug,

which is another thing that not many people have heard about

for quite a long period of time.

I was silly.

I told people the truth and didn't make any money out of it.

So I just ended up working my way up

through technical engineering, design, R&D,

and that sort of stuff.

So I was always using software to solve problems.

And that's where the thing I've only ever come at software,

which is why over the years,

as much as I like taking pot shots at some software,

you know, don't get me started on Java as well.

But, you know, I've actually used all of them

as tools over time.

And they have their pluses and their minuses.

So where I got to Django was that I was doing early in,

before they called the internet of things,

was just like distributed sensor networks and that the internet of things you know wasn't really

coined until a few years ago but i was developing environmental sensors for the local university

here and i'd been using python because i don't know if you've ever used python on really large

text data sets but it's brilliant like a couple of lines of code and you can pass megabytes of

text data it's just fantastic and um i've got border wind forms and c because i've been doing

that for a few years and i so i wrote a desktop interface with wx python um and just just for the

hell of it because i've been working with python and the university and the local water mob here

said well we want to put this online we want to look at this stuff online um can you build a build

a website that shows all this data and and they wanted to see maps and all that sort of stuff

well i've been writing stuff in python so i googled python web framework and that's that's

where we started with django um but back then django was 0.96 hadn't even had a full release

so we're talking 2006 2007 and um yeah that's where it was so i went in and out with that and

then i um got to a point where pretty much the only resource in the market was danny's book

uh danny's and audrey's the two scoops and there was pretty much nothing else out there except this

out-of-date Django book that everybody was complaining about and by then um I don't know

where Adrian had gone but um um Jacob had moved on to um uh what's the hosting mob um Heroku

Heroku yeah yeah and um had no real interest and and that's kind of where it went from there I said

I thought well I um I fancied myself as an author um and I wrote a fiction book and it was disgusting

it was terrible and my wife told me well if you're going to write something write something

and stop talking about it except she used a different language and I picked Django because

it was an easy target and then I just got deeper and deeper and I enjoyed it more and more and

here we are what six years later fantastic and then you've also done you've done so I'd love

to talk to you about teaching Django because you've done the site the book the book you've

done a couple of books. You've also done videos. I mean, we started talking, you did, you've done

a lot of videos too. So I don't know how to enter into that. I guess, what do you see or what have

you heard from listeners or readers, viewers, you know, who prefers what? Because that's what I'm

always curious because people always say, why don't you have videos? And I find that not everyone

wants videos, but some people do. And I suppose I'm sort of prejudiced towards thinking that videos

or more total beginner level um yeah do you agree with that or disagree with that um it depends

it really does well it depends what mode your brain's in at the time like obviously if you do

any sort of training on teaching and that they talk about learning modalities and you know you've

got that you've got your auditory your visual um and you've got your you know in terms of watching

videos and reading and that sort of stuff and they say if you if you want people to absorb material

as deeply as possible you've got to actually get them in multiple modes so i actually think that

it's complementary because i even know my own consumption like i um sometimes when i'm chasing

it because just recently i've i've had a bit of a run on on um amazon um and aws and that stuff

and and when i was kind of getting my head around how that all worked i not only did online reading

stuff but i also watched the videos and that and i trolled through uh linkedin learning and did a

whole bunch of that sort of stuff and and i find myself that that um i get a greater absorption

right across that and that's most of the feedback that i got like some people will watch videos

but it tends to be actually what that person's after i notice the most if somebody's just skimming

over something out of interest yeah they'll just watch videos and they won't have the depth and

that but when people are genuinely trying to learn Django I find they come at me from multiple modes

I know I have a core group of people that have pretty much been with me from the start and they've

pretty much consumed my content in all modes they they will listen to it they will watch it and they

will read it as well these are guys that have got the course they've got the books and they

they sort of send me emails and that sort of stuff so it's um it's definitely one of those i think

especially technology benefits from multiple modes different ways to consume the same content

obviously the quality varies widely and there's there's areas where i won't touch

um like don't get me started on places like udemy and that where they just exploit authors they

They don't teach.

But I think having that mix of content out there is actually valuable

and it gives people choice.

Yeah.

I think that's – I mean, whatever level you're at,

whether you're a beginner or, you know, more advanced,

like, you know, to have a video perhaps that gives you a high-level overview

and then when you go to the docs, it's going to make a lot more sense

than you try and take on the high-level concepts from the docs.

It can be like, this is hard going.

Yeah, yeah.

And it can get bogged down because programming can get dry.

You know, it's just one of those things.

It's like learning any language, you know,

is that to be able to order a drink and have a ball at a Spanish bar,

you're sort of going to get more out of learning the language,

but that means having to wade through a lot of stuff

that's a lot drier and a lot less fun.

And, you know, computer languages are like human languages.

There is a basic syntax, there's a basic structure

that that we can all get like we all know how to open our mouth and make sounds um but the

different ways of getting that across you you've just got it you've got to do the hard yards you've

just got to get there and um yeah i think depth comes from that that broad ways of consuming stuff

in terms of what i'd prefer right every day of the week video is a pain in the butt

um just just what you need to do to go through and of course i'm i'm i'm type a about everything

so my you're just never going to see any of my work where i'm just sitting there you know you

see those youtube videos where guys i'm in and are and clicking through the screen and explaining

one thing and and typing forward and deleting backwards and all i i can't do that i i i heavily

produce all of my videos so it's a lot of takes yeah well it's not so much takes but it's edits

and overlays like if you look at the stuff that i've got there i do overlays and then i'll highlight

stuff on each line of code and explain each line of code and that and and that's a lot of post

that's a lot of extra work i think you're probably responsible for why i haven't done any videos

because we've talked for a number of years and i think well i i think i'm inclined as you are

down that route of not being okay with just sort of not winging it, but a more informal style.

I want it to be more polished. And, and hearing you talk about, you know, all these things,

I just was like, wow, that's, it's just a whole nother realm. And then the challenge

with Django right is it's it changed it's a there's a new one every eight months and the

three of us understand that generally those aren't huge huge changes but it can mean having to redo

almost everything I mean I'm almost done with finally my 3.2 updates because you know something

changes and then the web browsers change so I can't just like swap in a screenshot I gotta do

all the new screenshots and and so the idea of doing it on video seems um yeah it adds a lot

difficult you're ahead of me i've only just started my 3.2 stuff because i'm sort of blending

it into my four stuff because there's not a lot of difference at the level that i'm teaching

um so like my beginner's book and that really that my beginner's book it was it was a bigger

pain going from 3.0 to 3.1 than it was to go from pretty much 2.2 to 3 because of the change with

pathlib because that broke everything um yeah yeah i have a whole post on that for the seo i

was like i remember telling carlton i was like people are gonna muck this one up yeah i mean

it's well i've got a writer once you know but it's like you know the the pathway that the jango's

development team has chosen that's you know that's the one that they've chosen but for a content

developer yes it's painful i mean it's difficult but it just weeds out the it weeds out the you

know, it weeds things out, right? I mean, you and I are grizzled veterans of content at this point.

As much as it's, I mean, I've really worked to adopt the attitude of, you know, it's not my

favorite thing to revisit the same thing over and again, but at the same time, it's something that

people want to read. And so it's sort of like a, you know, you've got a guitar sitting behind you.

It's like a band playing greatest hits. Like I'm happy to have greatest hits. I keep, I think I

keep making it better each time. And, you know, I'll have some for me, like I'm working on a

python book now and i'll have some for the masses and you know i'm happy to have that mix yeah yeah

i like your grizzled veteran thing because it definitely some days it feels like i've got ptsd

that's for sure well i don't even see it's just part of it is i don't even see things sometimes

because i'm on i don't know version six or something of of mine and someone will write

something in and there's a small i don't know usually it's not code it's a text thing but i

just don't even see it i'm so yeah no i just don't even see it it's just not there anymore

and um and then and then you get the the ones where they insist your code is wrong and you're

on like version six or seven it's like yeah dude you know i i kind of appreciate that i guess i'm

old enough to appreciate the passion because i know that i mean there's a tiny tiny percent chance

i'm wrong but i'm like i'm pretty sure i'm right about this um when it's you know there's an error

as opposed to, Oh, is that the best way to do it? So I suppose I sort of, you know, I'm like,

yeah, I've gotten the same kind of emails for so long when someone comes in really firing,

um, you know, a, I, I never responded in 24 hours. Cause half the time they'll figure it

out and send me another email being like, Oh, I figured it out. So I just let that lie. But then

I'm like, okay, like, yeah, you're young buck, you know, you're, you're passionate, whatever

your age, you know, I appreciate that. You can harness that. Cause I'm, I'm more like you. I'm

like well you know like yeah whatever the language framework like i figured out you know i've sort of

lost a little of that uh beginners arrogance or whatever it is yeah it's definitely something

it's optimism that's yeah you started programming you're like i can build this in a week no problem

you know 10 years later that's right yeah first two years you don't know anything two to five

you know everything and then beyond that you don't you know how hard everything is and yeah i mean

that's why I love beginners. Like I asked my, like my dad the other day, he's like, yeah,

I'm finally going to read one of your books. I was like, okay, like, sure. Like, and I was like,

well, what project do you want to build? Right? Like, why do you want to do this? He's retired.

I mean, he's like, why do you want to actually get through the dry stuff? And he's like, well,

I want to, he's an architect. He's like, I want to build an app that will, you take a picture of

a house and it will, you like figure out what type of style it is and dah, dah, dah, dah. And I was

like whoa like that's that's not a crud app no no people come in with these crazy ideas

yeah yeah no but i want you know i want people to like before i tell you how what's hard like

you know write down your ideas because everything's doable and then someone like me can say what's

hard or not and you know things change too i mean you can use existing apis for image

recognition so anyway so i enjoy someone i'm like wow because i just start thinking you know how

would i actually do anything and i'm just like oh that's hard that's hard that's hard that's hard

you know i get kind of discouraged yeah whereas you know they don't they don't know the difference

so no no well i i had a had a a reader that sort of took me through a similar journey

i didn't understand what he was trying to achieve but it sounded kind of cool

um but he sort of he worked his way through it and i answered a few stuff and like in the end it's

i basically said mate you're doing really really well um you know once you work it all out come

and tell me because you'll be teaching me something true yeah that that happens you find

that too like there's a lot to Django and I find I've got plenty of breadth but not a lot of depth

in in some areas like you know you I can sort of talk to a lot of the top end of of most of the

stuff that's in Django but when you're writing about it all the time you know you're not actually

in the thick of the code writing really deep and working stuff like out like um you know and you're

doing things like professional for me um you know when you're writing it's different to professional

programming um and i find that so like with mastering django when it got to 650 670 pages

it's like oh come on enough is enough i just can't do anymore um and that and then you know i i get

taken to task because i skimmed over some sections and said just go read the docs it's like please

i've typed until my fingers have bled for 18 months you know go and go and have a look at the

docs um so when people come to you where they've had the time and they've got into the project

and they've got really deep you actually find yourself learning from them and i think that's

just great like teaching materials almost going to necessarily be at the beginner to intermediate

level right because there's so many the market there is much more addressable like there's lots

of beginners there's lots of intermediates there aren't so many advanced people so if you're going

to produce learning content it's got to target the people who are there and it's yeah and it's

also difficult to take them to the next stage where they'd be doing what they would be doing

in a in a professional setting like i made a conscious choice not to um you know have get

running in any of my courses or anything like that i made a conscious choice not to build test

suites and that sort of stuff because it's like these are the mechanics of being a professional

programmer they don't teach you programming and like you know like that and and i keep thinking

well one there's plenty of resources out there for that stuff and two i did test testing anyway

so i would avoid it like the plague and let somebody else teach it well we should have a we

should have an episode with you and adam johnson on to get brian oaken on to fight it out with you

so then so no if you're building a site what do you do just sort of click through and make sure

it works i mean no judgment in that statement just ask him no i just get somebody else to do

the test right okay yeah i am so it's automated yeah no i i so i've been building software with

agile like long before they called it agile somebody gave it a really fancy name about 2000

but we've been doing it since the early 90s because you're working in small development teams

so you know the whole idea of m um you know mvp and iterations and all that sort of stuff so i um

i've read the testing goat and all that sort of stuff and i i understand that stuff i would rather

just hand it off to a qc um but at the end of the day is that i'm more of an advocate of of

um the whole idea yeah i could go off on a tangent but the whole red light green light

refactor thing is that it's like write something that breaks and then put in any old thing that'll

that'll make the test pass it's like what yeah and then the trivial doing trivial stuff so i i do it

but at module level so like i i build a a module that i know works and i'll throw on everything i

can at it and then i add something to it and then i add something to that and add something to that

um and sometimes like yeah you're not sure what behavior you're you're trying to write at the

beginning because you're just exploring the domain so to write a test it's like well i can't write a

test yet so you you kind of craft up the software and then you're like well i better have a test

just to make sure that i don't break it later on yeah yeah but that'll get you off harry percival's

christmas list saying that well i'm already off his list i think i like the jungle yeah

well i i just i fall in the bucket of i mean i don't think anyone's truly test-driven development

at the extreme um but i find i i'm more playful with it i want and then right when before i push

something up to to master i'm like oh i need some tests for this because that is the best time to

write the test is yeah but like after i've gotten it working and i'm happy with it because there's

For me, it slows me down to write tests when I'm switching around the code often a number of times before I get it.

I think we're also a product of the environment we're in.

I'm intensely creative with software because I've always worked in the R&D end of the spectrum.

So I'm solving problems early in the piece.

I've never been the one at the end that has to make this work for a million users.

And we're just a product of that experience.

Like programming to me is creativity and the things that I use it for is creative pursuits, which is why I end up writing about it.

I'm not out there grinding out code every day because that's just not my place in the world.

Like I've employed programmers like that and I respect that.

And, you know, I've worked with quality engineers and those sorts of things.

And I'm about to step into a product management role in a couple of weeks.

So I'm going to be dealing with those sorts of guys again on that.

But see, I'm the product manager.

I'm not the guy who has to make tests work.

So I'm still working at the creative and problem solving end.

So I think it's just our experience with that.

It comes back to that pragmatism and saying, well, I have my own views of this.

I understand how it all works together, but I know what I like and I don't like it.

That comes down to our discussion about being an old fart.

You stop caring after a while.

It's like, no, these are the things I like.

These are the things I don't like.

So I'm not going to do the things I don't like anymore.

But there's a big difference between that

and then going that step further and saying,

and you have to like what I like too, right?

Yeah, absolutely.

But that gets back to those slow moments

that we're not interested in, remember?

Yeah, yeah, yeah.

Well, Carlton, I mean, you, how do you,

I'd be curious just your public take on testing

because obviously you're working on Django itself.

Django is eminently, you know.

It's a massive test suite.

It's very tested.

Yeah, I mean, the key bit is regression tests.

How do I know I didn't break something?

So what you want is for every existing behavior,

you want a test that covers it

so that when you're adjusting the code

and you change the behavior,

that's flagged by the test suite.

And then you might be like,

actually, that's an allowable test.

You know, that's an allowable behavior change.

But what you don't want is gaps in the test suite

where the behavior, well, how does it behave?

Well, we don't know.

We don't know how it behaves

because it's not covered by the tests.

And that's where you run into difficulties

because someone comes on with a fix.

all the existing tests pass we push it out and then you know Django's you know x point y new

feature blah blah and then we get you know reports on the tracker saying this is a change of behavior

from previous version then we got a you know trouble um but that's different from the situation

Nigel's talking about where you're first creating something you don't necessarily need to begin with

a test right but as it starts to get bigger and bigger regression tests become more and more

important and for something like django which is 15 16 17 years old you know and a lot of people

rely on it we can't break things so we need tests yeah if i was a django dev i wouldn't be

so now we don't need tests yeah yeah it's not it's not creative in that same way it's not new

no it's it's just not a space i inhabit i mean sometimes sometimes i'll test i'll do test driven

development like if i know if i've got like oh i need it to do this particular part of a behavior

so okay write a test for that particular part of the area and make that work and then i can move

on to the next step of the problem and i've got a test covering the first bit and then i can build

up like that sometimes i do develop that way other times i do it we get it working and then

write some tests to make sure i don't break it later i think i think too like with that because

because i most because i'm from an engineering point of view too we're working in very very

small memories um in c and you don't have test suites you you basically have a text file that

has all sorts of rubbish in it that you throw out to see what breaks and in your kind of testing

from that point of view you know an integration test yeah well it's it's similar it's just that

you're you're type testing you're basically saying well you've got five inputs to this thing

let's let's throw you know mix up uh text everything like obviously in python it's not

such a problem with dynamic typing although you do get really weird results but of course embedded

C or any of the Cs absolutely detest when you throw the wrong type at a variable. And then

with those embedded system, you get memory overflows and all sorts of lovely, interesting

stuff that we don't see in the Python world happen. But you just don't have the overhead

to have a test suite on a chip that's got 256K memory on it. Yeah. I think the other bit related

to testing, and I'm curious, Nigel, what your experience is, is that people who are learning

Django sometimes will say, hey, I got my first job or I switched jobs. And they have this sort

of sense of shock when they work on a commercial code base because it's not as clean as open source

software. No, it's a very different creature, isn't it? I think we all go through that shock

phase. It's like you look at a commercial code base and I've been around long enough to see good

ones, bad ones, and plenty in the middle. And I've also been around long enough to blame for

some good ones some bad ones and some in the middle um get blame yeah yeah um you know especially

things like oh yeah windows 95 dlls and and some of those really really hideous program structures

that just give me the shudders even thinking about them these days i am i think we're always

going to do that i i think and even now like i'm sheltered from that most of the time because i am

not like i'm i'm even switching back into it now as i said before it's as a product manager i'm just

not working as an engineer in those areas and having moved on from it at times where a lot of

the technologies guys need to deal with now or guys and girls obviously but programmers need to

deal with now just didn't exist like all of this rubbish in the front end i'm like i don't mind

javascript but it's just like which one i just i don't know i don't understand that somebody htmx

htmx solved yeah yeah it's it's it's like i i've only just starting to decipher that and i think

it's much much harder like like everybody has to be full stack in that they might hire a front-end

developer a back-end developer an aws expert aws expert or something like that but at the end of

the day if you don't actually understand how it all works together you don't understand any of it

um so you know that's that's a that's a that's a world that i'm glad i'm actually a fair way

away from these days so yeah i wouldn't i i think it is a bit of a shock for most people and it's

not something that i'd be in a rush to do i think as well like the most code only barely runs like

most real code in real life you know i mean you know maybe maybe the code for i don't know some

nuclear rocket launching system is double checked and proofed with theorems and all the rest but

real code in most companies it's like yeah it runs but don't touch that staple there because

yeah yeah yeah because because it'll bring the whole building yeah yeah so speaking of full

stack do you how much do you cover apis in in your own material like because i i have a whole book on

it but trying to kind of get at that but close to none no one can write a book on i i'm sort of i

I've really, Django has kept me busy for six or seven years.

Like, I haven't really had to step forward.

But I get a lot more of that.

Like, obviously, the Django REST framework.

I get questions about that every other day.

And then doing other things like full stack Django.

So I was trying to work out, well, how do I approach this?

Like, how do I look at things?

It was a couple of years back I was originally looking at Angular,

But, of course, that's kind of plummeted in terms of popularity compared to React and all of that.

And then, of course, React's built on like NPM and just trying to get my head around all of that stuff.

And the other thing is, is that I'm still at that stage going, well, I can understand React.

This is great.

You've got all of these objects you can encapsulate like a UI and everything like that.

But, shit, we've been doing that with the Django template, the DTL, for years.

So why is it so impressive?

Well, it puts it in the front end.

Okay, yeah, all right.

So that's what JavaScript's for.

But just trying to get my head around, well, how do we do React and Django justice in one thing?

And how do we do things that are actually teaching people

how to come up with real-life solutions here

rather than just cobbling something together

so that I'm using React and Django in one thing?

Well, that's a good point.

How deep does your knowledge have to be

before you feel that you can teach something?

Well, I'll tell you the truth.

Most of the teaching that I do is basically I'm the learner with the learners.

whenever i disappear into depth i don't come from a position of expertise um a lot of my writing is

approachable because i'm learning with them so you could be learning right yeah so so i've started

playing around with it so so you know to sort of to to answer will's question i've started dabbling

um but i haven't i haven't yet decided where i'm going with django next like because you've got

this eight month cycle and you've got this thing that you you hit 2.2 and as soon as there's a

0.0 that comes out inconveniently three months later you're explaining to people again that that

no 2.2 is or it's whatever 0.2 is no longer obsolete it isn't obsolete we've just gone to

the next major one um you know because every time when we went from 1.11 to 2 people are saying

where's your two book and i say hang on 1.11 still good for another two years and and i've had this

conversation each iteration of django and keeping on top of that when i work full time um has has

been a thing on itself but it's flat out obvious like django does not work in a vacuum and its

future is working with the front ends and and how that works together i know django's got async now

but again that's that's in an area that if i was teaching somebody async i'd be learning too

because i've never had to work with it i've never worked with sites big enough where async makes a

difference um you know i've always worked in in that i've been around since wsgi was actually a

new thing it was all cgi back then um you know yeah yeah um and and that and you had to had to

write um um scripts on the server to restart the python long running process otherwise your server

just go blank and sit there every hour or so you know it's like so i i've decided i haven't decided

yet whether i want to keep on the front edge of the learning curve or i just want to sort of you

know slowly slide back and stick with the stuff that i know i think what you said about where you

are in your own learnings when you create content is that that rings true for me and actually that's

something i wanted to ask you about because i find so the first versions of all my stuff i wrote as i

was learning it. So I had that mindset. But now, years later, six, seven iterations later,

the challenge is I've lost that perspective. I get lots of emails from readers, which helps me

have a sense of what trips people up, but I don't feel that myself. And that's actually something

I'm facing with the Python book. It's sort of fun to approach it top down in a way where I feel like

I know Python reasonably well. It's not like I'm learning it for the first time. So when I'm doing

my updates or i'm doing new content now it's i think it's almost more of a challenge to be honest

to mimic what a beginner is going through because i'm not a beginner anymore yeah i think we always

get that and the other thing that i get with that too is that it's material that i have seen so many

times i just don't want to look at it anymore too yeah well i think but that's where the context

matters right i mean because it's as you're saying with different programming languages it's the same

old concepts, but that's, it's the same to us because we have experience. You know, that's,

that's the thing is that, I mean, when I wrote my Django materials, I actually didn't find yours

when I was looking, or I might, I might not have. But I had that sense from the docs, hey, this

presumes you already know web development with PHP, which makes sense, but I didn't know PHP or

web development. So I often see that people assigned to Django blame for learning web

development when you just kind of have to get through it with something and get another framework,

get another language and then you'll appreciate it um so people lump those two together yeah and

i think we're never going to win that argument like really when you're doing beginners material

for a particular language you've got to make the assumptions because you turn around like i know i

i i've done a python primer with my django stuff so it's it's on the website for free and it's and

it's um in the book um in the beginners book and that but it's it's it's never really been hugely

utilized and and i've tried to do stuff before where you dig a little bit more into html and

css to provide support but ultimately you go well again it comes back to the same discussion i had

to sell myself with uh mastering django and that that is a book that is django from start to finish

um it's 650 pages and i still had to leave a heap of stuff out you know yeah yeah it's like you you

you're always going to to start a journey with people and knowing some of those people have

absolutely no idea about anything and all you can say is well this is what i am going to teach you

and this is what i'm not going to teach you and i think i've just taken that approach with with the

books and the start and you you did the same with yours as well it's like well this is what i am

going to teach you um if you need to find that here's a whole bunch of links but i can't you

You know, I can't be a start you from very scratch sort of thing.

Right.

You have to figure out where to draw that line.

And I think the top Amazon review, the most helpful review for my beginner's book is shows doesn't tell, which, you know, I'm like, well, yeah, that's the point.

One star didn't tell.

No, people are people are generally pretty nice.

But I mean, that's the thing is that, you know, my own interest, right?

like all of us i'm i'm more interested in the details now because uh they make more sense to me

um but when i was starting out it was like yeah yeah i just want this to work yeah so i try to

sprinkle in the understanding as we also get something you know as we put up a website um

well but it's i think that's what i think about like where do i draw that line when i'm teaching

well yeah and and um you know i get a similar line sort of things because i play the the python

setup right down the line um so i used to use virtual env but once the later versions of python

3 came out i just used vm and pip and you know and people say why aren't you using pip env or

why aren't you using this and why aren't you using that and why aren't you using the other and it's

like well i'm teaching something here so i'm always going to play at first principles standard

modules everything because if you understand pip and you understand vm you'll have a better

understanding of what pipenv actually does you know and and if you ever need to step back or

you've got a different toolkit it's the same as you know right back at the beginning of the

discussion is that software is tools it's it's it's not a not i don't hesitate use the word

religion but it some people really do treat software languages like that like they evangelize

about something it's like well no you're just solving you're using tools here and that and

that comes back well this is the basic tool set this is what i'm going to give you the basic tool

set i'm going to explain to you why what that basic tool set does what it'll achieve for you

and where it will get you because i think once people understand those fundamentals they can

jump into the more heavier duty stuff and understand it they get that conceptual stuff

because like i've done enough languages to know they are all fundamentally the same like computer

languages are the same syntax and structure the way we build things and all that has not really

changed um we just use different semantics we use different you know we python got rid of curly

braces and and and semicolons um but the way you structure a class or a function is pretty much the

same um and then you've got everything that came out of c and that you know and javascript and all

those so at the end of the day i find once people know that basic toolkit they can turn their hand

to just about anything that's out there and yeah and the failure modes on the the more advanced

tools like they can be mysterious if you don't know what's going so well it didn't work you get

some error and you've got no way forward whereas if you understand the more simple tools it's like

well actually i can recover from this because it's just a folder with some stuff in them i think it's

also it to me it's a mark of if not immaturity i sort of drop my opinion down a couple notches

of someone if they are either a incredibly confident because the best programmers i know

are not you know they're not braggy about their ability at all and then if they're deeply wedded

to a particular tool set saying this is the one true way it's like well how many ways have you

tried because i mean i you know we all on this podcast appreciate python and django but there's

other good ways there'll be new ones you know being wedded to a particular ideology seems

immature to me well yeah like i've pretty much that i've spent most of the last 18 months writing

vba you know so you know you you um you know you've got you've got to to have an appreciation

that every tool has its place um yeah and that and and yeah i i agree with you because because

anybody who who has to tell you how great a programmer they are is not a great programmer

because most of the rest of us have learned to be humble a lot time before like if there's no

other profession out there where you can be wrong about 900 times a day um and there's a straight

you know 12 year old girl somewhere who comes up with way you know teaches me something about

django you know reading reading my stuff that happens all the time i mean age age isn't a

implementation you know so you see the the talent that yeah it's opportunity i wanted to ask you

both um because you're both um creators of um teaching content for jango i wanted to ask you

your opinion on um you know where the the level should be um pitch for the jango docs because i

quite often see criticism of the jango docs they're too hard the tutorial is too hard to get going and

then i look around the community and i think but there's lots of great getting started material

like awesome material like your your two stuff and other other stuff as well and i kind of look

at the capacity of the django contributors to produce that stuff and it's just not there and

you know i mean what do you think the balance is is there room for i mean i kind of think it's nice

that people have to reach outside the django docs to find more stuff but and i yeah from my my point

of view carl not i actually think that's just the way it has to be like the django tutorial gets

people started that's where most people will see it that'll be at the top of every search term so

that's where anybody coming to django is going to start um you know and like you look at the

documentation for every sold software project out there you know at the end of the day is that most

of the documentation that comes out of django is the same as documentation that comes out of python

you know you're writing in doc strings yeah you're not you're not actually writing teaching

material you're writing reference documentation and at the end of the day bringing that out it

isn't the job of of the guys doing Django you know that that the job of the the dev team is

to make it stable to help it grow to possibly not bring a major version out every 12 months

um so the rest of us can keep up um you know and and that i i think it's a valid question but it's

not one that the the dev team should actually have to answer they should say no go and see

nigel will or or um you know the other guys that are putting out huge work out there um i know

there's a guy i've forgotten his name off the top of my head but he's um the simplest better than

complex um he does oh yeah he does some fantastic material um and you know and there's the tango

with django guys the django girls like there's a lot of us out here i don't know what danny and

audrey are doing these days they've been quite quiet for a while um but there's people out here

like this comes back to to um the discussion before about the difference between engineers

and content creators we come from a different mindset you know i i'm not terribly sure i could

get as much out of what i do and and my the people that learned from me can get as much out of it if

i was a card carrying engineer like we've seen some of those guys on youtube and man is that

stuff dry and hard to follow um no comment yeah but will you put a lot of effort into that too

you know like like your work is is very similar in that that like we do something different but

it's complementary um so yeah push pushing pushing the dev team to to try and mimic what we do

is a different set of um skills and it's also not necessary we need to sell books yeah i mean i

i understand now deeply the distinction between docs and tutorials i think i was in the shoes

of a beginner where I said, I just wanted both. And I think that's, you know, beginners or someone

who's frustrated, it's just, they want both. And we all, we three understand why that will just

never happen. But someone who's new, new doesn't understand or care. They're just frustrated. So I

think that's, you know, I, what would I add to the docs? I think it would be nice to have a simpler

introductory, um, something beyond polls, something a little more flask like that's

hello world. I mean, Carlton's done a whole talk on this. We have, you know, there's,

there's room to add something else, but beyond that, you know, it's just not possible,

but I don't know how we explain that to someone new, new to web development, that this is just

how it is. It's, it's unbelievable that the docs are even as good as they are. And if you're

frustrated, um, you know, I mean, it's, it's also Django purposely doesn't link to, doesn't

recommend any resources, which makes sense because Django's, you know, Django's its own thing,

but it makes it frustrating for a newcomer because they don't know who to trust. Like you were saying,

people have followed you in your career as a creator. I find that's the same way. If someone

likes a teacher, they'll take everything from that teacher and everyone does it differently.

So that's why I always say, if you like my stuff, here's more. And if you don't,

there's plenty of other people with a different take on it. You just need to find someone who

matches up with your learning style. That's what I would say.

Yeah, I think so. And a lot of them, too, you're not going to. There's so many people who will come to that and say, I want to understand this in 10 minutes. You know, and it's this massive multi-million line project, but I need to understand it today. And then they'll go to the next thing. And this guy's not helping me understand it today. You know, like there's this expectation that it's all going to magically come together.

But I think we can sniff that out.

I mean, I feel like my ability to sniff that out

from an email has gotten a lot stronger.

Yeah, yeah, you get very good at it.

Well, I mean, I'm not free tech support.

I'm happy to help people if it's related to my content.

I'm happy to point them somewhere else if it's a quick one.

If someone's just tossing a bunch of code at me

or something else, it's like,

I'm not getting paid to answer your question.

And just because you don't know

that this is an incredibly complex question,

even if i provide the answer to you which i'd have to spend time on you wouldn't appreciate it so

i i don't lose sleep on that what's the main way someone should find your material is it the

jango book.com website because you have books and courses best place to go is the website because

that's where the free stuff is and and um you know that's that's where i um publish anything

that i'm doing um so yeah it's just jango book.com and then there's a student login is that still

active can i ask about that there was so i've made that course free so i had a beginner's course that

i i was a paid course for a long while um but but i i made a decision that i'm going to make that

free um so that's open now so anybody can go on they can go and take that course it's um it's

still packaged up as a course at the moment um but all the videos on vimeo which i'm paying for

so I'm pretty much going to tidy it up for 3.2 and migrate it to YouTube so it's just linked there

as that and I'm going to leave that free I'm not actually going to make the course paid again so

it's pretty much just the books and the content there and I do have a YouTube channel but it's

kind of got nothing on it so keep an eye out in the Django book website for when that's actually

working um so i got this idea i want to play a little bit more with django like writing books

as you would well know will is is a real mission um and as much as it's it's great great to give

birth to that baby at the end it's it's it's definitely hard labor um so i'm looking at

probably doing doing some much shorter content and just posting that on youtube and on the site

and and i and i don't know you know what i'll do with that i'll probably bundle it up as pdfs and

like you know things that people can use on multiple devices and that but definitely much

shorter content just like how to do this in django kind of stuff um and and that'll all be on the

website and that as well so yeah that's going to be the best place um and and of course there's the

updates for the beginners book and for mastering django which will most likely be updates for

3.2 and then just like a free addendum for django 4 because again at this teaching level django 3.2

and django 4 are pretty much the same beast yeah i think that's right i wonder we both have this

i we both have all this different content like what are your like teaching fantasies like mine

is to have one book that like instead of having all these sites to take my three books and just

to have one book and you know that cannibalizes my sales but the idea of just having one thing

and being like here you go uh seems quite nice yeah i i don't know i um yeah i don't really know

i don't think i actually have a have what you would call a teaching fantasy with django because

it's for me it's it's a it's a hobby wow i mean that's the healthiest way that that's the healthiest

way to do it well i think though yeah i think that what you were saying though about shorter

things like when i think of my three books the the hardest one to write and to update is my

professionals book in part because i think i'm i'm a little too far over the curve in terms of

it's hard enough to keep up with what people are doing at scale let alone to write it and then it

also it unlike the other books the other books have a bunch of smaller projects the professionals

book is one big project where i lump things in and so it becomes just this jenga puzzle updating

anything because everything is linked and i have to update everywhere it's it's really painful for

me like i want like discrete like i i understand the two scoops approach a little bit more where

i'm like okay like logging boom here you go you know security like i think i i if i keep it up to

date i will have to do that because this whole narrative thread crushes me more than the other

books yeah yeah well i i i i took one look at that that well i took more than one look at that

um um and then it was like yeah nah i i just like i well that was wise i because i've looked at i've

looked at the professional stuff and and and yeah as i said to before like i i will probably do some

stuff around rest and that but but for me to do a django rest book probably not um you know and

because i had the same thing because i was thinking about doing a full stack django book um but

instead of just picking one technology is sort of say well here's django as a back end and here's

here's like starting off with bootstrap templates here here's how you you put bootstrap in with the

dtl um and and then going to jquery and front ends and like there's a whole bunch of stuff you can do

there but at the end of the day what you're doing is you're pulling data out of a django back end

and putting it in a javascript front end and and the javascript libraries you know as much as i i

i think the development timetable something for django could slow down sometimes so we can keep up

javascript is the wild yeah it's impossible um you know into um it's like i'm not even going to try

and keep up with this um i'll just throw out short content and if it's out of date in six months time

at least i haven't put six months into producing it that i just now um and like tied to it and an

absolute slave to it um like you'd know yourself like you get those things out there and it's just

this endless update cycle that's why i left this update until right near when four was coming out

because i didn't want to be doing 3.1 then 3.2 then four it's like you know what i'm just going

to leave this right until sort of october november december 2021 i'm going to do the

updates for 3.2 and then i'm just going to do a free supplement hey this is how you install

django 4 but guess what the rest of the code at my level is the same but not much not much changes

i can't take the path lip you know change would have been disruptive yeah well the part range

tutorials but yeah in term in terms of writing content at the level that i'm at i don't know

will experience the same but there was a bigger difference between 3.0 and 3.1 because of path

loop than there was between 2.2 and 3.0 because the only major change between 2.2 and 3.0 was

async and of course at the level i teach async didn't really need to discuss we have the

deprecation but like we pick up that because the deprecation is actually too nearly a full version

behind by the time I'm writing stuff for 3.2 anything that was deprecated because it was in

2.1 is it's kind of not relevant anymore because I've already weeded it out of the books

so I tend not to run into those issues I don't know if it's the same with Will it's it's more

but yeah Pathlib killed me it's like I was I Pathlib first came up somebody because because

i'm in australia um most of my feedback comes from continental us so it turns up in the middle

of the night and i got up in the morning and it was like three emails saying your code's all broken

like what's this import os it's throwing an error and um i had to madly write some errat over that

sort of thing um and that so it's those things that catch you out um but it's more perception

with django in that like it's fair um you look at java at the moment like the the dot versions of

java seem to come out every other day um at the moment so it's not as though django is unique in

that um but yeah i'm not sure what it is but it tends to be it's always something right like

i try to think about like sorry to interrupt carlton like what at the same time that not a

lot changes it still is a big pull every time to update the books and i think it's for me it's

partly like i i try really hard not to rely on external things but you have to a little bit so

get github heroku sendgrid and they they change their stuff all the time um i had way more third

party packages and other services like stripe and stuff at one point and i just can't keep up with

that. And so I pull those out, but it's still, I find that for me, it's like things build up in

terms of people asking questions on areas maybe, or on best practices. So every update, I can't

do a huge redo. I go through everything from scratch, which takes quite a while.

But this current one I'm on, I'm like, I'm switching from pipenv to pip. I have things

more on function-based views than I have before. Like I'm kind of cramming in all this stuff.

Um, and so I found to make it maintainable, I can't do that every update, but, um, this is one

of those ones. So the 4.0 update, I'll go through everything again and see if what's new. I don't

think that'll be as big a one, but this one I've sort of let things build up and I kind of don't

want to release something until it's that perfectionism is kicking in. So I think I'm a,

I think I'm a week old hope. Maybe by the time this comes out, the update will be out, but

It's been like 90% done for six months.

And I think I was going to, another point, you know, what's the difference between, you

know, you and me and, you know, people who people will pay money for and someone cranking

out free things.

And I think it's that, that extra 20%, you know, you can, anyone can kind of blurt out

a tutorial on something, but all this stuff we've been talking about, about keeping up

to date, about thinking larger picture, all this, you know, basically like the fellows

roll you know all the stuff nobody in open source wants to do that's i think the difference and

people can immediately tell like i open something it's like well there's typos you know or the code's

off it's just like i can't trust you um but you know when you just wrote it for free it's like

well you know i'm busy doing my j job i'm not going to update this thing here i curious that

resonates i think that's how i view it anyways that's i think that's open source i think you

know like you you have this this this dichotomy or all this this polarized thing about it is that

open source runs the world but nobody wants to support it um you know it's it's it's always been

the thing like i with this last book so i i was pretty much you know will i i was doing django

full time for what 18 months or so while i wrote mastering django and i did all the courses and

everything like that but it wasn't sustainable it's just you know like if anybody out there

listening thinks there's that you know we're rolling in it writing content for jango i've

got news for you you know you know i made i made more 10 years ago than i do now yeah yeah it's um

it's definitely a love job something that we do but you know you get people coming coming through

with that sort of thing but but open source i think is always going to have that sort of problem

it's very difficult to value the work that goes in you pick up a book like ours of mastering

django i think there's 1200 hours in mastering django and the beginner's book would probably

have to be around about um 300 or so with that and that's before all the updates that i do no

the economics makes no sense yeah it makes no sense at all you know like you you you just sort

of and for me i i just went back into industry and that night i do this now so i've got to balance

my time um and you you know you've got a young family will so you know exactly what that's like

so you're always going well yeah i'm putting this you know you put the free stuff out but some some

of this has to cost you and and this is the extra value that i'm giving you this is the extra value

that i'm adding but to be fair and i reckon you got that like out of that core group i've got so

my core group the ones that have followed me all along you know there's a few hundred there they

They haven't all bought stuff, but there's a core group in there that it doesn't matter what I bring out.

They'll buy it because they want to support it, and they're always the same guys.

And they're the ones that I know by name.

I can send them an email, and they'll respond to me, and I'll say, yeah, what do you think of this idea?

Yeah, I think that's a great idea, Nigel, or no, I don't like that, and I'll give you good feedback.

And ultimately, that's what you do it for.

It's not because, you know, you get a certain amount for a book.

I'm going to fiddle around with what I'm doing.

To be honest, I'm going to try a few different ways to just get a few bucks here and there.

I don't give stuff away.

I don't know about you, but I get a lot of four-page emails about how poor somebody is

and why I should give them my book.

But I don't answer those.

I'm not belittling a person's situation, but it's like I put hundreds of hours into free stuff, answering emails, doing that sort of stuff and that, and there's that much free content out there.

This is probably the only way for me to get some sort of return, which, as you know, at the end of the day, really just covers your publication costs.

Yeah, that's where I draw the line.

No, no.

That's all true.

I think with the requests, I view it as if I'm in a good mood, if it's early in the morning and I feel generous, I'll do it. But generally, I don't waste too much time on it. I had a case, which I don't know if you want to talk publicly about one of your books coming out before publication, but I had a case where Iran, I get a lot of emails because a lot of educated people in Iran, and they're not part of the formal international monetary system.

So there was someone from a university that wrote me, you know, this full page letter.

And I was like, OK, sure, I'll send you the book, e-book.

And then I literally got 20 emails from like because this person ran like a Python Django group in Tehran.

And I got 20 emails all being like variations of like, hey, just give me this book because you gave it to this other person.

I was like, well, they probably just gave it to you anyways.

But I was like, you know, so it's like open source.

You got to be like, you know, if people are going to steal it, they're going to steal it.

And if I feel in a good mood, once in a while I'll do it.

But, you know, I'm not getting paid to answer your email asking for a free copy of something I've spent thousands of hours on.

Well, my favorite one with that, like my shortest one with that was, so my first book was traditionally published with A-Press.

It was on Django CMS.

and um i got a um a an email from one of the guys from jango cms and he'd found the copy

free online before i'd even received my publisher copy i remember you telling me that story

but my yeah um but my favorite favorite one um is from one of my one of who a guy who ended up

actually buying one of my books but he sent me this um this email saying i'm really confused

which is the latest version of your book and he attached the original 1.8 version of mastering

django to it and it was like well so there was three files attached and i said so the first one

is a pirate of the lean pub version of my book the second one is a pirate of the one off my website

and the third one is a pirate of the packed version of the book because packed publishing

actually distributed that book as well and yeah he found all these things and all three of them

them were pirates of different versions of the same book.

Hey, Nudge, could you help me out here?

Yeah, I got a tech support question for you.

And I told him that.

So, but, you know, he asked for a discount, which I'll give him credit for, but he ended

up buying the PDF off the website in the end.

I mean, what can you do?

I mean, sometimes, more these days, I'll get emails from people saying, apologizing for

having stolen my books and saying i'm in university or i'm going to get this job and you know i you

know i will uh i'll buy your books when i have the means to so i'm you know okay like you know

yeah we're rambling on but we're coming up on time here we're rambling on here this these

publishers stories about people we could go on forever folks so yeah all right i think i'm gonna

call time i'm gonna i'm gonna call time here like so nice really good chat thank you for coming on

the show um thank you for um reminiscing with will or share it you know sharing a sensitive

moment with will about pirates

no i'm just teasing i'm just teasing but we've got to call it quits because um otherwise this

this episode will go on well beyond our jingo book.com mastering jingo.com to find

nigel's stuff we are at jingo chat.com chat jingo on twitter and we'll see everyone next time

bye bye

join us next time

thank you folks

thank you all