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