Monitor performance issues & errors in your code

#210: Making the most out of in-person training Transcript

Recorded on Tuesday, Mar 19, 2019.

00:00 Michael Kenned: How do you stay up on your Python skills? Many of us are self-starters and good at learning on our own or online with video courses, like the ones we have over on Talk Python. But sometimes having everyone on your team go from zero to ready to work on a project is the best path. And usually, that means in-person training. This is something I did and enjoyed for many years. Our guest in this episode is Reuven Lerner, who does independent Python training. He's here to tell us how to make the most out of your in-person training for your team, and how you might get started in this side of software development yourself. This is Talk Python To Me, Episode 210, recorded March 19th, 2019. Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via @talkpython. Hey everyone, a quick announcement before we get to the interview. A little while ago, we released our Android app for Talk Python Training, or you could take our courses on your device and take them with you and all that good stuff. But we left out, you know, one of the minor other platforms like iOS. So we are fixing that. Of course, we just built the Android first, but now we're ready to release the iOS version as well. So just visit training.talkpython.fm/apps, click on the link for your various app stores, and get the right app for your device. You get some online courses that are free that come bundled with the apps, as well as any that you've taken from us, of course, they'll be there for you, and they'll be available offline. All right, now let's get to that interview. Reuven, welcome to Talk Python.

01:54 Reuven Lerner: Thanks, it is so great to be here.

01:56 Michael Kenned: Yeah, it's so great to have you, it's good to catch up with you. It's been a while since we were back in Cleveland hanging out together. So, I'm looking forward to that. And I'm also looking forward to talking about this whole aspect of training, either in-person training, online training, we both have a background in this and it's going to be a lot of fun, I think.

02:13 Reuven Lerner: I love talking about training because in so many ways it's so unknown to so many developers. Like they know there's this training world out there, but I don't think they're aware of what goes into it and how big it is.

02:22 Michael Kenned: Yeah, and how do you get into it, how do you get the most out of it, if you're having some trainer come to your company, or what are the trade-offs of different types of training, all sorts of stuff to explore. Now, before we do, though, let's explore a little bit of history with you. How'd you get into programming in Python?

02:38 Reuven Lerner: I wear glasses and they're just not very strong prescription. But when I was little, I guess like seven or eight, I had double vision and the eye doctor said well you should do these exercises, and I never wanted to do the exercises. Like there were these red and green dots I sort of had to make converge so I didn't have double vision. And finally the eye doctor said listen there's this new thing that just came out recently called an Atari and he said to my parents, buy this, he will be excited by it, and that will sort of train his eyes to focus together. So they got an Atari and one of the cartridges that you could get was this basic programming cartridge. And so we got that. I was like wow this is so cool. I can tell the computer what to do.

03:15 Michael Kenned: How interesting, was it an Atari 2600 or which one was it, do you remember?

03:19 Reuven Lerner: Yeah yeah it was 2600, and I think it had a total of like 128 or 150 bytes that you can program in. And each of the commands was tokenized I think of one byte, like now I understand sort of what was going on there. So you would enter, I remember very very often running out of space because I was trying to write too much, and each of the characters that I was trying to print was of course taking up one of those precious bytes.

03:42 Michael Kenned: That's a who other level, I mean my laptop has 32 gigs. It's just incomprehensible. It literally, the mind cannot compare these two things.

03:52 Reuven Lerner: My eldest daughter who's now 18 saw, I have got a floppy disk on my desk, I've a few of them, she said what is that? I said so you know those USB drives that everyone has? She was like, yeah. I said, this has 100,000 times less storage and this is what we would use when I was your age to move things around. And she just, yeah, she couldn't wrap her mind around that.

04:12 Michael Kenned: Yeah yeah, I remember you'd have those apps, gosh I can't remember in DOS what they were called but they would allow you to span disks, like I have a file that is larger than 1.44 megs, and so it'll like compress it to Disk one, Disk two, Disk three, straight to the disks. It would say enter Disk Three, enter Disk Four. Yeah that was a wild time.

04:30 Reuven Lerner: Absolutely, absolutely.

04:31 Michael Kenned: Okay, so you started programming on an Atari 2600 literally nobody in like 207 or eight shows has ever said they started programming on an Atari 2600.

04:41 Reuven Lerner: Commodore, maybe, some other old school thing.

04:45 Michael Kenned: I didn't even know that was possible, that's pretty wild.

04:47 Reuven Lerner: So then a few years later, we got a home computer. And this was probably 1983 but it was not the home computer you're probably thinking of. We had friends who worked for Digital, Digital Electric, DEC, electric computer, anyway I'm forgetting. And they hooked up a VT100 terminal with a processor and some RAM and they called it a computer with CPM running as the operating system. So that was like our home computer. And by the way my parents were not computer people at all. They were just told by their computer friends oh this is a great deal on a computer. And so I played with that for a bit.

05:19 Michael Kenned: Yeah and also you might not have so much, the phone might be unavailable some of the time. Because you dial in.

05:24 Reuven Lerner: Oh my god, oh my god.

05:26 Michael Kenned: Whatever, right?

05:27 Reuven Lerner: My parents and I were constantly like, what, you're on the modem again, dialing into things? And I think it was while I was in high school that we got a PC with DOS. And did we even have Windows in it? We must have Windows on it at some point. And so it was really like, I was always doing toy programming but it was only when I got to college that I really started, like I signed to be in the computer science department. But I didn't really understand what programming was or what computer science was until I got to college. And then, I went to MIT, and there they brainwash you into thinking that LISP is the, like LISP was the only language you learned in a computer science department. If you wantna take a C programming course...

06:02 Michael Kenned: It's so amazing, it doesn't have loops, you don't need any of that stuff. You just do recursions, it's perfect. And you're going to really get good at typing parenthesis.

06:11 Reuven Lerner: And if you want to take a C course, which I did not, you have to go the Civil Engineering department, they offered, because the CS department wouldn't be caught dead teaching a C course.

06:19 Michael Kenned: Yeah of course. You know my first CS course, I did like a minor and it was in Scheme, which is not that different, and it was a wild time, it was a wild language. What did you think of that as a introduction to programming?

06:30 Reuven Lerner: I thought it was brilliant, it makes you feel like, I was brainwashed, right? So they told us that this was the best program, and we used Scheme, right? So they told us that LISP was the best language ever. And I was like, oh I guess LISP was the best language ever. And since then, truth be told, I had this comparison of oh I was doing this back in college, I can't believe I just sort of rediscovered it now, whether it's in Python or another language. It's like they really sort of helped us to see, well we saw way further than we thought we were seeing. And we were doing things that were way more advanced than we even thought because it was so simple to do. That said, you get out into the real world and you discover, oh not a lot of companies are actually using Scheme, what do you know?

07:06 Michael Kenned: Yeah, that's for sure. Very few.

07:11 Reuven Lerner: My first job after college was at HP and I was using some C and C++ and really really disliked it, like I never got the whole pointer thing. And I remember going to my boss and saying, hey do you think we could use maybe a different language, you know one that's garbage collected? And he was like, that is not realistic. No company ever will use a garbage collected language because you really want to have control and you really want to know what's going on. Those words resonate with me every day as I see the exponential growth of Python in the Enterprise and the people who are still stuck using C and C++ suffering and me laughing all the way.

07:47 Michael Kenned: Yeah, and there's just so many interesting stories like back in the day with Google Video and YouTube as competing platforms and products. And YouTube, of course, being in Python, and Google video being in C. Fewer developers on YouTube and they just blew the Google team away because, hey guess what, when you have to write a lot less and worry about a lot less fewer details, it doesn't matter if it's 10% slower or 20% slower. You get way more features done.

08:12 Reuven Lerner: Absolutely.

