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 Django Book.com, has written a number of books, has video courses, and lots more we'll get into.
Welcome Nigel.
Hi Will.
Hi, Carlton.
Hello, Nigel.
Thanks for coming on the show.
Sure.
Thank you.
So let's maybe let's start with the big one.
DjangoBook.com, you took that over years ago.
How how did you how did you manage that?
Um 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 um it started out being quite lazy.
I didn't start want to start from scratch.
Um and I'd always use the Django book resource that uh Jacob and um the guys had at yeah yeah, they they'd 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 uh masteringdjango.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 masteringjango.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 I've pretty much been the somewhat reluctant, sometimes caretaker of it since.
There you go.
Well, I don't yeah, you know, I think probably maybe half our listeners are intimately familiar with Django book, and half maybe have no idea what it was, but it was the original Django book written by the creators and went through a number of iterations, right?
I forget how many they did.
This is how it's been.
Yeah, they 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 taking me to task for um pinching the Django docks, and that I was a pirate and I was I was plagiarizing and I was this and I 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 gonna look a bit like the docks.
So it was 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 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, there's like these, and you know, you might be familiar with this to know it's and that's just straight straight from the original source.
It just hasn't been
Yeah, no, 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 quiet 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 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 as a religion but 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 it really has a I don't know if a renaissance is the right word, but I I have a couple of 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 since
I can't go too far because the the Django book website's WordPress.
So I nobody's criticizing Django um PHP, but like there was it was the dominant thing at the time, like two mid-early 2000s.
Like and it was like on the Django book and the first version of the docs, and there are still references that's like these kind of sentences in the Django docs from this epoch.
Yeah, it's like look, it 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.
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 walls?
Do we all there are, but we're too old for all of them I saw Carlton?
I send Carlton links on Reddit about this and that and Django just to get a rise.
And yeah, no.
You see it so a few times, it's like, okay, we're still doing that.
Yeah.
No, no, no.
They never went away.
We just lost interest in them.
Um 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 it so what?
Like stuff however you manage less
stuff worries you.
It's like I I 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.
He's like, Oh, this thing is cosmetic, and do you care?
And I was like, I got kids, like I 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, yeah.
Well, and that and that, and you know what the world's throwing 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, me was like, why isn't everything perfect?
And now I'm like, wow, it's amazing anything.
So or any
back to 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 I'm electronics guy, and um and programming came to me long before there were 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 on a five and a quarter floppy, which most people have never heard of before.
Um, it you know, there's a
we we have, yeah, yeah.
The the generation now are going, whoa, 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 DOS DOS manuals, which came with computers way back then.
Actually, manual, used to get a manual, they were amazing, yeah.
And they and and I jumped onto the school's Apple IIe, 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.
Um 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 ran my own uh ran my own um 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.
Um I was silly, I I told people the truth and didn't make any money out of it.
Um so I um I just ended up working my way up through technical engineering, design, RD, and that sort of stuff.
So I was always using software to solve problems, and that's 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 and they have their their pluses and their minuses.
So where I got to Django was that I was doing uh early in before they called the Internet of Things, it 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'd got bored of winforms and see because I've been doing that for a few years, and I so I wrote a desktop interface with WXPython 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 website that shows all this data and and they wanted to see maps and all that sort of stuff?
I thought, 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 Jet Danny's book, uh Danny's and Audrey's the two scoops of James, 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 uh what's the hosting m
ob?
Um Heroku.
Heriku, yeah, yeah, and um had no real interest, and and that's kind of where it went from there.
Is that 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 gonna write something, write something and stop talking about it, except she used different language.
Um 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 the site, the book, the book, you've done a couple books.
You've also done videos.
Correct.
I mean, we started talking, you did you've done a lot of videos too.
So I don't I don't know how to enter into that.
I guess what do you see, or what have you heard from listeners and term or readers, viewers?
Uh 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 are more total beginner level.
Um, yeah.
Do you agree with that or disagree with that?
Um it it depends.
Um 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 the you've got your auditory, your 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 complimentary because I even know my own consumption.
Like I um sometimes when I'm chasing it, because just recently I've 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 in 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 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 and that where they just exploit authors, they don't teach.
Um but I I think having that mix of content out there is actually valuable, um, 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 gonna 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 it's just one of those things.
It's it's like learning any language, you know, is that um to to be able to order order a drink and have a ball at a and a at a you know at a Spanish bar, you you're sort of gonna 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 uh, you know, computer languages are like human languages.
You know, you you there is a basic syntax as 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 of getting that across, you you've just got to you've got to do the hard yards, you've just gotta get there, and um yeah, I think depth comes from that that broad ways of consuming stuff.
Um, 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 the you're just never gonna see any of my work where I'm just sitting there, you know.
You see those YouTube videos where a guy's um and an aren't and clicking through the screen and explaining one thing and and typing forward and deleting backwards and all that.
I 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 I mean 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 like 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.
I've difficult you're ahead of me.
I've only just started my 3.2 stuff because I 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 my my beginners 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.
Uh I mean it's a lot of people.
Well, I've got a real once you know,
but it it's like, you know, the the the pathway that the Django'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 ch 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 much as it's as much as it's I mean, I 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 I 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
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, and it's like yeah, dude.
Well, you know, I've I I kind of appreciate the 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, yeah, I've gotten the same kind of emails for so for so long.
When someone comes in really firing, um, you know, A, I I never responded in 24 hours because 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 I appreciate that.
You can harness that.
Yeah, I'm because 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 beginner's arrogance or whatever it is.
Yeah, it's definitely something.
Uh it's optimism.
Well, it's that it's that's when you started
you started programming, you're like, I can build this in a week, no problem.
You know, 10 years later.
Well 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 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 gonna 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 it's like, why why do you want to actually get through the dry stuff?
And he was like, Well, I want to, he's an architect 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 da da da.
And I was like, Whoa, like that's that's not a crud app.
No, no, no.
But you know, people come in with these crazy ideas, but I think it's great.
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'm I I had a I had a a um a reader that sort of took me through a similar 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.
Because you you'd find that too, like that there's a lot to Django, and I and I find I've got plenty of breadth, but not a lot of depth in in some areas.
Like, you know, you you I can sort of talk to a lot of the 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 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 gonna 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 gonna 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 um professional setting.
Like I made a conscious choice not to um, you know, have Git 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 do 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 Ocken on to find it out with you.
Uh so then so knowledge if you're building a site, what do you do?
You just sort of click through and make sure it works.
I mean
no judgment and that's it.
No, no, no, no, no.
Just ask it forever.
No, I just get somebody else to do the test.
Right, okay, yeah.
So it's automated.
Yeah, no, I 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, you know, MVP and iterations and all of that sort of stuff.
So I um I've read the testing gate and all of 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 I'm more of an advocate 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 is like what yeah, and then the trivial doing trivial stuff.
So I I do it, but at module level.
So like I'm I I build a module that I know works and I've throwing 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 it's yeah, you're not sure what behaviour 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 it I don't break it later on.
Yeah, and yeah, but that'll get you off Harry Percival's Christmas list saying that sort of stuff.
Well, I'm already off his list, I think.
I like the Django Run.
Yeah.
Well, I I I just didn't 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 I 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 tests.
Yeah, but like after I've gotten it working and I'm happy with it, because there's no for me there it slows me down to rate 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 of the environment we're in.
Like I'm I'm intensely creative with software because I've always worked in the RD end of the spectrum.
So like I'm solving problems early in the piece.
I've never been the one at the end that has to, you know, make this work for a million users.
Um, and we're just a product of that experience.
Like, programming to me is create 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 just not my place in the world.
Like, I've employed programmers like that, and and I respect that, and and you know, I've worked with quality engineers and those sorts of things.
Um, and I'm about to step into a product management role in a 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, you know.
So I'm still working at the the creative and problem-solving end.
So I think it 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 know I don't like it.
That that comes down to our discussion about being an old fart.
You stop caring after a while.
It's like, oh, these are the things I like, these are 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?
Absolutely.
But that gets back to that slow once that we're not interested in, remember?
Yeah, yeah.
Well, Carlton, I mean, you how do you I'd I'd be curious just your public take on testing because obviously working on Django itself.
Django is eminently, you know, it's a massive test suite.
It's very test very tested.
Yeah, I mean, but the the 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, well, all the existing tests pass, we push it out, and then you know, Django through you know, X point Y, new feature, blah blah blah, and then we get you know reports on the tracker saying this is a change of behavior from a previous version, then we've got a you know trouble.
Um but that's different from the situation Najee'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 uh more and more important.
And for something like Django, which is 15, 16, 17 years old, uh 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 saying, nah, we don't need tests.
Yeah, but you know, yeah, it's not it's not creative in that same way, it's not new, is it?
No, it's 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 behavior, 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 to like that.
Sometimes I I do develop that way, other times I do it, we'll 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've most because I'm from an engineering point of view, too, we're working in very, very small memories in C, and you don't have test suites.
You you you basically have a text file that has all sorts of rubbish in it that you throw at it to see what breaks.
And in your kind of testing from that point of view, you you sort of
an integration test.
Yeah, well, it's 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 and 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 well any of the C's absolutely detest um you know when you throw the wrong type at a variable, and then you know, with those embedded systems you get memory overflows and all sorts of lovely, interesting stuff that we don't see in the Python world happen.
Um, but you know, you just don't have the overhead to have a test suite on a chip that's got 256k of memory on it.
Yeah.
I think the other bit related to testing, and I'm curious, Nike, what your experience is, is that people who are learning Django sometimes will say, Hey, I I got my first job, or I switched jobs.
Um, and they have this sort of sense of shock when they work on a commercial code base because uh it's not as clean as a very different
creature, isn't it?
It's like I think we all go through that shock phase.
It's it's like what you look at a commercial code base, and and and I've been around long enough to see good ones, bad ones, and plenty in the middle.
Um, and and I've also been around long enough to be, you know, 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 and some of those really, really hideous program structures that just give me the shudders, even thinking about them these days.
I um I think we're always gonna 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 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.
Um JavaScript, but it's just like which one?
I I just I don't know, I don't understand that somebody
HTMX, HTMX solves.
Yeah, yeah.
It's it's it's like I I've only just started to decipher that, and I think it's much, much harder.
Like, like everybody's has to be full stack in that they might hire a 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 I'm glad I'm actually a fair way away from these days.
So yeah, I wouldn't I 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, right?
Most real code in real life.
You know, I mean, you know, maybe it's maybe the code for I don't know, some like 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.
Yeah, yeah, yeah, because it'll bring the whole building down.
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.
I I'm I'm sort of I've really I I've Django has kept me busy for six or seven years, like I haven't really had to step forward.
Um, but I get a lot more of that.
Like, obviously, the Django Rest framework, I get questions about that every other day.
Um and then doing other things like um 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 at Angular, but of course, that's kind of plummeted in terms of of popularity compared to React and and all of that, and then of course, React's built on like npm and and 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 these objects you can encapsulate like um you you know a UI and everything like that.
But shit, we've been doing that with the um, you know, the the um Django template, the DTL for years.
So so why is it so impressive?
Well, it puts it in the front end, okay.
Yeah, alright.
So so that's what JavaScript's for.
Um, but just trying to get my head around well, how do we we do React and Django justice in in one thing?
Um, and 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 that's a good point.
How far how um how deep does your knowledge have to be before you feel like you can teach something?
Because I mean
Well, I I I'm actually I'm I'll tell you the truth.
Most of the teaching that I do is is basically I'm the learner with the learners.
Um so whenever I 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.
Um so I 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 point zero that comes out inconveniently three months later, you 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 they say, hang on, 1.11 is 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 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 I've always worked 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 you had to had to write um um scripts on the server to restart the Python long running process, otherwise your server would just go blank and sit there every hour or so, you know.
It's like so I I've I've decided I 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 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 persp that perspective.
I I get lots of emails from 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 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's 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 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.
Um 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 assign 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 we're never gonna win that argument.
Like really, when you you're doing beginner's material for a particular language, you've got to make the assumptions because you 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 beginner's 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 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 gonna 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 gonna teach you.
Um, if you need to find that, here's a whole bunch of links, but I can't, 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 uh shows doesn't tell, which you know, I'm like, well, yeah, that's the point.
Like one stall didn't tell.
No, people are people are generally pretty nice.
Um 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 uh they make more sense to me.
Um but when I was starting out, I was like, Yeah, 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 how where do I draw that line when I'm teaching?
Well, yeah, and and um you know I get a similar line sort of thing because I I play the the Python setup right down the line.
Um so I used to use virtual env, but once uh the later versions of Python 3 came out, I just use VMv and and PIP.
And you know, and people are saying, Why aren't you using pipenv?
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 vmv, 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.
It's that software is tools.
It's it's it's not a uh not, I don't hesitate to 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 you're just solving you're using tools here, and that and then it comes back.
Well, this is the basic tool set, this is what I'm gonna give you the basic tool set.
I'm gonna 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 of 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, it's 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 on.
It's like, well, it's it didn't work, you get some error and you you 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 it.
I think it's also it's it's to me, it's a mark of uh if not immaturity, I sort of uh 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 I've pretty much the I've spent most of the last 18 months writing VBA, you know.
So, you know, you you you um you know you've got you've got to to have an appreciation that every tool has its place.
Um and yeah, I 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 learnt 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 strain, 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 limitation, you know.
So you see the the talent that it's opportunity.
I wanted to ask you both, um, because you're both um creators of um teaching content for Django.
I wanted to ask you your opinion on um you know where the the level should be um pitched for the Django dogs, because I quite often see criticism of the Django dogs.
They're too hard, the tutorials are too hard to get going.
And then I look around the community and I think but there's lots of great getting started uh 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 th I kind of think it's nice that people have to reach outside the Django docs to find more stuff, but
and I I yeah, from my my point of view, Carlton, 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, uh, you 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 it isn't the job of of the guys doing Django, you know, that that the job of 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 ke
ep up.
Um, you know, and and that I I think it's a valid question, but it's not one that the dev team should actually have to answer.
They should say, no, go and see Nigel Will.
Or, 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 simple is 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 or Django girls, like there's a lot of us out here.
I 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 um the discussion before about the difference between engineers and content creators.
We come from a different mindset, you know.
I I I'm not terribly sure I could have get as much out of what I do, and and my the people that learn 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 comment.
Yeah, but well, 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 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 uh you know, I would 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.
Uh 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 uh unbelievable that the docs are even as good as they are, and if you're frustrated, um you know I mean it it's it's also Django d 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 to trust.
Like you were saying, people have followed you on your career as a creator.
I find that's the same way.
If someone li you know likes a current a teacher, they'll 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.
Yeah, I think that's what
I would say.
Yeah, I think so.
Um and and and a lot of them too, you're not going to like there's so many people who who who will come to that and saying, 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.
Um, 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 there's this expectation that that it it's all gonna magically come together.
Um, you know.
But we can snip 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 of things.
Yeah, yeah, you get very good at it.
I'm happy Well, I mean, you know, I uh I'm not free tech support.
You know, 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, you know, something else, it's like, you know, I'm not getting paid to answer your question.
And just because you don't know that this is an incredibly complex question, um, 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 Django Book.com website?
Because you have books and courses.
And and um, you know, that's that's where I um publish anything that I'm I'm doing.
Um so yeah, it's just Django 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 I had a beginner's course that I I it 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 they can go and take that course.
It's um it's still packaged up as a course at the moment, um uh, but all the videos on Vimeo, which I'm paying for, so I'm pretty much gonna tidy it up for a 3.2 and migrate it to YouTube, so it's just linked there as that.
And I'm gonna leave that free.
I'm not actually gonna make the course paid again, so it's pretty much just the books and and the content there.
Um, and I I do have a YouTube channel, but it's kind of got nothing on it.
Um, so okay, keep an eye out on 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 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 gonna be the the best place.
Um and and of course there's the updates for the beginner's 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 wondered, we both have this idea 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 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 I don't think I actually have a have a what you would call a a teaching fantasy with Django, because uh it's for me it's it's a it's a hobby.
Well, I mean that's the healthiest way to that's the healthiest way to do it.
Yeah, I um I'd
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, and it's it's uh 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'm I I I I took one look at that.
That well, I took more than one look at that.
Um and then it was like, yeah, nah.
I I just like I
well that was wise.
I because I I've looked at I've looked at the professional stuff and and and yeah, as I said to before, like I 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 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, it's sort of say, well, here's Django as a back end, and here's here's like starting off with bootstrap templates.
Here, 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 backend 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 some for Django could slow down sometime so we can keep up.
JavaScript is the wild card.
Yeah, it's impossible.
Um, you know, into um it's like I'm not even gonna 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 am 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 4.
It's like, you know what, I'm just gonna leave this right until sort of October, November, December 2021, and I'm gonna 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.
Um not much changes.
I can't take the path lip, you know, change would have been disruptive.
Yeah, well, the path range tutorials, but
yeah, in term in terms of writing content at the level that I'm at, I don't know if we'll experience the same, but there was a bigger difference between 3.0 and 3.1 because of path lip 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 make a big difference.
Yes, we have the deprecation, but like we pick up the 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 it's kind of not relevant anymore because I've already weeded it out of the books.
Um 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, UK's all broken, like what's this import OS?
It's throwing an error, and um, I had to madly write some errata for 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 a lot of different things.
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 uh you have to a little bit.
So Git, GitHub, Heroku, Sengrid, 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 um so I'm I pull those out, but it's still I I find that for me it's like things build up in terms of people asking questions on areas maybe or in on best practices.
So n every update I can't do a huge redo.
I I go through everything from scratch, which takes quite a while.
Um but this current one I'm on, I'm like I'm switching from pip env to pip.
I'm I have things more on function-based views than I have before.
Like I'm kinda 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 away.
And I think I was gonna another point, you know, what's the difference between you 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 twenty percent.
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 role.
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 opened 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 day job, I'm not gonna update this thing here.
Uh I'm curious if that resonates.
I think that's how I view it anyways.
That's I think that's open source.
Uh I think you know, like you you you have this this this dichotomy or or 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 uh 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 we're rolling in at writing content for Django, I've got news for you.
You know, it's
no, 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 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.
Like you pick up a book like ours or Mastering Django, I think it'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.
And I'm the same, yeah, it makes no sense at all.
You know, like you you you you just sort of and for me I I just went back into industry and that and I I do this now, so I've I've got to balance my time.
Um and you 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 and that and 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, you know, what what do you think of this idea?
Yeah, I think that's a great idea night, or no, I don't like that, and they'll give you good feedback.
And ultimately that's that's that's what you do it for, and it's not because you know you you get a certain amount for a book.
Um I'm gonna fiddle around with with what I'm doing, um, to be honest.
I'm gonna try a few different ways to just get a few bucks here and there.
Um, 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.
Um, but I don't answer those.
It's like I'm 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.
Um you know, yeah, it's that's that's where I draw the law.
No, I no, I can't.
That's all that's all true.
Um I think with the requests, you know, I view it as uh if I'm in a good mood, you know, if it's early in the morning and I feel generous, I'll do it.
Um but generally I don't waste too much time on it.
Um I had a case which I don't know if you want to talk publicly about your um one of your books being you know coming out before publication, but I had a case where Iran, I get a lot of emails because there's a lot of educated people in Iran and they're not part of the formal uh international monetary system.
So there was someone from a university there who wrote me you know this full page letter and I was like, okay, sure, I'll send you the book.
Um ebook.
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.
And I was like, well, they probably just gave it to you anyways, but I was like, you know, so anyways, it's like open source.
You gotta be like, you know, if people's gonna steal it, they're gonna steal it, and if I feel in a good mood, uh once in a while I'll do it, but you know, I'm not getting I'm not getting paid to answer your email asking for a free copy of something I've spent thousands of hours on.
So well, my my favorite one with that, like my my my shortest one with that was so my first book was traditionally published with A Press.
It was uh on Django CMS.
Um and um I got a um a an email from one of the guys from Django CMS, and he found a copy free online before I'd even received my publisher copy.
I remember you telling me that's great.
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 were three files attached.
And I said, so the first one is a pirate of the uh Link Hub 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 he yeah, he found all these things, and all three of them were pirates of different versions of the same book.
Hey, Noj, could you help me
out here?
And I told him that.
Um so any part, you know, it's good.
He he asked for a discount, which we 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 what can you do?
I mean, sometimes uh more these days I'll get emails from people saying um apologizing for having stolen my books and saying I'm in university or I'm gonna 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, no, we're not we're rambling on, but we're coming.
Coming up on time here.
We're rambling on here.
It's these publishers' stories about how people party.
We can go on forever, folks.
So yeah, no, I I think I'm gonna call time.
I'm gonna I'm gonna call time here.
So uh Nig, really good chat.
Thank you for coming on the show.
Um thank you for um uh reminiscing with Will or sharing a sensitive moment with Will about pirates who call it.
Oh wow, pirates ouch.
No, I'm just teasing.
I'm just teasing, but we've got to call it quits because um otherwise this c this episode will go on well beyond all this.
Django Book.com, mastering Django.com to find Nigel's stuff.
We are at DjangoChat.com, chat Django on Twitter, and we'll see everyone next time.
Bye bye.
Join us next time.
Thank you, folks.
Thank you all.