Are you learning or helping someone else learn Python?
Why not make a game out of it?
Twilio Quest is a game that doesn't treat you with kid gloves while teaching you Python.
Use your editor of choice and write code on your machine
and still play the game to solve the Python challenges.
In this episode, you'll meet Kevin Winery and Ryan Kubik from Twilio,
who created Twilio Quest, and they're here to tell us all about it.
This is Talk Python to Me, episode 249, recorded December 12, 2019.
Welcome to Talk Python to Me, a weekly podcast on Python,
the language, the libraries, the ecosystem, and the personalities.
This is your host, Michael Kennedy.
Follow me on Twitter, where I'm @mkennedy.
Keep up with the show and listen to past episodes at talkpython.fm,
and follow the show on Twitter via at talkpython.
This episode is brought to you by Tidelift and Linode.
Please check out what they're offering during their segments.
It really helps support the show.
Kevin, Ryan, welcome to Talk Python to Me.
Awesome. Thank you very much. It's a pleasure to be here.
Yeah, thanks.
Nice to spend a little time with you guys and talk about this programming game.
I think it's going to be so much fun.
For a long time, I played actual games, you know, MechWarrior, Half-Life, Counter-Strike,
something like that.
But then I felt like that was kind of just wasting my time.
And my game actually sort of became programming, you know,
instead of going and diving into a world like that.
I was like, well, what can I build in the world with code?
And like creating stuff with code kind of almost became a game to me.
And you've sort of clashed these worlds together in an interesting sense,
at least at the learning level.
Yeah, I think so.
And it is kind of funny that it sort of scratches the same itch, right?
Like, you know, building something with code, it seems to somehow feel, I don't know,
maybe it's not so weird, especially when you see games like Minecraft and that sort of thing.
But yeah, it's been fun to kind of marry those two passions for me as well.
Yeah. And if you disguise them right, kids will love them, right?
Like kids love Minecraft.
If you told kids to go like do programming homework, they'd be like, no, I don't want to.
But then they'll like beg for Minecraft, right?
You know, it's just like the context is really, really interesting.
Yeah.
Yeah. Before we get too deep into the game side and talking about Twilio Quest,
the thing that you both have built, I want to talk a little bit about just where you're coming from
and your story. So, Kevin, let's start with you. How'd you get into programming in Python?
I got into programming kind of in high school. There was like a, I don't know if you can call it
programming, but there is this hyper card software that was installed on the computers at school.
And I got really into like creating like interfaces in this like drag and drop system where you could
click on links to go to another card in the, in the system. and just thought that was,
that was super fun. and then, in college, I studied, programming and wrote like a red
Rover simulator in scheme. and thought that, thought that I was a genius for figuring out.
Well, if you did it in scheme, you kind of are, I mean, you are a genius. If you can handle that
many parentheses at a time.
So many parentheses.
Just kidding. Sorry.
No, it was super fun. And then, but yeah, that, that was kind of what kind of got me hooked is the
ability to create like even just a stupid little game, like red Rover in, in scheme. And yeah. And
then I'm working at a, I've been programming for about 15 years now. I've been at Twilio for a little
over seven years and I do lots of different programming languages, but my primary Python is,
you know, our documentation website at Twilio, is built on a wagtail, which I'm sure many folks
know is a CMS extension.
Yeah. It's a Django. Yeah. Django CMS. It's a really nice one, actually quite nice.
Yeah. Super extensible. I mean, like Twilio has made a couple minor contributions and we've done a
whole bunch of customization, but yeah, it's worked out, worked out great. And that's kind of been my
first big Python project that I've been associated with, but I am more of a JavaScript person by trade for
sure. Right. And some of the, even though the lessons are for Python for some of the lessons
and missions, we're going to talk about the app at the low level, it will, we'll dig in as well as
more of a JavaScript, HTML type of thing, right? Yep. Yep. It is. Yeah. Well, I'm sure we'll dig into
it, but it's a electron application and, HTML, CSS and JavaScript. So. Yep. Yeah. There's a lot of
those these days. Ryan, how about you? Yeah. So like you, I spent a lot of time when I was younger
playing video games and then I ended up just making maps and stuff in video games. And then I
figured out like, Oh, maybe I should make something useful instead. So that was sort of my transition
into like, well, maybe I'll try to make a game on its own. And that didn't really fully blossom for me
until sort of undergrad. I started with Java and then learned to love, hate that. But Python was always
this sort of like, whenever there was a weird fun experiment, like we had like some big data courses
or like some machine learning thing, like Python was always the thing they're like, and now you can
have fun for a minute before you have to go back to writing all of your interfaces and stuff.
Right, right, right. Yeah. So that my initial impressions of Python have always been very fun,
even though I've never actually had the chance to use it professionally. But I also, the one time I
came close as I taught a intro to programming course in Python at a, at a local bootcamp. And that was
definitely a good choice. I was glad that I did not have to teach people Java in that setting.
Now you implement this interface and that's an abstract method. So what that means is this,
and I'm like, Oh my goodness, I just want to print something out on the screen. Can we not do all this?
Yes. No, it's been amazing. I generally do JavaScript these days,
since TwilioQuest is all Node and React and all that. But I also am glad I didn't have to explain
that to new people too. So.
Yeah, for sure. For sure. So let's start by talking a little bit more about your background,
because it sounds like you both are somewhat involved in education and TwilioQuest came out of
some interesting educational stuff done for Twilio and whatnot. So what's your backgrounds
in teaching and building courses or tutorials and things like that?
Before coming to Twilio, I worked at another smaller startup called AppCelerator. And we created
this thing called Titanium, which was a cross-platform tool that let you build mobile applications in
JavaScript. And I built a lot of educational content around that, sort of like a, sort of a lightweight
certification program. And I've, and since coming to Twilio, have also worked on documentation and
other resources for developers, including our live training program. And TwilioQuest was kind of
came from all of that as sort of a reaction to what I didn't like about how I was teaching developers.
And TwilioQuest is kind of how I prefer to.
Yeah, sure. And you're like, I'm teaching them just, here's an API, here's an API, here's kind of a
static tutorial they have to go through. And you're like, could it be more engaging, huh?
Yeah, absolutely. Like I, the, I mean, and we'll, I don't know if this is the right time to dive in,
but basically TwilioQuest was created because I wanted to, you know, live training setting, like give
people the opportunity to sort of progress at their own pace. Because in any kind of like live training,
it's either too fast for some people, or it's too slow for some people. And, you know, with something
self-paced like TwilioQuest, if you're brand new to the topic, and you only make it through three
exercises, that's great. Or if you're a more advanced developer, maybe you can speed through
20 pieces of content throughout the day. So yeah, that's a real big challenge of these in-person
trainings. It's also a challenge of online and self-paced, but it's a really big challenge of
the next half hour, I want you to do this. Whether that's a PyCon or other conference,
like live workshop, or it's a week long training class. There's people of massive different
backgrounds in there, and it's super challenging to give them something interesting that doesn't
either stop in 10 minutes for the experts or just kill the beginners, right? I did 10 years of in-person
training, and people would come to me and they would say, Michael, we're almost out of time,
I'm only halfway done. I don't think I'm getting this topic. Or the point is to have enough that even
the really experienced people don't run out of time. So don't feel like you've got to get through
all of it, right? It's just, it's a big challenge, right? And so I think the open-ended
quest concept, they can just keep going down these paths, which is pretty cool.
Yeah, totally. And that's like sort of has formed the core of it. And we still use that in our live,
use TwilioQuest in our live training today for that reason. But yeah, we had like the software and
kind of a lot of the other tools that we built around it ended up being useful to build something
for self-service learning too, so.
Yeah. Before we move off of it, what does live training at Twilio look like? Is that like a big
company that wants to implement working with you guys, say, hey, come and do an in-person class or
these like conference things that you do? I know you are exhibitors at many of the conferences around
and whatnot.
Yeah, I think it's kind of a little bit of all those things you mentioned. So we will go to
companies sometimes, and they're interested in sort of, you know, leveling up a bunch of developers on
how to use Twilio because they're about to embark on a larger project of some kind. So we've definitely
run TwilioQuest in those settings. And then we also, Twilio will sponsor conferences and other
meetups and developer events. And we'll often do like a couple hours or maybe a half day where we
get people together, they play TwilioQuest. And both when we do it on site at Giant Corporation,
and when we do it at meetup, we usually do a leaderboard with the XP totals of everybody during
the event. And then we usually give out some like goofy prizes at the end for people that have
completed certain objectives within TwilioQuest. So yeah, and most of it we do we do kind of
intersperse it with some live demos, like some live code demos, or some demos of larger applications.
But it's usually like a facilitated hands on experience where people kind of move through
the content at their own pace.
Okay, cool. Ryan, how about you teaching background experience?
For me, this is again, this is the first full time educational role I've had. So a lot of my
previous experiences sort of been trying out a bunch of different ways to help people learn and
find that way that I'm actually effective at doing that. So I mentioned that that one time boot camp
course I did, that was the only time I did that. Because teaching at a boot camp is stressful and
crazy, especially on top of a full time job as well.
Right. It's a pretty big commitment. Those are like 12 weeks. And that's a lot of time, right?
Yeah, it's definitely a weird place too, because it like, the stakes are pretty high for the people
involved. Like it's a potential life changing opportunity. And, and like, not being able to
commit to it, like as a full time position, I just felt like I was hard to serve them as well as I feel
like they deserved.
I can imagine. Yeah.
Yeah. So I've also tried like speaking at local meetups, I do a, like a monthly blog post on
educational topics. And I just tried a bunch of different little things. And in general, I find
the, the ways where I kind of either get to engage in conversation with folks or sort of curate an
experience for them rather than the sort of live, like lecture style. Like I, I don't think I'd be very
good at like recording a audio course or like the one time I tried streaming was a little messy,
like sorts of settings are hard.
These more interactive sort of, I'm here with you rather than speaking to you.
Yeah. I like, yeah, being, being more on the team with someone versus sort of portraying as this,
uh, all knowing deity where I in reality don't know very much at all.
Sage on the stage.
Yeah. That's a tricky place to be. So Kevin, while you were speaking, something that
sounds pretty interesting. You talk about having these leaderboards and people doing this together.
And, you know, when I was thinking about this, it was like, oh yeah. And the training that you guys
have been doing and whatnot, this might be really a really fun activity for a meetup, right? So if
you've got like a Python meetup or some other meetup that there's a mission for, have everybody
come bring their laptops and then just play together. How do you like create this sort of group
leaderboard thing? Is that something that people from the outside could do if there's
meetup organizers out there?
We have done it for folks before. Like we, we haven't sort of made it self-service, but we have
a community leaders that have been like, oh man, I would really like to do Twilio quest at our meetup.
So, you know, it takes me about 10 seconds to create a new like event in Twilio quest. So
I've created one for folks and they have gone to a URL and they can display the leaderboard there.
And within the game, you can actually specify that I am participating in this live event. And then it
starts sending all your points to the leaderboard. So we've definitely done it for a few third parties
and we do it for first party, like Twilio events all the time. Like we have a Twilio quest tea party,
which is a fun one that some, some of our colleagues have started to do where you just hang out and just as you imagine,
drink tea and eat fancy cakes, and then also play Twilio quest at the same time.
Yeah, that sounds pretty cool. All right. Nice. I think it would actually be a pretty fun activity.
If you're trying to get folks involved to have like something of a beginner night, or you could pick
more missions that are more challenging.
Yeah, totally. We definitely want to make that more self-service. But in the meantime,
if you tweet at Kevin Winery, he will set that up for you. So let me know.
Super, super. Yeah. And I'll put a link to your Twitter, both of your Twitters in the show notes
so people can just find it in their podcast players. Awesome.
Now let's dive into Twilio quest proper and I'll read the opening paragraph. It's maybe I should try to
describe it. It's a little bit, it's like a top-down sort of dungeon exploring game where you go
through and you find clues and you solve puzzles by writing code to make those things happen, right?
Is that a fair, very first impression?
Yeah, yeah, I think so. Like we're kind of trying to go for like a Zelda or Pokemon style RPG where
a lot of the progression is done by solving code challenges that will, you know, unlock doors and
clear your progress or the way for progress in various ways.
One of the things I like is the, there is conversation with little non-player character type
things, but it actually speaks to you. And I don't know, there's just something about a game where it
has music, but then the only way to interact with characters is, is reading. There's something nice
about a little bit of conversation, but there's an opening section and I'll just read what it says
there to give people the sense of kind of what you're going for, I guess.
There's more and more, our lives are lived inside the virtual worlds of computers. The universe is
where these virtual worlds reside is known as the cloud and it expands every second of every day
with new worlds to discover the ability to write code. The laws that govern these virtual worlds has
become a precious resource. And you have to go on to sort of save the world from the legacy society
or something like that, right?
The legacy systems, yes.
The legacy systems.
Yeah, they're always red when they appear in text. Very nice.
So it starts out and you have this like, hey, welcome. You're going to like learn a little bit
of code and you're going to, as part of the game, save the world from these legacy systems,
but really just learn stuff, right? Which is great.
Yeah. It's mostly, mostly just learning stuff at this point. We, in the coming year, we have some more
story elements that are going to be coming out to kind of, that will, you know, pitch you against
the legacy systems. But yeah, today it's mostly just learning how to code in a sci-fi setting,
for sure.
Yeah. Yeah. So for now, people can get ready, prepare their skills, hone their skills.
Train up.
Later.
That's right. Train up. Exactly.
This portion of Talk Python to Me is brought to you by Tidelift. Tidelift is the first managed
open source subscription, giving you commercial support and maintenance for the open source
dependencies you use to build your applications. And with Tidelift, you not only get more dependable
software, but you pay the maintainers of the exact packages you're using, which means your software
will keep getting better. The Tidelift subscription covers millions of open source projects across Python,
JavaScript, Java, PHP, Ruby, .NET, and more. And the subscription includes security updates, licensing,
verification, indemnification, maintenance and code improvements, package selection and version
guidance, roadmap input, and tooling and cloud integration. The bottom line is you get the capabilities
you'd expect and require from commercial software. But now for all the key open source software you depend
upon, just visit talkpython.fm/Tidelift to get started today.
You talked a little bit about how this started as working for like in-person experiences, but maybe just give us the
history. It started way back in 2013, right?
Yeah, yeah. So yeah, right around when I joined up at Twilio, because I had done some developer
training stuff, I was sort of given the charter of, you know, we're having this conference,
and we'd like to do a live training day, you should build some training for Twilio for the for the
conference. I didn't want to do like slides code, slides code, slides code, you know, kind of like I had
always done for developer training before. So over the course of like a couple weeks of like frantic
hacking on like Angular one or something, I think it was back in those days, I created sort of the
first crappy proto version of Twilio quest, where you could go through and do code challenges, except
for the code challenges are all manually validated. Like I walked to your laptop and saw that you did
the thing and then gave you points based on that, right? Was it also originally just in the cloud,
just in the web?
Yeah, it was it was just in the browser. Yes, it was built on top of parse on may they rest in power.
But yeah, so it was, it was an app that was browser based. And yeah, we used it at live events,
starting in 2013, and kind of sporadically going forward. And then a few years ago,
we sort of cleaned it up, made a new version of it and actually deployed it on Wagtail, our docs,
CMS, and did like sort of a version two of Twilio quest that was like a nicer version of what we
initially did in 2013. And then last August, we launched Twilio quest three, which we rewrote from
the ground up. And it is, you know, very much this game experience where you download the application,
run it on your computer. And, and yeah, there are a variety of reasons why we did that. But,
but yeah, it's kind of started for live training in 2013. And then we sort of rebuilt it from the ground
up as like a self contained self service game so that it wouldn't be so tightly coupled to live
training.
Yeah, I think that's really neat. And people can definitely use it for all sorts of stuff.
It's very unique in a lot of ways that we're going to talk about how you play it. It's not just your
standard coding game gamification. Ryan, when did you get involved in the project?
I joined back in June, I believe it was the first week of June. And that was sort of the last sort of
crazy, crazy sprint for Signal this year, which is where we did the first sort of public release of
Twilio quest three.
Right. And Signal is your big developer conference, right?
Yeah. Next one's coming up in May. And we have like a big one of those super class events that
Ken was talking about our live training. We have our biggest one of the year there and have hundreds
of developers come in. So we really needed to have it to request three up and polished and get the audio
in and as much content as we could get. So it was sort of this big push that we all kind of came together
for. So that was sort of my initial experience was very quick. It was a quick pace time.
It was hectic. It was a hectic time.
Yeah, we definitely got it together, thankfully, and shipped it in August.
So yeah, super. And your background coming from games and more web development JavaScript side,
what part did you work on?
For me personally, I've always wanted to work on games, but I've also really enjoyed web development.
So this intersection for me has always been like, when I practice code at home, I write web games.
So I've been writing games in the same, like we use a library called Phaser, and then we use React,
and all these web technologies that I've been using to make games for the past several years
in my own time. What I didn't know then is that I was apparently training up for this exact opening,
where...
It's funny how life is like that, right? Like, this is the thing I'm really into,
and then I have no idea what I'm going to do with this. And then boom, like, wow.
Yeah, exactly. Good work there on making your hobby fit.
Yeah, so I had basically been for several, several months before my application to work on
TwilioQuest, I was working on another game that was powered by Electron and used Phaser and React
to make an interactive, downloadable video game experience in web tech. So it was sort of that
technical know-how and experience, I think, is the primary contribution. And then just in general,
I've been making games for a few years. So I think that I bring some insights on that front as well.
Yeah, and it's super cool. So I know what React is, I know what Electron is, I know what HTML is,
Node, all those things. But Phaser I had not heard about, and it looks pretty interesting.
Tell people about Phaser.
Phaser.js is a game development framework of sorts, I think is the best way to think about it. So
you could go into writing your own physics engine and your own collision system and your own audio
player and your own rendering code.
Then four years later.
Yeah, exactly. Then you could start a project. So instead, Phaser gives you a lot of great APIs for
things that are just like, I just want the character to move when I push the arrow keys. And Phaser says,
like, okay, make a sprite and then add cursors and then like, okay, your character moves. The camera
follows them. So it just gives you a lot of great utilities to get you up and running and like making
your game rather than making all of the giant technological decisions and implementation that
goes behind having a game run.
Oh, that's cool. And it's based on Canvas and WebGL and it's on GitHub. Pretty neat.
Yeah, it's an open source project.
Yeah, yeah. Okay. Very cool.
Yeah, it's been a pleasure.
Yeah, I bet it has. You know, it's really much better than just trying to write that all from scratch,
right?
For sure. Yes.
So Kevin, one of the things that I think that particularly speaks to me when I play this game
is the way that it is real programming. Because one of the things that kind of bugs me is if I go
to some online place and says, you can write code here and then this is part of our challenge. And I'll
talk about some that are nice and not knocking on them at all. But you go there and it's not the same
experience. It's not the same as if I'm going to open up the main web application that I work on or the
mobile apps. I'm not going to do that in the browser. I'm going to fire up an IDE or some
proper editor and work on my local file system, right? And so one of the things that really
surprised me about this game is you go through and you have these challenges, you got to like unlock
little electric doors or whatever. And the way you do that is you write some code to solve a challenge
or a puzzle. But the place and the way you write the code is on your machine, right?
Yeah, that is something that we kind of felt strongly about. Like, I love a lot of those browser
based experiences as well. They're fantastic for like teaching the syntax of programming languages and
things like that. But the skills that you need to like, as you kind of alluded to, to actually write
code professionally, or you have to kind of start using your computer like a developer, you have to
kind of know how to navigate a terminal and execute code from the command line and maintain a directory
where all your all your code lives. So in a lot of the content in TwilioQuest, we try to,
we try to have you actually do that. And because TwilioQuest is a desktop application running on your
computer, that gives us the chance to kind of incrementally validate that you've done that. So
we have one mission where you can learn Git. So we can verify that you have Git installed,
we can look at a directory where you cloned a repository to see if you've
created a branch of a certain name. So the fact that we're running on your computer gives us the
opportunity to kind of really step you through what is necessary to actually set your computer up for
development, which I think is like an important step of teaching people to fish in this process,
for sure.
I agree, because you come to one of these, these online things. And like I said, they can be really
nice. But then I want to build a real thing. What the heck do I do? I have no like, there's not this
web editor, okay, I got to figure out a proper editor, I got to, how do I get the, you know, Python or
Node or Git or whatever it is I'm trying to work with onto the computer. And then Oh, it's not in the
right path. And there's just all these challenges, right? So it's, it's pretty cool. Ryan, what are your
thoughts on this?
Yeah, it's that's the same thing for me. I think back to like learning to code, I use like computer
craft in Minecraft or something. And I wrote this little thing that made a bot move around. And then
as soon as you look at your normal computer, and you're like, how on earth do I do anything? Like,
I don't know how to deploy this code, I don't know how to install stuff. I, it's all just sort of this
mess that like, there isn't, at least, hopefully, two requests can help solve this. But there's not really
anything that, that teaches you that process, except for like an instructor sitting next to
you and like showing you like, how to do this stuff.
Yeah, you know, there's a couple of other platforms out there that I think are worth throwing out for
people to just consider kind of in this realm. And they're all trying to approach this problem of I
want to teach some simple programming skills in some sort of gamified way, right? So the first one is
the PyBytes code challenge platform, that when you go there, and there's like a bunch of little
challenges that you do, and you can do them in your browser. And the way those validate is it just
runs pytest in the background to verify, you know, that it's getting what it would expect, right?
And then you the gamification side is kind of like you get badges, you become a ninja or levels or
whatever. Then there's check IO, where you actually go into like virtual worlds, more of the canvas web GL
type of thing. And you navigate those and you sort of solve parts of the world. And then when you unlock a
part, you can compare your solution to the other people's solution and talk about it, which is really
interesting. Like, for example, I went through that and I inadvertently learned that I have this tendency
to optimize for performance rather than simplicity, whenever I'm doing something, you know, I'm like solving this
problem. Like, Oh, I'll do it this way, because it would be really bad to just like, you know, re query the list
every time. Let me like do some sort of little optimization for that. Just not thinking that
that's what I wanted. That's just, here's a proper solution, right? Then I looked and other people had
it and like half the length. I'm like, why did they get it so quickly? I'm like, Oh, because they don't
care about this thing that I thought mattered. And it probably doesn't. Obviously, in that case,
it doesn't. Right. But it's interesting to get this comparison. And then the last one, which I think is
super interesting in the game side is code combat. And Kevin, you're familiar with that one,
right? Yeah, yeah. I've definitely played code combat a little bit. And my daughter Grace has
made a decent amount of progress through there as well. So yeah, it's a really, it's a really cool
project. You know what I really like? I love code combat. My daughter's played it some and she was
quite successful and she's not good at programming. She was pretty young. And what I really like about
code combat is it doesn't pull the punches. It's not like one of the sketch type things where you drag
it around. You're like, Oh, guess what? If you turn this around, it'll show you the code that you
wrote, but you didn't really write. You know what I mean? This one is like a dungeon that you go
through and you solve these problems, but you solve them by writing in a code editor online for real.
But what's super interesting is the autocomplete of the code editor is like ridiculous. Like you have
a hero object and the hero has to maybe attack an enemy. You type the letter A, it'll say it'll
autocomplete hero attack enemy and it'll like select the enemy, right? It's like ridiculous amounts of
autocomplete, but it's still real Python code.
I think that's definitely what I like most about it is that you're typing in code. I mean,
I think like the autocomplete stuff is also really awesome. And the working with the domain objects
of the game is kind of interesting is it's sort of introducing you to object oriented programming,
but not really like you're just kind of absorbing through osmosis. The fact that, you know, there are
objects that have these members and all of these other, all these other things. So yeah, lots,
there's definitely a lot of inspiration there for like different things that we do in Toolia Quest.
Like I think we approach the content in a slightly different way and we, in the game world is,
is a lot different, but code combat is really, is really cool.
Like I said before, I think the most important difference that you guys have out there is that
you write real code with a local editor and then you go to the game and you say, check it out.
So I'll give a real quick sense so people know the flow. Like I went through the Python part,
which we'll talk more about, but the first challenge or puzzle you have to solve is install Python 3 on
your system and set the path, right? So in the game, you actually say, here's the path to the
interpreter, executable. And then the next one is to create a folder and put a file in it. And
then after that, it's like, well, we know where Python is and all the files you create for the rest of
the game are in this folder. We can run them and we don't ever have to ask you again, but it's not like
there was a now go to the preferences and set the config settings where you select Python. No, it was like part of the
game. So it was fun to do that or, you know, relatively speaking.
Yeah. Yeah. I think like exposing it as a part of the, the narrative of the level was pretty important.
And I think like, yeah, that's probably going to be the main difference people, I hope, will notice in
TulioQuest is that we made a conscious decision to sort of separate the programming tasks that we would ask people to do
from like the gameplay aspects of like moving your character around and unlocking laser gates and all
of that other stuff. More because like where we want to make sure that like the technical skills that
we're teaching are very practical. I mean, there's, you know, several reasons for that. But in code
combat, one thing that you're sort of doing is you're learning how like this code combat world works and
working with this set of objects versus sort of equipping yourself with a skill set to write your own
Python code. Right. Yes. So I think like that's kind of what we're trying to do with the
technical content design in TulioQuest. Cool. Ryan, are you familiar with any of these or other
game like platforms you want to give a shout out to? I'm not familiar with any of these ones in
particular. The one that always comes to mind for me is there's like an online game called
Screeps where you sort of write like JavaScript, like little bots that automate a bunch of tasks.
And it's definitely much more about like, it's not necessarily focused on being educational,
I don't think. But it's a game that is powered by people writing code, which I still find is an
Screeps. Yeah. Yeah. Cool. How do you spell that?
S-C-R-E-E-P-S, I think.
Screeps. Okay. Yeah. Yeah. Yeah. Yeah. Cool. I'll put a link to that as well. Cool. That sounds
interesting. Yeah. So let's maybe talk for a minute about the missions that you all have available.
Then I want to dive into the Python one. Starts out with basic training. The only one, just so you know,
the only one I've experienced with is the mysteries of the Pythonic temple. So you'll have to just kind
of talk us through these, but what are some of the missions you got out there?
A big chunk of the missions in Twilio Quest teach you how to use various Twilio APIs. So Twilio,
for those that might not be familiar, we're an API company that provides communications APIs. So you
can use Twilio to send text messages, make voice calls, or create video conferencing, or send faxes,
all kinds of wild stuff. So a large chunk of the content in Twilio Quest is Twilio related,
because that's kind of where we started. The place that we're going is starting to use Twilio Quest as
a platform for general engineering education. So the Python mission, the Pythonic temple is one example
of that. But we also have a mission called the flame of open source, where you learn how to...
I love the name there, the flame of open source. Yeah, tell us about it.
Yeah, it's a fun one. So in that one, you actually go through this forest. And in the center of the
forest is this ancient artifact known as the flame of open source. And the way that you get to it
is by configuring Git on your local computer, and going through the process of actually submitting a
pull request on GitHub to a repository that we've set up on Twilio's GitHub as sort of like a way to
learn how to do your first pull request.
Yeah, that's cool. You don't have to do a real PR to a real project. You just have to do a simple
one to yours, right? That's more achievable.
Yeah, exactly. So you don't have to, you know, figure out how, how Flask works and submit a PR. But,
but yeah, so it just ends up being a good way to, you know, actually use GitHub to submit a pull
request. So you just kind of become familiar with that process. We also have a mission that teaches
JavaScript, where you're kind of navigating a lab like environment and doing basic JavaScript stuff.
we're actually kind of in the process of doing a big revamp, to make that a little more story based,
like the Python mission is. And then we also recently released a mission that's sort of a
companion for Advent of Code, which is another great resource that's out there that folks can use in the
month of December or anytime.
Is that like a problem a day or something like that?
Yep. It's a new problem every day in December. And they give you unique input that you can download
to your computer. And you could solve it with whatever tools you wanted. They don't actually
provide like a browser editor or anything like that. But in TwilioQuest, we provide a mission and,
you know, some, some tools and an integrated editor, where you can actually use JavaScript to solve the
problems in Advent of Code as well.
That's cool. Well, this episode is going to come out probably in January. So people might just want
to put a note on their calendar for 11 months later, that this is going to be totally relevant.
That'll just mean that they don't have to wait. They can just do all 25 days.
The Advent of February code.
This portion of Talk Python to Me is brought to you by Linode. Whether you're working on a personal
project or managing your enterprise's infrastructure, Linode has the pricing, support, and scale that you
need to take your project to the next level. With 11 data centers worldwide, including their newest data
center in Sydney, Australia, enterprise-grade hardware, S3-compatible storage, and the next-generation
network, Linode delivers the performance that you expect at a price that you don't.
Get started on Linode today with a $20 credit and you get access to native SSD storage, a 40-gigabit
network, industry-leading processors, their revamped cloud manager at cloud.linode.com,
root access to your server, along with their newest API and a Python CLI. Just visit talkpython.fm
slash Linode when creating a new Linode account, and you'll automatically get $20 credit for your
next project. Oh, and one last thing. They're hiring. Go to linode.com slash careers to find out
more. Let them know that we sent you. Yeah, so let's talk about this, the mysteries of the
Pythonic Temple. And all these are kind of fun. The little intro for this part is you get to follow
in the footsteps of the legendary explorer, Toledo van Possum. A hat tip to Geeta van Rossum, right?
Indeed.
As you uncover the mysteries of the Pythonic Temple, the last surviving structure of the ancient city of
Python, and you learn how to use the Python in programming language and other tools. And your reward is the
staff of Pythonic knowledge. Lovely.
Indeed it is. Yes.
Yeah. Did you see the one people have been carrying around at PyCon? I don't know if you were even
there, but the last couple of years, Anthony Shaw has got this 3D printed, it's probably, I don't know,
an inch thick and six feet tall and multiple, you know, Python colors. And Brian Okken had one,
and they're walking around these giant Python, it's got a giant Python symbol on the top. These
things are crazy.
Wait, what? So there's a little staff of Pythonic knowledge?
Oh yeah, let's see if I can find it.
I have no knowledge of this. This is fantastic. I need to figure this out immediately.
Oh man.
It's real.
Yeah. It's the, yeah, I'll put it, it's called the Pythonic staff of enlightenment. And yeah,
I'll put it in the show notes here. I'll put it in there right in the doc so you can see right now
as we're talking.
I can't believe it. That is so hilarious.
It is really cool.
We were not, oh my God. Yeah. So like, I'll just go down a little bit. You'll see this bad boy. Yeah.
You can order one. They're not totally cheap because there's a lot of power in that bad boy, but yeah.
Yeah. They even got Guido Van Rossum posing with that thing at one of the conferences. It was great.
That is pretty cool. Yeah. Now I feel like an idiot for not Googling this first, but that is.
No, I mean, yeah, like this is beautiful. I think it's actually the perfect reward for this.
So let me just like run people through the quick thing is, like I said at the beginning, you basically do this on your computer.
So what I did is I fired up PyCharm and created a folder. And the first, you know, it says you've got to go through
and collect all of the notes of Toledo, the Explorer to figure out what's going on and so on.
And they're all behind these locked lightning barrier type things, laser barriers.
And so you've got to go and solve the problems of each one. Like the first one is configure Python.
So the game can find it and make sure it's on the machine. The next one is, I like the names here.
Excuse me. The names are like the trial of salutation, which really is hello world.
Yeah, indeed.
You've got the, the trial of soliciting input, which is taking arguments, trial of naming, trial of numbers,
myriad of properties, word succession, iteration. So like the foundations of the Python language,
like the truth for the glory of Python, where you do if statements. And finally, the grand finale.
I won't give people the answer, but you have to do the trial of trickery, which is biz buzz.
Yep, indeed. So yeah, the entrance into the ancient city of Python was by no means guaranteed.
You had to earn your place as a citizen of the city. So, so yeah, as the player, you have to go
through the same citizenship trials that the ancient Pythonistas had to back in those days. So yeah,
it's pretty fun to build out for sure.
Yeah, that's super cool. And you're planning, you guys are planning more, right?
Yeah, yeah. We, so the, if you actually load up the mission, you'll see that a lot of the
Pythonic temple is, is currently collapsed. And you know, crews are working around the clock to sort of
unlock new areas of the temple. And in those areas, there'll be sort of similar puzzles around,
you know, learning how to use Flask and other libraries within Python and other more advanced
Python programming techniques like object oriented programming and creating modules and things of
that nature. Much of the current mission is kind of based on or teaching you basic Python syntax.
So yeah, over the next, you know, coming months, we'll have more areas of the temple that become
unlocked that you can explore and learn new stuff about Python.
Cool. And how do I get the update? So one of the things that is easy for websites is to be
updated without a whole lot of effort from the people. What have you guys done to update the
thing I downloaded? Or how do I get updates?
Yeah, so the thing that you downloaded is a launcher program. It's kind of like if you have used
Minecraft before, like if there's a new version of Minecraft, it sort of automatically downloads it
and unzips it and all that stuff. When you launch TwilioQuest, you see an interface that will
check for the newest version. If there's a new version, it'll download it. And then you can
choose to launch that new version if you would like.
Okay. Brian, do you want to talk a little bit about the internals about how this thing is built? We've
touched on some of the things like we touched a tiny bit on phaser and stuff, but maybe a little
bit deeper look?
Sure. Yeah, I could probably go on forever and get lost and confused because I'm sure I don't even know
all of the details. But the core of it, it all sort of starts with that launcher that Kevin mentioned.
We ship a version of Electron, which is sort of like shipping a small version of Chromium to each user
so that we can kind of control the environment that our TwilioQuest is running in, which is actually a nice
luxury compared to the web version where we have to worry about like, does this work on Safari and
Firefox and Opera and where else?
Did somebody actually seriously just visit it with IE? Did that actually just happen and they're
complaining about it? Things like that, right?
Yeah.
I think that we actually, that happens a lot because some of the training events and stuff, like we end
up working with people that are Windows developers that have like some IT restricted machine and like
that's a, there's a lot of complications around that world that we have to deal with. And so this helps
us restrict some of those variables. And then there's other variables that this introduces that make
it hard for us to control because now we're shipping a Windows application, the Mac application and a
Linux application. But that stuff all kind of wraps a relatively normal web page. Electron gives you
sort of some Node.js processes that you can use to interact with like the file system and to like
make network quests. And then we have a, another set of like a traditional web page basically where we
have React running and it kind of does all of the UI for TwilioQuest. So everything that pops up and
shows like Cedric is talking to you, one of our, our NPC mascots. That's all like React modals and,
and dialogue boxes. And then Phaser is sort of letting you walk around the world and interact
with stuff.
Okay. Yeah, that's cool. And for people who haven't built Electron JS apps, it's kind of like
you have the Node side of things and you have the browser side of things. You just have a,
I don't know if it's index or main, but HTML, I can't remember, but you just have like your
starter page and your starter JavaScript. And it's much like building a single page app as you would in
React or Vue or something like that. But then you could call down to Node and do machine level
stuff as well. Right.
And so that's where some of the weird stuff comes in where like, because we have the ability to,
we have sort of an integrated JavaScript IDE that you can use, or IDE is maybe generous,
but editor. And then that sort of spins up other electron processes, like render processes that run
your code sandbox so that Twilio Quest doesn't crash if your code loops forever or, or things like
that. So there's a lot of kind of wild problems that at least in my web development background,
I've never had to deal with before. So it's been an interesting challenge.
Yeah, for sure. And how, how long did it take you all to find out that somebody might write code
that's an infinite loop?
Yeah.
I mean, another process because it's hung up and I don't, they keep saying there's a buck in the app,
but what is, it seems fine to me. I don't know.
Yeah, no, there's definitely been a lot of like zombie process hunting that has happened over the
years. But yeah, we, we hit that relatively quickly and there's still a couple of corner cases that where
things can get gnarly with the code editor, but, but yeah, it's, it's been fun. Like it's just,
it's a different set of challenges when you're operating on the desktop. When we kind of considered the
trade-offs, we knew we wanted to write content that could teach any kind of technical skill,
like whether it was like Git or Python or Rust or MongoDB or whatever it would happen to be.
We wanted to be able to have like really granular validation and, you know, tight system integration
for all of that stuff. And we being only one of me for a long time, and then Ryan joined up and has
just been a superstar for several months now. But with a relatively small team, the prospect of like
building a cloud-based environment that could support all these different technologies was daunting.
So we opted to go with solving problems on the client side versus trying to create this
virtualization infrastructure to do all the stuff that we wanted to do.
Yeah. There's a lot of challenges to make that happen, set up the right config and
right. Like if you're doing something that's got a server side process, like you mentioned MongoDB,
then you've got to have a system, but you don't want them to abuse it or other people to see it.
It gets really complicated. The security leaks or, you know, Docker or VM escape bugs that who knows
even exists, right? You don't want to be part of that. So if it runs on the machine with their local
Python or their local JavaScript or node or whatever, the worst thing is to attack themselves, right?
Exactly. They are welcome to pwn their own computers if they would like. In fact, that means they've already won.
They've already become a developer. So good job.
Exactly. Well done. Well done. It worked on your machine until it didn't.
Like I'm going to send this like launch sub process, RM-RF, you know, pseudo against their root directory.
Boom. Like, oh, wait, why is it rebooting?
Yeah. I like to joke that one of our final missions will be hacking Twilio Quest itself,
making your own.
Yeah. Nice. Well, speaking of hacking Twilio Quest, you know, you have these cool missions.
What is the possibility of customizing missions or creating new missions? Could they, can that be done?
Can people submit them to you? Would you include them? Like, what's the story around that? Like,
could you crowdsource some of that? Yeah.
Give you involved?
Yeah, no, it's funny you should ask. We were actually just sort of scheming just this very
week here in December about how we could make that possible. Because we've actually have made
quite a bit of investment for like content authoring tools that we use.
Right. Yeah. I was wondering, do you guys have like level builders and other types of things to
help facilitate this and like for music and so on?
Yeah. I mean, it's more like we built a lot of the plumbing around tools. So like the primary level
editor we use is a program called Tiled or Tiled. It's just map editor.org. That's a very popular
open source tool that, you know, you can use to build maps.
Oh, yeah. Yeah. Yeah. Yeah.
So we use that and that exports a JSON file that we that we process and use in the in the game. And then we've just built a lot of scripting and like command line tools for, you know, writing content and markdown and validation code and JavaScript to make sure that people have completed the missions, you know, to specification.
So yeah, so we're not there yet. But we hope that in the not too distant future and next year, certainly we'll just be able to let people use the same tools that we use to contribute content to Twilio Quest as well.
Yeah. That sounds really neat. And if you had the ability to create your own custom event that people could be part of, create your own custom levels that people could submit back. I could see a really cool little ecosystem build up around it.
Yeah. I mean, I've definitely taken a lot of inspiration from Minecraft for a lot of the different parts of the UX and like the the modding community around Minecraft is one of the things that's, you know, fostered a lot of creativity in that community.
So we definitely want to provide the same kinds of opportunities if folks are interested for Twilio Quest.
Yeah. As we've worked on this project, we've learned the limitations of being two humans.
So the more we can bring more more folks in to contribute their knowledge and and train everyone, the better it's going to be for everyone involved, where more people can learn more things from different folks.
And we really just think that there's an opportunity to kind of help Twilio Quest transcend beyond what just Kevin and I could accomplish on our own.
Yeah, for sure. I could see tons of folks who are really passionate about their project, whether that's somebody creating a David Lord running Flask or somebody creating a new web framework or a new language or whatever.
And they're like, I would really love to have a more engaging way to have a tutorial rather than just follow these steps and read the docs.
Read the docs is great, but it's not the same as a game. Right.
And so there's a lot of people who want to get visibility or more interest in their projects.
You could end up with all sorts of things like the phaser people could come along and say, you know what, we want to have a little game to build games, right?
Very meta or something like that. It seems like it would be a good opportunity.
Yeah, totally. And I think like that's the like the power that you'd get from going that route is what we've sort of discovered almost by accident,
which is that just by putting tutorial content in a game form where you provide like an actual literal path forward.
So people tend to consume or to get much further in a tutorial or in any kind of learning process when they can see where the path leads and like have some kind of incentive to keep moving on.
So like when we move from the web, which was kind of a little bit like the I can't remember what the PyBytes code challenges I think you mentioned.
The previous web version of Twilio Quest was very similar where we kind of presented in a text based format.
Here are the different objectives that you could complete just by taking content that was very similar and kind of putting it in a map that you could explore.
We very quickly saw developers consuming twice as much or even more content on average than what we were seeing in the version previous.
So there's a lot of power to structuring technical content and learning in this way for sure.
How do you feel about like professional developers versus beginners?
You know, there's been a lot of success with IOT things with young kids.
I'm thinking middle school age and whatnot, especially people who would are not necessarily drawn to pure game play game development.
Right. Like the UK did this thing with the BBC micro bit and micro Python and they found the number of young girls interested in programming and computer science massively increased after they had a course with the BBC micro bit rather than just, hey, we're going to have a programming course or a game club or something like that.
I think like we've definitely seen Twilio Quest do well, like in a very diverse range of audiences, like across gender and age and various other vectors.
We've seen in a professional setting, there's a manager whose company uses Twilio for various things.
And he actually has everybody, all new developers when they onboard will actually install Twilio Quest and just kind of play around and learn JavaScript because some of them, you know, don't learn, haven't done JavaScript before.
Yeah, that's one of the missions, right?
Yes, that is.
And so it's like part of their, you know, new engineer onboarding.
And it's just kind of a fun way to get people up to speed.
I wonder what their reaction is.
You know, they're like, what kind of cool company have I joined where my first day is to go play a game?
I can't believe it.
Yeah, yeah.
So, I mean, that's definitely what we're trying to foster.
But, you know, not everybody is so lucky.
There are some people who might, you know, fear getting in trouble for playing a game at work, maybe.
So another thing that we're working on in the first part of the year is exposing a lot of the content in Twilio Quest through a like a command line interface.
So if you are, for whatever reason, just really not about the game interface, we still want to try to provide some of the same learning opportunities too.
Sure, sure.
We chose the CLI just because we still feel that it's really valuable to have the dynamic interaction with the validators that we've written on your local machine versus deploying it just plain deploying the content on the web.
Because then you get interactive feedback where if any stage along your process, you can figure out like we're able to tell you like, oh, that file path is wrong or your username is slightly case.
The casing is incorrect.
Like we would just be about ability.
We have to help you and we're still on your computer.
Yeah, no, that makes a lot of sense.
There's probably some sort of implicit getting comfortable with this being in the command line, knowing where a lot of people don't even when they're not quite programmers don't even know how to get to their terminal app or command prompt these days because those are quite hidden on both Windows and macOS.
Yeah, certainly.
Yeah, not bad.
So a lot of this stuff is very interesting.
A couple of other resources, I guess.
You guys threw out there, Tiled from MapEditor.org and Phaser.
Those are cool.
Are you familiar with Kenny.nl?
K-E-N-N-E-Y.nl?
Oh, of course.
I think anybody who is developing game projects and has no dollars with which to do it has probably encountered like all the awesome assets that are out there for sure.
Yeah.
So you get a bunch of little map tiles and sprites and stuff.
Yeah.
It seems like a really cool place.
People are wanting to build their own levels at some point in the future if that's possible or like play with Phaser or other game like Pi game or arcade.
Yeah, there's lots of great resources there.
Also like OpenGameArt.org.
If you are kind of hurting for assets for music or graphics or that sort of thing, there's a lot of like creative commons or public domain licensed content up there you can use as well.
Yeah, super.
And not necessarily something that people could take, but it is interesting that you have it as a separate thing people can get is the original soundtrack to Twilio Quest available on SoundCloud.
Yeah, absolutely.
Yeah, we worked with some of our favorite indie chiptune artists and yeah, the original soundtrack I really love.
I like how it turned out and it'll power a lot more experiences in the game as we go.
But yeah, definitely check it out from SoundCloud.
We're also going to try to make it a little easier to download and get a hold of in other formats as well.
But yeah, super fun.
Super cool.
And I saw it and as you said, it reminded you a tiny bit of the early MechWarrior soundtrack, which I take as high praise because I also enjoy the early MechWarrior games.
The early MechWarrior games were really special.
I'm talking like 1995 to a little bit after that.
Yeah.
Maybe you played it on Opinium 90 or something like that.
Those, the music was good.
It was just, those were cool times when games were kind of like, you would experience like, wow, I cannot believe it is this immersive and this real.
And that music was really, I think a big part of it actually.
That and the fog.
Yeah.
That was kind of like the golden era of like simulation style games because like X-Wing and TIE Fighter were out there as well, which were fantastic.
But yeah, no, just the, the fact that you kind of had like, it felt like you were piloting like a big lumbering Colossus.
Fantastic games.
I mean, definitely did play on a little Penny of 90 machine that I figured out how to work.
Nice.
How about you, Ryan?
Did you play those games?
I'm not familiar with MechWarrior.
I missed out on that.
The X-Wing games I do remember though.
Yeah.
Very nice.
The very early, like them and then the other LucasArts, like, I don't know what they were even called at this point, but those adventure sort of LucasArts games are really fun too.
Yeah, they were.
Ryan's like the Spider-Man of our crew.
He's like, you remember that really old movie, Empire Strikes Back?
So you can tell us about those types of lines.
That's awesome.
Yeah.
I think it's a classic.
I remember.
Yeah.
That's awesome.
Cool.
Well, it's probably a good place to leave it, but congratulations on this project, you guys.
I know you've been at it for, what is that?
Six years.
Overnight success just took six years, but it seems like it's really making a lot of progress and it's unique.
And I think that's neat.
Yeah.
It's been super fun to work on.
It's definitely, it's very literally a dream come true for me.
Like I've wanted to work on games forever and now, you know, have a chance to do it and educate people at the same time.
So it's been, it's been fantastic.
Yeah.
I agree.
It's an amazing opportunity that I feel really fortunate to be here for this sort of bizarre intersection between video games and education is sort of, you've mentioned some other places that I'm going to have to check out later, some other sites and stuff.
But this is the first time I've had any opportunity to do anything like this.
And it's super cool.
Yeah.
It seems really great.
I'm sure you have a lot of fun all day working on these things, except when you have those weird bugs that drive you crazy.
Because bugs in games can be super hard sometimes.
It's really hard to reproduce them.
Yeah.
I used to work on 3D simulators.
I'm like, why can I not see the thing?
And it was like, well, we were rendering it counterclockwise instead of clockwise.
Or so it was invisible.
It was getting cold.
It's like, oh my gosh.
Yeah.
Fortunately, we have fewer of those issues because that's one of the benefits of Phaser is that it handles some WebGL stuff for us.
Yeah.
Beautiful.
Perfectly.
All right.
So before we get out of here, let me ask you the final two questions.
And given that a lot of this is JavaScript stuff, feel free to give either a Python or JavaScript answer.
So if you're going to write some code, what editor do you use?
Ryan first.
I'm a VS Code person.
That's the only one I have installed these days.
Oh, that's a big commitment to just have one editor installed.
I mean, it's one thing to use one editor.
It's another to have just one at all.
Yeah.
That's all I got left.
Nice.
Kevin.
Yeah.
I've used a few over the years, but I've also recently pushed in my chips on Visual Studio Code.
The ecosystem around it has been pretty, pretty cool.
So that's my weapon of choice these days, for sure.
That's cool.
And it probably doesn't hurt that you're both on the same team using the same editor.
Yes.
It is convenient.
Yeah.
And then normally I'd ask a notable PyPI package.
So if you got one, go ahead and give it.
But if you have like an NPM one, that's also acceptable.
So a notable library that you can use to build fun stuff like this.
Yeah.
I think if folks do have any interest in web game development, I think Phaser is definitely
the one to take away from this episode.
We support the project through Patreon.
Rich does a great job with the framework.
So definitely go check it out.
Like Phaser 3 and the upcoming Phaser 4, which he's sort of rebuilding from the ground up with
TypeScript and all kinds of other great stuff.
Yeah.
If you're at all interested in getting into web games, Phaser is the one to check out.
Cool.
Ryan, you got a recommendation?
Definitely.
Yeah.
I mean, I can give a shout out for Pygame too, actually.
Python audience, right?
Pygame is actually the first.
That's the first place I ever successfully shipped any sort of game project.
So I can endorse that for sure.
It gives you a similar great API.
It gets a little harder to deploy the game.
Phaser does have the benefit of running on any old web page, but you can still make something
really cool on a local project with Pygame.
Right.
It's a lot of fun.
That's awesome.
And you bundle something like PyInstaller.
You can probably deploy it, but you're right.
A little bit of HTML and JavaScript is definitely easier to deploy.
Yeah.
Absolutely.
All right, guys.
Well, this was really fun.
People are excited.
Maybe they want to go try it out or look into seeing how they can take more advantage
of these kinds of things.
What do you say to them?
Final call to action?
I would definitely recommend heading out to Twilio.com slash quest where you can download
the game.
It's most recent iteration.
And yeah, there's also a mailing list that you can sign up for at Twilio.com slash quest.
We reach out on that mailing list, either Ryan and I do or I do, a couple times a month.
And when we release new stuff, especially as we release new Python content, that would
be the best way to keep on top of when that's out.
Sounds good.
Ryan, anything you want to add on the way out the door?
No, that's it.
Twilio.com slash quest.
Go check it out.
Super.
I'll put all the links in the show notes.
You guys, this is a lot of fun to explore and think about these ideas and play the game
a bit.
Thanks for being here.
Yeah, no problem.
Thanks for having us.
This was a lot of fun.
Yep.
You bet.
Bye.
This has been another episode of Talk Python to Me.
Our guests on this episode were Kevin Winery and Ryan Kubik, and it's been sponsored by Datadog
and Linode.
Datadog gives you visibility into the whole system running your code.
Visit talkpython.fm/datadog and see what you've been missing.
They'll throw in a free t-shirt.
Start your next Python project on Linode's state-of-the-art cloud service.
Just visit talkpython.fm/linode, L-I-N-O-D-E.
You'll automatically get a $20 credit when you create a new account.
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.
I'll see you next time.