08:12 Michael Kenned: I think actually, you speak of garbage collected languages, the majority of programming these days is Java, .NET, Python, in the Enterprise, right? Maybe a little Javascript, I actually don't see it nearly as much there, I don't think. But you probably have a fresher view than I do.

08:28 Reuven Lerner: Most of my students are very familiar with, like they studied at some point Java or C#, say in whether it's university courses or using on the job. And so for them, that's very natural. I do a fair amount of work also with some low level hardware companies. So those people are using the C and C++. They're certainly familiar with the idea of a real language being garbage collected, and not having pointers and stuff like that.

08:50 Michael Kenned: Right, right, do you see them moving towards Python and some of these IoT stuff and MicroPython and things like that or are they still Embedded C?

08:56 Reuven Lerner: No no, those places are all Embedded C. I don't see that changing very fast. A lot of them are dealing with low level hardware stuff and so it has to be predictably fast and predictable in terms of its memory usage. Maybe, I mean it would be great to see it at some point but it's going to be a while, I'm guessing.

09:14 Michael Kenned: Pretty interesting. Okay so that's how you got into programming. You were telling me you worked at HP and you said, can I please use something other than C. So how did that lead to Python?

09:25 Reuven Lerner: Basically when I was in college, I was introduced to Python. While I was there, I was the editor of the student newspaper and we set up a website for the newspaper. And I should add this is my super big claim to fame, it was one of the first 100 websites in the world.

09:41 Michael Kenned: Nice.

09:41 Reuven Lerner: We sent email to Tim Berners-Lee and said hey we've set up this website, and he said oh that is so cool, I'll put you on the list of the websites out there. Strangely he's not in that business any more. And basically, at that time, there was this new thing called CGI which allowed you to run executable programs from your websites so you didn't just have static pages. And they actually expected people to write these CGI programs in C. But people started to do it, because that was such a pain, people started to do it in higher level languages and so people were using Perl, people were using Python. And so I started using both of them for a while and then I got really heavy into the Perl world. And so for a while I was using Perl at work and then when I started my own independent consulting company in 95, I was still using Perl. And when Perl sort of, for lack of a better term, blew itself up as a community, I moved back to Python. And I've been pleasantly delighted to see it exponentially growing over time.

10:37 Michael Kenned: Yeah it's a very exciting place to be right now. So tell us the story about how Perl blew up. I know that it's definitely on the descending side of the curves of popularity and what not but I don't know the details.

10:48 Reuven Lerner: So look what happened was, there was this very very strong competition between Perl and Python back in the early 90s, even middle to late 90s, where Perl people like me would say well I can write really really fast. Like I can get done what I need to get done and I can just think it, vroom, it flies out of my fingers through the keyboard into the computer and then it executes really quickly. And the Python people will be like, yeah but it's not maintainable. And the Perl people like me would say, ha, that's only if you're not good. If you're good, you're writing to be maintainable.

11:20 Michael Kenned: Look it's not just write only, you can read it, sort of.

11:22 Reuven Lerner: You can read it, after a learning curve of 20 years, exactly. Which strangely doesn't apply to most developers. So that was like hit number one against Perl. But the real problem was that Larry Wall, who was undoubtedly a really smart guy, he's the inventor of Perl, he's the BDFL of Perl, and he said you know what? Perl 5 is good, we want to make an even better Perl 6, and we're going to then do it not just like making some incremental improvements. If you thought Python 3 was a breaking change for Python 2, it's like nothing. He said, we're going to re-write the language. And basically Perl 6 is a totally different language from Perl 5 and I'm not exaggerating, this is not a joke, 20 years after announcing it, they came out with the first version of Perl 6. And here's a bit of exaggeration, and a dozen or so people who are waiting around for it were delighted. The rest of the programming world had moved on.

12:14 Michael Kenned: Yeah that's crazy.

12:15 Reuven Lerner: And so whoever's using Perl nowadays is basically doing it as a legacy language. I'm sure there are people using it, and die hard and excited about it. But you really don't hear about it any more in those terms.

12:25 Michael Kenned: I hear it mostly in nostalgic terms like, it was amazing, I did learn here, I did get started there, that kind of stuff.

12:31 Reuven Lerner: That's right, but you know there's a period also when I was doing a lot of Ruby, and I was sure that Ruby was going to sort of pick up the gauntlet from Perl and it did in many ways. But Ruby has Perl's syntactic quirks, for good or for bad, and the bad part is that it requires you to really understand it and be very very flexible and understand all these exceptions. But the other thing with Ruby is you need to eat objects for breakfast and enjoy it. The learning curve is like, if you're okay, if you really really know objects well, and if you're okay with inconsistent syntax, then Ruby is fantastic. But it turns out that most people starting off in programming, and even most people just switching languages, aren't interested in that high learning curve. And so Python just hit this sweet spot of, it works well, you can learn it, you can grow with it. And I always just make the analogy that learning a programming language is like learning a regular human language. And the thing that kills people in learning a regular human language is all the exceptions, right? Verbs work like this, except here, here and here. And nouns it works like this, except here, here and here. And Python, the same rules apply everywhere and so you don't have to engage that much of your brain power in that stuff, you can engage it in what you really want to do.

13:42 Michael Kenned: Yeah it generally works as you would expect it. You may be have to check the dots or jump to source for the definition of the function and go, yeah actually it's doing what I thought it would do. But it's not too bad. So okay, super interesting. So the first 100 sites. This was in Perl though, right?

13:58 Reuven Lerner: Yeah yeah yeah, this was definitely in Perl. And it was like I think 20 lines, 30 lines of code, and expanded over time. The newspaper site is still going but I really really hope and expect that they're using different software than we wrote back then, for everyone's sake.

14:12 Michael Kenned: I would think so, I would think so. Okay so this is all interesting how this experience of learning all these cool languages at MIT and these days you're self-employed, doing your own thing, doing mostly Python training but also writing in magazines, writing online courses and in-person courses, things like that. How do you make that transition?

14:33 Reuven Lerner: When I came to Israel in '95, my plan was to be an independent consultant. They were very nice in my previous job, I was working at Time Warner at the time, and they said, oh we'll be your first client. So I sort of had this nice base to start up my consulting company and so I was doing a combination of development and consulting and people started asking me to do some training. Companies where I was helping them with their development, they said can you teach our people to do this too. And that was my first experience at all doing training. So it was sort of, it became, I don't know, a quarter or a third of what I was doing and then I did a PhD at Northwestern and when I came back to Israel and was still working on my dissertation I was connected with a training company here in Israel and I said okay great. So they'll sell me and sell my time. And I told them well I can do...

15:18 Michael Kenned: They'll actually solve one of the really hard problems which is marketing, acquisition, a six month sale cycle, all that kind of stuff. And you just have to show up and be smart and that's kind of easy, right?

15:30 Reuven Lerner: Exactly, exactly. And so, they're sort of, the company I was working with was a 900 pound gorilla in the Israeli training market. And so they came to me and said, oh really you're interested in doing training with us, that's fine, what do you want to train in? At the time, I'd done a lot of training in Perl and Ruby so I told them that and they said, well, send us your resume. So I sent it to them. And they called me back like an hour or two later and they said, wait, you know Python also? Oh my god, there's such demand for that. And so I started doing it, still like a quarter of my time, a third of my time. And then they were filling up half of my time, and then three quarters of my time. And at a certain point, when I finished my dissertation, I decided to go back doing it on my own, I was already scheduled out two, three, four months in advance, solid with training. And I was like wow. I love training, it's super fun, I get to meet smart people and help them out on their jobs. And I can fill my time easily far in advance. I am totally doing this full time. And so basically it's been close to 10 years now that I've been more or less a full time Python trainer and I am super super happy.

