Summary
An effective strategy for teaching and learning is to rely on well structured exercises and collaboration for practicing the material. In this episode long time Python trainer Reuven Lerner reflects on the lessons that he has learned in the 5 years since his first appearance on the show, how his teaching has evolved, and the ways that he has incorporated more hands-on experiences into his lessons. This was a great conversation about the benefits of being deliberate in your approach to ongoing education in the field of technology, as well as having some helpful references for ways to keep your own skills sharp.
Announcements
- Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
- When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With 200 Gbit/s private networking, scalable shared block storage, node balancers, and a 40 Gbit/s public network, all controlled by a brand new API you’ve got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. Go to pythonpodcast.com/linode to get a $20 credit and launch a new server in under a minute. And don’t forget to thank them for their continued support of this show!
- You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers you don’t want to miss out on this year’s conference season. We have partnered with organizations such as O’Reilly Media, Corinium Global Intelligence, ODSC, and Data Council. Upcoming events include the Software Architecture Conference in NYC, Strata Data in San Jose, and PyCon US in Pittsburgh. Go to pythonpodcast.com/conferences to learn more about these and other events, and take advantage of our partner discounts to save money when you register today.
- Your host as usual is Tobias Macey and today I’m pleased to welcome back Reuven Lerner to talk about the benefits of deliberate practice for learning and improving programming skills
Interview
-
Introductions
-
How did you get introduced to Python?
-
In your first appearance on the show back in episode 2 we talked about your experience as a Python trainer. How has your teaching style evolved in the past 5 years?
- How has the focus and scope of your training changed in that time period?
-
What have you found to be some of the most helpful and effective tactics in your training?
-
From the learner perspective, what are some strategies that you recommend for retaining information, particularly in the context of gaining technical knowledge?
-
In-person training vs. real-time online training vs. recorded videos, advantages and disadvantages of each.
-
Blended learning, in which we combine aspects of the above
- Beyond in-person training, what are your preferred methods for learning and maintaining new skills?
-
What is deliberate practice and how does it differ from the habits that many of us might default to?
- What are some of the resources that you provide for students of your trainings for practicing?
- What are some of the outside resources which you have found most useful or effective?
Keep In Touch
- Website
- Blog
- @reuvenmlerner on Twitter
Picks
- Tobias
- The Manager’s Path by Camille Fournier
- Reuven
Links
- Deliberate Practice
- Reuven On Episode 2
- CGI == Common Gateway Interface
- Language Phrasebook
- Jupyter Notebook
- Walrus Operator
- Python Bytes
- List Comprehension
- Weekly Python Exercise
- Python Morsels
- PyBites
- Practice Your Python
- Python Workout book by Reuven Lerner
- PyTest
- Brian Okken
The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA
Hello, and welcome to podcast dot in it, the podcast about Python and the people who make it great. When When you're ready to launch your next app or want to try a project you hear about on the show, you'll need somewhere to deploy it. So take a look at our friends over at Linode. With 200 gigabit private networking, scalable shared block storage, node balancers, and a 40 gigabit public network, all controlled by a brand new API, you've got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. And they also have a new object storage service to make storing data for your apps even easier.
Go to python podcast.com/linode, that's l I n o d e, today to get a $20 credit and launch a new server in under a minute. And don't forget to thank them for their continued support of this show. And you listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers, you don't want to miss out on this year's conference season. We have partnered with organizations such as O'Reilly Media, Corinium Global Intelligence, ODSC, and Data Council.
Upcoming events include the software architecture conference, the Strata Data Conference, and PyCon US. Go to python podcast dotcom/conferences
[00:01:33] Unknown:
to learn more about these and other events, and take advantage of our partner discounts to save money when you register today. Your host as usual is Tobias Macy. And today, I'm pleased to welcome back Reuben Lerner all the way from episode 2 to talk about the benefits of deliberate practice for learning and improving your programming skills and the changes that he's gone through in his training business since the last time we spoke. So, Reuben, can you start by introducing yourself? Yes. Hi, Tobias. It's great to be back. So I am a Python trainer. Basically, every day, I'm in a different city, country, company,
[00:02:05] Unknown:
teaching Python, everywhere from Python for non programmers all the way up to advanced workshops and data science stuff. And when I'm not on-site at companies, then I have a whole bunch of online courses that I do both video and, text based as well. And, basically, what I say is my job is helping people become more fluent with Python and just becoming better at it so they can do their jobs better. And do you remember how you first got introduced to Python? Yeah. So back in 1993, the early part of the year, I was I just graduated from MIT, but I was still hanging out at the student newspaper.
And basically, we I, together with 2 other people, put together a website for the newspaper, and we sort of stumbled into the fact that you could start writing programs for the back end of websites, what were then known as CGI programs. And there were a few high level languages that people could do it in at the time, And I actually I learned both Python and Perl at the time, and I gravitated more toward Perl, but I always had sort of Python at the back of my mind and was talking to people about it and using it. And I sort of gravitated from Pearl to Ruby. And then from Ruby, I was like, well, where am I gonna go from here? It seems that there's a lot of interest in Python, certainly in the training space. And so I sort of came full circle from having played with Python back in the early nineties to now it more or less dominating everything I do. But I'm 1 of those people who learn Python back from the man page because that's all there was.
[00:03:37] Unknown:
And now there seems to be a slightly more documentation and probably better written than, but, of course, the language is also much larger language, a much larger larger ecosystem than it was at the time. Yeah. It's definitely always interesting talking to people who have been around since some of the early days of computing and programming. And nowadays, if you go to learn in language or you go to learn something, there are tutorials and books and podcasts and everything you would want to be able to learn from. Whereas in the early days, it was just you had the manual, and that was all there was. And if you were lucky, you might know somebody who could answer some of your questions. So it's always interesting to get that juxtaposition of the then and the now in terms of what's available for learning resources and the types of people who are doing the teaching and sharing their knowledge.
[00:04:18] Unknown:
Yeah. Yeah. It's just the the the range and scope and depth of information you get now from blog posts to YouTube to paid courses to Stack Overflow. I mean, the number of people in my Python courses I just just yesterday, I was teaching a company. I was teaching an advanced Python class, and all these people have been using Python for more than a year. And at least half of them basically said, I don't understand how language really works, but I'm able to do my job because I go to Stack Overflow, find roughly what I want, copy and paste it. And, you know, it mostly works most of the time, which raised the question, why are they taking my class? And the reason is they wanna know what they're doing and why when they pay something, it does not work. Why do they have to fidget with it for 8 hours until they finally get it to work? Like, so so having understanding is definitely useful, but you can get away with understanding less nowadays than you could then because of the wealth of stuff you just copy and paste. So it's like a, you know, a double edged sword. Yeah. It's definitely interesting. And particularly for people who are doing the Stack Overflow programming
[00:05:20] Unknown:
style, it it's always useful to have that broader context and the knowledge of what's actually happening under the cover so that you can make more informed decisions about how to approach a problem and what problems are viable and which ones are actually going to need a much greater amount of effort where when you are new and you have that naivete of thinking that programming will solve everything, you can be much more ambitious and say, oh, I'm gonna build this fantastic site that's gonna do these thousands of things, and then you actually go to start trying to solve that and realize that it's it's far beyond the scope of what you're capable of.
[00:05:51] Unknown:
So I, often make the analogy between Stack Overflow and a phrasebook that you would use when you go visit a foreign country and you don't know the local language. And so the phrase book is good for sort of, you know, where's the train station? Where's the bathroom? I'd like to buy that loaf of bread. But the danger, of course, with a phrase book is a, you'll say it, and it won't come out the way that you want. And I'm not referring to, like, you know, the Monty Python Hungarian phrase book sort of a sketch. But you can also have the the the problem of you say something and it sounds so good and authoritative that people then respond to you at high speed, and then you're really sunk. And so, you know, Stack Overflow is great. I mean, all of us use it. I certainly use it all the time to get answers to things.
But, yeah, the the context, it's it's even more useful if you think it's useful when you don't know anything. It's even more useful when you do know things and you know how to judge the answer and then use it to really,
[00:06:45] Unknown:
fix the problems that you're trying to solve. Yeah. I think that's a good metaphor as well because with that phrase book, you might have something that is accurate, but it's not going to be idiomatic. And you're not necessarily going to know what some of the, local colloquialisms are for being able to make yourself known and understood in a manner that a native speaker would be able to. But, you you can be effective, but not quite,
[00:07:08] Unknown:
fluent. And so I think that's definitely a good analogy. Mhmm. Mhmm. And so as I mentioned, your first appearance on this show was back in episode 2, almost 5 years ago now. And at the time, you were already doing training as your primary source of income. And I'm curious how your teaching style has evolved in that past 5 years, and how your overall setup as far as delivering courses, and the types of material that you're addressing has evolved and changed in that time? Wow. So a lot. It's changed a lot. I mean, look. The the core is still there, and I'm still doing some of the same exercises. I'm still giving you know, still telling some of the same dumb jokes. But first of all, I now teach multiple courses. I now have about 10 different courses that I teach, whereas probably back then I had maybe 2. I probably had, a course in intro Python and of course in advanced Python. And even then I'd say I was suckered into thinking, well, the more things I put in my syllabus, the more my clients will like me. And then all I have to do is speak at high enough speed and get through all the subjects in the syllabus, and everyone will be happy. The problem with that, of course, is that it might work okay for the lecture, but the participants of the course actually have to listen, understand, and practice what you're talking about. And so what happened over time was, and this is a continual process.
Over time, each of my courses in each of my courses, I remove material and increase exercises. And I found that as I do that, the more I do that, the happier people are and the more they learn. So I used to, many of the topics that I used to include in my intro Python class. I've now moved to my advanced Python class just for lack of time, And everyone is happy. And it seems that that those subjects that I've moved just never should have been the intro class at all. Rather, I should have been pushing on the basics and and exercising them and testing them in a whole lot of different ways. So that's like thing 1, what I've just sort of spread out the material much more gradually. The other thing is, as I said, included many, many more exercises. So it used to be, I would say, here are dictionaries. Here's what they do. Here's how you use them. Here's an exercise.
Done. Now we know dictionaries. And I I began to understand that even if people understand the syntax, they don't understand the use cases. When would I use a dictionary? How would I use it? What problems can I get into? What problems are better solved with other data structures? And so now I'll typically do with dictionaries 2, 3, or sometimes even 4 different exercises, both in my intro class and my advanced class, so that it'll see, oh, I can use the dictionary as a little database. Oh, I can use it to accumulate information. I can use it as my own little namespace. Like there are different ways that you can use. I can use it as a dispatch table. And the more people practice, the more they start to internalize the ideas.
And the more they internalize it, the more they can then start to express themselves more fluently when they wanna use these data structures, methods, ideas, concepts, and so forth. So I've I've done a lot of that. And and I I would say now, I mean, I don't wanna say 50% of my courses are exercises, but it's definitely much higher than it used to be. If if I start when I start off, it was maybe 20%. I guess it's easily now 30 to 40%. Another thing that I've changed dramatically is well, I don't know if it's dramatic, but, like, I now push and encourage my students to do pair programming when they're solving the problems. I mean, I always had lots of exercises, now I've even more, as I said. But I saw, people working on their own, and programmers programmers tend to be a very, I don't know, stubborn bunch. And I, of course, include myself in that. And, basically, what would happen is people would work on things. If they got stuck, they would check on Stack Overflow, and they do the cutting and pasting we've mentioned earlier, but they wouldn't really be learning necessarily.
But the people who would work 2 people on 1 computer pair programming, Wow. They learned a lot more because they actually had to communicate. They had to describe what they were doing. They had to sort of argue with some about what was the right way to do it. And so I now try, sometimes with more success than others to encourage people to pair program when solving exercises. And I tell them straight out. I say, if you want to gain more from the course, you will do this. 2 people on 1 computer. I'm not going to force you, but I really think you would get a lot out of it. And so. Again, this all has to do with like practice and learning and internalizing.
[00:11:31] Unknown:
And, what I always describe as fluency. You wanna become more fluent in the language just as you wanna become more fluent in a foreign language so you can express yourself more freely. I definitely agree on the fact that by putting 2 people on the same computer, they're much more likely to work through the problem and where if 1 person gets stuck, they might go to Stack Overflow and copy and paste. If there are 2 people, I would think that it's also even less likely that they choose Stack Overflow as their first route solving the problem because they're more likely, I would assume, to turn to the person that they're working with to say, do you know the answer to this? And then it automatically opens up that dialogue of even if they both don't know the answer, they're more likely to talk it through to try and figure it out rather than just immediately saying, no. I don't know the answer. Go to Stack Overflow.
And then even at the point where they do go to some external resource, whether it's Stack Overflow or the documentation or whatever it might be, and they find an answer, if they copy and paste it in, they're probably likely to say, okay. This is why this is working or have a discussion about what the solution is so that they're on the same page rather than just pasting it in, seeing that it had the desired result, and then moving on. 100%.
[00:12:36] Unknown:
Abs absolutely. Also, there are all these little you know, it's I sort of describe it as they're trying to climb 2 ladders at the same time. There's both the conceptual ladder, and there's this syntactic ladder. And especially for real newbies in in Python, that's a challenge. Like where do I put a colon? How does this indentation thing work? What's inside the block and outside the block? Things that, if you've been working with Python for any length of time, are super obvious, but if you haven't, they are not at all. And the number of people who call me over saying my program's not working, can you help me out during exercise, who have forgotten to put a colon at the end of an if line is huge. But if they work in pairs, that doesn't happen, because the other 1 will will probably pick up on it just because you have an extra pair of eyes. So that that's been a when people agree to do it, it's been a big change. The other or another big change that I've made is, you know, most courses that people give, they tend to use a lot of slides. Oh, people love slides, you know, PowerPoint, Keynote, whatever it's gonna be. And I also used to use slides. Probably when we last spoke, I would say I was half 2 thirds using slides.
And now if I use even 5 slides in a 4 day course, it's a lot. What I'm using is Jupyter, the Jupyter Notebook, and it has revolutionized my pedagogy. It's revolutionized my instruction. Because what I do now is I talk, and I live code, and people watch it. I can then send them that Jupyter Notebook file at the end of the day so they can tinker with it more and have it around, and it's a live document so they can play with it. And the only hole in this was that people didn't have live access to it. Jupyter is not really designed for multiple people to access it at once. You can really mess things up if you do that. So I tried that a little bit, and that didn't work out so well. And I went on the Jupyter forums, and I asked what people suggested. And there was 1 person there who said, well, I put together this little open source project called gitautopush, and that turns out to be a magic solution. And the way it works is, so I'll work on my computer on my Jupyter notebook, and I'll be projecting in front of everyone. And by the way, I should add, this not only is sort of more effective because it's more engaging. It also means people can stop me and say, hey. What about this? What about that? And it invites dialogue. It invites sort of it to be a much more interactive experience for everyone.
And they see also how to use Jupyter as what I like to call my my, Python laboratory, that I could do little experiments. What happens if I do x? What happens if I do y? Y? So what what I do then is on my computer, I hook up the, directory in which I'm doing my Jupyter notebook to a GitHub repository, and git auto push pushes it. Every time it senses a change, it pushes it automatically to GitHub, and GitHub automatically knows how to render Jupyter Notebooks. So it's like this 3 way syncing system. That means within about 2 minutes of my having done something, it's up there in GitHub, and people can look at it. They don't have to know anything about Git whatsoever. They just have to point their browser there and look at it. And so now we have this highly interactive, interactive both with me and interactive with the code, available instantly reference that they can use in solving the exercises or just when they go home at night. And I I really think that's improved the the instruction quite a bit more as well. And another thing that I liked about what you were saying before
[00:15:48] Unknown:
is the fact that there's the difference between learning the syntax of a language and learning the context and the idioms and when it's useful to use which techniques because that's usually the harder piece to learn where you can sit somebody down in front of the documentation, and they can understand, okay. This is what a 4 loop is. This is what a conditional is. This is how I call a function. This is how I define a function. But knowing when to use each of those skills and when to extract things out and when to put it into a class or what the use cases are for modules, Those are all the things that are most difficult to learn and require more experience and more experimentation.
And so I'm interested to hear how your exercises and the problem materials that you give to your students address that issue of understanding
[00:16:38] Unknown:
and gaining context for what solutions to use when and how? So for first of all, the way that I structure the exercise is typically, I'll, like, lead up to it. And depending on the course, I'll give anywhere between or depending on the topic, I'll give anywhere between 5 30 minutes, let's say, of introduction and live coding and talking about it. And I'll say, okay. Now you've got some background in it. Here's a problem. Solve it with the tools that you have. And sometimes it'll be more obvious, sometimes less, and they'll go and solve it. And it can take anywhere between, I don't know, 10 40 minutes, depending on the problem. And then I go over it with him, and I solve it. And because the the the solution is not what they're looking for, is not what they should be aiming for. It's the practice. It's the the sort of path that you get there. It's a technique.
So they can see the process that I go through in solving the problem. From my perspective, the solution is not as important as that process. They should see how do I structure it, how do I start with a little bit, and then I check it. And I go a little bit more. And I sort of build out and out and out in doing my coding. I mean, sometimes people say, well, you know, I wasn't able to make it to class. Can I just get the solutions? They'll say, I'll give them to you. But really, it's that process that was the most important thing. I will also and I'll show them when I'm solving a problem. I'll also show them a few different techniques. I'll say, well, you could do it this way or this way or this way. Here is why I prefer it this way rather than that way, either because it's easier to read or maintain, or it's easier to test, or, it's sort of, you know, less complex for people to understand, or it's faster. Right? There are also different considerations we need to have there. Now I wish I had the time, and 1 of these days, I will actually do it in my courses, to have people get up and show their own solutions, because I think that's a really important part of it also. I do that with, my online courses with weekly Python exercise where we will form and I encourage people to show what they've done. And everyone sort of learns from everyone else in that way. And I sometimes, of course, is like I would have called the Python practice workshop, which is sort of like an in person version of weekly Python exercise, where in a day we go through between 68 exercises.
And there, I actually don't show them the solution. Rather, I will have them present it. And if we have, like, 2 or 3 different groups present what they've done, I find that's very useful pedagogically also. And another thing that I do, especially with my non programmers course is because I'll give an exercise and I know that half the people won't be able to do it. And they won't be able to because they're new. It's hard. It's a lot of stuff to do, but you know what? They were probably 80%, 90% there and something just got them stuck where they couldn't finish off. And if I'm physically located in the classroom, I can come over and take a look at their computer. But often, I teach online as well with, like, Webex or with Zoom. And so then it's a little harder, or they're just embarrassed, or they don't even know how stuck they are. And so what I'll do is before I go through the final solution to the problem, I'll ask people who did not get it to work to show me their code. And I love going through 2 or 3 people's code that does not work because it's typically so incredibly close, or it points to misconceptions that they had, misconceptions that it's not only theirs, but many people's.
And if everyone's willing to sort of be embarrassed a little bit and not knowing because, I mean, they're in the class because they don't know, then going through these problematic pieces of code can really, I think, help to emphasize some of the some of the issues. But I'll just say 1 more thing here, which is, I might I can't remember when I started, but for about 5 years now. So it might have been just before or just after I was last on the show. My my hobby slash obsession is studying Chinese. And the teacher I've been with for most of the time, she's an excellent, excellent teacher. And part of the reason is when she says, do you understand this? And I say, yes. She basically doesn't believe me. She says, okay. Give me an example. Give me 2 examples. Give me 3 examples. And it's only when you're forced to actually come up with a solution yourself, even though you, 30 seconds ago, were saying, uh-huh, uh-huh, I understand it. Having to actually act on that and use it and create something based on it is a whole different story. And so especially on the topics that are sort of hard for people to grasp, I won't really believe it when they say, no questions. We get it. I'll force them to actually do something with it. And I think that's, that's sort of how they call it, controlled frustration
[00:20:38] Unknown:
is an important part of the learning as well. And I think it's interesting too to talk a bit more about the way that you structure your lessons and your materials in those different contexts of in person live training versus real time training that you're delivering over the Internet versus training that you're delivering as a recorded video that somebody's going to access asynchronously, and how you structure the feedback mechanisms for each of those, and how you structure the material to make it accessible for all those different environments.
[00:21:10] Unknown:
Right. So this is 1 of those places, of course, where you you you learn through mistakes. So in person training is pretty straightforward. And, usually and, you know, I live in Israel, so I don't have to worry about people holding back when they have comments or when things aren't good. It's a nice, professional advantage of living here. If I teach a course here 5 to 10 times, then I basically gotten through all the major complaints that people will have. And then I can go to other countries where they're quieter, shall we say, and be confident that it's actually gonna work out okay. So the in person training is always best as far as I'm concerned. You have that sense of presence.
You know what people are doing. You know where they are. You get a sense of whether they're done with the exercise or not. And so trying to replicate that with online training, like the the live Webex or Zoom training is hard because let's say people are done with an exercise. How do you know? Let's say people have question, how do you know? So I mostly use Webex, and that has, like, a chat. And the chat's not amazing, but it's it's okay. And I encourage people, don't send me private messages. Send me public messages unless it's something really private. And that way, when people have questions, when they have problems, we can all be a part of it, and it gives a greater sense of presence. I beg people, in a nice way, to turn on their cameras so we all feel like we're in class together. The worst possible thing is basically everyone has their camera off except for me, and I'm lecturing, and they put me in a little corner of the screen. And, like, they sort of forget about me except every so often when they might have a question or pick up on something. So online live training with Webex can be great, but most of the time, it's okay, and it can be really terrible depending on how people do things. And they have even this little, green check mark that in theory is supposed to use to say, yes, I agree, or it's going well. And and I use that to indicate that people are done with their exercises. So I have, like, a a graphical indication of how many people are done. So the advantage the big advantage of doing it on Webex is basically you can reach a bunch of people who are not in the same place geographically. But if you can get people in the same place, then you definitely wanna have it in person. And so given that experience, when I started to do online recorded video courses, I was, first of all, pretty much adamantly against it. I was like, well, I'll do this as a compromise, but it's really much worse because there's none of that interaction. It's all 1 way. I record it once. I make it available. Maybe people will have questions, and they'll they'll email it to me. But for the most part, people are kinda quiet about it. Either they love it, and maybe they'll email me. But most most likely, they, you know, if if they don't absolutely love it, then it'll be okay, and they won't say anything. But it turns out that, so so when I first started doing video courses, I made the big mistake of just trying to do it like an in person course. Meaning, I'll talk for 30 minutes, and I'll give an exercise. And by the way, like, I think it's very important to have exercise in the video courses as well, which I sort of figured everyone does, but it seems not. So I quickly discovered that was bad. You can't have these really long videos. And so I would break it up, and now each of my videos is somewhere between 3 and, let's say, 8 or 9 minutes. Maybe the longest ones, all the handful of these in each course will be 10 or 11 minutes long. But having those bite sized chunks is much more realistic because people are gonna watch it on their commute or when they're standing around or just when they have a few moments. And they're not interested in watching a half hour lecture. They're interested in getting bite sized information.
And so by chunking in that way, it's really useful. And even so, I was like, okay. Well, I'll do these video courses. I'm not sure how like, whether people will really get something out of them above and beyond, say, the in person courses. But it turns out I have a a client, 1 client in particular, although I've done this with a few clients. I have 1 client in particular where they've asked me to combine the 2 techniques, Where basically we had students with the videos, and then we had an in person Q and A session. And I asked people, so what do you think of the videos? And most people love them. Love them way more than I expected. I said, okay, tell me, like, what am I doing wrong in class that you love the video so much? And they uniformly said it's because we can stop it, rewind it, listen to it again, research things. So it means that the learning is happening at their pace, rather than being driven by me. Now in theory, they could, of course, raise their hands and say, wait, stop, when I'm giving a live training. But they don't. Right? So so so it turns out that each of these has its own advantages. I still think at the end of the day, frontal learning is, like, the best, but I've been pleasantly surprised to find how much people take to the video learning and what its advantages offer as well. And then in terms of
[00:25:29] Unknown:
your own learning and being able to stay up to date on the current state of affairs with Python and the overall ecosystem and maybe just any other material that you're just learning for your personal needs, What are some of your preferred methods for being able to gain and maintain those skills?
[00:25:47] Unknown:
So it's funny. Right? Like, you know, where do the trainers go to learn more? I mean, I guess I could take classes. I do. I do sometimes take classes, but it's more common for me to, watch talks from conferences, either go to conferences myself. So I guess I've gone out, as of this recording to Python twice in the US and EuroPython once. I plan to go to both of those this coming year as well. And even though I don't attend a lot of talks in person, I definitely go through the YouTube videos and watch a bunch of talks on topics that either I didn't know about or understand. So, like, as an example, the the oh so controversial Walrus operator that came out in Python 3.8. So when it came out, I knew that it was controversial, and I actually was 1 of those people who sort of rolled my eyes and said, boy. I can't believe they did something like this. It's gonna make things so much worse. And given that we had a lot of time till 3.8 came out, I figured, okay, I've got some time still. And there was a talk, I wish I can remember who gave it, at PyCon about the Walrus operator, the assignment, expression operator that was introduced in 3.8. And I came away from that talk saying, okay. Now I get it. I get it, and this is a great idea. And I understand now how to explain to people. I understand how to use it myself. So way 1 that I learn things is by watching conference talks. I'll also go through blogs and news, you know, the various, Python podcasts, of which this is 1. In particular, there's 1 called, Python Bytes, which is news from Python.
So I like to listen to that. I usually get to it, like, twice a month or so, 3 times a month, and that keeps me up to date on sort of what's coming down the pike. And there are people on Twitter, and there are people with blogs. I just try to sort of keep up. At the same time, I'm no longer in the space where I'm doing development day to day on a project. That has both advantages and disadvantages. The advantage is that I can focus on the new topics. So, over the last few months, I've been looking more and more in asyncio. Now I'm not doing a professional project with asyncio, but it's a big new thing in the Python world. Quite frankly, I thought it was kind of dead for a while. And a number of people came up to me in Python and said, so do you have a course about asyncio? I said, no. But now that I see how my people are interested in it, I should really get to know it. And so I've been going through a whole bunch of tutorials and blogs and playing with it myself.
I also find that I learn well when I write, when I'm forcing myself to teach something. And so, my newsletter, my Better Better developers newsletter is often a sort of playground for me to try out explaining new things as I'm learning. And I'm open with people that I say, look, I'm learning all the time. I want you to learn also. I'm gonna share with you the things I learn. And, that's been the biggest thing, 1 of the biggest things that I've been learning lately. And they're just playing and playing and, quite frankly, also questions from my students.
1 of the great phrases that I learned years ago was there are 2 types of questions. There are good questions and excellent questions. And good questions are when the student does not know the answer, and excellent question is when the instructor does not know the answer. And I often quote that to my courses, and I say, give me excellent questions, and I will then have homework, and I'll go look it up. And so a huge proportion of what I know about Python now comes through people asking questions, me saying, I don't know. Looking it up, learning, sharing it with them, and then I can incorporate, of course, into the next time I give the class. It look like a genius. So, work works out well for all of us.
[00:29:00] Unknown:
Yeah. And I think that that's interesting to call out as well because a lot of people will assume that if they're the instructor, that means that they have to know absolutely everything about everything, and they shouldn't admit when they don't know something, but it actually makes it more valuable when you can show to your students that it's fine to not know something. It's fine to take that as just a a pointer to learning something new because it means that they're much more likely to continue their exercise of learning because of situations like that and being willing to admit their ignorance. And it just makes it easier for everyone else to see programming as a welcoming environment where they can continue to learn rather than assuming that all programmers are all knowing, and that they're able to do all of this amazing wizardry with code because they were born with that knowledge. That's right. That's right. Just I think it was earlier today, I was emailing someone,
[00:29:50] Unknown:
from my mailing list who had comment to me about something. And I said, look. When you see an actor on stage or a sports star or something like that, and it looks so natural what they're doing, that seemingly natural, action is the result of many years of practice. And the same is true with programming. Right? Those of us who do it fairly fluidly, it's because we've been doing it for a long time. And I tell people, right, basically, anyone can program. It doesn't mean everyone's gonna be the most genius, brilliant superstar, but you don't need to be. I mean, I think there are plenty plenty of Python programmers who both know the language better than I do and are better programmers than I am. Right? But I'm a niche where that's okay. I don't have to be the best. I just have to be sort of good enough to explain to people.
And the practice that I get has has definitely helped me quite a bit. And continuing on the theme of practice,
[00:30:38] Unknown:
there are different ways of trying to practice new skills and cement that knowledge. And a lot of people will default to just trying the same thing over and over. And then there's also the matter of deliberate practice where you have certain goals, and you choose your exercises specifically for being able to attain those goals and cement a specific piece of knowledge. And so I'm curious if you can describe a bit about what it means to do deliberate practice and how it differs from the typical habits that many of us default to when we're trying to cement new knowledge. So, look,
[00:31:13] Unknown:
a lot of us are like, oh, there's this new operator. Let me try it 2 or 3 times. Oh, I get it. Or there's this new function, this new technique. And you just try it a little bit, and you figure, okay. Now it's good enough. But you haven't really internalized it. You don't really know where you're gonna wanna use it. And so it's nice to find, sort of an excuse. Where can I use this? Where would this actually be useful? What problems is it trying to solve? And so first of all, try and understand, like, what what problem a technique is trying to solve is is important. And then go and try to use it in that sort of context. I would even say use it in a number of different related contexts. There there's an idea in, in the learning sciences world known as situated knowledge, which is that the knowledge you gain is contextualized, and you can only access it when you are in that context.
And the classic example given up for this is math. So you go to school, you learn math. Even STAR Math students typically then, when they have to use mathematics outside the classroom, are stuck because it's not in the classroom. And, by the way, there are people who are excellent at math who can't do it in the classroom because the context they're used to is not there. And the way you break out of that, the way you achieve what's known as transfer, is that you expose yourself to the same ideas, but in a number of different contexts. And that sort of frees the knowledge from being frozen and locked into that particular context. So if you're gonna do this sort of deliberate practice, you're gonna say, I really wanna understand this, and I really wanna master this, build even a small application. Better yet, use it in an actual thing that you're gonna be using at work, or join an open source project that uses it, or, like, if you really have time, all of the above. And the more contexts in which you see these techniques used, and the more places where you have to actually use it. Because seeing it is good, but using it is really where you're gonna learn. Because then you're gonna discover all the little little pitfalls. And if you force yourself to use it, and it doesn't have to be for very long, you'll suddenly say, oh, I get it. I understand where I should use this and how I should use this. Here's a a classic Python example.
Newcomers to the language are completely befuddled by where they should use a for loop and where they should use a list comprehension. And basically, like, it's just really hard for them to understand. And so many people say, oh, I get it. A list comprehension is just a for loop with brackets around it and written the other way around. And for years, I'd be like, no. No. No. No. No. That's not what it is. It is. But I didn't have a really good way of explaining it or talking to them about it. And now I try to explain it. Like, I mean, there there's some explanations I have, which I think work pretty well. At the same time, like, I sort of talk about whether you care about the action or whether you care to actually get a list back where you want to get an Iterable back from your comprehensions. But moreover, I even say to them, like I say, when you start off using comprehensions, it's not obvious when you would want to use them. But try to force yourself to use them. Find context in which you think they might be appropriate. And the more you do that, you'll more more, like, discover the nuances of where they are and aren't appropriate, and then you'll really get it. But it will take some time. And I think the factor that so many of us forget in learning is time. I mean, the number of companies, I haven't had this happen in probably a year or so, but I used to always get these companies calling me saying, well, our developers are much smarter than average. So your 4 day course really should fit into 3 days.
And I would have to explain that this has nothing to do with the intelligence of your developers. This has to do with giving it time to sink in, to do the exercises, to practice, and just as importantly, to make mistakes. The making mistakes and fixing the mistakes is such a crucial part of learning that we often think, oh, that's so frustrating. Yeah. It's frustrating. Yeah. But you gotta go through it. I mean, literally every day now for 5 years, my Chinese teacher says, use this verb in a sentence or use that grammar pattern. And I try and I mess up. And then she says, no. Try this way and this way and this way. And I tried a few more times and I get it. Now it doesn't mean I remember everything a 100%, but I'm way better off than if I just tried it once and gotten it right because I've I've flubbed it a little bit, and that helps in the learning. And as far as
[00:35:18] Unknown:
the ways to actually engage in this deliberate practice and useful materials and resources for finding these practice exercises and executing them, what are some of the resources that you provide to your students, and any external resources that you recommend for people who are looking to engage in deliberate practice on their own? So there are now a few different
[00:35:40] Unknown:
online, places where you can do the sort of practice that we've been talking about. And some friends slash competitors are doing them as well as I am. So I've got my weekly Python exercise, and, Trey Hunter has Python morsels. And, Bob and Julian, I'm blanking on their last names, have, PyBytes. And, someone has said someone who's tried all of them has said, wow. Each of you has a really different style, and you emphasize different things. And that's true. So, like, you know, I tend to be really emphasizing sort of fundamentals and basic techniques, which I think then people, once they see them and understand them and internalize them, can use in larger things. So I tend not to have a lot of sort of large application types of things, although that that might change a little bit in the coming year, but we'll see. So I tend to say it's really important to understand how to use basic data types, especially lists, tuples, dictionary sets. How and when do you use them in different ways? How do you combine them? Because at the end of the day, what we're really doing in Python is a ton of messing around with list, tuples, dictionaries, and sets in so many different ways. Use objects. Right? And objects are just sort of, like, glorified dictionaries. So I try to stress those sorts of things and helping people to, little by little, uncover just how those things work. I also, especially in my advanced exercise classes, expect them to do some research on their own. Now that you've got the basic concepts and the terms that we're going to be using, go read the Python documentation.
And you should be able to understand it well enough to use things to get some results. And so people at first are a little surprised. Really, wait, wait. So you're giving me a prompt, but you haven't even told me how I'm supposed to solve it. Right. Because in the real world, you're gonna have to read the documentation and figure it out. Now I've already given you a push in the right direction, giving you the terms that you can use to search for and to use. So if we're talking about attributes, right, already, the term attribute is is kind of surprising to many people who are new to Python, but it's core to the language. So talking to people about we're gonna use attributes in this way and this way and this way, right, that'll at least push them in the right direction. I'll often give them even a link to the documentation, sort of push them in that direction even further. So if you're gonna be practicing, if you're gonna be looking to practice, you wanna find, I think at least, someone who's thought about what are the learning goals, how are we gonna get there, and making sure it's not too easy and not too hard. Just about a month ago, I had an exercise and people pushed back, and they were like, this is way too easy. What are you talking about? It's like 2 lines of code. So I was like, okay. You know what? You are right. We're gonna rejigger that, and, indeed, I'm gonna give them sort of a bonus exercise to make up for that 1 that's more appropriate. So hearing from people is important, and it's not always gonna be perfect. But getting that that balance is hard, and so it's important to work with someone who actually has thought about it, and even better yet, has gone through a few iterations of it. So they've gotten some of the bugs out, say shaken them out. But, again, like, if you are really interested in web applications, in some ways, you might be best off not even doing just practice exercises, but going and joining a web application, working on 1. And again, there are plenty of open source projects that you can join to do that. I actually have a website that I've set up called Practice Your Python. That's at practice your python dot com, which is a list of all the different places you can go online to practice your Python, both free and, paid services. And so if you're interested in sort of playing around with Python and exercising and improving your skills, you know, that that might be a good place to go and sort of get a a survey of the landscape and always be learning. That that's the other thing. Like, you know, when when I mentioned earlier and, yeah, you you agreed that, like, it's important for an instructor to show that they are also learning all the time. We're always learning. This is a business in which you can't just say, okay, I'm fluent. I'm done. End of story. Right?
You're always gonna be improving. It's sort of like doctors and lawyers and nurses need to always be improving their skills. And so having that attitude and that open mindedness and that willingness to say, yeah, I'm gonna, for the rest of my career, be doing more stuff and learning more things, all the better. Yeah. I think the only way you can get away with saying, I know everything I ever need to know is if you wanna be a cobalt maintainer for some bank for the rest of your life. Exactly. Exactly. By the way, like, I mean, speaking speaking of banks, so I've been I'm finishing up now my book for Manning of, Python exercises, what we've called the Python workout. And I'm getting great feedback from people who are reading the book and reviewing it, and I've done early purchases of it. And I was thoroughly convinced for years that banks, basically, and insurance companies, other, like, places that worry about financials, don't use floats because they are inherently inaccurate, or they can be inaccurate. Not to a huge degree, but to enough, like, it works as a bank. And, like, someone wrote, this is just not true. I've worked in a bank for years, and we actually do use floats. You have to decide sort of where it's appropriate and where it's not. So this is something where I was sure something was true. I've been teaching something as if it were true for years. Oops. Turns out, not true. So I've certainly changed my tune in what I tell people, but it's feedback like this that that sort of helps me both understand things better and to teach things better. And I think as a community, I've I've been very impressed with the Python community in general as being willing to learn and help because we all have stuff that we can and and need to learn, and it's just part of the journey. And
[00:40:44] Unknown:
as you prepare for the year that's starting now and the continuing changes in the Python language and ecosystem and the overall landscape of where it's being applied. What are some of the types of practice and learning for your trainings and the types of lessons that you're going to be delivering?
[00:41:10] Unknown:
So the 2 things that I'm now preparing courses for, I guess, the first 1 I'm gonna be giving it this week. So first of all, I'm gonna be doing a course in Pytest. I, Brian Oken, I thoroughly, thoroughly thank him, for introducing me to Pytest in person at PyCon and then via his book. And I was never much of a testing person, and Pytest has totally changed that. And so I've incorporated Pytest into weekly Python exercise. And I said, you know what? People really wanna learn Pytest. People really wanna use it. So I've got a a 1 day course in that that I've been putting together that I think will be, like, you know well, I'm giving you this week, as I said. And I think it'll be totally stable within about a month or so, given the number of times I'm expecting to give it. And I was also thinking, like, well, what else do I wanna teach? And the funny thing for me was that I got a ton of requests over the last few months for me to, of course, in a web application development in Python. And I find it funny and ironic because I started everything off doing websites. Right? The whole reason I got into Python, as I mentioned at the top of the show, was I was doing web applications. And so I was convinced when I started teaching Python that everyone's gonna be a web developer. And, nope, I've been teaching data scientists. I've been teaching DevOps people.
I've been teaching automated testing people. Basically, every population you can imagine, except for web developers. But it turns out that now, everyone wants to be a web developer because if you wanna put together a little report or an interactive app, even just to describe what tests you've done, wanna be able to do something small even if it's in Flask or, you know, sometimes even in Django. And so I've almost come full circle now. And so sometime in, this year in 2020, I'll have, of course, probably 3 or 4 days doing web application development with I have yet to decide either Flask or Django.
So those are my, like, in person training plans. And online, I'm just gonna keep rolling out. I now have as I said, I feel like 10 courses and 6 versions of weekly Python exercise. I'm trying to do a few new versions of weekly Python exercise on particular topics, whether it's web, whether it's, probably in pandas, whether it's a bunch of people have asked me about, design patterns. And in terms of video courses, I'm probably gonna fill out my intro course, like, do something about files, something about complex data types, something about modules, and then try to do some advanced ones as well. So I've got a lot of recording planned for 2020, a lot of writing planned for 2020, in addition to everything else. But, again, I keep learning. I keep enjoying it. And, my students are my most valuable resource for finding out what they wanna learn next, And that gives me a lot of information and insights into where I should go with my training. So are there any other aspects of teaching, learning, or deliberate practice that we didn't discuss yet that you'd like to cover before we close out the show?
I'll just mention the the the analogy I often make in training or with training is to a stand up comic. Not because I'm necessarily that funny. Just ask my family, they will claim I'm not. But basically, you're up in front of an audience, and you need to engage them. You can have the most brilliant content ever. And if you're boring, if you're not engaging, if you're not connecting with them, bad news. And so thinking about how comics or actors in general or anyone who gets up and gives a performance does their work and how you can incorporate that into your training, That that's definitely I I've I've watched, there's a class, master class with Steve Martin, and, I definitely got some good insights from that on how to structure my courses, just so I can sort of keep it more interesting for people. And so training is all these different things coming together. And so you gotta know the material. You gotta know how to deliver it, how to explain it. You gotta have the exercises. You gotta have the stage presence. At the end of the day, also listen to what people want. And it might be harsh. It might be hard, but they are telling you what you they they think, and your next class will appreciate the changes you make, even if your current class makes you all grumbly and upset based on their comments.
[00:44:58] Unknown:
Well, for anybody who wants to get in touch with you or follow along with the work that you're doing or try out any of your courses or exercises, I'll have you add your preferred contact information to the show notes. And with that, I'll move us into the picks. And this week, I'm going to choose a book that I've been listening to called The Manager's Path by Camille Fournier talking about the different stages of management with a particular focus on technical management and, references to the path that she went on going from a tech lead to a a manager to all the way up through a CTO. So it's definitely been a useful learning resource for me to gain a better understanding of the different aspects of management at different levels. And even if you're not a manager, it's a useful book to listen to to understand some of the ways that you can engage more effectively with your managers. So, definitely recommend that 1. And so with that, I'll pass it to you, Reuven. What do you have for picks this week? So it's not super new, but Dan Lyons
[00:45:49] Unknown:
is a very insightful guy who writes about, technology and culture and business. And he came out with a book, about a year and a half ago in late 2018 called Lab Rats, how Silicon Valley made work miserable for the rest of us. And I think it's a really important book, for people in the technology space to read. The number of people I encounter at high-tech companies where I teach, where I finish teaching at, let's say, 5 PM, 5:30 PM, and then they go back to their desks for 2, 3, 4 hours because they need to get things done, the intense pressure that people are under, the crazy management fads that management brings in, thinking this will make people more productive or more happy or god knows what or more loyal. And Dan Lyons is both very funny and very, poignant and serious about how the this approach to work and this approach to management has both made Silicon Valley companies and start ups unhealthy for people and for relationships, and also how it's now extending outside of the tech sphere. And you might not agree with everything he says, but I think there's a there are a lot of lessons to be learned, both in the negatives of what you should not do. And toward the end of the book, he says, okay. What should companies do? How should they be managed?
And I even gave the the book to my 17 year old, who's done a whole program in entrepreneurship and technology, and was rah rah about startups. And they even had a little, like, you know, fake pitch seminars at Google and Facebook here in Israel.
[00:47:15] Unknown:
So, she read it, and, it was very sobering for her as well. So I think, everyone should at least read it to have an understanding of, how how the world works. Well, thank you very much for coming back on the show and talking about your experience working as a trainer and some of the different ways that you're helping to teach people and help them succeed in their learning journeys and talk a bit more about your experience on that path as well. It's something that is a perennial issue and something that is always useful to gain more perspective on for people who are in this space and for for learning of any material at all. So thank you for all the efforts on that front, and I hope you enjoy the rest of your day. Thanks so much, Tobias. It has been great to be here.
[00:47:58] Unknown:
Thank you for listening. Don't forget to check out our other show, the Data Engineering Podcast at data engineering podcast dot com for the latest on modern data management. And visit the site of python podcast.com to subscribe to the show, sign up for the mailing list, and read the show notes. And if you've learned something or tried out a project from the show, then tell us about it. Email host at podcastinit.com with your story. To help other people find the show, please leave a review on Itunes and tell your friends and coworkers.
Introduction and Welcome
Guest Introduction: Reuben Lerner
Reuben's Journey with Python
Evolution of Teaching Style
Structuring Lessons for Different Contexts
Staying Updated with Python
Deliberate Practice in Programming
Resources for Deliberate Practice
Future Plans for Training
Closing Remarks