#186: 100 Days of Python in a Magical Universe Transcript
00:00 Michael Kennedy: The key to making anything a habit, including learning to program, is to make it fun. That's exactly what Anna-Lena Popkes did with her 100 Days of Code challenge. She created a magical universe where a Python derived creatures and castles live. Join us on this episode as we explore some of the Python concepts she encountered on her journey as well as how she made her way to Microsoft Research in the UK, where she's doing an AI residency. This is Talk Python to Me, Episode 186, recorded November 13, 2018. Welcome to Talk Python to Me, a weekly podcast on Python. The language, the libraries, the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy, keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via @talkpython. This episode is brought to you by www.coder.com and us, @talkpythontraining. Anna-Lena, welcome to Talk Python.
01:10 Anna-Lena Popkes: Hi, nice to meet you.
01:10 Michael Kennedy: Nice to meet you as well. It's so great to have you here, and I'm really looking forward to our topics. We're going to talk about your 100 Days of Code project and its interesting angle, and then. A little bit about what you're doing with machine learning as well, because I think that's super interesting. But before we get to those stories, let's start with yours. How'd you get into programming and Python?
01:30 Anna-Lena Popkes: So I got into programming way too late, in my opinion, so I was studying cognitive science in my undergraduate degree, in order to become a neuroscientist, and at the very end of the program, I attended an intro to machine learning lecture, and I became so fascinated by the idea that you could have algorithms that are able to learn from data and detect patterns, and then even make predictions on data, that I decided to switch fields. So I looked for a computer science graduate program that would allow me to focus on machine learning, and of course, I had to start programming, so I looked for a suitable programming language, and when I tried out Python, I knew that it was the perfect choice, so I really liked that it was so easy to get started with, that it has such a nice syntax, and it's, yeah, it's just so readable.
02:21 Michael Kennedy: Yeah, I think it's very approachable for beginners, because it doesn't have all those symbols.
02:24 Anna-Lena Popkes: Yeah, absolutely.
02:25 Michael Kennedy: That look super scary, right?
02:27 Anna-Lena Popkes: Yes.
02:28 Michael Kennedy: You're like star, star, void, star, star. You're like, whoa!
02:30 Anna-Lena Popkes: Exactly, yeah!
02:31 Michael Kennedy: What is this crazy stuff, right?
02:33 Anna-Lena Popkes: I agree, yeah. Yeah, and since then I have been working with Python almost all the time, so it's really nice.
02:39 Michael Kennedy: Yeah, that's great. I think, I didn't know if you are just very smart or very lucky, but having chosen Python is perfect for machine learning, right? I mean it's.
02:47 Anna-Lena Popkes: Yeah!
02:48 Michael Kennedy: It's exactly where most of the action is these days, right? What other languages were you considering?
02:53 Anna-Lena Popkes: Oh, that's a good question. I don't even remember. My brain is like a sieve sometimes so. Ah, sorry for that. I think, I did my research, and there were quite a, I think I looked into R for a while, which was popular for data science, but Python's just a, like a general purpose programming language, and I just liked it a lot, so I decided to stick with it.
03:16 Michael Kennedy: Yeah, I think that's a really great choice. So, you were studying cognitive science, previously, and then you decided to just jump into programming. How hard was that transition?
03:29 Anna-Lena Popkes: Really hard!
03:30 Michael Kennedy: Was it scary?
03:31 Anna-Lena Popkes: Yeah, well, yeah it was really scary since I started the computer science graduate degree, which is usually not intended for people who have no idea about coding so.
03:40 Michael Kennedy: I would think of a computer science graduate degree as like after a computer science degree.
03:45 Anna-Lena Popkes: Yes, exactly.
03:45 Michael Kennedy: Right?
03:46 Anna-Lena Popkes: So I was lucky that I found a graduate program that you could do without a corresponding undergraduate degree. But in the beginning I had to do so many things at the same times with my classes, and I had all the assignments that required coding, but I had to study the coding part at the same time, so I basically just left out all the classes that weren't using Python, and just used the ones such that I could focus on studying one programming language, but it was hard. But it was definitely worth it, so it was the perfect decision for me. I'm really happy right now.
04:23 Michael Kennedy: Oh, that's awesome, and you're doing such cool stuff, which we'll get to.
04:27 Anna-Lena Popkes: Yes.
04:28 Michael Kennedy: In detail later. But I think it's really admirable that you were able to do that, like, you saw what you wanted and you just took a turn. I think there's a real fear when you get really good at something, or, you know, you're about to get your degree in something, or you're even, you know, like a professional in it, to make a change, because, maybe you think you'll like that thing more, but you don't want to give up your, what you've earned, in terms of knowledge, and experience, right?
04:52 Anna-Lena Popkes: Exactly, yeah. It can be quite scary, especially when you spent quit a few years on learning about all the other stuff.
05:00 Michael Kennedy: So how much does the cognitive science, neuroscience stuff still factor into what you're doing?
05:07 Anna-Lena Popkes: I think it factors in indirectly sometimes, so that I think when I see the algorithms, I sometimes think about, hey how is that implemented in the brain, or do we know how, whether there's an equivalent thing in the brain, and I still study or read articles on cognitive science since I'm just really fascinated by how the whole power of the, where the power of the brain comes from and how the brain is working. So, yeah, many machine learning algorithms are actually based on the brain. For example, like, neuro networks.
05:41 Michael Kennedy: Right.
05:42 Anna-Lena Popkes: At least the original ones.
05:43 Michael Kennedy: Yeah, they've gone a long way since then, right? You've got your deep learning models.
05:46 Anna-Lena Popkes: Yes, absolutely.
05:47 Michael Kennedy: And all that but, it is very similar. I work for, my first programming job was at a company that was startup that was a spinoff from a cognitive science research lab in California, and it was just such a cool place to be. There were a bunch of cognitive science PhDs and a couple of programmers, and we were just building fun software to explore and test some of these ideas and. I think cognitive science doesn't get enough credit in terms of how much.
06:13 Anna-Lena Popkes: No, yeah, I agree.
06:14 Michael Kennedy: Programming and technology happens there.
06:17 Anna-Lena Popkes: Yeah, yeah. It's a very, very fascinating subject.
06:22 Michael Kennedy: Yeah, it definitely is. So, I remember good times there as well. Okay, so speaking of machine learning and neural networks, what are you doing today?
06:30 Anna-Lena Popkes: So I'm currently at Microsoft Research in Cambridge in the UK, and I'm an artificial intelligence resident, so that's like an educational program. We're about 20 people, and the overall goal of the program I would say is to teach us all the necessary skills to become great research engineers, so I'd work on a project that is based on applying machine learning to healthcare data, but of course there are lots of projects within Microsoft here in Cambridge that work on lots of different stuff, so yeah, during the day I usually try to understand how the algorithms are working, and try to figure out the math to actually implement them afterwards.
07:11 Michael Kennedy: That sounds so interesting. I think, I was really surprised to learn about Microsoft Research, and how many PhDs they have there and how much research is actually happening at Microsoft Research.
07:23 Anna-Lena Popkes: So this lab here in Cambridge is really a research lab. Microsoft does a lot of work on customer projects and so on and products of course, but this research lab here is about 200, 250 people, of which I think 150 are really working for Microsoft Research in Cambridge. There are always temporary people, interns, and so on. I think, all right, I don't know how many of those are really researchers, but there are also of course a lot of software engineers and research engineers, and maybe about 80 researchers. But that's just a guess. I would have to ask about the numbers.
08:03 Michael Kennedy: Yeah, and that's just Cambridge, right?
08:04 Anna-Lena Popkes: Yes, yeah, that's just Cambridge.
08:05 Michael Kennedy: Yeah, exactly. So I think I saw a presentation somewhere where they were saying Microsoft has more PhD researchers than Stanford, or something insane like that. It's just like. It's really.
08:17 Anna-Lena Popkes: Yeah, they are huge, yeah.
08:18 Michael Kennedy: It's really huge, and so there's a lot of stuff going on, and I'm sure that's a super exciting place to work, and in AI as well is a big research area.
08:25 Anna-Lena Popkes: I didn't know that Microsoft was doing so much research in AI before I started the program, so I was surprised too that they were so active and had so many interesting projects going on.
08:36 Michael Kennedy: Yeah, so when you were doing your cognitive science stuff before you got into programming, did you see your career, or at least at the moment, being, working at Microsoft?
08:46 Anna-Lena Popkes: No, not at all. I never thought about myself getting into computer science. That was really so far from what I had planned, yeah.
08:54 Michael Kennedy: Yeah, I think it's really cool though that you were able to find your path into it. Okay, so let's talk a little bit about this 100 days project. I think, I first saw about it because people were talking about it on Reddit, and it was just so, it was such a unique take on it, and people were so excited about it, so it started out as 100 Days of Code with a Harry Potter theme, but it turned out you had to cancel the Harry Potter part, right?
09:22 Anna-Lena Popkes: Yes, regrettably I had, like Harry Potter is so heavily copyrighted, and there are so many licenses and so on that it wasn't a safe thing to do to stick the Harry Potter one, and use all the names and places and so on.
09:37 Michael Kennedy: So, now you have a Harry Potter inspired 100 Days of Code project.
09:41 Anna-Lena Popkes: Exactly, yes. So I came up with my own little magical universe which was actually quite a lot of fun to do.
09:47 Michael Kennedy: I bet it was, instead of just copying what they got, right? Like, forget it, I'm going to make my own, my own space.
09:52 Anna-Lena Popkes: Yeah, you could spend time on researching names and what they mean and yeah, there's so much stuff on the internet, it's amazing.
10:00 Michael Kennedy: Yeah, that's great. So let's start with 100 Days of Code, just what is it? Many people have probably seen it go by on Twitter because that seems to be where people put all of their, and this is what I did, which is great, but maybe they don't know the real history and details. Tell us about it.
10:21 Anna-Lena Popkes: I think you might be the expert on the real history behind it, but I heard of it on your podcast for the first time, so that you basically spent 100 days, each day on learning about new coding stuff, and really spent every day. I think the original one was 30 minutes coding. I adapted it to 15 to fit my needs, yeah, and then really spent the time, those 100 days, to learn a lot of new cool stuff.
10:49 Michael Kennedy: I think it's such a cool idea, just you're going to spend some time every day and I think, I don't know if this was conscious as part of it, but I think one of the underlying ideas here is that we often overestimate what we can do in a couple of days or a week. We think we can do a bunch, and not really, but we really underestimate what we can do in the long term, in three months, six months, in a year, you can make way more progress, and I think the underlying idea of 100 Days of Code is you put in the time and you build the habit of doing that for over three months, and by the end you're like wow, look what I did.
11:27 Anna-Lena Popkes: Yeah, yeah, the habit building is a big part of it.
11:31 Michael Kennedy: Yeah, and you also said when you first started writing about it that there was this sort of no more procrastination thing going on on Reddit. What's the story with that?
11:40 Anna-Lena Popkes: Yeah, so actually I had two things that I combined. I found this awesome post called the X Effect, on the sub Reddit that is called Get Disciplined. And it's basically about how you can create a new habit. It's a very easy strategy, like that you just have a card and you draw lines on the card such that you get small squares, and then every, you have one card for each habit, and then every day that you spend on working on your habit, you can cross out one of the squares with a big fat X, and I really wanted to try that.
12:13 Michael Kennedy: Not a light one, a big fat one that makes it really obvious, like, you did it, right? So it feels good?
12:17 Anna-Lena Popkes: And it's quite a lot of fun to visually track your progress.
12:21 Michael Kennedy: Yeah, I'm sure it is. It sounds great. So I'll link to the Get Disciplined post on Reddit, and I didn't know about that sub Reddit, although I'm interested in it now. That's cool.
12:31 Anna-Lena Popkes: Yeah, you can find a lot of interesting stuff on it.
12:33 Michael Kennedy: Yeah, I bet you can. Where were you in your journey into programming and machine learning when you started the 100 Days of Code?
12:40 Anna-Lena Popkes: I just started an internship at Bosch Center of Artificial Intelligence. So I was about, so I had applied a few machine learning algorithms already to data sets and so on, but I had not spent so much time really on Python and all its advanced features. I had looked at Dan Bader's book a little bit. I don't remember the name at the moment, but it's a really good book.
13:04 Michael Kennedy: Python Tricks.
13:05 Anna-Lena Popkes: Yeah, exactly. I can definitely recommend it. But yeah, I wanted to spend a bit more time on really on Python and all the advanced features since I think that with Python you at some point you get to a stage where you feel comfortable, and you can write code, but you miss out on all the great features that Python has to offer, so I wanted to yeah, bridge that gap somewhat.
13:28 Michael Kennedy: Yeah, that's cool. I think that's one of the challenges of Python actually is, many people learn just enough to solve their problem, and because it's so simple you can kind of just learn a little bit and live in that space, but you're not really taking full advantage of everything that's possible, right?
13:45 Anna-Lena Popkes: I agree, it was the same for me.
13:47 Michael Kennedy: Yeah. This portion of Talk Python to Me is brought to you by coder.com. Coder.com has really nailed the idea of developer tools in the cloud. Have you heard about how amazing Visual Studio Code is lately? How would you like to have VS Code in the cloud on powerful infrastructure? I don't mean something similar to Visual Studio code, but the full actual VS Code with built-in collaboration and instant access to massive Linux based computing resources. Whether you're working on Windows but developing for Linux, running local Linux but need way more computing power, or even if you want to do development on a Chromebook or iPad, www.coder.com has a full browser based instance of VS Code just waiting for you. One annoying thing about cloud based dev tools is you don't control the platform. You can't install or configure anything. With coder.com, you get full root access to a docker container with a gig of RAM and 3 gigs of disk space, and that's just with the free account. On top of that, you have fast time for when you have serious computing to do. You'll get access to 96 CPU cores to crunch that Python code fast. Finally, we know that Google Docs has made online collaboration enjoyable, and an important part of many people's daily work. Coder.com brings this type of collaboration to your software projects. That makes them perfect for interviews, teaching, and teamwork. After just a couple of minutes of using coder.com, you'll forget that you're even using a browser. It's the Visual Studio code experience you love, just with way more power and available everywhere. Visit talkpython.fm/coder to get started for free. So let's talk about some of the things you covered in your 100 Days of Code that were, you had a different world you created called Castle Kilmere. Is that right?
15:34 Anna-Lena Popkes: Yes, yeah exactly.
15:36 Michael Kennedy: 'Cause Hogwarts wasn't an option. So Castle Kilmere, and let's talk about some of the things you created there. So, your 100 Days of Code didn't cover 100 days of the Castle Kilmere characters. It was sort of half-half, right?
15:51 Anna-Lena Popkes: Yes, so I started out with this magical universe, but I decided that I would stop when I wouldn't find anything else to really look at, not to keep working on it just because it was there. I really wanted to have blog posts of high quality, and interesting things, and there was also so much other stuff I wanted to take a look at, which was not necessarily related to this concept of the magical universe, so I basically split it in half.
16:20 Michael Kennedy: Yeah, that makes sense. Sometimes it's hard to cram some feature into a program that just doesn't make sense.
16:27 Anna-Lena Popkes: Yes, yes.
16:28 Michael Kennedy: So all of your code is on GitHub, and I'll link to that, right? And you also blogged, did you blog every day on this?
16:35 Anna-Lena Popkes: No, I created one blog post for each big concent, so for example I spent several days on abstract base classes, but of course I created on blog post about abstract base classes, and not several ones for each day, but each big concept or each big thing has it's own blog post, with details and examples, and then there's also the full version of the code for each day.
16:59 Michael Kennedy: Yeah, okay, yeah, very cool. All right, so let's go through a couple of items that are pretty interesting that you covered. That were in the Castle Kilmere world, so you started out with object oriented programming, as one of them. Why were you thinking about that?
17:15 Anna-Lena Popkes: I had used classes before, and what I wasn't so used to using object oriented programming, so really wanted to take advantage of this project and turn it into a one that was based on object oriented programming. I started looking at the very basics again, which I really liked. It turned out to be a great choice in the end. Yeah, just looked at what is object oriented programming? How does it work in Python? That you have classes, and what are classes. Namely that they act as blueprints for creating objects, and that these classes then define how objects are structured, what attributes they have, what kind of behaviors, so what methods? What functionality? And then I started out with my first class, since all of the members of my universe, or the universe was based on this Castle Kilmere, and I created the first class called Castle Kilmere member, and then I went onto inheritance.
18:15 Michael Kennedy: Right, so what were some of the ones that you covered in inheritance? Like, so you have this member, this is like anything that can be a human in this world, or a character in this world, right?
18:24 Anna-Lena Popkes: Yeah, it can be any character, like any member of the class. Of course within this school you have the students. You have the professors. You have the ghosts. You have lots of other people, and I wanted to have different classes for them so I created one for the pupils. I created one for the professors. And extended the universe over the course of the next days.
18:45 Michael Kennedy: Yeah, and I see you even have a ghost. I like it.
18:48 Anna-Lena Popkes: Yes, yeah, I do, of course.
18:51 Michael Kennedy: Yeah, of course you got to, right? And so I think one of the things I like about this is when people are learning programming, it's a real, it's easy to connect with the way the characters fit, and if you sort of model it back to Harry Potter in your mind, right? It's pretty easy to think, okay, I can see how, we have all these students and all the professors, and they're all magicians, and it really does make it pretty approachable to learn objects and classes and inheritance, I think.
19:18 Anna-Lena Popkes: Yeah, that's why I went for this magical universe. I really wanted to have something that makes it fun for me to sit down every day, and originally the project wasn't even intended to be public. I really started it for myself and to have a theme that spans through the entire thing and makes every day fun, and it really was a lot of fun for me.
19:39 Michael Kennedy: Yeah, I'm sure it was, and it looks really interesting, and I still remember back to some of the programs that I first wrote when I was learning programming and it's the weird ones that you force yourself to do that are not homework assignments or whatever that really stand out, right? Yeah, for sure. Okay, so another concept that you covered which I think is still quite confusing to many folks is different types of methods on classes, so functions on classes are called methods, and then you have instance methods, class methods, static methods. And then we'll even see some more variations, right? So, you, maybe tell people your take on that, and maybe what they are.
20:21 Anna-Lena Popkes: Yeah so I started out using instance methods most of the time, which I think everyone is using most of the time.
20:28 Michael Kennedy: Yeah, I agree.
20:29 Anna-Lena Popkes: And they have the self parameter, at least the self parameter as an input, and when I started out working on the types of class methods Days of Code, I really had no idea that there was something else and how it might be useful. So yeah, for the instance methods, and the self parameter points towards when you call the method, it points towards instance of the class, so really an actual object, so these instance methods are quite powerful because they can modify both the object state and the class state, and my example was that the Castle Kilmere members were able to say something, so they had a say function, and then a certain object, so a certain member was able to say a few words.
21:14 Michael Kennedy: And they'd have these similar properties, right? Like their name, or other things, what type they are, right? The professor, whatever, says such and such, right? Yeah, and that's pretty standard, and then you get into class and static methods, and I think the existence of either a class method or a static method makes a lot of sense, but the existence of both is like, wait, why are there two of these? Why are there two ways to do this?
21:38 Anna-Lena Popkes: Yes, that was also what I thought. Right now, I really like class methods, and I even used a few static methods now at work, and they can be very useful, especially if you want to communicate your intentions when you write your code, and it makes it much more readable, but only of course if the other people also know about class methods.
21:57 Michael Kennedy: Right.
21:58 Anna-Lena Popkes: What I used class methods for a lot was to create alternative constructors for a class, yeah, to really create different members of the universe, so what I understood about class methods is that instead of the self parameter, you have the cls, which points towards the class, not a particular object, so a class method is restricted in some sense, that it can only modify class state, but not the object state, so what I had as class methods were for example their use as alternative constructors, so I could create lots of different members of the universe without always having to write out all the names and birth years and so on, over and over again.
22:41 Michael Kennedy: Yeah, I think that's a great use of it, and you know, we don't talk about design patterns and stuff like that in Python as often as other languages, but it's kind of a factory pattern, or something like that, where you don't have to know how to create the thing, you just say, hey, type, make one of yourself, and it can put all the pieces together. I think that's cool.
23:00 Anna-Lena Popkes: Yes, I like that a lot, yeah.
23:01 Michael Kennedy: Yeah, I do too. And honestly with the static methods and class methods, I know the difference. I know the class method has the type available so it can work with it, and the static one doesn't. The class method kind of knows what level it's on in terms of if there's inheritance, which type you've called it on, and the static method doesn't necessarily, but beyond that I honestly don't know when I would use static over class. I guess if I don't feel like dealing with a class parameter, I just use static, but I don't have a great recommendation either there, so.
23:35 Anna-Lena Popkes: Static methods are a little weird, I guess, but I don't remember the use case now, I had at work for static methods, but I came across a use case and I was like, wow, I can use the static method here.
23:50 Michael Kennedy: I know what it's for.
23:51 Anna-Lena Popkes: It really makes sense to use it.
23:52 Michael Kennedy: Yeah, I do find that I like having sometimes you have a class and then you want some functions that work with it but they don't work with instances of it, so either having a class or static method is nice just for the grouping together. It's like all on this thing, right? So if you import the class, you don't have to also import the functions, for example, to work with it. It's a little more obvious, I think.
24:16 Anna-Lena Popkes: Yeah, it's good to communicate that it really somewhat is related to the class, even if it's independent in a sense.
24:24 Michael Kennedy: Yeah, so another interesting thing you covered is some of the magic methods, or the Python data model with the __repr__ and the __str__ and things like that, right?
24:35 Anna-Lena Popkes: Yes, of course I wanted to get a nice representation of my pupils and my professors and so on, so when you print an object, you usually don't get a very useful representation, but you get I guess the class name and then the ID, which is basically the memory address, if I'm correct. I looked into the dunder methods you have for that, and there are actually two ones, that was also interesting for me to realize. I had never implemented them myself, and I only learned then that they have different purposes, so one is rather, should rather function as a debugging agent for developers, so output should be as unambiguous as possible, but then there's also the other one where the output should really be readable, so that you as a human can read it.
25:24 Michael Kennedy: Right so the __repr__ is the more developer debugging side of things, and the __str__ is the print, curly bracket, what goes in there. Yeah, exactly, I think it's definitely interesting. That's a nice trick as well, just for working on Python projects, is if you're using a debugger, or anything like that, or even stack trace type stuff, go and write a specialized __repr__ for your classes, because if you're pausing a debugger or you're showing a list, it'll put that information there instead of just this type at that address. This type at that address, it's like oh here's the description and it can really be helpful.
26:04 Anna-Lena Popkes: And it doesn't take that much time, so yeah, I agree, it's really useful.
26:09 Michael Kennedy: Yeah, it can be.
26:10 Anna-Lena Popkes: And with data classes right now you even get that implemented for you, right?
26:14 Michael Kennedy: Yeah, I think you do with data classes. That's right. Yeah, 3.7, very nice. That data class sort of simplify a lot of the stuff that we're talking about.
26:23 Anna-Lena Popkes: Yeah, I like them.
26:26 Michael Kennedy: Another one that takes awhile for people to get, and sometimes I don't know that people ever get to creating their own, just because we talked about stopping once your problem is solved, and not digging all the way in, is the decorators, right? Those can be kind of mind blowing, right?
26:40 Anna-Lena Popkes: Yeah, absolutely, so it was a big challenge to wrap my head around how they work. And I think I understood how they work now, but yeah, don't test me on it.
26:51 Michael Kennedy: No test, but looking at your project, it looks pretty nice. So in your world, in your Castle Kilmere world, you could have characters that say things, and then you created a whisper decorator and if you put the whisper decorator onto that, it'll make it say it more quietly, right?
27:08 Anna-Lena Popkes: Yes, exactly, since of course there are also the mean people in my universe, they are called the Dark Army, and they have the leader, which is Lord Oden, and when they take over the school, of course the people are not walking around anymore and just talk to each other, and make jokes, but they would only be whispering, so I had my application for creating a decorator that turns this saying function into a whispering function, but of course what is important about decorators I guess to understand it, is that they only modify the behavior of the function when you decorate it. They don't really permanently change the function itself.
27:47 Michael Kennedy: Right, you've got to put the decorator on and if you don't, it's not like somehow importing it is going to sort of patch and rewrite all the functions, yeah. Yeah, so with decorators, you've got this sort of, you take a function, and its job is to take another function, and then it can add behavior before or after, and then hopefully at some point call that function, and all that takes a little bit of interesting juggling with *args, **kwargs, and I think that's probably why decorators are challenging, 'cause you've got to learn the decorators. You've got to learn some of the closure data capture stuff in there, and then you've got to learn all these, how to juggle *args and **kwargs all at the same time, so that's all a little bit crazy, but you also talked about not losing the meta data, so if there's a crash, or you want to ask what is this function that I'm calling, right? A regular unsophisticated decorator would say, the function is the decorator function, not the internal wrapped function, right? So you also had some work on that.
28:55 Anna-Lena Popkes: Yeah, so I only learned about it then too. That there is actually when you apply a decorator, the metadata of the function is replaced by for example the name, the doc string, and so on, by the __repr__ function, so when you want to look at the doc string, you don't actually get the doc string of your function anymore, which is not so nice.
29:14 Michael Kennedy: Right, if you ask for help, you get help on the decorator or something, right?
29:18 Anna-Lena Popkes: Yeah, which is usually not so useful. So of course that's also what I learned during the 100 Days of Code, there are packages for almost anything. I'm not sure whether there are many things left that haven't been solved of at least there were attempts to solve it, so there's the tools module, and then there is the functools.wraps __repr__ that you can apply to the __repr__ function. That sounds confusing now. But that carries over the name and the doc string. It's very easy to use, and yeah, I think it should be, you should use it by default to make sure that you don't lose the information related to your original function.
29:57 Michael Kennedy: Yeah, that's a really nice touch and makes it a proper decorator, for sure. This portion of Talk Python to Me is brought to you by Us. Have you heard that Python is not good for concurrent programming problems? Whoever told you that is living in the past, because it's prime time for Python's asynchronous features. With the widespread adoption of async methods and the async and await keywords, Python's ecosystem has a ton of new and exciting frameworks based on async and await. That's why we created a course for anyone who wants to learn all of Python's async capabilities. Async techniques and examples in Python. Just visit talkpython.fm/async and watch the intro video to see if this course is for you. It's only $49 and you own it forever. No subscriptions. And there are discounts for teams as well. You talked earlier about data classes, and how they are these sort of simple little containers, but they implement things like the __repr__ function. The thing that pre dates data classes really was namedtuples, right? So you spent some time on that as well, and I'm a big fan of namedtuples, because.
31:06 Anna-Lena Popkes: Me too, yes.
31:07 Michael Kennedy: They're so much nicer than, what is the third thing in this tuple? Is that the right one? And the string representation is not that helpful, right? So.
31:18 Anna-Lena Popkes: And also you get confused so easily with usually, normal tuples with assigning the fields with the order when you have more fields. It gets so confusing.
31:28 Michael Kennedy: Yeah, it definitely does. So maybe tell us how namedtuples appeared in Castle Kilmere.
31:35 Anna-Lena Popkes: Kilmere, yeah. So I talked about these Dark Army members before, and of course once you switch to the dark side there's no way back. Either you get killed by the leader, or you yeah, you just stick with it, so that was perfect since tuples are immutable, and namedtuples are basically an extension of tuples, so I created my Dark Army member class, as a namedtuple, so that once you create a Dark Army member, it is definitely going to be a Dark Army member at all times.
32:08 Michael Kennedy: That's really cool. I love it, I love it. That's a really creative use of it, interpretation of the immutability of namedtuples. Another area that you covered was abstract base classes, and I feel like that's a pretty advanced topic as well. What did you find to use abstract base classes for in your universe?
32:27 Anna-Lena Popkes: So of course I found a great thing again, namely spells, that was also something I learned, that there are actually many different kinds of spells. You have a curse. You have a jinx. You have a hex, you have a charm, a transfiguration, and so on and so on. But all of them are of course spells, and abstract base classes are very useful when you have classes that all belong to one base class, and all of these sub classes should implement certain methods from the base class, but you don't want to be able to instantiate this base class itself. So for the spell, each spell should have a name, and then an incantation, and a certain effect, and I also added in defining features, for example that a curse should make people suffer. Or it should harm people. That's, yeah, it sounds mean, but that's what curses are for, right?
33:17 Michael Kennedy: That's right.
33:18 Anna-Lena Popkes: So yeah.
33:19 Michael Kennedy: It's a tough world.
33:20 Anna-Lena Popkes: And yeah, so I had the abstract base class for spell, and then you flag all the methods that must be implemented by the sub classes with the abstract method decorator, which was nice to know about decorators at that point. Then I had all these different sub classes, like curse, transfiguration, and so on.
33:41 Michael Kennedy: Yeah, one of the things I think is really powerful about that is when you have regular inheritance, if you had say a charm that was derived from a spell, right? There's no normal way to say it has to do its own version of cast and its own version of defining features, but if you make it an abstract base class, you can say those abstract methods, it makes sure that you implement them, or you just can't use the charm, right? So that's a really nice way to make that work.
34:08 Anna-Lena Popkes: Yeah, yeah, I agree, absolutely.
34:10 Michael Kennedy: Yeah, that's something I don't see that often in Python, but I do like it, and it's very cool. And then you've got to test your universe once you build it, right?
34:19 Anna-Lena Popkes: Yes, so that was quite nice, since I hadn't spent a lot of time on testing, although that's so important. I just realized it then and now that I'm working at Microsoft how important it is to really test your code from the beginning, and how much it can tell you about your code, and really think about well, how can this function be broken by a user? Or what kind of silly inputs could you put in there?
34:45 Michael Kennedy: Mm hmm, yeah, it's all the bad inputs and things you don't check for. It's easy to put in the right number or the right value and go, oh, that worked, but it's everything else, right?
34:54 Anna-Lena Popkes: Yeah, and once you created the test, you can always rerun them, so if you completely change your code base, and run your tests, you at least can be sure that most of the functionality is still working.
35:05 Michael Kennedy: Yeah, I think it's great. It's probably a little extra challenging in your day job compared to Castle Kilmere, because machine learning seems kind of hard to understand. It's a little opaque, and it's just hard, it's just hard to think about it, I think. Do you find it to be challenging?
35:22 Anna-Lena Popkes: Yeah, absolutely, but it was also very useful to start looking at it with such a, or a more simple example, like my magical universe, since it got me started with pytest, and right now I know all the basics of pytest, and I can make sure that I use the more advanced features, and pytest is just so powerful. I didn't really realize that before you can do so many things with it.
35:48 Michael Kennedy: Yeah, it really is amazing. It's great. And I think there's a good lesson here. Learn the one thing at a time, right? Learn testing in a simple space where you understand the other stuff, the stuff you're testing, and then you can apply the things that are more challenging, like machine learning.
36:03 Anna-Lena Popkes: Yeah, absolutely.
36:05 Michael Kennedy: Yeah, cool.
36:06 Anna-Lena Popkes: It was also nice to look at how to write proper test functions. I think that's also a big part of it.
36:13 Michael Kennedy: Yeah, I think a lot of times people don't put enough attention to writing proper test functions, and they just throw something together, and then it becomes hard to work with because it didn't get the same attention the other part of your program did.
36:25 Anna-Lena Popkes: Yes.
36:26 Michael Kennedy: And then the testing hard, and then you stop doing it. Then you have bugs, and it's not good. So that pretty much covers the magical universe side of things, but there's a few other areas maybe worth just touching on really quick. One is the if dunder name equals dunder main, right? That's always confusing isn't it?
36:49 Anna-Lena Popkes: Yeah, it was actually one of my favorite blog posts, since before that I always used that line so many times, but I never thought about what is actually happening here?
37:01 Michael Kennedy: Yeah, yeah, yeah.
37:02 Anna-Lena Popkes: And when I started looking at it, I was first so confused, but then I broke it down into individual steps, and right now, when I see it I pretty know what is happening, and that is nice.
37:13 Michael Kennedy: Yeah, I think this is the first place where I first encountered it where I realized that there were like special variables or things that were set or like dunder name, I'm like, oh, wait, there's a dunder name? Where does that come from?
37:27 Anna-Lena Popkes: Yeah .
37:28 Michael Kennedy: But there's also dunder file and other stuff, right? That you can like, oh, there's other things like this that I can work with if I need them.
37:34 Anna-Lena Popkes: Yeah, you usually don't know about them if you never took a look at the different things.
37:41 Michael Kennedy: Yeah, it's pretty cool. So, it's not super hard once you learn, right? If you run the program directly, and you print out dunder name, you'll see main, dunder main, but if you import it, you'll see whatever the name of the module was, right? You can kind of work your way though, and it's not super confusing. It's just, when you first see it, you don't know where it comes from, right?
38:02 Anna-Lena Popkes: Yeah, it looks, for me it looked quite scary with all these dunders, and the, yeah, I was really confused.
38:10 Michael Kennedy: What is all this? Why are these symbols back in my Python? What's going on? Yeah, yeah, for sure. I don't know. Some languages have like a convention that if a function is called this, and you run that module, then it will just run that function, like C has its main, and C# has a static void main. Maybe it worth adding something like that to Python. Once you learn it, it's fine, but as a beginner I think it's one of the things that you have to encounter pretty soon that just looks weird and out of place.
38:44 Anna-Lena Popkes: I agree, yeah. It's used a lot of times, even in the beginning, without knowing what it's actually doing, yeah.
38:52 Michael Kennedy: Right, exactly. Yeah I think probably the two big confusing starting points are this dunder name thing and then virtual environments, right? Both of those can get you right away, when you're not really ready to think about them, yeah?
39:06 Anna-Lena Popkes: Absolutely.
39:07 Michael Kennedy: Yeah, and I guess also maybe just underscores, right? You talked a bit about how underscores are serving so many purposes.
39:13 Anna-Lena Popkes: Yeah, that was also a really nice thing. I really liked spending time on it. Since I think when you don't know about the naming conventions in Python and how to use underscores appropriately, and you're used to some different programming language, For example, I came across code once of a colleague that I think he was programming in C before, and he named all the magic, his methods with dunder name, and not the double underscore. That was like, you shouldn't do that in Python. Like that has a special meaning. That's not good. And he had just no idea about it, since he never looked at the different underscore patterns which can be, yeah, they are just different sometimes.
39:56 Michael Kennedy: Yeah, you have at least five listed here, and there maybe are even more, yeah. There's a lot of different uses for the underscore. So Python is a language without too many symbols, but they love the underscore for sure.
40:09 Anna-Lena Popkes: They do, absolutely.
40:12 Michael Kennedy: That's definitely one that shows up. All right, so, I think you've had a really interesting take on this 100 Days of Code, and I really like how you created your magical universe, and that's great, so what were your main take aways from this whole experience?
40:25 Anna-Lena Popkes: So one of the main take aways was that it can be extremely rewarding to share your work with others, and get feedback from other people. Especially when it's something that can be useful also for other people, and it's really, really, really useful if you directly apply what you learn. So if you learn about decorators, but never try to build your own decorator, you never actually I think fully understand what is going on. So that is a really important thing.
40:55 Michael Kennedy: Yeah, it's one thing to learn something, but if you don't try to use it, at least in programming, it's not going to, it's not really going to stick. You're not going to internalize it, yeah?
41:04 Anna-Lena Popkes: No, absolutely.
41:06 Michael Kennedy: Were you surprised at how popular your post on Reddit became?
41:09 Anna-Lena Popkes: Oh, absolutely, absolutely, I was so surprised. I really just put it up there after I don't know maybe I spent a week on it and then I thought, oh, this is just so much fun. Maybe it's also fun for others to learn about the features by using magic, and then so many people liked it so much, it was a great, great experience.
41:30 Michael Kennedy: Yeah that must have felt really good to see so many people enjoying it.
41:33 Anna-Lena Popkes: And it also motivates you to go on and keep working on it.
41:37 Michael Kennedy: I'm sure, like well now I have to do this.
41:39 Anna-Lena Popkes: Yes.
41:41 Michael Kennedy: Do you think it made you a better developer, going through this process?
41:44 Anna-Lena Popkes: Yeah, I think so, so for example, it introduced me to many advanced concepts, and I think most of them I didn't even know before, or I never fully understood them, and now with working in this AI residency I could apply quite a few of them already. For example, I used abstract base classes, which I never heard of before. Yeah, definitely it made me a better developer. But there's still a long way to go, I guess.
42:08 Michael Kennedy: There's always a long way to go. It's like an infinite path, so you. But I think you do get to really dig into some of these things that you maybe use but you don't really worry too much about, like I put a little @ symbol and then something goes here and then it works differently, but you don't really think about the decorators and the func tools and just all the layers, and you know, but when you've got to write about it, and the purpose is to say that, then it's different, yeah? All right, well let's talk a little bit about where you are working now, and where you're going. So, you're a big fan of machine learning, I can tell. You talked about how you actually changed your career basically because of machine learning, which is really great. So you have another cool GitHub project called Machine Learning Basics. Do you want to tell people about that?
42:59 Anna-Lena Popkes: Yes, so in general I really like working on projects that benefit many people, or at least have the potential to benefit many people. So I started this machine learning repository when I was preparing for interviews, and when preparing for interviews in machine learning, you usually have to know about the basic machine learning algorithms like K-means, which is a clustering algorithm, or linear regression, logistic regression, and so on, but you really have to know how they work, so you won't, it won't work if you just use scikit-learn and then the implementation of them, so.
43:37 Michael Kennedy: I call this function, I give it these numbers, and then magic.
43:40 Anna-Lena Popkes: Yeah, but that's what many people do, actually.
43:42 Michael Kennedy: Yeah I'm sure, yeah.
43:43 Anna-Lena Popkes: Yeah, and it's very useful. It can be very useful, but it's also really nice to just understand what's going on, so that was also a project I started just for me when I was preparing and I created Jupyter Notebooks with first all the theoretical, most important theoretical basics about the algorithms, with formulas and so on, and have everything in one consistent notation, and then I implemented them without using any of the scikit-learn methods and so on, but just Python and NumPy, and yeah, when I was applying to these different residency programs and other things, at some point I thought, oh, well, other people are applying too to these programs, so they can probably use that, and it became also way more popular than I ever expected.
44:31 Michael Kennedy: Yeah, I'm looking at the repository, and it has 2,000, almost 2,600 GitHub stars, 400 forks. I mean this, this is really, really cool, and one, I think it's a fantastic way to learn. Two, I think, I don't know, I'll ask you, like how were people's impressions when they said, well, what do you know about this? Did you share your GitHub account name with them and stuff like that? When you applied to jobs?
44:58 Anna-Lena Popkes: Yes, you usually do that. I think when I applied, I didn't even have that, it wasn't even public, so at that point, it didn't help me much. Right now it would probably help a lot.
45:11 Michael Kennedy: It probably would, yeah.
45:12 Anna-Lena Popkes: But it was really just to teach myself how these algorithms worked, and only at that point I really realized do I really know how linear regression works? Do I really know how K-means works? Like the underlying structure? It was really, really good to take a detailed look at the algorithms again.
45:30 Michael Kennedy: Yeah, I'm sure. I think there's so many machine learning libraries that you can use, but like you said, if you don't know the foundations, you put numbers in, you get numbers out, and you kind of just have to trust them. You can't reason about whether, does this make sense? Is this working right? So I think this is really great, and I'm sure a lot of people out there will be happy to hear about it, be able to use it.
45:52 Anna-Lena Popkes: Hopefully, yes.
45:53 Michael Kennedy: Yeah, you seem to have a real knack for creating things that become quickly popular.
45:58 Anna-Lena Popkes: Yeah, yeah, seems like that.
46:00 Michael Kennedy: Yeah, yeah, it's nice, it's nice. All right, so maybe we could talk a little bit about the project that you're working on, not necessarily the project. It might be not public or anything, but just the general area of machine learning and healthcare.
46:13 Anna-Lena Popkes: Yeah, so that's basically my main focus, so what I want to focus on, namely apply machine learning algorithms to healthcare problems, since I think there is, yeah, most healthcare applications just promise huge improvements for so many people. There is already I think a lot of algorithms on detecting cancer for example from images, that is quite popular.
46:35 Michael Kennedy: Yeah, there have been some amazing research projects or research challenges, I guess, around looking at various scans, or mammogram type things, and automatically detecting cancer, and those machine learning algorithms are getting as good or better than doctors, right?
46:53 Anna-Lena Popkes: Yes, and with healthcare, the thing is that you have tons of data lying around at the hospitals. It's just amazing how much data they collect without ever using it. It's just lying there, and with machine learning, you can take advantage of it and create great things. I think there's a lot of possible applications there.
47:14 Michael Kennedy: Yeah, absolutely. I definitely think there are. I think the challenge with healthcare is people are so protective of the privacy, understandably. I wonder if there will be, there's big healthcare organizations, and within those organizations, they're allowed to share the information with say their doctors, the different doctors and specialists. I wonder if there'll be these healthcare organizations who create machine learning algorithms based on only their own data, and it becomes like an advantage of that organization at some point in the future. I'm not sure that's a good thing, but I wonder if that's something that will happen because of the privacy. What do you think?
47:52 Anna-Lena Popkes: Yeah, I agree. Yeah, that might really happen. It's very good that healthcare data is so heavily protected, but a lot of times people also don't realize how much good you could do with using the data if you have proper rules how to use it.
48:08 Michael Kennedy: Right, if we could all live 10 years longer or the last 10 years much more healthy, maybe we wouldn't want as much privacy. We might make that trade off. I mean we trade our privacy to Facebook for a like, right?
48:19 Anna-Lena Popkes: Yes, yes.
48:22 Michael Kennedy: I mean we could live better. We could make better trade offs. I don't know. So your master's thesis was in this area, right?
48:28 Anna-Lena Popkes: Yeah, so I really liked working on my master's thesis. It was a project together with the German university hospital, and their radiological department, and they said, well, we have tons of radiological reports lying around here, so these reports are, whenever a radiologist looks at an image, he has to in Germany create a report and write down I see this, I see that. This has changed from last time, and so on and so on, but he or she doesn't only have to write the report, but there has to be another radiologist that checks the report, and this just takes massive amounts of time, which could be used in way more useful ways. So they said that they would like to have some kind of auto completion for the doctors so that when they write the reports it would basically complete the sentence or at least make suggestions to speed up the whole process, but of course it was German data, and I think for English, there's already a lot of stuff there, but in general the medical language is very complex, so there are a lot of terms for some types of cancers. You have five names that all mean the same thing. Then you have all the synonyms. Sometimes you can write something with a K, sometimes with a C, and it can be really complicated. I worked on a recurring neural network for processing these reports, and then really using it in the hospital, and right now we are at the stage, it takes quite a while for them to really incorporate it in their system and try it out, evaluate it, and so on, but hopefully then it can be used at some point and really be used by the doctors there to save time.
50:11 Michael Kennedy: I think that's a really meaningful project. That sounds super cool.
50:15 Anna-Lena Popkes: And it's way more fun to work on projects like that where you can see the end application.
50:20 Michael Kennedy: Oh, I'm sure it is. Yeah, one of the really sad things is to work on a project and then see nobody uses it, right? Like, that doesn't feel good. I can certainly see as a programmer how much auto complete helps, right? Like I know as I'm typing, if it just, you type a few characters and it completes the next 10, it's super helpful, and I don't know if it happens for you, but at least in the States, Gmail has started auto completing sentences in the Gmail editor.
50:50 Anna-Lena Popkes: Oh, that is interesting. No, I never used.
50:52 Michael Kennedy: Yeah, so it actually studies your email chain and then it will propose maybe the next five or six words in a sentence, so I'll be like, I'm excited to have, and it'll say you on the podcast. I'm like, whoa! It'll know.
51:08 Anna-Lena Popkes: That is super cool.
51:09 Michael Kennedy: And then you just hit tab, and it auto completes it, and off it goes, so.
51:13 Anna-Lena Popkes: Oh, that's awesome, yeah.
51:14 Michael Kennedy: So I think these ideas are starting to make their way into normal life, right? Outside of programming and super structured work, so I think it would have a huge value, although the danger is if Gmail gets it slightly wrong, whatever, right? You made a silly mistake. We're all used to auto correct on our phone messing up and stuff.
51:33 Anna-Lena Popkes: Yes, yeah.
51:34 Michael Kennedy: But if it says that for a cancer diagnosis, then that is a whole different type of problem, right? So the stakes are very high.
51:40 Anna-Lena Popkes: Yes, absolutely. You would definitely still have to check I guess, from a different radiologist.
51:45 Michael Kennedy: Yeah, but just the creation of it much, much more quickly, I think it's really powerful, so.
51:50 Anna-Lena Popkes: When you think of the tons of reports they create every day, absolutely.
51:53 Michael Kennedy: Yeah, you think a lot of times they're being doctors, but their day to day stuff is actually to sit down and write reports, not to go see patients or work with people, right? It's they're bogged down. I have some friends and neighbors who are doctors, and they just talk about the reports, and the bureaucracy, and just, it's really frustrating to them.
52:13 Anna-Lena Popkes: Absolutely.
52:13 Michael Kennedy: Yeah, okay, yeah, this just sounds super cool. What else are you interested in studying in machine learning?
52:20 Anna-Lena Popkes: I think there are way too many things to be interested in. There's so much going on.
52:22 Michael Kennedy: It's early days, right? The last five years, it feels like machine learning has gone from this science fiction to science, right? Like it really has come into a thing, right?
52:33 Anna-Lena Popkes: Yeah, it became quite popular. So I really like what we talked about earlier, so that you combine cognitive science and machine learning, and that you spend more time on that and maybe try to become, learn more about the human brain, and use its power to create new machine learning algorithms. I think that's a very, very interesting field.
52:55 Michael Kennedy: Yeah, absolutely. I think we're just at the beginning, and I don't really know where it goes, but it's going to be very interesting what happens to jobs, what happens to society, what becomes possible, what become scary, and so on. I guess one thing just in the scary space that I saw recently is apparently China, some either group or the government, I don't remember which, has come up with a way to identify by the way they walk.
53:21 Anna-Lena Popkes: Oh, that it scary.
53:22 Michael Kennedy: Instead of facial recognition, just their gait, the way they walk.
53:25 Anna-Lena Popkes: Wow.
53:26 Michael Kennedy: I thought, whoa, that is something, right? So, yeah, pretty crazy.
53:32 Anna-Lena Popkes: Yeah, I also heard about recently there was a company in China that tracked their employees the entire day through cameras, and they read your facial expressions, so they would know your mood all the time, when you went to the bathroom, when you were at your desk, and then they have this big database of where they save all the information about all the people all the time, and yeah, when I read the article, I was like, oh, I never want to live in China. This is just so scary.
54:02 Michael Kennedy: There's some amazing stuff in China, but that sounds so scary for sure. I would not want to work at that place at all. Interesting. So I guess maybe that brings us to my last few questions here, is what is the big promises of machine learning and AI are? And what do you think the big challenges or dangers are?
54:22 Anna-Lena Popkes: I think the big promises are that you can make life better for so many people, like healthcare is just one of the applications where it can hugely improve our daily life. Dangers and challenges, like dangers, I see so many dangers, since you can never stop people. There will always be people who want to use AI to do bad things, and since there is such a lot of, such big number of projects at the moment going on, and governments have different ideas, and different ways of treating people, there will also be bad things, especially when you look at general AI, when you, I think that could be a whole podcast so.
55:04 Michael Kennedy: Yes it could.
55:05 Anna-Lena Popkes: There's just so much to, you can be scared about there.
55:09 Michael Kennedy: So maybe define that for folks. Like there's the focused AIs, like Alexa, or the thing that can say cancer, not cancer by looking at a picture, but what's general AI?
55:20 Anna-Lena Popkes: Yeah, so there's a difference between general AI and specific AI just as you just said, so specific AI means that you're artificially intelligence is good at doing one thing, like predicting sentences, or speech recognition, but it has just one thing, but we as humans, we have more general AI. We can dance. We can talk. We can like find faces in a crowd, and so on, and the idea of general AI is have to have more like a human level AI that has all these different kinds of intelligence, so social intelligence, but also that it can perform lots of different tasks equally well.
55:59 Michael Kennedy: Do you think that will happen? Do you think somebody will come up with it? You think so?
56:03 Anna-Lena Popkes: I think definitely at some point it will happen, because there are too many people who want it to happen, and you can't stop people from researching and working on it, and even if there are people who want to restrict it, there will always be labs who just, I think that's just human nature.
56:20 Michael Kennedy: Yeah, it has to be solved globally, or at least addressed globally, right? Like no one government, it's not like the EU can say, well, we're not doing it. Well, okay, maybe Uruguay is going to become the next place that creates it, right? 'Cause they're not subject to the rules, and they see it as an advantage. I have no idea about Uruguay, but you know. Just, if it's not dealt with on a global level, it can't even be addressed, but then you have even bad actors amongst places that agree, right? Yeah.
56:47 Anna-Lena Popkes: It's so important that this issue is, becomes more like people become more aware of how present it is and how important it is to talk about it, and to really understand what is going on and what might happen in the future, so we can start a global discussion on how we want to handle these things.
57:06 Michael Kennedy: Do you think politicians should discuss these things? Do you think they should be part of prime minister political debates and things like that?
57:14 Anna-Lena Popkes: I think they should be a part of it, yes, but I definitely think that you should talk to the experts most of the time, and that they should at least have equal rights in talking about it and making decisions, so it must really be I guess a representative of all kinds of people, but the experts are those that really understand what can be done, and what is currently being worked on.
57:41 Michael Kennedy: Yeah, yeah, I feel like at least I can speak from the US perspective. I feel like there's a lot of push back against immigration or outsourcing or other stuff but I think the reality is a lot of it is the AI and the robots are changing people's job and careers much more than any of the other effects that people are arguing and screaming and yelling about, you know?
58:01 Anna-Lena Popkes: So many people don't realize that I guess how much influence AI will have on their jobs, and they just stick to what they are doing right now, and they think, oh yeah, I can use my smart phone. It's so cool to have Siri in my phone and so on, but they don't think about the long term changes that will come.
58:20 Michael Kennedy: Yeah, it's going to be very interesting in all sorts of ways in the next 10, 20 years.
58:24 Anna-Lena Popkes: I agree, yep.
58:25 Michael Kennedy: Yeah, all right.
58:25 Anna-Lena Popkes: Interesting, yeah.
58:27 Michael Kennedy: I think there's great potential for very much good, and I think there's also a potential for lots of disruption, so it's going to be a mixed bag, but it's going to be interesting to watch it play out for sure.
58:37 Anna-Lena Popkes: I absolutely agree.
58:38 Michael Kennedy: Yeah, and Python and scikit-learn will be at the foundation somewhere I'm sure. Cool, all right, well this is super interesting project, and thanks for sharing your journey with us.
58:49 Anna-Lena Popkes: It was my pleasure.
58:50 Michael Kennedy: Yeah, so before you get out of here though, I got the two questions, final questions for you. When you're writing your Python code, what editor do you use?
58:59 Anna-Lena Popkes: I use Vim.
59:00 Michael Kennedy: Vim? Right on.
59:01 Anna-Lena Popkes: Yeah, I was, my fiance convinced me to start using it about two years ago, and I think I can't switch to anything else anymore .
59:09 Michael Kennedy: Once you learn something, yeah, it's tough. Do you also use Jupyter Notebooks?
59:13 Anna-Lena Popkes: Yes, yes, I do use them, but I get really annoyed with not having all the keyboard shortcuts.
59:18 Michael Kennedy: I know.
59:19 Anna-Lena Popkes: So yeah, I usually use them for like most of the time.
59:23 Michael Kennedy: Yeah, that's cool, and then notable PyPI packages. What ones do you think people should learn about?
59:29 Anna-Lena Popkes: Yes, so one I think many people know about already, but it was so useful for me at the point when I started programming was ipdb, so the IPython debugger. It made life so much easier for me, so that I think it's a great package, and then I heard about Black on the podcast a few months ago. I think it was the podcast on coverage, wasn't it?
59:49 Michael Kennedy: Yes, I think it was, yeah. Ned Batchelder, yes.
59:52 Anna-Lena Popkes: Yes, it's a Python code formatter, and I tried it a few times, and it looks really, really good, so I will definitely spend more time on learning about Black.
59:59 Michael Kennedy: Yeah, Black is cool. There's been linters that'll tell you how you formatted your code wrong, but Black goes farther and fixes it for you, which is really nice.
01:00:08 Anna-Lena Popkes: I really like that.
01:00:09 Michael Kennedy: Yeah, that's cool. All right, so people are excited about having this magical universe where they can try out their 100 Days of Code and get better at Python and stuff. What do you say for them? Like what resources do you have? How should they get started?
01:00:22 Anna-Lena Popkes: I think the most important thing is just to find a topic that is interesting for yourself and that really motivates you to sit down every day, and that you make it fun for yourself, and that will make it way easier.
01:00:35 Michael Kennedy: Yeah, I think fun is a super key part, and I'll link to your blog posts and your GitHub repository and all that.
01:00:40 Anna-Lena Popkes: Yeah, please, yeah.
01:00:41 Michael Kennedy: Yeah, definitely, all right, Anna-Lena, thank you so much for being on the show. It was really interesting and fun to chat with you.
01:00:47 Anna-Lena Popkes: You too. Thank you. Bye.
01:00:49 Michael Kennedy: Bye. This has been another episode of Talk Python to me. Our guest on this episode was Anna-Lena Popkes. And it's been brought to you by coder.com and Talk Python Training. Coder.com brings full Visual Studio code and cloud computing to every device. Create your free www.coder.com account and start collaborating on code today. Visit talkpython.fm/coder to create your free account. Want to level up your Python? If you're just getting started, try my Python Jumpstart by Building 10 Apps, or our brand new 100 Days of Coding Python, and if you're interested in more than one course, be sure to check out the 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 iTunes feed at /itunes, Google Play feed at /play, and 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.