16:31 Michael Kenned: That's awesome. Yeah I think it's such a cool lifestyle. I mean you've a lot of flexibility, of course you're gone or occupied some of the time, this week or that week, but you also have other weeks you can just take them off. You don't have ask permission, you just don't schedule it. And you get to spend so much of your time staying on top of technology and learning new things like, hey I don't know SQLAlchemy but a client wants me to teach it so it's in a month, I'm going to go learn it, and write some materials on it. And you just keep going through that iteratively until all of a sudden you know quite a bit more than you probably expected when you started out, right?

17:03 Reuven Lerner: Oh my god, absolutely. I mean easily, easily 60% of what I teach is based on questions I get from students in my class where I say, okay great I've got homework now, I'm going to go back and learn it and I'll try and come back to you tomorrow or the next day and tell you what the answer is. And so people are sometimes a little skeptical, they're like, wait you're not doing day to day development any more, and yet how do you know you're up on things? And my answer is, basically first of all, I have the time to do it, or I spend time doing it. I blog about it, and I write about it in my Linux Journal column, but also people are constantly pushing me to learn the newest things so that I can provide the best training so I can answer their questions. So I think it's great, I think it's fun, and I definitely am forced to keep up on things.

17:44 Michael Kenned: This portion of Talk Python To Me is brought to you by Linode. Are you looking for a hosting that's fast, simple and incredibly affordable? Well look past that bookstore and check out Linode at talkpython.fm/linode, that's L-I-N-O-D-E. Plans start at just $5 a month for a dedicated server with a gig of RAM. They have 10 data centers across the globe so no matter where you are or where your users are, there's a data center for you. Whether you want to run a Python web app, host a private Git server or just a file server, you'll get native SSDs on all the machines and newly upgraded 200 gigabit network, 24/7 friendly support, even on holidays, and a 7-day money back guarantee. Need a little help with your infrastructure? They even offer professional services to help you with architecture, migrations and more. Do you want a dedicated server for free for the next four months? Just visit talkpython.fm/linode. I think you can do it as well, I mean there are certain personalities or types of folks and it sounds certainly like you're one of them who are just curious and will just dive in and learn all the details. And then there's other people who just, you know, uh give me some slides and I'll just put them on the screen and talk about it and I'll never open up an editor. If that's your path, obviously, you're going to decay super quickly. But if you're really trying to write the code and do examples and build apps for your students and your classes and then if they hit you with a question you don't know, and you actually go and learn that, research it. How often do people who are doing regular work with a screen full of Jira tickets, deadlines, scrum sprint ending, you don't get the time to dig in and ask the question below the surface that helps you to really understand it.

19:27 Reuven Lerner: Yeah you know I never even thought about this but now that you're saying it, I think that my training has improved. Like I'm deeper and more interesting since I stopped splitting my time between development and training. And since I was able to concentrate on what are the topics people need to know and what is the best way to explain it to them. And so that really, not having that pressure and not having to deal with real world development, as it were, has been a real plus. Also I can ask people, right? I can always ask them questions, so what do guys do and how does this work? And that gives me a decent picture of what's going on out there, and what challenges people are facing.

19:59 Michael Kenned: I think one other thing that blew me away, I know a lot of folks out there listening probably know, but I did for like 10 years, the story that you're telling, I've sort of lived that life as well, and traveled around, taught courses, and almost every week that you are actually off somewhere, you are in a different company, probably in a different industry with a different team that works somewhat differently. So imagine what you'd learn if you have one job and then you move to another job. You have now these two experiences, right? If you do that every other week, let's say, the amount of different experiences and styles and workflows you get exposed to are just crazy.

20:35 Reuven Lerner: Absolutely. And I also have a secret weapon which is that I live in Israel. And Israelis don't hold back with questions and criticism. So when I'm teaching here, boy oh boy, people are just pelting me with questions all the time and it's a little exhausting but it's fantastic because it means I'm pushed to really know how to answer questions and understand different corner cases that they've encountered and they really want to know and they're not going to let up until they get the answer.

21:04 Michael Kenned: Yeah, that's pretty interesting. So you're like going into the ringer. You do battle but you come out everyone knowing a lot more stuff, that's pretty cool. One of the big distinctions I felt like, you talked about consulting and you talked about training, and one of the big distinctions that I learned pretty quickly when I got into it was, when you're doing consulting and you're trying to solve a problem, like, I don't know how to do this. So you research it and you find a way that works, you're like, good we're done. This way works, let's keep going, right, until that's just like super performance critical, it's like real time trading or something, but in general, you get it to work, that thing is done, on to the next. But when you're doing training, it's not good enough to know this way will work. You have to know well actually there's three ways, X, Y, and Z. X is better in this situation, Y is better in that situation, and here's why Z doesn't even exist, right? So you need to know not just what are the options but what are the trade-offs, all those kind of stuff. And so it takes a different way of approaching learning, I think.

22:06 Reuven Lerner: One of my favorite phrases that I use a lot when I'm teaching is "unfortunately this works". And so I'd show them the code, and I'd be like, okay this does the job, but we don't want to do it this way for the following reasons.

22:18 Michael Kenned: That's right. That's right, you need to understand what's happening here. Pretty cool. Let's talk about this from a couple of perspectives. If I am a company who is, let's just make it a little concrete, I've hired you but you know I'm more general, I've hired someone like you to come teach my team or I'm a student, I'm going to be a student, and you're coming to my company, or I'm a team lead, something like that. Maybe let's just start it like, why should they have training at all? Aren't these grown adults who have been to college most likely and they know how to study? There's Stack Overflow and Google, let them go.

22:51 Reuven Lerner: Oh my god, so, right, so I get this a lot, both from individuals and from companies and the analogy I use there is, Stack Overflow is like a phrasebook when you go to a foreign country. So you can go to a foreign country and say, oh oh I want to order bread at the bakery so you look up how to do that. And then you have to pay, so you look up how to do that. And you can sort of kind of get around but it's going to be very slow and very limited and very stilted and frustrating when what's in the phrasebook isn't quite what you need.

23:22 Michael Kenned: Yeah, every time you make that mistake, you thought you asked for something and you got something totally different, oh my gosh why are they bringing all these meat? I just wanted some bread.

23:31 Reuven Lerner: Exactly, like a few weeks after I moved to Israel, I went to the open air market and I thought I was buying some hangers for my closet at home. And actually what I was asking for was a hangman, like an executioner, and the woman doubled over laughing and we realized what I really meant and went on from there, but you do that in language you're not trying to get any fluency in, and you're just going to constantly get that level of that. And everyone who uses Stack Overflow knows oh I'll just copy and paste what it is and when it doesn't work, I'll meddle with it. And I'll meddle with it again and again. And so that lack of fluency is slowing you down both conceptually and in actual time terms in what you're doing.

24:10 Michael Kenned: Yeah and also probably add a decent amount of technical debt, right? Like when the thing breaks on Friday morning...

24:16 Reuven Lerner: Go ask Stack Overflow.

24:17 Michael Kenned: and it's in that area, you're like, what is this work, you're back at Stack Overflow trying find a fix for the fix, right? Like it's a problem.

24:26 Reuven Lerner: Precisely.

24:26 Michael Kenned: So the fluency, part of the reason you might look at training.

24:29 Reuven Lerner: You also want people to have the same basic core knowledge. If you've got a team, and I work with a lot of companies, where when they do their onboarding, they have to know Python. And so they want everyone to have the same basic knowledge. And some people have studied on their own, some people have taken a class in college or something, but you want everyone to know the same stuff. And so training is useful for that. But then there's the third part which is, the knowledge might be out there, there's Stack Overflow, there are blogs, there are online things, people won't do it. So I've got a client now where they're moving from doing some frontal training to doing what's called blended learning. So they'll use my video courses along with me coming in and literally every time that I come in to do the follow up and exercise section, it turns out that most people have not watched any of the videos. Why? Because the bosses are not going to be happy to see people watching videos all day. They're going to be happy seeing them do work. So people are like okay I'll wait and wait and wait. And they'll wait until it's too late. And so if you wait for people to study things on their own, they're just not going to do it. Not because they're bad people, not be because they're stupid people, but because they don't have time. Plus they might find the long way round to do it. And a good trainer, a good teacher, is going to have an efficient way to help you understand that information that you can do it even faster than you could on your own.

