#100: Python past, present, and future with Guido van Rossum Transcript
00:00 Welcome to a very special episode. This is the 100th episode of Talk Python to Me.
00:05 It's the perfect chance to take a moment and look at where we've come from and where we're going.
00:10 Not just with regard to this podcast, but for Python in general. And who better to do this with
00:15 than Python's inventor himself, Guido Van Rossum. In this episode, we discuss how Guido got into
00:21 programming, where Python came from and why, and Python's bright future with Python 3. This is
00:27 Talk Python to Me, episode 100, recorded January 18th, 2017.
00:55 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem,
01:01 and the personalities. This is your host, Michael Kennedy. Follow me on Twitter, where I'm at,
01:06 mkennedy. Keep up with the show and listen to past episodes at talkpython.fm. And follow the
01:11 show on Twitter via at Talk Python. This episode is brought to you by Rollbar and Hired. Thank them
01:18 both for supporting the show. Check them out at Rollbar and at Hired underscore HQ on Twitter and
01:26 tell them thank you. Hey, everyone. I just want to take a moment and reflect on this milestone of 100
01:33 episodes and say a big thank you to everyone out there who's listening. The reason this podcast is
01:39 successful, the reason I've kept doing it, is because so many of you tell me that you appreciate what I'm
01:44 doing, that you enjoy all the guests that I have on the show. So I want to say thank you because
01:49 without you, obviously, I would not have 100 episodes. I get to live basically my dream job.
01:55 I talk to all these brilliant people in the tech industry and I get to share it with you and get
02:00 all the great feedback that so many of you give me. So thanks. And we really have a special guest
02:06 guest this episode with Guido and a look at Python over the years, the past, present and future. And I
02:13 really hope you enjoy that. If you're out there thinking, hey, I really love the show and I'd like
02:16 to support it. There's a couple of things you can do that are really easy. One, if you give us a review
02:22 on iTunes, that actually makes a big difference how we rank within iTunes. So that's kind of like Google
02:27 rank for podcasts. That would be great. If you want to do more than that, one of the really great ways to
02:33 support me and what I'm doing would actually be to buy one of my classes or recommend my training
02:38 content to your employer or your team at work. If you're into that, check that out at training.talkpython.fm.
02:44 And there's even a little Patreon link if you just want to give a dollar or two a week. So thank you
02:50 everybody for making this possible. Thank you for helping me reach 100 episodes and been great to share
02:56 them with you. And I hope you've really enjoyed them yourself. All right. With all that said, here's Guido.
03:03 Guido, welcome to Talk Python. Glad to be here, Michael. I'm honored that you're coming on my
03:07 100th show to celebrate this special episode. And I know everyone in the community is really going to
03:13 appreciate this look at the history and the present and future of Python with you. Well, let's have it.
03:19 All right. Absolutely. So we're going to dig into a whole bunch of things about Python. But before we
03:24 get there, let's start with your story. How'd you get into programming in the first place?
03:27 Well, that was a long time ago. In high school, I did not know what a computer was. I believe I had
03:33 not even ever heard of the word. I was an electronics hobbyist, though. And I got started, I think,
03:40 around the age of 10, building very simple analog circuits, things like a little radio receiver that
03:47 made from a kit. And I gradually discovered simple digital electronics and integrated circuits were
03:55 becoming available to hobbyists like me, even with my very small amount of pocket money.
04:02 And that's where I was when I graduated from high school. Then I went to university to study
04:07 mathematics, the University of Amsterdam. And it was like a completely different world. They had a
04:13 mainframe in the basement, and there were programming classes. And the languages that I remember were
04:18 Algal 60 and Pascal. And I was basically instantly hooked, even though the first year I remember the
04:25 only way I could input programs to the computer was through punch cards.
04:30 Yeah. If you start programming, basically via hardware, and then you have this machine that
04:35 you can just feed anything, the whole world opens up, right? Even if it's punch cards, it's like it can
04:39 do anything I ask it to do almost, right?
04:41 I was so happy that I didn't have to sort of solder stuff together anymore.
04:46 That's right.
04:48 Because that was always my weak point.
04:50 Oh, it's such a difference. So you got started really in the early days, and when the term hacker
04:56 meant something entirely different, right?
04:58 I don't think I knew the word hacker. That was like decades later that people
05:03 told me I had been a hacker.
05:05 Oh, I didn't know. How interesting. Okay, excellent. And then you got into,
05:11 you started working on programming languages. How'd you go from playing with mainframes and
05:16 punch cards to working on things like ABC and stuff?
05:19 Well, I guess I developed an interest in learning different programming languages. That probably
05:24 started out when my first year there were two different languages being taught, I think,
05:30 Algol and Pascal. And then I hung out with a bunch of physics students and their favorite language was
05:38 Fortran. So right from the start, there was this discussion about Algol, no Fortran, no Algol,
05:45 Pascal. And somehow that interested me. I always stayed on the Algol and Pascal side, actually.
05:52 I was told that when I was in college that Fortran was the most important language I'd ever learned in
05:57 my career and I should just focus on that. And I was pleading to take some C and C++. I'm like,
06:02 can I do where the, nope, Fortran is where you got to start. You can do those as an elective afterwards.
06:07 Oh gosh, yeah. Well, it wasn't, in our university, it was more like a split between the math department and the physics department.
06:15 The natural sciences were using Fortran because they were sort of processing measurements and math people were more interested in sort of pure computer science.
06:25 Yeah, very interesting. Yeah.
06:26 The professors actually sort of crossed that bridge. So later, I actually, I encountered the author of ABC,
06:35 Lombard Meartens. I encountered him in my personal life, sort of an extracurricular activity where I was helping some volunteer group doing programming.
06:45 And he was also helping that same group. He was something higher in the organization.
06:50 And he realized that I was a good programmer and had interest in programming languages and their design and implementation and had some,
06:59 some interesting skills there. And when I was about to graduate, he just offered me a job.
07:06 And that was that.
07:07 That's fantastic, right? You're probably thinking, how am I going to find a job? What am I going to apply? What am I going to do? Oh, it just landed in my lab. How wonderful.
07:15 And then I learned really what the job of a language designer and implementer is. And I didn't get to design any part of ABC.
07:25 I got to discuss it with Lambert and other team members endlessly. But basically, the design was already complete when I joined the team.
07:34 And all they needed was someone who would implement it. But by fighting every aspect of the language that I didn't understand,
07:42 I prompted Lambert and others to explain what their reasoning process in the language design phase was.
07:51 And that helped me learn how to be a language designer.
07:55 Yeah, I'm sure it did, because they designed it more or less in the abstract, right?
07:59 And they said, all right, now it's time for a rubber to hit the road. And you'd actually make this thing work that we've specced out, right?
08:06 Yeah, much like that.
08:07 Yeah. And how much of that experience do you feel like made it possible for you to actually create Python?
08:12 Like, to me, thinking of I'm going to create a language, I'm going to create the CPython implementation and the standard library and all that.
08:18 It's very daunting and a very big challenge.
08:20 But do you feel like you kind of got a first round practice at it, doing this thing at ABC?
08:26 Absolutely. Without having been on the ABC team for four years, I would never have been able to do that.
08:34 I wouldn't have felt comfortable. I wouldn't have known how to.
08:38 I wouldn't have known enough about language implementations.
08:43 I mean, Python really is sort of the next version of ABC with all the things that were great about ABC retained and all the things I thought were not so successful in ABC removed.
08:58 And a very small number of my own ideas replacing them.
09:02 I see. So Python was sort of your, let me do this now knowing what I know, let me make a better version of something similar to this.
09:10 Correct. Yeah, that's exactly what I was really thinking.
09:14 And I sort of, I managed to present it to management in a slightly more objective fashion.
09:20 How do you pitch it?
09:23 Well, part of it was that management was not very closely involved in my day-to-day activities.
09:30 There was a certain amount of software that had to be written.
09:32 And however it was written was great, as long as we had sort of the running applications to prove it at the end.
09:41 I was more or less at liberty to invent a different strategy for sort of eventually building that software faster.
09:51 That's fantastic. And that's some of the origins of Python.
09:54 What happened to ABC? It's not around.
09:56 And Python is one of the most popular programming languages in the world.
10:00 Like, why did those things take different paths?
10:02 I've written about this in my old Python history blogs a few times.
10:06 The ABC project actually four years into it, at least for me four years into it, was canceled by upper management at CWI.
10:16 The reason being that there was no observable sort of user uptake.
10:24 There were very few people interested in the language.
10:28 There were even fewer people who are actually using it.
10:32 And the team just couldn't move that needle.
10:36 And part of that was that this was well before the Internet.
10:41 And there was a little bit of Usenet.
10:43 But it was difficult to distribute a language implementation and get people to use it.
10:50 Right. There's no GitHub.
10:52 There's not even SourceForge, right?
10:54 There's no web.
10:55 There's so many of the pieces that make these work.
11:00 It's worse than that, even.
11:01 There was no electronic way to distribute the source code at all when we got started.
11:07 I remember taking a long vacation to the United States with a nine-track computer tape in my luggage.
11:17 And taking that tape to two or three different places in the U.S.
11:22 where there were people interested in using ABC so that they could load that tape onto their computer and get the sources.
11:31 Because the amount of source code was larger than you could possibly send as an email.
11:35 And I think attachments hadn't been invented yet or were still limited in size.
11:40 Yeah, you have to, like, base 64 and code it.
11:43 Just put it as text or something, right?
11:44 I'm going to send you a thousand emails numbered 1, 2, 3, 4.
11:47 Yeah.
11:49 Even the first Python distribution had to suffer through some of that.
11:53 But by then, in 91, it was about 20 compressed maximum-sized messages to some Usenet source code group.
12:03 Yeah, Usenet was just starting to become popular.
12:05 And the internet was starting to be a thing.
12:08 But web browsers didn't really come out until, like, 93, 94.
12:12 So it was quite early days in 91.
12:14 Mm-hmm.
12:16 Talk Python to Me is partially supported by our training courses.
12:19 How does your team keep their Python skills sharp?
12:23 How do you make sure new hires get started fast and learn the Pythonic way?
12:26 If the answer is a series of boring videos that don't inspire, or a subscription service you pay way too much for and use way too little, listen up.
12:35 At Talk Python Training, we have enterprise tiers for all of our courses.
12:39 Get just the one course you need for your team with full reporting and monitoring.
12:44 Or ditch that unused subscription for our course bundles, which include all the courses and you pay about the same price as a subscription.
12:50 Once.
12:52 For details, visit training. talkpython.fm/business or just email sales at talkpython.fm.
12:59 Did you envision Python being open source from the beginning?
13:03 What was your thinking around that?
13:06 I would say yes.
13:07 ABC actually, in the sense that the concept even existed, was meant to be open source.
13:13 We were not interested in selling it.
13:17 We were just interested in promoting the language.
13:19 If the words open source had existed in the early 80s, we would have said ABC is open source.
13:27 As it was, I don't think we had even realized that there was some kind of need of a license.
13:32 Right.
13:33 That's amazing.
13:33 Just the nomenclature didn't even exist to describe.
13:36 Yeah.
13:36 You had to use words in a description.
13:38 This is a thing we're giving away.
13:40 You don't have to...
13:41 So on, right?
13:41 By the time I started on Python, there were a few models that were pretty solid.
13:47 I remember, I think the big model that I just copied almost literally was the MIT license
13:55 that went on X Windows.
13:58 Now, you're not supposed to call it X Windows.
14:00 It was X11.
14:02 But that was a big, essentially open source piece of free software that was very sort of
14:09 intentionally open source because the authors wanted to unify windowing software across different
14:16 hardware platforms.
14:18 There were all these different flavors.
14:19 How do you write apps that run on all of them and things like that?
14:22 That was a big problem, huh?
14:23 Exactly.
14:24 Okay.
14:24 So how do you think having Python open source has helped or maybe even hindered Python over
14:31 the years?
14:32 Oh, it's only helped.
14:33 I mean, if it hadn't been open source, people would not have been interested in picking it
14:40 up because it's one thing to download an application that's not free software, that's not open source
14:46 and use it to process some of your data.
14:49 But it's quite different to start writing your own software using a language that hasn't proven
14:58 itself yet.
14:59 Right.
15:00 So if maybe you're willing to pay for one of the top three most, the tooling and whatnot
15:05 for the top three most popular languages, because you know that's kind of where a lot of the
15:09 momentum is.
15:10 But in order to break into that space, being open and free really allowed you to wedge yourself
15:17 in there, right?
15:18 And it was also the model that some languages that I felt I was competing with most directly,
15:24 like Perl and Tickle TK, those were also open source.
15:28 I do not recall any names.
15:29 I do not recall any names, but I recall there were several similar level scripting languages
15:35 being designed and distributed at the time that were not open source and very intentionally
15:42 so, where there was someone who had a brilliant idea for making a better scripting language.
15:47 And for all intents and purposes, their language probably was better than what was available.
15:52 But their model for funding their work was sell copies of the interpreter.
16:00 And that just never worked.
16:02 Yeah.
16:02 In those early days, it was still not entirely clear what business models would work for the
16:07 developer community and what wouldn't.
16:09 People were really experimenting.
16:10 And I'm sure some things were lost because bad choices were made.
16:14 But I'm really glad Python is still going strong.
16:17 Did you ever imagine back in 1991 that open source and Python would be where they are today?
16:25 I, in general, suffer from a terrible lack of imagination and vision.
16:30 So at no point in Python's history have I ever adequately predicted where Python would be
16:38 five years from there.
16:40 So no, I had never thought that this would happen this particular way.
16:44 To me as well, it's just amazing.
16:46 Just even over the last five years, the way things have changed is so amazing.
16:51 GitHub has come into existence.
16:54 We're seeing companies that used to be fiercely proprietary become much more embracing of
17:00 open source.
17:01 I recently saw the CEO of the Linux Foundation or the head of the Linux Foundation standing
17:07 next to Satya Nadella at a Microsoft conference saying they love each other.
17:12 Yeah.
17:12 This is a different place than we were a while ago.
17:16 I think it's great for everyone, though.
17:18 I think it's a very, very positive path forward.
17:20 I'm very happy with how this all has turned out.
17:23 I'm hopeful that a lot of technology will continue to be open source.
17:28 Yeah, I think it will.
17:29 And I think it's great to see companies taking open source and building business models alongside
17:35 of it that are sustainable.
17:36 Companies like Continuum or Scraping Web or these guys that have a great popular open source
17:43 project and somehow they're adding value on top of it, but they're not abandoning open source.
17:49 Without open source, you have to do all the work yourself as the company that owns it.
17:55 And now, maybe if you're a large company like Google or IBM or Microsoft or Apple, you don't mind because you have tons of developers.
18:03 But for anyone who is smaller, the value of a community is so tremendous because you sort of, you will still be able to make money on a variety of consulting and support projects.
18:19 So that's how open source developers support themselves generally.
18:23 I'm actually an exception.
18:24 I'm just employed by some large software developer that uses a lot of Python.
18:29 That's been my personal model.
18:32 But yeah, companies like Continuum or Canonical.
18:35 Canonical.
18:36 Everything they produce is open source, but they make a lot of money through handholding of customers who don't want to sort of hire their own software developers.
18:51 That's a model that works for many types of open source software.
18:56 I think it's great to see people being successful in that model and experimenting with other ones as well.
19:02 Let's talk a little bit about language design and trade-offs.
19:05 Sure.
19:05 Python has been growing in popularity pretty dramatically over the last 5, 10 years.
19:12 It had been around for 15 years before.
19:14 And it seems like not only is it still relevant and popular, but that popularity and relevance is growing.
19:20 And I think part of that is expanding into different areas, like the adoption of Python in the data science space, I think, has brought many new people to the Python ecosystem where Python is their primary language now.
19:33 How do you trade off sort of serving these different environments or these different ecosystems?
19:38 Somebody wants in a language as a data scientist might be very different than what somebody wants as a web developer.
19:43 On the language design side, I don't usually take applications into account that much.
19:51 I've seen some language designs where people proudly announced, well, in our language, a URL is a standard data structure that is built into the compiler.
20:03 They say that as if that's a good thing.
20:06 And all it buys you is that you can leave out some string quotes.
20:09 And internally, it usually is still a string.
20:11 Right, exactly.
20:12 It's a gimmick.
20:13 And Python has always presented itself as a general purpose language.
20:18 And you can do many things in Python.
20:20 And I didn't design Python for web development, obviously, because the language is older than the concept of web development.
20:28 And ditto for data science.
20:32 And for web development, it turns out enough people from different backgrounds are interested in doing simple web development using Python that we ended up with a bunch of stuff in the standard library.
20:48 But still, often the most successful APIs for even for web development are actually third-party packages.
20:58 And what the standard library provides is more low-level than that.
21:03 Like the standard library has to provide things like sockets.
21:07 And in fact, one funny story is that I think in the first year that Python existed, before we made it open source, actually, I was teaching myself how sockets worked.
21:19 Because sockets were sort of a new thing in our environment at that point.
21:25 We had a bunch of Unix machines.
21:27 And I had never really known how the networking on those machines worked before.
21:32 And then some colleagues started writing little C programs that used sockets.
21:37 And it was so cool.
21:38 And the programs always crashed because they didn't do the right error checking.
21:42 And I wanted to know what those sockets were about.
21:45 And my way of teaching myself was, oh, I'll write a Python extension that wraps the socket API.
21:53 And so I just read the man pages and say, okay, well, there is like the socket call and the bind call and the listen call.
22:01 And I wrapped each of those in as low-level an extension as possible with proper error checking.
22:08 Because Python has always had this philosophy, if something goes wrong, you get an exception.
22:12 And then I started combining those calls in sort of random combinations and figuring out what errors I would get when and what forms of simple programs actually worked.
22:26 And that's how Python socket module came into existence.
22:30 And later, once the worldwide web started being promoted, I joined a variety of mailing lists around that.
22:38 And started writing my own little web servers and started writing my own little web servers and clients.
22:42 And eventually that turned into URL app.
22:45 But what people actually use for web stuff is third-party frameworks like Twisted or for web serving, pure web serving.
22:55 It's like Django or Flask.
22:58 For web clients, it's requests.
23:02 And so the standard library doesn't even contribute that much beyond the sort of the low-level sockets.
23:08 Sure.
23:09 So I totally agree that it's the packages that have absolutely made Python successful.
23:15 I mean, just looking on PyPI.org right now, we've got 96,000 plus packages.
23:23 And that's really a testament to how amazing the whole ecosystem and community is, right?
23:30 How do you decide when something should be in the standard library or something should be an external package?
23:37 And have these ever moved in or out?
23:40 Yeah, I have to admit that the standard library is still fairly uneven.
23:45 Because long ago, say 15 years ago, I had much less of a filter about what things would be good standard library modules.
23:54 I had very strong backwards compatibility requirements.
23:58 Like once a module is in the standard library, it can sort of grow, but it can't just change in an incompatible way.
24:06 Or at least that's a major project with deprecations and all that.
24:10 But I didn't have much of a bar for including stuff in the standard library.
24:16 And that started out with various hobby projects that I wrote myself and played with for two months in 1991 or so.
24:24 That were still in the Python 2 standard library around 2010.
24:29 Many of those things finally got ripped out for Python 3.
24:34 But of course, Python 2 is still there.
24:37 More recently, sort of, as Python matured and became more popular.
24:41 And from my perspective, it's just sort of been steady exponential growth.
24:45 So I can't tell you whether it was 5 or 10 or 20 years ago that Python suddenly started becoming popular.
24:52 So the current rules for inclusion in the standard library is a combination of something that is useful for multiple application areas.
25:04 A new API for web development will not make it into the standard library just because that's one area.
25:12 It has to be something that's useful for a wide variety of applications.
25:16 It doesn't necessarily have to be all applications.
25:19 But something like, well, sockets are obviously something that is useful across the board.
25:24 Right.
25:25 Many things in the standard library that really belong there also have to do with sort of the language itself.
25:32 Like introspection tools, partial functions, those kind of things are good standard library things.
25:39 The disk module.
25:40 For example, yeah.
25:41 Yeah.
25:41 Things that are bad for inclusion in the standard library is usually almost any piece of code that is under active development.
25:52 Because Python only issues a sort of feature release every 18 months or more.
25:59 And that's just a really slow pace and you can't even get people to upgrade quickly.
26:05 So if someone has a new idea for, let's take an example.
26:11 We have async.io, which is in the standard library, but it doesn't have a built-in web framework.
26:19 Well, why is there no async.io based web framework in the standard library?
26:23 Because the async.io based web framework that exists is under very active development and constantly changes and not always incompatible ways.
26:36 And so people would just be much worse off being stuck with whatever was the async.io based web framework around Python 3.5.
26:46 You would actually hinder it by putting it in Python, right?
26:50 Exactly.
26:51 You would force it to freeze its API so that could never change in a breaking way.
26:55 And it couldn't release more than every 18 months.
26:59 And probably some third-party package would come along, mimic that, but iterate faster and be better anyway.
27:05 Yeah.
27:05 Okay.
27:06 Okay.
27:06 This portion of Talk Python to me has been brought to you by Rollbar.
27:23 One of the frustrating things about being a developer is dealing with errors.
27:27 Ah.
27:27 Relying on users to report errors, digging through log files trying to debug issues, or a million alerts just flooding your inbox and ruining your day.
27:35 With Rollbar's full-stack error monitoring, you'll get the context, insights, and control that you need to find and fix bugs faster.
27:43 It's easy to install.
27:44 You can start tracking production errors and deployments in eight minutes or even less.
27:48 Rollbar works with all the major languages and frameworks, including the Python ones, such as Django, Flask, Pyramid, as well as Ruby, JavaScript, Node, iOS, and Android.
27:58 You can integrate Rollbar into your existing workflow, send error alerts to Slack or HipChat, or even automatically create issues in Jira, Pivotal Tracker, and a whole bunch more.
28:07 Rollbar has put together a special offer for Talk Python to me listeners.
28:10 Visit rollbar.com slash Talk Python to me, sign up, and get the bootstrap plan free for 90 days.
28:16 That's 300,000 errors tracked all for free.
28:19 But hey, just between you and me, I really hope you don't encounter that many errors.
28:23 Loved by developers at awesome companies like Heroku, Twilio, Kayak, Instacart, Zendesk, Twitch, and more.
28:28 Give Rollbar a try today.
28:30 Go to rollbar.com slash Talk Python to me.
28:33 Has anything been brought in to Python that was originally external that you can think of?
28:48 I don't have specific examples in mind, but it's definitely happened.
28:52 That definitely occasionally happens.
28:55 It's usually more of a threat where we say, if someone comes with an idea and they say, this functionality should really be in the standard library.
29:05 And nowadays, we usually say, well, that looks more like an application.
29:09 And how do we know that it's actually useful?
29:12 Prove us that the design you have in mind works by first releasing it as a third-party package on PyPI and show us how popular that is.
29:23 And then there are also maintenance requirements.
29:26 We would require that a contributor commit to several years of keeping that code up to date and fixing bugs and stuff.
29:35 Sure.
29:36 And we've had things that actually were kicked out of the standard library because they were too much of a maintenance burden for the core development team.
29:45 I think the last time that happened might have been BSDDB or BerkeleyDB, which was a very large package.
29:52 It's currently much happier as a third-party package than it ever was in the standard library.
29:57 Yeah, I'm sure it can, like we said, grow much faster and so on.
30:00 There are databases in there.
30:01 For example, SQLite ships with Python.
30:03 SQLite is one of those things that is so popular and so versatile and so useful for so many different application domains that that was definitely the right decision to include that.
30:18 Also, SQLite itself is incredibly stable.
30:21 Yeah, that's one of the things.
30:22 It's not changing much these days.
30:24 It's very reliable.
30:25 That's great.
30:26 Yeah.
30:26 So speaking of contributors and having people commit to a certain amount of support over time if something's going to come into the standard library,
30:35 how do you ensure that the core development community invites and retains the best contributors?
30:41 You know, I have a lot of respect for the core developers, but how do you make sure that ecosystem is healthy and vibrant?
30:48 I don't think we're doing that very consciously.
30:51 We have a nominal mentorship program in place, but it's mostly used to get people thinking about contributing to open source projects in general.
31:04 I don't think that's where we get most of our new core developers.
31:09 In practice, new core developers almost always happen because somebody has an itch to scratch and they happen to be a really good programmer or at least sort of made a serious study of Python and start contributing.
31:26 And the people who review their code, and sometimes that's just one or two core devs who sort of mentor that one person, find that their contributions are of high value.
31:38 And then at some point, the mentor or one of the mentors proposes, hey, Python dev, core developers, what do you think of giving person X commit bit so that they can commit their own code after it's been reviewed?
31:55 Yeah.
31:55 There's often real discussion about the sort of potential new contributors maturity, not just in terms of their pure programming chops and how well they know CPython or Python or whatever their area of contribution is.
32:12 But also, do they have the right character?
32:16 Are they likely to sort of not commit something when the reviewer says that it's not ready?
32:21 Yeah.
32:22 I suspect one aspect of that is there's a lot of people that come into programming.
32:26 They see a shiny new thing, you know, something with Node.js or some other technology that seems like it's just going to take over the industry and then it doesn't necessarily.
32:37 So there's probably a level of maturity of experiencing tech evolution over the long term so that you can bring that to the language, right?
32:45 That would be too high a bar.
32:47 You can't say people can only start contributing once they've gone through one technology boom and bust cycle.
32:54 You need them to have a certain character that is okay with the pace of things and the thoroughness.
33:02 And you definitely want them to have a very good attention to detail.
33:07 Sure.
33:07 I guess you definitely want a different level of attention to detail and being meticulous when you're working on the internals of CPython rather than if you're working on some package that's used by a thousand people a month.
33:19 Right?
33:20 These have different requirements for that kind of stuff.
33:22 So you've been a champion of diversity in the whole Python ecosystem.
33:27 And I just wanted to point that out and say thank you because I think it's really making the Python space better in some tangible ways than other environments.
33:37 Just by way of a story, I went to a conference in London last year and I took my 16-year-old daughter.
33:44 And this was not a Python conference.
33:45 It was decidedly not.
33:47 But I was speaking on Python to these folks.
33:49 Say, hey, you should also learn Python.
33:50 This is cool.
33:51 And I brought my daughter.
33:53 We went to the speaker dinner.
33:54 And there was 28 or 29 speakers there.
33:57 And I think one or two women.
33:58 And my daughter looked at me after a while and goes, where are all the women?
34:03 And I said, you know, this is a sad part of the tech industry.
34:06 And when I go to Python conferences, I don't feel that way.
34:08 And, you know, I just think that's great.
34:10 I've personally always been a feminist, although never a radical one.
34:15 Encouraging women has been a pretty natural thing for me.
34:20 I think there was a specific series of events.
34:25 I'm not entirely sure when it was.
34:28 But I remember that there was some upset maybe around a decade ago at OSCOM.
34:33 Some people started pointing out that the open source community was, despite all its sort of pride in, well, we care about results, rough consensus and working code and all that.
34:48 There was not a very diverse community.
34:50 And the number of women that someone counted at OSCOM, I believe, was well below even the already low industry level.
34:58 Somehow that was a wake-up call for me.
35:01 There had always been a few active women in the Python community.
35:05 And I had never really counted how many there were or if it was always the same, two or three.
35:10 But because of that discussion at OSCOM that I did not participate or even witness in person, but that's through various blogs and peripheral vision came to my attention, I thought, hmm, what's the situation in Python community?
35:25 Actually, we're not doing great.
35:28 So I sort of made a mental note of, well, maybe we ought to think of how to increase the participation, the diversity in the Python community.
35:39 And I think that the main consequence of that was that when there were actually women who came to the Python community or were already part of the Python community and said, we would like to do something for women.
35:54 We would like this community to be more welcoming.
35:57 I thought, that's a great idea.
35:59 Let's do that.
36:00 Rather than responding in a way that some other tech communities have responded by feeling threatened or, oh, we don't have to do anything.
36:11 If you're a good coder, you're a good coder, and then you're welcome.
36:14 And if you're not a good coder, you're not welcome, regardless of whether you're a man or a woman.
36:19 That's actually a fair amount of bullshit in that attitude because those people don't realize how much bias there is.
36:26 So I've always been very open to the PSF and PyCon and various groups to try and reverse that bias by giving sort of diversity funding to PyCon attendees, for example.
36:42 I think I should call out specifically Jessica McKellar.
36:46 Yeah, I was going to bring her up.
36:47 Who has been a champion of this for a long time, has given some fabulous keynotes about this.
36:53 And all I had to do was be supportive there, I felt, which came naturally.
36:59 I remember in real world politics, since I was a voting age, I've always made a point of voting for a woman whenever I could.
37:08 I think the progress that's been made is really fabulous.
37:12 And you're right that Jessica deserves a lot of credit for that.
37:14 She's been fabulous at it.
37:16 We're in a much better place than we were before with regard to that.
37:21 Although I still think there's more work to do.
37:23 Absolutely.
37:23 I'm super happy to see the direction.
37:25 There's always more work to do.
37:27 And diversity is not just about women either.
37:29 Absolutely.
37:30 Let's remember that.
37:31 Yep.
37:31 Yep.
37:32 Absolutely.
37:32 Yeah.
37:33 It was just the top of my mind because my daughter was so struck.
37:36 I took her to this tech conference thinking, oh, I'd really like to show her how cool the tech scene is and stuff.
37:40 And she did come away with that, but she also came away with a little bit of the feeling like maybe this is not for women, which made me a little bit.
37:47 I just felt bad about it, right?
37:49 Oh, that's terrible.
37:50 Yeah.
37:51 Yeah, it is.
37:51 It is.
37:52 All right.
37:53 So let's shift gears a little bit.
37:55 And, you know, one of the things that there's a lot of talk about right now and I think is turning a corner in a very positive way, but has definitely been a hot topic lately and over the last few years is Python 3 and the migration towards Python 3.
38:11 Ha, yes.
38:12 I love your attitude when I see you speak at conferences and do keynotes and there's a great 2.8 sign with like a slash through it just saying, look, we're moving forward.
38:23 We're not going back, you guys.
38:24 How do you feel we're doing on that?
38:27 That certainly has been a much harder, more arduous journey than anybody had really anticipated.
38:35 I think right now we're well over the hump.
38:38 The destination is in sight.
38:40 It's clearly better on the other side, but the mountain range was much bigger and colder, whatever, scarier than we had anticipated.
38:49 And I think that honestly, the mistake that all of us in the Python core and actually the whole Python community, the mistake we made was underestimating Python's popularity.
39:02 We sort of thought of Python as this sort of relatively small language with a relatively small number of dedicated followers who would all jump at the occasion of making their code more readable and converting to this new version of the language that was so clearly better in many ways.
39:25 And what we just underestimated how much code people had written in Python 2 and really old versions of Python 2 and that.
39:34 How much documentation there was that would have to be updated, not just the standard library and the core Python documentation and the reference manual, but all the hundreds of Python books and websites and answer sites and stack overflow questions and this and that.
39:54 And we just initially, when we first started talking about Python 3 and actually the first time that the term came up was around the year 2000.
40:05 It then took seven or eight years before we did anything about that.
40:09 But initially, from our perspective and certainly from my perspective, but that everyone who participated in Python 3 had sort of had the same experience.
40:22 Everybody was excited about this change.
40:26 We're going to fix the language.
40:28 There are all these Python words.
40:29 Andrew Cushling, who was an important early core developer, had very influential posts about Python words.
40:36 And he enumerated maybe a dozen of sort of key issues with the language that we were hoping we could somehow improve.
40:45 And one example was in 2000, we introduced Unicode.
40:49 And we introduced it in a way that would be incredibly backwards compatible.
40:53 And by the time, three or four years later, when that design had completely been settled, we started finding out that applications actually became more brittle because they didn't expect the Unicode to pop up in places where it happened.
41:10 And that was one of the things that we wanted to fix in Python 3.
41:15 But we had no idea that there were people with millions of lines of Python code that was all interrelated and written by people who were no longer with that team or that company or that project.
41:29 And what it would take.
41:32 I mean, had we known we could have taken a different tack, we could have made Python 3 somehow, we could have changed a few features in Python 3 to allow somehow Python 2 and Python 3 code to coexist in the same virtual machine.
41:52 Sure.
41:52 Somehow make it just seriously deprecated, but not gone.
41:56 Things like that.
41:57 Some of the features, right?
41:58 Yeah.
41:58 And had we really wanted that, we could have done that.
42:03 But we underestimated the difficulty it would be for the average Python user to convert their code because we thought, well, someone has a few scripts here and a few scripts there and maybe a thousand line library that they're using.
42:20 But in fact, all the numbers were 10 or 100 times larger.
42:24 Making it so much harder to switch.
42:25 Right.
42:26 Yeah.
42:27 Yeah.
42:27 And once we realized that this was not an ideal situation, there wasn't any chance of sort of backing out.
42:34 And there was also no chance of suddenly accelerating the conversion process.
42:39 So we've done the best we felt we could do, which included actually backporting many things to Python 2.7 in terms of libraries that were available and backporting even more things on PyPI.
42:54 Like you can use the enum 3.4 package, I think, in Python 2.7.
43:01 Then you can use enums in Python 2.
43:03 But we also wanted to give the community and the users a sort of a clear message about the future of Python.
43:12 And that's where the sort of no 2.8 banner came from.
43:17 You can always say, well, maybe we should have done this differently, but I'm not sure that it would have necessarily been different.
43:22 You could have said, well, we're going to leave our leave basically some 2.7 or Python 2 in Python 3 and just put new features and clean up around it.
43:32 But then you still have all this old code that still is written in the 2.7 style.
43:37 And the fact that people adopt the three features, you know, maybe they wouldn't.
43:41 And it would have been more of a hindrance rather than just going, all right, we're just going to have to make this break and just jump the gap to get there.
43:48 It's a complex problem.
43:49 There's no perfect solution.
43:51 And you also can't just stop evolving the language.
43:55 Absolutely.
43:55 I feel like Python 3 is going so fast and doing so much.
44:00 It's really positive.
44:01 Thank you.
44:02 Yeah, you're welcome.
44:03 A term that I started using, I got this from Matthias, I'm forgetting his last name, I'm sorry, from some of the Jupyter projects, is referring to Python 3 as Python and Python 2 as legacy Python.
44:16 And I think that's an interesting way to think about it.
44:20 You can try to change the language in the hope that people will subliminally be sort of influenced.
44:29 I don't know how effective that is.
44:31 I think the highway administration or whatever it's called have attempted to remove the word accident from our language and replace it with crash.
44:43 That's wishful thinking in my view.
44:46 And I think it's pretty consistently just say Python 2 and Python 3 whenever the distinction is important.
44:53 You know, to round out this part of the discussion, I definitely feel like we've crossed the boundary.
44:58 Absolutely.
44:59 It's gained momentum.
44:59 I see more and more projects that say either we're Python 3 first or Python 3 only.
45:04 And if people want to backport it, that's fine.
45:06 And this is the right path.
45:08 The really good news is that basically all important libraries work as well with Python 3 as they do with Python 2 or better.
45:18 Which means that the early problem with Python 3 adoption was that, well, if you had a thousand lines of pure Python code, that was very easy to port.
45:28 But if you had a thousand lines of Python 2 that depended on seven different packages, you had to wait for those packages to be ported.
45:36 That has taken a long time.
45:38 And that was, I think, one of the issues that we underestimated.
45:43 But that problem has now pretty much been solved completely.
45:47 NumPy, Django, Flask, everything you can think of works with Python 3.
45:52 Even DateUtil.
45:53 If you want to start writing application code from scratch, there's nothing to stop you from using Python 3.
46:01 Yeah, and that's really great.
46:02 I do feel like that was maybe the single biggest barrier.
46:05 Because even if people had the intention of switching to Python 3, but they depended upon these libraries and they just couldn't run, well, they're like, well, you're going to throw their hands up and say, well, I can't convert all these libraries.
46:17 I got work to do.
46:18 Yeah.
46:18 Yeah.
46:19 So let's do one more Python 3 topic here.
46:22 Let's touch on a little bit of your favorite Python 3 features.
46:25 The two that I've been, I think, most directly involved in were AsyncIO until two years ago.
46:35 Since then, AsyncIO has matured to the point where I don't have to be involved all that much directly.
46:42 Although I carefully encouraged and reviewed the development towards Async and the wait, which has been absolutely marvelous.
46:51 The other favorite of mine is function annotations and what we now have in Python 3.6, the variable annotations, PEP 5.26, and the whole type checking area.
47:05 That's sort of, I think those are my favorite features.
47:08 One other thing that I'm personally very happy with is the proper distinction between bytes and text in Python 3, as opposed to the messy way of dealing with that in Python 2.
47:22 Sure.
47:22 That absolutely solves that whole, it's Unicode, it's not Unicode.
47:26 What is it?
47:26 Yeah.
47:26 Yeah.
47:27 Unfortunately, that has also been a major porting barrier.
47:31 Yeah.
47:31 I've heard that several times, especially people working on web frameworks or things that touch the network.
47:35 The whole generation of Python 2 programmers grew up basically between 2000 and 2010 or so, who knew all the ins and outs of the compatibility and incompatibility between Unicode and bytes.
47:50 And sometimes it interoperates with Unicode and sometimes it doesn't.
48:08 But people got used to the ambiguity and actually exploited it in their APIs, which made their APIs difficult to port forward to Python 3.
48:17 This portion of Talk Python is brought to you by Hired.
48:31 Hired is the platform for top Python developer jobs.
48:34 Create your profile and instantly get access to 3,500 companies who will work to compete with you.
48:39 Take it from one of Hired's users who recently got a job and said, I had my first offer on Thursday after going live on Monday and I ended up getting eight offers in total.
48:47 I've worked with recruiters in the past, but they've always been pretty hit and miss.
48:51 I tried LinkedIn, but I found Hired to be the best.
48:54 I really like knowing the salary up front.
48:56 Privacy was also a huge seller for me.
48:58 Sounds awesome, doesn't it?
49:00 Well, wait until you hear about the sign-in bonus.
49:02 Everyone who accepts a job from Hired gets $1,000 signing bonus.
49:05 And as Talk Python listeners, it gets way sweeter.
49:08 Use the link Hired.com slash Talk Python to me and Hired will double the signing bonus to $2,000.
49:13 Opportunity's knocking.
49:15 Visit Hired.com slash Talk Python to me and answer the door.
49:25 So does it surprise you that new things are still happening in the CPython internals?
49:31 Like dictionary got a major reworking in 3.6, things like that?
49:35 It doesn't really surprise me.
49:37 Dictionaries in particular are such an incredibly fundamental part of Python.
49:43 It's used everywhere internally and it's used everywhere in applications.
49:50 That it's totally par for the course that every, at least once every decade, maybe twice,
49:56 some major innovation happens in that area.
49:59 I remember when I first started Python, there was like, well, dictionaries were obviously something
50:06 I needed.
50:06 And in reaction to ABC, which used B trees, or at least some kind of, some form of balance
50:13 trees, which I thought was very tedious and I had worked on that code forever in ABC and
50:17 it was always buggy.
50:18 So I thought, well, for Python, I'll do a hash table.
50:21 That's a new thing.
50:22 And I just sort of looked it up in Knuth volume three.
50:26 What's the basic hashing algorithm?
50:28 How do you hash a string?
50:29 What, how do you implement a hash table?
50:31 Well, open hashing or linked lists.
50:34 And I made my decisions and implemented it.
50:38 And then I had to move on to other things, module objects, functions.
50:42 You'd write the whole thing, basically.
50:44 I had to build a whole language, long integers, exceptions.
50:48 Bytecode.
50:49 So the first innovation, I think, happened when someone with an actual mathematical schooling
50:56 in that area realized that I had copied an old algorithm from Knuth that was no longer
51:01 state of the art.
51:02 And there was something like, I think I, Knuth had discovered that it was good if you had
51:08 hash table sizes that were primes or something, relative primes.
51:12 And it turned out with changes in processor architecture, powers of two were suddenly better.
51:19 Interesting.
51:20 Yeah.
51:20 I've always heard primes as well.
51:22 So that's still in my mind.
51:23 Yeah.
51:23 That's no longer the state of the art.
51:26 I mean, the caches in CPUs and the whole sort of L1, L2, L3 memory architecture has affected
51:34 language implementations dramatically.
51:37 And I don't even know all the ins and outs of that area.
51:41 Unfortunately, we have other core developers who keep up with that and do that for me.
51:45 Yeah, that's great.
51:46 That's great.
51:46 I'm sure we could dig into all sorts of those things.
51:48 And there's so many other questions that I'd like to ask you.
51:53 I want to be respectful of your time and not go too long.
51:55 So let me ask you one final Python question.
51:58 What do you see coming in Python 3.7?
52:00 And what would you like to see there?
52:02 Well, I mentioned earlier that I'm not the greatest visionary.
52:07 Also, 3.6 only came out a month ago.
52:10 Unlike some other languages, there's no secret cabal of people who are already planning what
52:17 the language looks like five years from now.
52:19 I'm sure somewhere there's a C++ committee that's anxiously designing C++ 19 or 20 or
52:26 whatever the next version is going to be.
52:28 Well, that's not how we do things in Python.
52:30 And we just over time during the alpha stage of the next feature version, we tend to just
52:39 collect ideas and peps and proposals and often a real life experience with the previous major
52:47 version or the previous feature version, I should say, directs an evolution.
52:52 For example, we added async.io in Python 3.4, which led Yuri Selvanov to come up with the
53:01 idea of async, def and await and introduce that in 3.5.
53:06 That's great because that really cleans up that API.
53:09 That is an incredible improvement.
53:11 And that is not something we could ever have done if we hadn't had the clunky version of
53:18 async.io with yield from in Python 3.4.
53:23 Because the generators actually are...
53:25 I love the story of generators.
53:27 I can talk for hours about that because it has been such a rich source of language improvements
53:34 from the very early for loop to iterators and generators and coroutines and yield from and
53:44 then async await and sort of small improvements to that in 3.6 even.
53:50 That's been a very gratifying thing.
53:53 But I don't know what's going to happen there next.
53:55 Yeah, sure.
53:56 I expect that static typing, optional static typing, what we're doing with mypy, that's
54:02 my current project at Dropbox actually.
54:04 I expect that will also make strides forward.
54:09 But I don't know what those strides are going to be yet.
54:13 Yeah, so it really highlights that the language is a journey and a living thing, right?
54:18 You take a step and you look around.
54:21 You see the landscape that you just ventured into from a different vantage point and you
54:28 can pick a different destination or you can plan your next step or day trip or whatever
54:33 metaphor you want to use.
54:36 You can plan your next evolution based on where you are and what you see.
54:44 And sometimes that just comes like, whoa, we see all these people using this feature that
54:51 we just introduced two versions ago in a completely novel and interesting way.
54:55 And now we suddenly realize, oh, there is a better syntax or a better API that's sort of
55:02 waiting to come out.
55:04 And that's very exciting.
55:05 But I don't have sort of very specific plans for 3.7 yet, let alone beyond.
55:12 The only thing that's sort of possibly way beyond would be the gillectomy, the removal of the
55:19 GIL.
55:20 But that is also not at all certain.
55:23 And it's a very complicated story.
55:26 You could talk about the gillectomy for quite a while.
55:28 And it's definitely an interesting area of focus.
55:33 So does this sort of, you take one step, you climb one mountain, you see a new horizon of
55:38 possibilities.
55:38 Is that one of the things that keeps you interested in working on Python and maintaining and overseeing
55:44 the language over time?
55:44 The excitement of actually climbing a mountain and then seeing a whole new valley that you
55:50 didn't know existed certainly motivates me.
55:53 Yeah, that's excellent.
55:54 So I guess we'll leave it there.
55:56 Let me ask you two questions before we get out of here.
55:59 First, if you're going to write some Python code, what editor do you open?
56:03 Emacs.
56:03 Well, actually, I don't open it.
56:05 It's already open.
56:06 It just stays open.
56:08 Well, my shell also mostly runs in Emacs.
56:10 Yeah.
56:11 Oh, fantastic.
56:12 Okay.
56:12 I know you don't like to play favorites, but if there's a notable PyPI package that you really
56:17 want to highlight that maybe people don't know about, but you'd like to say, hey, you guys
56:20 really should check this out because it's a cool example of something.
56:23 What comes to mind?
56:25 Actually, the one thing I want to highlight here is mypy, which is a static type checker
56:31 for Python that I didn't write, although I have now been contributing to it for well over
56:37 a year.
56:38 But it's still mostly Yuka Lettosolo's creation.
56:41 And we're using this at Dropbox.
56:44 And we have over 400,000 lines of annotated code in a code base that totals over 4 million
56:51 lines of code.
56:52 So we have a ways to go, but we also have more than 500 developers who are interacting
56:59 with this tool and who, by and large, are very happy with how adding type annotations makes
57:08 the code more understandable and more readable and sort of makes them more confident when they
57:13 want to undertake refactorings and things like that.
57:17 And mypy, the specific reason I want to highlight mypy as a PyPI package is that until a week
57:24 ago, if you tried pip install mypy, you would get some completely unrelated package that is
57:31 named mypy that has not been maintained for five years.
57:35 And we finally convinced the leadership of PyPI to give us that project name.
57:41 And now you can say pip install mypy.
57:44 Actually, you have to do pip 3 install mypy.
57:46 And it will actually do what you expect it to do.
57:48 Okay, well, that sounds really excellent.
57:50 It's great to see you guys using the type annotations and things like that at Dropbox.
57:55 Guido, we have a final chance for you to give a call to action to the community.
58:00 What would you like people to do?
58:02 What's on your mind?
58:03 Well, I really do want people to give mypy a try.
58:07 That static type checker is pretty amazing.
58:10 And I need to point out that there are still a lot of misunderstandings about what it can do
58:16 and what it cannot do.
58:17 Static types are completely orthogonal or almost completely orthogonal to unit testing, for example.
58:23 It doesn't mean you have to write fewer tests.
58:26 Occasionally, there are a few trivial tests you don't need to write because the static checker
58:31 catches the same issues better.
58:34 But by and large, a type checker just catches a very different category of errors than unit tests.
58:39 So they complement each other nicely.
58:41 And together, they give you more confidence.
58:44 One of the misunderstandings about mypy has also been that when we started PEP 484, that
58:50 the sort of the introduction of type checking was Python 3 only.
58:53 But we've actually amended that.
58:55 And for the past year, we've been using mypy successfully with Python 2 code base.
59:00 Okay.
59:01 So you can search PEP 484 for Python 2 support.
59:07 And it's completely there.
59:09 And mypy does as well on Python 2 as it does on Python 3.
59:13 Oh, that's really nice.
59:14 Yeah, the other misunderstanding about mypy or static typing in Python is that people have
59:20 predicted that they will turn your Python code into Java, which is obviously nonsense.
59:24 There's no interfaces all over the place.
59:28 Yeah.
59:29 So I think actually moving that type annotations to Python 2 is really important because it provides
59:35 some foundation for when you do want to upgrade to Python 3.
59:38 Correct.
59:39 My secret plan at Dropbox is actually that once we have a large enough fraction of the
59:44 code base annotated, we can start converting into Python 3 in a semi-automated fashion in
59:51 a way that would not be possible without those annotations.
59:55 We're not there yet, but that's my secret plan.
59:58 That's fantastic.
59:59 All right.
59:59 Well, I want to say thank you again for the conversation.
01:00:02 I really enjoyed talking with you and I'm sure everyone out there learned a lot.
01:00:07 So thanks so much for being on the show.
01:00:08 My pleasure.
01:00:09 Yeah.
01:00:10 Hope it's a good one.
01:00:10 It's going to be a great one.
01:00:11 Bye.
01:00:12 Bye.
01:00:12 This has been another episode of Talk Python to Me.
01:00:16 Today's guest has been Guido Van Rossum and this episode has been sponsored by Rollbar
01:00:21 and Hired.
01:00:21 Thank you both for sponsoring the show.
01:00:23 I want to say thank you again to Guido as well.
01:00:27 It was really an honor to have him on the show.
01:00:29 I know he's a very busy guy and there are tons of demands on his time.
01:00:32 So thank you, Guido, for being on the show.
01:00:34 I know everyone really enjoyed hearing your perspective.
01:00:38 Rollbar takes the pain out of errors.
01:00:40 They give you the context and insight you need to quickly locate and fix errors that
01:00:45 might have gone unnoticed until your users complain, of course.
01:00:47 As Talk Python to Me listeners, track a ridiculous number of errors for free at
01:00:52 rollbar.com slash Talk Python to Me.
01:00:55 Hired wants to help you find your next big thing.
01:00:58 Visit Hired.com slash Talk Python to Me to get five or more offers with salary and equity
01:01:03 presented right up front and a special listener signing bonus of $2,000.
01:01:06 Are you or a colleague trying to learn Python?
01:01:10 Have you tried books and videos that just left you bored by covering topics point by point?
01:01:14 Well, check out my online course, Python Jumpstart, by building 10 apps at talkpython.fm/course
01:01:20 to experience a more engaging way to learn Python.
01:01:23 And if you're looking for something a little more advanced, try my WritePythonic code course
01:01:28 at talkpython.fm/Pythonic.
01:01:30 Be sure to subscribe to the show.
01:01:33 Open your favorite podcatcher and search for Python.
01:01:35 We should be right at the top.
01:01:36 You can also find the iTunes feed at /itunes, Google Play feed at /play, and direct
01:01:42 RSS feed at /rss on talkpython.fm.
01:01:45 Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.
01:01:50 Corey just recently started selling his tracks on iTunes, so I recommend you check it out at
01:01:55 talkpython.fm/music.
01:01:57 You can browse his tracks he has for sale on iTunes and listen to the full-length version
01:02:02 of the theme song.
01:02:03 This is your host, Michael Kennedy.
01:02:05 Thanks so much for listening.
01:02:06 I really appreciate it.
01:02:07 Smix, let's get out of here.
01:02:09 Thanks for listening.
01:02:11 my voice, there's no norm that I can feel within, haven't been sleeping, I've been using lots of rest,
01:02:16 I'll pass the mic back to who rocked it best.
01:02:19 I'll see you next time.
01:02:26 Developers, developers, developers, developers, developers, developers, developers, developers, developers, developers.
01:02:31 Thank you.
01:02:32 Thank you.