25:44 Michael Kenned: Yeah I think that's a really valid point. I made the joke about everybody being adults and of course they generally are but there is real value in saying all right everybody, you're not in meetings, you're not doing your email, we're all going to sit in this room together for four days and we're going to talk about programming, and when you leave, you will have had some experience on the stuff you're supposed to know. And just that timeboxing actually I think is almost required for a lot of companies because they put so much pressure on their employees to like, okay we're doing Scrum, so tell me today, this morning, what you did yesterday afternoon, right? Even if yesterday afternoon, I was trying to, like, take it a little slower and learn something and understand what I was trying to do. That's generally not progress in the Scrum world, right? I'm picking on Scrum but any of these closely monitored, very little slack types of work environments.

26:42 Reuven Lerner: That's right. I had a company just two weeks ago, call me up and said, hi we'd like to do some Python training. I said, that's great what do you need? And they said, well we're really very pressed for time at our company here so really what we want you to do is come in after work hours. So people will work nine to five and then you'll come in and teach them from 5:00 to 8:00 p.m. I said, okay that's just not going to work. It's not going to work in so many different ways. Partly because you're just going to be mentally exhausted after the say and learning new things is not going to be efficient or possible, let alone the topic on their agenda.

27:14 Michael Kenned: Yeah you know I've done that as well and I've seen it work and I've seen it not work. Where it did work for me is I went and did a introduction to Python, sort of Get Going with Python course for stock traders. These were quantitative analysis folks, maybe they know Excel or they know a little some kind of statistical language or something like that, but they're not really programmers. And they all want to move to the data science stack and they had the class for an hour and a half after the markets close, like 4:30 or whatever. So it was like 5:00 to 6:30 or something, which is kind of stressful but it wasn't too long and they were willing to pay the extra travel and all that kind of stuff to have me only work with their team for an hour and a half. But these people were apparently could not leave the trading floor but they needed to learn Python and data science, so how do you do that? I think for them it worked actually pretty well but I've also seen it just not work.

28:09 Reuven Lerner: Yeah I also feel like doing it in small chunks, you just don't get the sort of, it takes time to ramp up during the day and then you get things going, you get this nice momentum, and I found when I do that, even a half day, I just don't get enough time to build momentum so people can build on what they've learned.

28:25 Michael Kenned: For sure, it's definitely suboptimal. You got to give people space. I made that comment before about not having enough slack. I think there's something really valuable to work environments that will allow you to take that hour and actually learn that thing and not just, well if they're not on Stack Overflow we drop in a fix and we just keep rolling, right? 'Cause that adds up to badness in the end, as you build more and more and more stuff that you don't deeply understand. So I dunno, I mean I guess that's just maybe a call to all the people out there who are leading teams or companies. People who are programmers, they just need this time to go a little deeper. Even if you have a PhD in computer science, they probably didn't teach you Django or pick some package that is really important that is certainly not taught in college. No matter how much college they have.

29:12 Reuven Lerner: That's right. And I mean if you go to a doctor, right? How is it that the doctor's up on things? Because they have to do continued education. They have to keep up on stuff, that's even required for them. And we hope that our doctors will do that. Well we sort of hope that our software engineers will do that too and keep up on things. But that means dedicating time to it, not just sort of finding time between other things.

29:33 Michael Kenned: I think also the environments that make that possible, they keep their good people. The ones that squeeze even that little bit of time for learning and growth out of their people's work day, they lose their best people who are natural learners and naturally curious and stuff like that. And it literally costs their business bad, in the long term, to lose their best developers.

29:57 Reuven Lerner: I absolutely agree.

29:57 Michael Kenned: Interesting. So I guess the next question I wanted to talk to you about it is, so I've decided you're right, we do need to stick all of our people in a room for four days. And I'm not saying that facetiously, I really mean it. But one of the things that blew me away, I had been on so many business calls trying to arrange the training, figuring out what the right type of training was in my previous life, and people would come out and say, well I dunno there's this other company that's a thousand dollars cheaper than you guys, and I know it's 12,000, and they're like 11 or 10. And the reality is, they're taking 20 people who are professional developers and paying them a week's worth of work to be in those places. So the cost really is the time that they're paying their people to learn, not so much what they're paying you. I mean obviously that's money but it's not the biggest part by far. So how do you, obviously want to have the best training, the most effective use of that time, of all of your 20 folks or however many there are, how do you do that?

31:00 Reuven Lerner: Look, you first of all want to make sure you know what you want them to learn, right? You want to set up some sort of learning goals. And someone who's good at training or a company that's good at training will be able to work with you on that. They're not just going to say, well you can choose from course A or course B or course C. They'll say oh well I see that your people, they already know the following things. So we don't have to really go into that. Or they really need to know these following and other things, so we should really opt for that. So setting up learning goals is super important. Telling them they should take it seriously is important. Like you want to tell your staff, look don't just goof off, and don't just do work on your computer while you're sitting in the training room. I had one company once where they told people you must close your computers while the training is going on. That is I think bad. But telling the managers don't give your people that much work to these people this week, yeah they'll be on their computers but you want them paying attention is good. And also telling people to participate in the exercises. My courses, I usually estimate 30 to 40% hands-on exercises. And basically there are always some people who it's clear they're not doing them. They're doing other stuff. They're like, yeah yeah yeah, whatever, I'll look at the answer. But that's not the way it works. Again to use the analogy of languages, you can't look at the answers in the back, to like a quiz in Spanish, and say, oh well now I know Spanish, right? You have to actually go through and trip over your tongue, and make the mistakes and learn, and then you will actually get better at it. And so doing the exercises, I always tell people they should do the exercises in pairs, doing pair programming, and virtually no one actually does it. But those who do gain so much more out of it.

32:31 Michael Kenned: Yeah you can definitely tell the folks at the end of the week who are like these are the people that really benefited from this and then there's other people who were present.

32:40 Reuven Lerner: Absolutely, absolutely. And so one of my clients actually now has me give a test at the end of the course because they want to push people to really participate and learn. And figuring out how to test them and what to test is a whole subject in and of itself, but I think that has put the fear of god into them that oh my god my manager's going to know that I didn't really do anything this week. And so they're a little more attentive. Just a little more, but it helps a little.

33:04 Michael Kenned: Yeah and that definitely can help although it's so hard to give tests that are representative, right? Like, yeah I asked you this question, and you said QuickSort and I wanted Bubble Sort, and it doesn't really matter, if you can sort the thing, you're good, right? But it's really hard to write those tests in a way that actually tests skillsets but yeah, it's still worth doing I guess.

33:25 Reuven Lerner: If you're listening and you're a manager, don't make your people take tests at the end of the course. There are better techniques. I'm not trying to encourage it, yeah, 'cause also it's such a pain for the trainer, let me tell you. But I can see their worries and why they want to make sure they're spending all this time and money, in that it will actually benefit the company.

33:39 Michael Kenned: For sure, all right so let's stick with this in-person training story for a little bit. Then we'll get into some of the other options. So you talked about being booked really far out. I remember being booked pretty far out when I was doing this kind of stuff as well. If I'm a team lead or somebody like that and they're like, I want to have some training for my team, how far out should I start to plan ahead on this? For in-person training? I mean online is different then in-person, it's different than bootcamps or whatever.

34:03 Reuven Lerner: As far as possible. I mean we're recording this in late March? And I've left on purpose a few weeks open in 2019. But most of the rest of this year is already booked. And I think I've already booked a few things in early 2020, believe it or not. Big companies love to do things far in advance. And big companies tend to snag a lot of training. And so if you're interested in doing it, I sometimes have companies say, hey can you come in two weeks? And unless someone else has canceled, the answer is almost always no. So people do cancel, right? It does happen. But it's relatively rare. So if you think you're going to need, like I have a bunch of companies where they know they're getting new people joining every two, three months, and so they basically say, okay let's schedule for October because by then we'll have enough people who'll be able to fill it up. And if you can do that, that's even fantastic, that's great.

34:52 Michael Kenned: Yeah often one of the times I see people getting in-person training is when they're making the transition from one project to another, as a team. Maybe one is done, now they're going to start a new project and they're going to use a different set of packages or different aspects of the language or something maybe it was CLI stuff, now they need to learn the web because it's all web services now, right? So I guess you got to think ahead and see where that end is going to happen 'cause you want to have that shift happen as quickly as possible. This portion of Talk Python To Me is brought to you by MetaSnake. Video courses and books are a great way to learn on your own. However, many of us work in teams. Wouldn't it be great to level up your team's Python or data skills in less than a week? You could all be on the same page and speak a common language. MetaSnake provides intensive hands-on training to teams in some of the largest corporations throughout the world, and offers courses in Python fundamentals, intermediate Python, exploratory data analysis, machine learning and more. Live in-person training is a cost-effective way to boost productivity, retention and innovation. MetaSnake's intensive courses can be tailored to your specific needs and include generous amounts of hands-on labs so you and your team can try out your new skills. Visit talkpython.fm/teamtraining to get your free consultation for your training needs, or just click the link on the show notes.

36:17 Reuven Lerner: But these sorts of things, even in a small company, they can usually predict it a few months in advance, making the sort of transition whether it's a language or packages or versions or new people. And so trying to get ahead of that, I mean I'd rather have someone book time with me three months in advance and then two months in advance say, you know we're not going to need them, then call me again and say like next week we need something, can you do it? 'Cause that's going to be very hard to do.

36:44 Michael Kenned: Because the answer is going to be no.

36:45 Reuven Lerner: The answer is going to be no, and I feel bad about it, because I enjoy helping people, but my calendar determines where I am each day and I can't split myself.

36:53 Michael Kenned: Right, you definitely can't. Not reasonably cancel on other companies who have already booked that 'cause they have the same pressures and needs and whatnot.

37:01 Reuven Lerner: That's right.

37:01 Michael Kenned: Right so, once a course is booked, what should the students do to get ready for it, to get the most out of it? And also what should the team lead do for that as well? For him or her and his or her people?

37:14 Reuven Lerner: First of all, just try and get things installed. Find out from the trainer, what they're going to need to install. That for me has always been a bit of an issue.

37:21 Michael Kenned: It sounds easy, like just install Python 3 and I'll show up and it'll be fine, but like, oh this has permission denied. And I can't install this. Oh and it won't run this unsigned .msi, what is happening here? Why is this so hard? How are you developers and you can't even change your own profile? Right? You're laughing because it's like so painful otherwise you'll cry.

37:42 Reuven Lerner: First of all the notion of people not knowing how to change their PATH environment variable and while being professional developers, is shocking to me, and yet I encounter it, right oh I've typed, oh my god, don't get me started. But like also I'm a Unix guy, I use Macs nowadays, that's my desktop, so I don't know a lot about Windows. But I know a lot about installing Python on Windows because I have to deal with so many of these, as you say, issues of permissions and versions and whatnot on Windows with my students. To such a degree that when I teach my Python for non-programmers class I don't even ask them to install things. I just set up a Jupyter Notebook on the server. I set a VM and then they don't have to install anything and it makes life way way easier because they really don't know what they're doing.

38:26 Michael Kenned: You all just connect to the Jupyter Notebook over their web browsers on the LAN or something like that?

38:31 Reuven Lerner: That's right, I set up the VM on DigitalOcean for the four days of the course. You set up SuperDuper on the server.

38:36 Michael Kenned: It's $2 or something.

38:39 Reuven Lerner: Exactly, exactly. It costs me almost nothing. I'm not about to charge the client for it. And it solves a ton of problems in terms of the installation. Definitely getting things installed and I have a document that describes what I want people to install and how. And if they encounter problems, they should try this. And if they get real problems then I'll help them out. But that tends to solve two thirds, three quarters, of the problems before we actually start class. And there's nothing worse.

39:03 Michael Kenned: That's really interesting. Have you experienced Windows 10 with the new Python and the Windows store side of things yet?

39:11 Reuven Lerner: I have not. I've heard of this Windows thing that you mentioned.

39:13 Michael Kenned: Yeah so apparently it requires no any form of admin permissions, no skills whatsoever, you got to go to the Windows 10 store and say install. It automatically puts it in your path. It gives you python and python3 commands on a Windows. Apparently it's pretty sleek. So Steve Dower put it together.

39:30 Reuven Lerner: That is amazing. Some of my clients they probably won't be able to do that just because they have restrictions at what they can install. That's another thing of course, right? Some of these people they have computers but they're not allowed to actually install things because of the IT department. So enter the --user command or option and Pip, right? That sounds really really good, I should totally try that.

39:48 Michael Kenned: Yeah I think that's actually going to solve a lot of people's problems because the Windows 10 store does run Super Sandbox so I think it'll have fewer restrictions. Now I'm out of the in-person training game so I haven't had to go look the poor people in the face, I don't know why they won't let you install this but you're going to have to install this for us to do this course. And you spend an hour awkwardly trying to work through that with people, and of course, you can't help them because you're not an admin either on their network.

40:15 Reuven Lerner: And they give you this look of, really, you serious? It's so hard to install this programming language that everyone is excited about? What the hay?

40:23 Michael Kenned: Yeah but in their...

40:24 Reuven Lerner: They don't think in those terms, they're thinking, boy it was never this hard to install Java, never so hard to install .NET. So maybe this Windows 10 store thing will make that easy.

40:33 Michael Kenned: Would be nice, right? So I'd definitely check it out. It's going to make it easier. I don't know if it'll fix it but it'll make it easier. So one of the things you said was to install this kind of stuff. Do you send them instructions like, you're going to need to install these seven things. This one takes forever, this one is always blocked, get on it sooner. How do you tell them?

40:52 Reuven Lerner: Yeah yeah I mean I have a document that says, you're going to need to install X, Y and Z. Here's how to do it on Windows, here's how to do it on the Mac. If you encounter problem X, try Y. And if you're really stuck, and especially, 'cause I have a bunch of clients where the student's in Python 2, and so in Python 2 and Jupyter on Windows, that combination trips people up a ton. And so I say to them, if you encounter problems that are not listed here, I'll help you the first day. This is not you, it's normal, and I'll help you out because I've dealt with this before. And then usually during the morning break or lunch break, I'll help them out for a few minutes.

41:23 Michael Kenned: Yeah that's cool. Do you use things like Anaconda, Anaconda distribution or anything like that for the folks on Windows to lower the threshold or do you just stick to straight Python?

41:32 Reuven Lerner: I stick to straight Python and the reason is there is always someone in each class who's like well I got it to work fine 'cause I used Anaconda. And I'm like, listen Anaconda is amazing if you're going to stay using Anaconda and only that. But my experience is that people who are doing Python development in their work then they end up with two installations, Anaconda and regular Python. And then they're even more confused. What did I install? Where did I install it? How does it work? So I prefer to go through that brush and deal with it and solve the problem rather than going around it.

42:03 Michael Kenned: Right, created a Conda environment but then I did something with pip that screwed that up and then like, yeah it gets tricky.

42:10 Reuven Lerner: Precisely.

42:10 Michael Kenned: Interesting. Okay so that's for the students, install stuff. Should they study ahead?

42:15 Reuven Lerner: I don't think there's a real need for it. It can't hurt. It can't hurt to do an intro Python tutorial or something like that, just to get ahead a little bit.

42:21 Michael Kenned: Probably depends on the topic, right? If it's an advanced Python course, you need to get some better foundation, maybe that makes more sense.

42:28 Reuven Lerner: Intro Python courses by definition we're sort of starting off from zero. We assume people don't know anything. The advanced courses are always tricky because everyone has a different definition of advanced. So I definitely have people take my advanced courses where they're taking it because, while they took the intro course five years ago, and no they haven't used Python since but this is the next logical progression. So for them, yeah they should totally get up on things a little more. But in the advanced course, I find that you always have a few people who have truly advanced questions and so that's a good opportunity to ask them and try to figure them out.

43:00 Michael Kenned: Yeah, for sure. Okay and how about the team lead? Is there anything they should be doing to help their people?

43:04 Reuven Lerner: Maybe identify problems that people are having, the use cases. I always find it interesting to hear what people are using Python for so that I can, if possible, if necessary, adjust things. So if they can investigate, if they can bring, often if I teach my regular expressions course, I like to have log files from the actual team so that we can parse through those and have fun with those. So preparing that kind of thing could be really useful.

43:26 Michael Kenned: Yeah 'cause they often have a better high level view. Like maybe you're going to be put under a project but you don't have any experience with it till you're done with this course, so you don't really know how it's going to be used or really the details, but maybe the team lead's already gotten in there and they understand like, no no we don't care about SQLAlchemy ORM, we're using Core, here's why, let's just focus on that. Things like that, maybe, keep it more relevant.

43:49 Reuven Lerner: That's right.

43:49 Michael Kenned: I do find though when you would go through those experience like, we don't use ORMs because they're evil. I mean that's just an example, maybe you could consider them to actually be evil, but you know we don't use this because it actually meant the person who made that decision never gave it a shot, never tried it or that was 10 years ago when they sucked, but now they're great. Something like that, and you're like, oh the thing that you asked that took me half an hour, two minutes in this thing that you're not going to use, boom, solved, and you might consider using that, right? Like I think there's interesting opportunities to question assumptions and revisit stuff like that as well. So I don't necessarily want to encourage people to completely just go only do the stuff that we're doing.

44:30 Reuven Lerner: I actually started doing Git training because I happened to mention Git when I was doing Python training somewhere and people's faces started to get really angry and if they had things to throw at me they would have thrown it at me. They're like, Git, that thing that makes us lose all of our files? That thing that they're forcing upon us? And of course a normal person...

44:48 Michael Kenned: It's so horrible, I want CVS back.

44:50 Reuven Lerner: It's like a normal person would have said, oh these people are really upset. And I was like, business opportunity. So I started doing Git courses. And I remember teaching those very people a few months later Git was about halfway through the course where I described to them how merges work and all of them said, oh that's what we've been doing wrong. And suddenly they realized that they'd been doing it the hard way and, oh maybe if we had done it the right way, it wouldn't have been so horrible and painful.

45:21 Michael Kenned: Yeah and that's a perfect example, very interesting. We're actually burning through our time really quick, this is the problem. Because we have so much stuff to talk about and that's okay. So let's switch things around and look at it from the opposite perspective. So we've been talking about like, I am a company, a person, a team lead whatever, and I want to have training, and I want to get the most out of it, and so on. I suspect a lot of folks out there listening going, you know the training, when that person comes in, they talk about all the cool stuff they do, they're really knowledgeable and then they take off to somewhere cool and maybe sunny and I go back to my cubicle, wouldn't it be better if my job was more like that and less like Jira tickets in a cubicle, nothing wrong with that, but maybe you're looking for a change. For folks who are considering getting into training maybe, what's the story there? How should they go about it? Is it a good idea still these days, things like that?

46:13 Reuven Lerner: So I think it's fantastic. I love my work, I find it interesting, I find it inspiring that I can help people. And so I definitely encourage people to look at it. But you have to remember it's a business. And so you need to do three things. One is you have to really know the Python stuff, if you're doing Python training. Number two is, in the education business we talk about content knowledge and pedagogical content knowledge. So there's knowing the thing, knowing Python, and there's knowing how to teach Python, which is a skill in and of itself. Every listener probably had university professors who were clearly brilliant and couldn't explain anything they were doing. They were lacking that pedagogical content knowledge. And so if you're going to train, you need to think about how do I explain things? How do I make this clear, either through examples or through demos or through exercises or through analogies or through stories. I tend to use a ton of stories, both because I think it breaks up the day and because I just like to tell stories. And because it helps people sort of be primed for the ideas. But then there's the business side. There's finding clients, there's booking them, there's convincing them that you're worth working with, there's the whole billing thing. And so I would say a good place to start, to sort of stick your toes in the water, is give talks at conferences and meet ups. See how happy you are doing that, see how comfortable you are doing that, and see how people respond. And if people come up to you and say, oh my god this was the best thing ever, consistently, then great, that's a good direction for you. If they don't, then just improve. Everyone starts off being bad at public speaking and explaining things and if I look back to what I tried to teach, like my first year of teaching Python, oh my god, it's embarrassing. I tried to stuff a thousand topics into two days. And if I gave each one more than three sentences, I'd be surprised. That's not training. But they invited me back for some reason and so I got to improve. And so over time you'll find topics you're good at and then you can say, oh well maybe I can offer this to people. And you don't have to do it full time, you can do a little bit here and there.

48:06 Michael Kenned: Yeah that's really interesting. And it sounds like, if I'm remembering this correctly, the way you started, and also the way I started, was started working for another established existing training company. So I started working at DevelopMentor, way way long ago like 2006 or something like that, quite a while, and they had the sales team, they had the logistics, they even had the courses written. I had to make it my own but you know I could just show up and teach that thing and they say, hey you got to be in Roseville, California in two weeks, and they want to know this. They handled a whole lot of it. You as an independent person, you have to deal with accounting, with taxes, with finding clients, with retaining clients, with billing them with invoices and POs and vendors, like a whole host of things that people don't have to. So do you recommend maybe starting out by working with some existing training company or do you think you just do the dive head first in the deep end and make your way.

49:06 Reuven Lerner: You've said all the advantages of working with a training company. And if you're not interested in dealing with all the business stuff, or if you need to have a shorter timeline, then that's probably the way to go. Because they will find you stuff pretty quickly. And doing it on your own is a way longer game to be playing. Because you got to put your name out there, you have to make sure people know who you are, you have to improve your courses. You're dealing with marketing and business development with large companies, even medium and small companies can be hard, and it's a long long term thing.

49:35 Michael Kenned: You said you have to get out there, you have to have a long runway for this to develop, you've got to start blogging, you've got to start writing or speaking. You've got to let that percolate up into the awareness and then the sales cycle, the enterprise side of a couple of months out, and I guess it's not something that you can just quit your job and then start.

49:53 Reuven Lerner: No no no no, not at all. And so that's why a lot of people started when they're consulting because they can slowly but surely add to the training and move from the consulting stuff, and they're still going to be able to you know eat and pay the mortgage.

50:05 Michael Kenned: Necessary conditions for continued work.

50:09 Reuven Lerner: The disadvantage of working with a training company, and so like, I did it first on my own, and then I was with a training company, and then I went back to doing it on my own. The disadvantage of a training company is basically that they take a huge bite out of whatever you could be earning.

50:21 Michael Kenned: Like 70% or something, right? Like a really significant...

50:24 Reuven Lerner: I taught once in Tel Aviv this open enrollment course, and someone came up to me and said, do you know how much we're paying to be here? I said, no I don't know. And he told me, I realized I was getting 10% of the income from the course. And I marched into the CTO's office and I said, this is ridiculous. You're paying me only 10%. And she said well you know we have a very expensive building to run. And that's when I realized okay, that's not my problem folks.

50:48 Michael Kenned: Yeah, yeah, yeah. The minimum amount of revenue we have to have just to keep the lights on and pay the accountants and the secretaries and the rent and all that is hundreds of thousands of dollars. Well if I did this on my own, I don't have that problem.

51:02 Reuven Lerner: That's right.

51:03 Michael Kenned: My margins are way better.

51:05 Reuven Lerner: However, these training companies will typically sign you on to a non-compete. And those can range in length of time and level of draconianness where basically they'll say, like, 'cause everyone thinks, oh I'll start teaching for company X, and then I'll leave company X and I'll keep all the clients. And they are not so stupid. And they will sign you on a contract which might or might not be enforceable, you should probably have them checked, saying that you can't compete with them.

51:28 Michael Kenned: Absolutely, the places I've seen this is, certainly with the clients, like, you don't go into the client and say, I know you're paying them but I'll do it for half of what you're paying them if we do this on the side. That is a super recipe for some kind of big issue probably involving lawyers you don't want to go near. The other one is around the actual course content. If you create course content for them, that's theirs now, a lot of times, right?

51:56 Reuven Lerner: Is it, oh my god.

51:57 Michael Kenned: It can be, oh it definitely can be. If the training company is paying you to write a course for them that they're going to sell through you but also through other trainers, a lot of times those contracts will have a, "and this is our content". Not like you're barred forever from talking about the web or something but you've got to re-start from scratch, not using that material. So you might feel like oh I'm going to build up all these libraries and I can leave, and yeah, there's a lot of danger or precariousness to that plan.

52:24 Reuven Lerner: But I would say a ton of people do it anyway because you get experience, you get exposure, you get your name out. And better to sort of try out your training, to do it with someone else who's dealing with the marketing and then after a while, like there are tons of companies as we know using Python nowadays, so okay, so you won't deal with any of the clients you've dealt with before, but now that your reputation is good, people will call you and ask you to do it. And you can do it freely.

52:48 Michael Kenned: And there's probably some part of the non-compete where if they reach out to you directly, it wasn't the same department, there's probably ways in which you could actually get back into the same situation but you know that's lawyers and trouble. I certainly see the benefit of doing this independent but I feel like it's quite tricky. I kind of want to go back to what you said about getting into it. I want to second this public speaking side of things. It's pretty clear that most developers are pretty good and certainly have some area where they're really good at, right? They've been working a long time or whatever and they could train in that area for sure. But the ability to stand up in front of 20 people and have a clear coherent conversation and lead that group, answer the questions, do all that kind of stuff, that's not natural for a lot of folks. And so this public speaking experiences, meet ups are really good, conferences are good, user groups, code camps, all these things, a lot of them, basically if you apply, you can get in there, right? A lot of the larger multi-track things. And that's just super experience, right? Super stressful in the beginning, takes a long time to get even just an hour presentation, and you think well how am I going to do eight hours a day for four days if it took me a month to do an hour, right? That's insane, I'm never going to get this stuff done. But you know you get faster, you get better. But I think you really have to go through that growth curve if you don't have public speaking experience from somewhere else.

54:11 Reuven Lerner: I often make the analogy to stand-up comedians where they'll try a bunch of jokes and they'll see which ones work and which ones don't. And so as you teach some, go through this iterative process, so as you teach a topic and if you give the same talk to multiple conferences and meet ups, you'll see which of your explanations work and which don't. And so you're going to end up with some stuff that's really good and that you can call your own as well. It's not derivative material from anyone else. But you got to go through the process.

54:40 Michael Kenned: Yeah you do. It's funny you mention the stand-up comedians. I get tons of theoretical, or maybe they go back afterwards, and they think back on how it went. I lived in New Jersey for a little while, where my wife was teaching at Rutgers and Chris Rock, the comedian, also lived not far away from there and so there's this little tiny comedy club maybe it holds a hundred people or something, and he did not one show but he did a show every night for like a week, and he would come up and he had a legal pad and he would look at it, and he would study it hard and then he would tell a joke and then he would take notes on it, and then he would do it again. And the bargain was, yeah you can see Chris Rock almost front row for like 20 bucks or 10 bucks, the trade-off is he's practicing for his big event in Vegas and he's going to do that live with you. So it was pretty interesting to see it in action.

55:28 Reuven Lerner: That is so fantastic. If you follow comedians, they are very serious about their work and figuring out what does and doesn't work. I actually saw the online course with Steve Martin about how to do stand-up comedy, and I found a lot of the things he said really resonated with me.

55:44 Michael Kenned: Yeah it's super interesting. One of my friends who did training with me, he was a stand-up comedian as well, and I think they're not that, I mean they're obviously different, but they're more similar than people would think, who're not familiar with it all.

55:58 Reuven Lerner: My family hates my jokes, so it's good that I have my students to inflict them on.

56:03 Michael Kenned: They're stuck there for four days, they're going to get it. All right, we're getting short on time so let's talk about a couple of other things that you have going on. So you talked about some of the courses that you have. You have a couple of online courses, a couple of in-person courses. Maybe just quickly tell people some of the stuff that you have out there so they have a sense of where you're coming from, some perspective?

56:20 Reuven Lerner: Sure, like my in-person courses, I've got a bunch of different levels of Python. I've got Python for non-programmers, intro, an advanced, and intro to data science machine learning and then a few other things I just mentioned like a Git course, regular expressions. Some of those, I'm sort of moving those online more and more just because, like I said, my time is limited, I can't reach everyone I want and there are individuals who might want to. So I've got my online store and those are traditional online courses where you have the videos. I've tried to include a ton of exercises 'cause from my perspective, the practice is where it's at. And so in my online courses, I'll say, okay here's your exercise, go do it. And then the next video I go through the process of how to solve it. And so I have another set of online courses which are very very different, Weekly Python Exercise, which, strangely enough, if you're not able to guess from the name, it is a weekly Python exercise, and the idea is basically that every Tuesday you get an exercise in email and then you have a week to solve it, and the following Monday, you get the solution. And there's a forum where people can exchange ideas, suggestions, solutions. And the idea is each version of Weekly Python Exercise, there are like six different courses, three intro and three advanced, each one is 15 weeks long, and the idea is that you are going to be forced to go through exercises that are close enough to the real world that they'll get you to understand some skills but they're different enough that you don't feel the stress of work and that it's, what I call, controlled frustration. Like you might be frustrated but it's timeboxed and it's not connected to your work. And so that's like the thing that I'm building up mostly and that I'm really excited about. 'Cause people are always asking me, okay we've finished the course, where can we get more practice?

57:58 Michael Kenned: Yeah, that's really cool. I like that idea. You know Will Smith, I think, he's actually said this, I don't know if he actually created this idea, this was his original idea, I'm just repeating it, but that practice is controlled failure. And it sounds like this is that for programming. Like yeah you might not get it right all the time but it's not so far out of touch that you have no hope or whatever, you'll be brought along, it's cool.

58:23 Reuven Lerner: That's right, that's right.

58:24 Michael Kenned: Yeah absolutely.

58:25 Reuven Lerner: In addition to that stuff, I have a newsletter I send out once a week. Oh two newsletters. One for Python programmers, which I call Better Developers, and the other one for trainers, called Trainer Weekly. And basically, with the Python newsletter, I just sort of get lots of ideas from my students for things that they are confused about or they want to know about and things that I want to learn about and so I can write that up. And Trainer Weekly, I'm basically writing about all the things we've discussed here and more, like the business side of training, the logistics of it, how you put together your syllabus, how do you approach clients, how do you get clients, including a whole bunch of my failures. Like you mentioned failures just now, I try to put together an open enrollment course in Tel Aviv and it was an abject failure. So I described what I did wrong and what I'm going to try and do better next time around.

59:08 Michael Kenned: That's very cool. The training one sounds super interesting to me. You know, if I was still doing that, I would definitely sign up for that, that's pretty cool. You also do a podcast, right?

59:17 Reuven Lerner: I have. The main podcast I do is called the Freelancer Show, which is for, strangely enough, freelancers and consultants. And I'm one of the panelists there, I've been on for like four, five years I guess. And there, we talk about everything having to do with freelancing. Obviously my perspective is one of training. But we talk about pricing, we talk about finding clients, we talk about what to do when things go wrong. A lot of pricing stuff but also a lot of marketing. But also people who are freelancers need to understand, yeah they're good at what they do, say programming, but when you're freelancing, you have to be good at the business side too. And that's where a lot of people are lacking.

59:50 Michael Kenned: Yeah is it almost like a mastermind group?

59:53 Reuven Lerner: Sort of, sort of. Usually every week, we'll have a topic. This week, we're going to talk about how to raise prices on clients. And then next week we're going to talk about how can you approach big companies? And so, yeah, you could argue it's a mastermind. We have guests probably like once every month or so now, more successful freelancers who come in and share their ideas and topics with us.

01:00:11 Michael Kenned: Super, it sounds interesting. Yeah people should check it out. PyCon, last time we talked in person was in Cleveland and we're both going to be back there, we both are going big and having booths and all sorts of fun stuff, right?

01:00:24 Reuven Lerner: I am super, super excited about PyCon. It was the best when I went there last year and when we met. So yes, I'm going to have a booth. I'll do it with Weekly Python Exercise name, I'm going to be talking about my courses, my books, and online stuff. I'm also giving a talk about decorators on Friday morning. So I will be a bit of a zombie afterwards but I am so so so excited about this.

01:00:47 Michael Kenned: That's super cool. I'm super excited as well. PyCon is like my geek holiday, I get to get away, hang out with my friends, and just fully embrace the whole programming world. I love it, every bit of it. So looking forward to it.

01:01:00 Reuven Lerner: My 16-year-old is learning Python as part of an entrepreneurship in programming, thing she's into in Israel. And she is devastated she can't come to PyCon with me 'cause it interferes with end of high school exams. We were planning on this and we keep going through the calendar we keep saying, okay maybe next year. Because she, even without having being there, is super excited. So she's excited, you out there should be excited.

01:01:20 Michael Kenned: Yeah absolutely, I think it would be a really cool experience, as a high schooler, just getting into programming. It took quite a while for me to kind of program alone, reading books before I actually got out into the crowd, so it was nice. All right, well, PyCon is going to be great fun. You've shared a lot of interesting stuff around training, both for people consuming training or those who want to get into training. A lot to think about there. Before I let you go though, Reuven, two questions for you. If you're going to write some Python code, and let me ask this, I'm going to give you a double first question. If you're at home working on a project for yourself, what Python editor do you use? And if you're up in front of a whole bunch of people doing a presentation or training class, what editor would you use there? Is that the same, is different, what's the story?

01:02:04 Reuven Lerner: So I was brainwashed at the age of 18 to believe that Emacs is the only editor out there.

01:02:10 Michael Kenned: Of course, it's built on LISP, right? End of discussion.

01:02:17 Reuven Lerner: When I was in MIT, even the secretaries used Emacs.

01:02:23 Michael Kenned: Wow.

01:02:24 Reuven Lerner: And I think I met my first non-Emacs user after I graduated. I was like, really, there's this thing called Vi that people can use? How odd. And you take yourself seriously. And now I've learned to muffle my laughter 'cause it's considered impolite. But I tell my students that they should use PyCharm because the learning curve is, shall we say, slightly lower. But in front of them, I'll definitely use Emacs. That's at most of my presentations, I barely use slides. I'll send people PDFs of the slides and almost everything I do is live coding while talking and I use Jupyter for that. And it's not quite Emacs but it's perfect for presentations and I can send people the notebook at the end of the day.

01:03:00 Michael Kenned: Yeah it's cool and you can have better notes and links and stuff in there. It's not just like a weird comment that you stick in in some parts, right? It's got this flow. That's cool. And I certainly think those are good ideas. I was thinking maybe Jupyter might make an appearance in your answer there somehow. Yeah, since you had the Jupyter notebook set up for the students as well. Okay so notable PyPI package. Maybe not the most popular but something you've heard of, like, oh you should learn about X.

01:03:24 Reuven Lerner: I wish I had something super clever to say and I'm just going to stick with Jupyter and Pandas. I continue to be impressed by Pandas. Boy oh boy, they just stick a lot of stuff in there. I mean I only use it in my data science courses but people's jaws just drop when they see what they can do with it in so little code.

01:03:43 Michael Kenned: Yeah, those are both super good. One that I ran across that you might find interesting is something called Bullet. Like the gun type of bullet, but it's for building command line interfaces that instead of printing out Option 1, Option 2, Option 3, which do you want? Enter 1, 2, 3. It's like a combo box with a select drop down type thing. Even the CLI, even as a scroll bar if they exceed too long and it's all terminal-based. It's beautiful.

01:04:09 Reuven Lerner: Whoa okay I got to look that up. That sounds amazing.

01:04:11 Michael Kenned: Yep, it's pretty simple but also pretty cool. So anyway, yeah, a bunch of cool packages, Jupyter and Pandas are definitely changing the world. Well final Call to Action, let's say people interested in getting into training, getting started with that, what would you tell those folks?

01:04:27 Reuven Lerner: As I said before go try to give talks, find something that you find really interesting. 'Cause if you find it interesting, other people will probably find it interesting. And propose it as a talk and that will force you to really understand it because you're going to be explaining it to other people and that'll force you to think about how you're going to present it. And it probably won't go great the first time, but that's to be expected. So just sort of try. My Trainer Weekly newsletter has lots of tips about that and if you want, you can also reach out. I'm happy to talk to people about this. I love love love talking about training with people.

01:04:56 Michael Kenned: Super, and if people want to have training at their company, what do you tell them?

01:04:59 Reuven Lerner: I tell them call me, email me. You can email me at my email address, my info, and the list of the courses that I offer is on my website, that's at lerner.co.il. Ironic, the last name, I know, but it's L-E-R-N-E-R, not l-e-a-r-n-e-r. People can see that there.

01:05:15 Michael Kenned: Cool, yeah we'll put a link in the show notes. All right well, Reuven, it's been great to talk to you about this stuff and, you know I didn't even get to ask you about the Confessions of a Public Speaker story. But I think we're out of time. I'll put a link to this book that has a whole bunch of crazy stories that people who do training and public speaking have run into. Maybe next time you're on, we'll talk some more about that.

01:05:36 Reuven Lerner: I'd be delighted and we can do a PyCon chatting it up and exchanging horror stories with one another.

01:05:41 Michael Kenned: That sounds like it'll go well over a beer in Cleveland. I'll see you there.

01:05:45 Reuven Lerner: Excellent, see you there, Michael.

01:05:46 Michael Kenned: Yeah, talk to you later. This has been another episode of Talk Python To Me. Our guest on this episode was Reuven Lerner. And it's been brought to you by Linode and MetaSnake. Linode is your go-to hosting for whatever you're building with Python. Get four months free at talkpython.fm/linode. That's L-I-N-O-D-E. MetaSnake is the place to go for your in-person team training needs. Get a free consultation for your team at talkpython.fm/teamtraining. Want to level up your Python? If you're just getting started, try my Python Jumpstart by Building 10 Apps course. Or, if you're looking for something more advanced, check out our new Async course that digs into all the different types of Async programming you can do in Python. And of course, if you're interested in more than one of these, be sure to check out our Everything bundle. It's like a subscription that never expires. Be sure to subscribe to the show. Open your favorite podcatcher and search for Python. We should be right at the top. You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the direct RSS feed at /rss on talkpython.fm. This is your host, Michael Kennedy. Thanks so much for listening, I really appreciate it. Now get out there and write some Python code.

Back to show page
Talk Python's Mastodon Michael Kennedy's Mastodon