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 on 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 at
mkennedy. Keep up with the show and listen to past episodes at talkpython.fm and follow the
show on Twitter via at Talk Python.
Hey everyone, a quick announcement before we get to the interview. A little while ago, we
released our Android app for Talk Python training where 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
slash 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.
Thanks. It is so great to be here.
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.
I love talking about training because in so many ways, it's so unknown to so many developers.
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.
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 did you get into programming in Python?
I wear glasses and there was not a very strong prescription, but when I was little,
like I guess about 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 had to sort of make converge. So I didn't have double vision. And finally the 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 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.
How interesting. Was it an Atari 2600 or which one was it? Do you remember?
Yeah, it was the 2600. And I think it had a total of like 128 or 150 bytes that you could program in.
And each of the commands was tokenized to take a one byte. Like now I understand sort of what was going
on there. So you would enter, like I remember very, very often sort of running out of space
because I was trying to write too much. And each of the characters I was trying to print
was, of course, taking up one of those precious bytes.
That's a whole nother level. I mean, my laptop has 32 gigs.
It's just, it's incomprehensible. Literally, the mind cannot compare these two things.
My eldest daughter, who's now 18, saw, I have a floppy disk on my desk. I have 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 like 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.
Yeah, yeah. I remember you'd have those apps. Gosh, I can't remember in DOS what they were called,
but you would, 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 disk. Insert disk three,
insert disk four. Yeah, that was a wild time. Absolutely. Absolutely. 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 Commodore, maybe some other old school thing. I didn't even know that
was possible. That's pretty wild. So then a few years later, we got a home computer and this was
probably, this was in 1983, but it was not the home computer that you're probably thinking of.
We had friends who worked for digital, digital electric, digital deck, electric computer. Anyway,
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. Like 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. Yeah. And also you might not know what I'm going to do.
not have so much, the phone might be unavailable some of the time. Oh my God.
Oh my God.
Whatever. Right.
My parents and I were constantly like, what? You're on the modem again. You're dialing into things.
And I think it was like while I was in high school that we got like a PC with DOS and did we even have
windows that we must have had 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 up to be at the
computer science department, but I didn't really understand what programming was and what computer
science was until I got to college. And then like, I mean, I went to MIT and there they brainwashed you into
thinking that Lisp is the, like Lisp is the only language you learn in the computer science department.
If you want to take a C programming course.
It's so amazing. It doesn't have loops. You don't need any of that stuff. You just redo recursion. It's,
it's perfect. And you're going to really get good at typing parentheses.
Yeah. And if you want to take a C course, which I did not, you have to go to the, I think it's the
civil engineering department. They offer it because CS department like wouldn't be caught dead teaching a C
course.
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's a wild language.
What did you think of that as an introduction to programming?
I thought it was brilliant, amazing, but like I was brainwashed, right? So they told us that this
was the best program. And we, we use scheme, right? So they told us that Lisp was the best language
ever. And I was like, Oh, I guess Lisp is the best language ever. And since then, truth be told,
I've had this comparison of, Oh, I was doing this back in college. I can't believe I've just sort of
rediscovered it now, whether it's in Python or in other languages, like they really sort of
helped us to see what 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. Yeah. That said,
you get out in the real world and you discover, Oh, not a lot of companies are actually using scheme.
What do you know?
Yeah, that's for sure. Very few.
I remember going, so 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 like 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 like 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.
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 a Python and Google
video being a 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, you know, 10% slower, 20% slower, you get way more features done.
Absolutely.
I think actually you speak of garbage collected languages. Like the majority of programming these
days is Java, .NET, Python, and enterprise, right? Like maybe, 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.
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 it 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
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.
Right, right. Do you see them moving towards Python and some of this IoT stuff and MicroPython and things
like that? Or are they still embedded C?
No, no. Those places are all embedded C. I don't see that changing very fast. I mean,
a lot of them are dealing with like low level hardware stuff. So it has to be sort of predictably
fast and predictable in terms of its memory usage. Maybe. I mean, it'd be great to see at some point,
but it's going to be, it's going to be a while I'm guessing.
Pretty interesting. Okay. So that's how you got into programming. You were telling me you work in HP
and you said, can I please use something other than C? So how did that lead to Python?
Basically, when I was in college, I was introduced to Python. Like basically when I was there, so I was
the editor of the student newspaper and we set up a website for the newspaper. And I should add,
like this is my super big claim to fame. Like it was one of the first 100 websites in the world.
So we sent email to Tim Berners-Lee and said, hey, we've set this website. 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 anymore. And basically at that time, there was this new thing called CGI, which allowed you to
run external programs from your website. So you didn't just have static pages and they actually
expected people to write these CGI programs and see, but people started to do it because that was
such a pain. People started doing higher level languages. And so people were using Perl, people
were using Python. And so I sort of used 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,
like blew itself up as a community. So I moved back to Python and I've been like pleasantly delighted to
see it just sort of exponentially growing over time. Yeah. It's a very exciting place to be right now.
So tell us the story about how Perl blew up. Like I know that it's definitely on the dissenting side
of the curves of popularity and whatnot, but I don't know the details.
So look, what happened was there was this very, very strong competition between Perl and Python back in
the early nineties and even, you know, mid to late nineties where Perl people like me would say, well,
I can write really, really fast, right? Like I can get done when I need to get done. And I can just like
think and boom, it comes out and flies out of my fingers through the keyboard into the computer.
And then it executes really quickly. And the Python people would be like, yeah,
but it's not maintainable. And the Perl people like me would say, huh, that's only if you're not good.
If you're good, you write to be maintainable.
Look, it's not just right only. You can read it sort of.
You can read it after learning curve 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 is 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.
Like if you thought Python 3 was a breaking change for Python 2, it's like nothing.
They said, we're going to rewrite 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, you know, here it's a bit of an exaggeration, you know, and the dozen or so of people who were waiting around for it were delighted.
And the rest of the programming world had moved on.
Yeah, that's crazy.
And so nowadays, 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 anymore in those terms.
I hear it mostly in nostalgic terms. Like it was amazing.
I did learn here. I did get started there. That kind of stuff.
That's right. But, you know, there was 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 sort of has Perl syntactic quirks, sort of for good and 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, like, eat objects for breakfast and enjoy it.
It's so the learning curve is like, if you're OK, if you really, really know objects well, and if you're OK 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 of a learning curve.
And so Python is just like hit the sweet spot of it works well.
You can learn it. You can grow with it.
And I always make the analogy like that learning a programming language is sort of like learning a regular human language.
And the thing that kills people learning a regular human language is all the exceptions, right?
Verbs work like this, except here and here and here.
And nouns work like this, except here and here and here.
And Python, like, 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.
Yeah, it generally works as you would expect it.
Maybe you got to check the docs or, you know, jump to source on the definition of a function and go, yeah, actually, it's doing what I thought it would do.
But it's not too bad.
So, OK, super interesting.
This first 100 sites, this was in Perl, though, right?
Yeah, yeah, yeah.
This was definitely in Perl.
And it was like, I think, you know, 20 lines, 30 lines of code and expanded over time.
And I mean, 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.
I would think so.
OK, so this is all interesting.
You had 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, writing magazines, writing online courses and in-person courses, things like that.
How do you make that transition?
When I came to Israel in 95, my plan was to be an independent consultant.
And they were very nice at my previous job.
I was working at Time Warner at the time.
And they said, oh, well, we'll be your first client.
So I sort of had this nice base to start my consulting company.
And so I was doing a combination of development and consulting.
And people started to ask me to do some training, like companies where I was helping them with the development.
And I was saying, can you teach our people to do this, too?
And that was my first experience at all doing training.
So 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, OK, great.
So they'll sort of sell me and sell my time.
And I told them, well, I can do.
Right.
They'll actually solve one of the really hard problems, which is marketing, acquisition, the six-month sales cycle, all that kind of stuff.
And you just have to show up and be smart.
And that's kind of easy, right?
Exactly.
And so, I mean, 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 Perlin 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.
Yeah.
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 my time.
And then three quarters of my time.
And at a certain point, like when I finished my dissertation, I decided to go back to doing it on my own.
I was already scheduled out two, three, four months in advance solid with training.
I was like, wow.
I love training.
It's super fun.
I get to meet smart people and help them out in 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.
That's awesome.
Yeah, I think it's such a cool lifestyle.
I mean, you have 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.
Like you don't have to 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 the 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?
Oh, my God.
Absolutely.
I mean, easily, easily, I don't know, 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 that.
I'll try to come back to you tomorrow 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 anymore.
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 and 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 and 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.
This portion of Talk Python to me is brought to you by Linode.
Are you looking for 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, a newly upgraded 200 gigabit network, 24-7 friendly support, even on holidays, and a seven-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, will just dive in and learn all the details.
And then there's other people who are just, you know, 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.
And, you know, like, if that's your path, obviously you're going to, like, decay super quickly, right?
But if you're really trying to write the code and do examples and build apps for your students in your classes, and then if they hit you with a question you don't know, and you actually go and learn that and research it, like, how often do people who are doing regular work with a, you know, a screen full of JIRA tickets, deadlines, you know, scrum?
Scrum sprints are ending, and, you know, you don't get the time to dig in and, like, ask the question below the surface.
That helps you really understand it.
Yeah, you know, I never even thought about this, but now that you're saying it, I think that my training has improved, like, gotten 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 to them.
And so that really, not having that pressure, not having to deal with sort of real-world development, as it were, has been a real plus.
Also, I can ask people, right?
I always ask my students, so what do you 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.
I think one of the things that blew me away, and just, you know, 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 sort of lived that life as well and traveled around and taught courses.
And every week, almost every week, that you are actually off somewhere, you're in a different company, probably in a different industry with a different team that works somewhat differently.
So, you know, imagine what you learn if you have one job and then you move to another job.
You have now these two experiences, right?
Like, if you do that every week, every other week, let's say, the amount of different experiences and styles and workflows you get exposed to are just crazy.
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, like, when I'm teaching here, boy, oh boy, people, like, are just pelting me with questions all the time.
And it's a little exhausting, but it's fantastic because it means I'm sort of 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.
Yeah, that's pretty interesting. So, you, like, go into the ringer.
You do battle, but you come out everyone knowing a lot more stuff. That's pretty cool.
What are the big distinctions I felt like? You talked about consulting and you talked about training.
One of the big distinctions that I learned pretty quickly when I got into it was, you know, when you're doing consulting and you're trying to solve a problem, you're like, I don't know how to do this.
So, you research it and you find a way that works. Yeah, good. We're done. This way works. Let's keep going.
Right? Until, unless it's, like, super performance critical. It's like, you know, real-time trading or something.
But, like, in general, like, 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, other than when I said Z or whatever, doesn't even exist. Right?
So, you need to know not just what are the options, but what are the trade-offs. Like, all this kind of stuff.
And so, it takes kind of a different way of approaching learning, I think.
One of my favorite phrases that I use a lot when I'm teaching is, unfortunately, this works.
And so, I'll show them code. I'll be like, okay, this does the job, but we don't want to do it this way for the following reasons.
That's right. That's right. You need to understand what's happening here.
Yeah, 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, more in general.
Like, 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, or something like that.
You know, maybe let's just start, like, why should they have training at all?
Like, aren't these grown adults who have been to college, most likely, and they know how to study?
Like, there's Stack Overflow and Google. Let them go.
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 sort of like a phrasebook when you go to a foreign country.
So, you can go to a foreign country and, like, say, uh-oh, I want to order, like, 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.
Yeah. Every time you'll make that mistake, you thought you asked for something and you got something totally different.
Like, oh, my gosh, why are they bringing all this meat? I just wanted some bread.
Exactly. 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 gain fluency in it. You're just going to constantly be at 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 sort of conceptually and in actual, like, time terms and what you're doing.
Yeah. And also probably adds a decent amount of technical debt, right?
Like, when the thing breaks on Friday morning, go ask Stack Overflow.
And it's in that area. You're like, what is this work? You're back at Stack Overflow trying to get the fix for the fix, right?
Like, it's a problem.
Precisely.
So, fluency, part of the reason you might look into training.
You also want, like, people to be sort of have the same basic core knowledge.
If you've got a team, and I work with a lot of companies where, like, 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, like, you want everyone sort of 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.
Like, so, they'll use my video courses along with me coming in.
And literally every time that I come in to sort of do the follow-up and exercise session, it turns out that most people have not watched any of the videos.
Why?
Because their boss, like, they're not going to be happy.
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 then they 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 because they're stupid people.
But because they don't have time.
Plus, they might find sort of the long way around 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 even faster than you could on your own.
Yeah, I think that's a really valid point.
And, you know, it seems like, you know, 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.
I want 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, like, time boxing, actually, I think it's almost required for a lot of companies because they put so much pressure on their employees to, you know, like, okay, we're doing Scrum.
So, tell me today, this morning, what you did yesterday afternoon.
Right?
And if yesterday afternoon, I was trying to, like, take it a little slow and learn something and understand what I was trying to do.
Like, that's generally not progress in the Scrum world.
Right?
Or, I mean, I'm picking on Scrum.
Like, any of these sort of, like, really closely monitored, very little slack types of work environments.
That's right.
I had a company just, like, two weeks ago call me up and say, hi, we'd like to do some Python training.
I said, that's great.
What are your needs?
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, like, nine to five.
And then you'll come in and teach them from, like, five to 8 p.m.
I said, okay, that's just not going to work.
That's not going to work in so many different ways.
Partly because they're just going to be mentally exhausted after the day.
And learning new things is not going to be efficient or possible, let alone the top thing on their agenda.
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.
Right?
These are, like, quantitative analysis folks.
Maybe they know Excel or they know a little, like, some kind of statistical language or something like that.
But they're not really programmers.
And they all want to move to, like, the data science stack.
And they had the class for an hour and a half after the markets closed at, like, 4.30 or whatever.
So it was, like, you know, 5 to 6.30 or something, which is kind of stressful.
But it wasn't too long.
And, you know, 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 apparently could not leave the training floor.
But they needed to learn Python and data science.
So how do you do that?
Right?
I mean, I think for them it worked actually pretty well.
But I've also seen it just not work.
Yeah, I also feel like doing it in those small chunks, you just don't get the sort of – it takes time to sort of ramp up during the day.
And then you get things going.
You get this nice momentum.
And I found when I do that, even, like, a half day, I just don't get enough time to build momentum so people can build on what they've learned.
For sure.
It's definitely suboptimal.
Like, you've got to give people space.
But, you know, I kind of 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, I found it on Stock Overflow.
We drop in the fix and we just keep rolling.
Right?
Because 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 don't know.
I mean, I guess that's just maybe a call to all the people out there who are leading teams or companies.
Like, you know, people who are programmers, they just need this time to go a little deeper.
Like, even if you have a PhD in computer science, like, 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.
That's right.
And, I mean, if you go to a doctor, right, how is it that the doctor is up on things?
Because they have to do continuing education.
They have to keep up on stuff and it's even required for them.
And we hope that our doctors will do that.
Well, we should 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.
I think also the environments that make that possible, they keep their good people.
The ones that squeeze that, even that little bit of time for learning and growth out of their people's workday, like, they lose their best people who are natural learners and naturally curious and stuff like that.
I mean, it literally costs their business bad in the long term to lose their best developers.
I absolutely agree.
Interesting.
So, I guess the next question I wanted to talk to you about 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 sort of business calls trying to arrange a training, figuring out what the right type of training was in my previous life.
And it was, you know, people would come down and say, well, I don't know, there's this other company that's $1,000 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, you know, professional developers and paying them a week's worth of work to be in those places.
So, like, 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 you 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?
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 other things, so we should really add 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 mean, 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 to be paying attention is good.
And also telling people to participate in the exercises.
My courses are, I usually estimate, like 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, whatever, I'll look at the answer.
But that's not the way it works, right?
Again, to sort of use the analogy of languages, you can't sort of 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 mistakes and learn, and then you will actually get better at it.
And so doing the exercises, and 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.
Yeah, you can definitely tell, like, 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.
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 figure out sort of how to test and what to test the whole subject in and of itself.
But I think that has sort of put the fear of God into them that, oh, my God, my manager is 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.
Yeah, that definitely can help.
Although, you know, it's so hard to give tests that are representative, right?
Like, yeah, I asked you this question and you said quick sort and I wanted bubble sort.
And it doesn't really matter.
If you can sort the thing, you're good, right?
But there's like, it's really hard to write those tests in a way that actually tests skill sets.
But, yeah, it's still worth doing, I guess.
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, because it's also such a pain for the trainer, let me tell you.
But I can see sort of their worries and why they want to make sure they're spending all this time and money that will actually benefit the company.
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 than in-person.
It's different than bootcamps or whatever.
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've sometimes had companies say, hey, can you come in in two weeks?
And unless someone else is 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 going to have 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 will be able to fill it up.
And if you can do that, that's even fantastic.
That's great.
Yeah.
Often one of the times I see people getting in-person training is when they're making a transition from one project to another as a team.
Maybe when I was done, now they're going to start a new project and they're going to use 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?
And so I guess, you know, you've got to sort of think ahead and see where that end is going to happen because 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.
It 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/team training to get your free consultation for your training needs or just click the link in the show notes.
But these sorts of things, even in a small company, they can usually predict it, let's say, a few months in advance, making that sort of transition, whether it's a language or packages or versions or new people.
And so trying to get ahead of that, I'd rather have someone book time with me, say, three months in advance, and then two months in advance say, you know what, we're not going to need it then, then call me again and say, like, next week we need something, can you do it?
Because that's going to be very hard to do.
Because the answer is going to be no.
The answer is going to be no.
And I feel bad about it.
Like, I feel bad because I enjoy helping people, but, like, my calendar determines where I am each day, and I can't split myself.
Right.
And you definitely can't, not reasonably, cancel on other companies who have already booked that because they have the same pressures and needs and whatnot.
That's right.
All 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?
First of all, they should try to get things installed, right?
Like, so find out from the trainer what they're going to need to install.
That, for me, has always been a bit of an issue.
It sounds easy.
Like, just install Python 3, and I'll show up, and it'll be fine.
But, like, oh, but it says permission denied, and I can't install this.
Oh, and I won't run the unsigned MSI.
What is happening here?
Like, why is this so hard?
How are you developers, and you can't even, like, change your own profile?
Right?
I mean, you're laughing because it's, like, so painful.
Otherwise, you'll cry.
First of all, like, the notion of people not knowing how to change their path environment
variable and, right, being professional developers is shocking to me.
And yet, I encounter it.
Right?
Oh, we're talking.
Oh, my God.
Don't get me started.
But, like, also, I'm a Unix guy.
I use Macs nowadays as 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 said, issues of permissions and versions and whatnot on Windows with my
students.
And, like, to such a degree that when I teach my, like, Python for non-programmers class,
I don't even ask them to install things.
I just set up a Jupyter Notebook on a server.
Like, I set up a VM.
And then they don't have to install anything.
And it makes life way, way, way easier because they really don't know what they're doing.
You all just connect to the Jupyter Notebook over their web browsers on a LAN or something
like that?
That's right.
I set up a VM on DigitalOcean for, you know, the four days of the course.
I set up, you know, Jupyter Notebook server.
Blaze through $2 or something?
Exactly.
Like, 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, like, 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 a real problems, then I'll help them out.
But that tends to, you know, solve, say, two-thirds, three-quarters of the problems before we actually
start class.
And there's nothing worse.
That's really interesting.
Have you experienced Windows 10 with the new Python in the Windows Store side of things yet?
I have not.
I've heard of this Windows thing that you mentioned.
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 Python 3 commands on Windows.
Apparently, it's pretty slick.
So, Steve Dower put it together.
That is amazing.
Some of my clients, they probably won't be able to do that just because they have, like,
restrictions on 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, you know, enter the minus minus user command or option in pip, right?
Yeah.
That sounds really, really good.
I should totally try that.
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 know, you can't help them because you're not an admin either on their
network.
And they give you this look of, really?
You're serious?
It's so hard to install this programming language that everyone is excited about?
What the hey?
Yeah, but in their environment.
They don't think in those terms.
They're thinking, boy, it was never this hard to install Java.
It was never this hard to install .NET.
So, maybe this Windows 10 store thing will make it that easy.
It would be nice, right?
Amazing.
Yeah.
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.
Like, 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 soon.
Or how do you tell them?
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 a problem X, try Y.
And if you're really stuck, and especially, like, I have a bunch of clients where they're still using
Python 2.
And installing 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.
You know, it's normal.
And I'll help you out because I've dealt with this before.
And then, usually, during, like, the morning break or lunch break, I'll help them out for a few minutes.
Yeah, that's cool.
Do you use things like Anaconda, Anaconda distribution, or anything like that for the folks on Windows to, like, lower the threshold?
Or do you just stick to straight Python?
I stick to straight Python.
And the reason is, I mean, people always, there's always someone in each class who's like, well, I got it to work fine because 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 sort of go through that brush and deal with it and, like, solve the problem rather than going around it.
Right.
I've created Anaconda environment, but then I did something with pip that, like, screwed that up.
And then, like, yeah, it gets tricky.
Precisely.
Yeah.
Interesting.
Okay.
So, that's where the students install stuff.
Should they study ahead?
I don't think there's a real need for it.
It can't hurt.
It can't hurt to, like, do an intro Python tutorial or something like that just to get ahead a little bit.
Probably depends on the topic, right?
If it's an advanced Python course, you need to, like, get some better foundation.
Maybe that makes more sense.
Intro Python courses, by definition, we're sort of starting off from zero and we assume people don't know anything.
The advanced courses are always tricky because everyone has a different definition of advanced.
Oh, yeah.
So, I definitely have people take my advanced courses where they're taking it because, well, 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, like, 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.
Yeah, for sure.
Okay.
And how about the team lead?
Is there anything they should be doing to help their people?
Maybe identify problems that people are having or the use cases, right?
I always find it interesting to hear what people are using Python for so that I can, if possible, if necessary, sort of adjust things.
So, if they can sort of investigate, if they can bring often, like, 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 can be really useful.
Yeah.
Because they often have a better high-level view, right?
Like, maybe you're going to be put onto a project, but you don't have any experience with it until 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.
That's right.
I do find, though, when you would go through those experiences, like, we don't use ORMs because they're evil.
And then if you actually, I mean, that's just an example.
Maybe consider them to actually be evil.
But, you know, we don't use this because.
And that because 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, well, the thing that you asked that took me half an hour, like two minutes, and 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 sort of 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.
I actually started doing Git training because I happened to mention Git when I was doing Python training somewhere.
And people's faces, like, started to get really angry.
And if they had things to throw at me, they would have thrown them 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, like a normal person.
It's so horrible.
I want CVS back.
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 people were like, and I remember teaching those very people a few months later, Git.
And it was about like halfway through the course where I described them how merges work.
And all of them said, oh, that's what we've been doing wrong.
And suddenly, like, they realized that they had been doing it the hard way.
And, oh, well, maybe if we'd done it the right way, it wouldn't have been so horrible and painful.
Yeah, that's a perfect example.
Yeah, very interesting.
We're actually burning through our time really quick.
This is a problem.
Because we have so much stuff to talk about.
And, you know, 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'm a company, a person, a team lead, whatever.
And I want to have training.
I want to get the most out of it.
So on.
I suspect a lot of folks out there are 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.
Like, for folks who are considering getting into training, maybe what's the story there?
Like, how should they go about it?
Is it a good idea still these days?
Things like that.
So I think it's fantastic.
I love my work.
I find it interesting.
I find it sort of 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, like, the Python stuff if you're doing Python training.
Number two is, like, in the education biz, we talk about pedagogical knowledge.
And pedagogical, I'm sorry, content knowledge and pedagogical content knowledge.
So there's, like, knowing the thing, knowing Python.
And there's the 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, right?
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 meetups.
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, right?
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 was teaching Python.
Oh, my God, it's so embarrassing.
Like I tried to stuff like 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 like topics you're good at.
And then you can say, oh, well, maybe I can offer this to people.
You don't have to do it full time.
You can do a little bit here and there.
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 training.
An established existing training company.
So I started working at Developmentor way, way long ago, like 2006 or something like that for 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.
They say, hey, you've got to be in Roseville, California in two weeks.
And they want to know this.
You know, and it was they handled a whole lot of it.
Right.
Like 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.
And just, you know, 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 know, you just do the dive headfirst in the deep end and, you know, make your way?
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 sort of 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 play playing because you've got to put your name out there.
You have to make sure people know who you are.
You have to improve your courses.
You have to like you're dealing with marketing and business development with large companies, even medium, small companies can be hard.
And it's a long, long term thing.
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 like a couple months out.
And like it's not something you could just quit your job and then start.
No, no, no, no, not at all.
And so that's why a lot of people start when they're consulting because they can sort of slowly but surely add to the training and remove from the consulting stuff.
And they're still going to be able to, you know, eat and pay the mortgage.
Necessary conditions for continued work.
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 I went back to do it on my own.
The disadvantage of the training company is basically that they take a huge bite out of whatever you could be earning.
Like 70% or something, right?
Like a really significant.
I taught once in Tel Aviv this like 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, like that's not my problem.
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, you know, hundreds of thousands of dollars.
You're like, well, you know, if I did this on my own, I don't have that problem.
That's right.
My margins are way better.
However, 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 you like, because 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.
Yeah.
Which might or might not be enforceable to do.
I've never checked saying that you can't compete with them.
Absolutely.
The places I've seen this as certainly with the clients, like, you know, I've never checked.
You don't go into the client and say, I know you're paying them, but I'll do it for half what you're paying them.
If we do this on the side, like 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, right?
Like if you create course content for them, like that's kind of theirs now a lot of times.
Right.
So is it?
Oh my God.
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 like 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, you know, but you've got to restart from scratch, not using that material.
Right.
So you might feel like, oh, I'm going to build up all those libraries and I can leave.
And yeah, there's a lot of danger or precariousness to that plan.
Right.
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 when someone else is 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 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.
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, there's probably ways in which you could actually get back into the same situation, but you know, it's, that's lawyers and, and trouble.
I certainly see the benefit of doing this on independent, but I feel like it's, 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.
Like 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 like lead that group, answer the questions, you know, do all that kind of stuff.
Like that's not natural for a lot of folks.
And so this, this public speaking experiences, meetups are really good.
Conferences are good.
User groups, code camps, all these things are 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 experienced, right?
It's super stressful at the beginning.
It 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, like that's insane.
I'm never going to get this done, but you know, you get faster, you get better.
But I think you really have to go through that sort of growth curve if you don't have public speaking experience somewhere else.
It's sort of like, I often make the analogy to like 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, and then they'll sort of like, you know, go through this iterative process.
So as you teach a topic, and if you give the same talk at multiple conferences and meetups, 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.
That you're not, it's not derivative material from anyone else.
But you got to go through the process.
Yeah, you do.
You know, and you, it's funny you mentioned the stand up comedians.
Like it sounds like 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, you know, 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'd study it.
Then he would tell a joke and then he would take notes on it and they would do it again.
And the bargain was, yeah, you can see Chris Rock like 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.
That is so fantastic.
Yeah.
If you follow comedians, like they are very serious about their work and figuring out what does and doesn't work.
I actually saw like the online course with Steve Martin about how to do like stand up comedy.
And I found a lot of the things he said really resonated with me.
Yeah, it's super interesting.
I think, you know, one of my friends who did training with me, he was a stand up comedian as well.
And I think, you know, they're not that, I mean, they're obviously different, but they're more similar than people would think who are, you know, not familiar with it all.
My family hates my jokes.
So it's good that I have my students to inflict them on.
That's right.
They're stuck there for four days.
I'm going to admit 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 know, 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 like some of the stuff that you have out there so they have a sense of where you're coming from with this perspective.
Sure.
So like my in-person courses, I've got a bunch of different levels of like Python.
So I've got Python for non-programmers and intro and advanced and intro to data science, machine learning.
And then a few other things I guess mentioned, like a Git course, regular expressions.
Some of those, I'm sort of moving those online more and more just because, as I said, like my time is limited.
I can't reach everyone I want.
And there are individuals who might want it too.
So like I've got my online store and those are sort of traditional online courses where you have the videos.
I've tried to include a ton of exercises because from my perspective, like the practice is where it's at.
And so in my online courses, I'll say, okay, here's your exercise.
Like 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, as you might not be 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 the 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, and each version of Weekly Python exercise.
So they're 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 in like, it's time boxed 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 because people are always asking me, okay, we finished the course.
Where can we get more practice?
Yeah, that's really cool.
I like that idea.
You know, Will Smith, I think, he actually said this.
I don't know if he actually created this idea.
This was his original idea or he's just repeating it.
But that practice is controlled failure.
Yeah, 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, right?
You'll be brought along.
It's cool.
That's right.
Yeah, absolutely.
In addition to that stuff.
So, I mean, I have a newsletter that I send out once a week.
Well, two newsletters.
One for Python programmers, which are called 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 do you put together a 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 tried to put together an open enrollment course in Tel Aviv, and it was an abject failure.
So I describe what I did wrong and what I'm going to try to do better next time around.
That's pretty 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?
I have, like, 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 or five years now, 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 sort of how do 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.
Yeah.
Is it almost like a mastermind group?
Sort of.
I mean, usually every week we'll have a topic.
This week we're going to talk about how to raise prices on clients.
And the 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 who are successful freelancers who come in and share their ideas and topics with us.
Super.
It sounds interesting.
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?
I am super, super excited about PyCon.
It was the best when I went there last year and when we met.
So, yeah, so I'm going to have a booth under the weekly Python exercise name.
I'm going to be talking about, like, my courses and 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.
That's super cool.
I'm super excited as well.
Like, PyCon, it's like my geek holiday.
I 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.
My 16-year-old is learning Python as part of, like, an entrepreneurship and programming thing she's in here in Israel.
And she is devastated.
She can't come to PyCon with me because it interferes with end of high school exams.
Like, we were planning on this and we keep going through the calendar.
So, like, we keep saying, okay, maybe next year.
Because she, even without having been there, is super excited.
So, if she's excited, you out there should be excited.
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.
I think 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, Ruben, 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, a training class, what editor would you use there?
Is that the same?
It's different?
What's the story?
So, I was brainwashed at the age of 18 to believe that Emacs is the only editor out there.
Of course.
It's built on Lisp, right?
So, end of discussion.
I mean, look, when I was at MIT, even the secretaries used Emacs.
So, like...
Wow.
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, like, muffle my laughter because it's considered impolite.
But I tell my students that they should use PyCharm because, like, the learning curve is, shall we say, slightly lower.
But in front of them, I'll definitely use Emacs.
That said, most of my presentations, like, I barely use slides.
Like, I'll send people the 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.
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 know, you stick in some part, right?
It's got this flow.
That's cool.
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 heard of.
You're like, oh, you should learn about X.
I wish I had something super clever to say.
And I'm just going to stick with, like, Jupyter and, you know, pandas.
I continue to be impressed by pandas.
Boy, oh, boy.
They just stick a lot of stuff in there.
And, 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.
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, like, printing out option one, option two, option three, which do you want?
Enter one, two, three.
It's like a combo box with a select drop-down type thing in the CLI.
It even has a scroll bar if they exceed too long.
And it's all, like, terminal-based.
It's beautiful.
Whoa.
Okay.
I got to look that up.
That sounds amazing.
Yeah.
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 are interested in getting into training, getting started with that.
Like, what would you tell those folks?
As I said before, go try to give talks.
Find something that you find really interesting because 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 to other people.
That will 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.
And so just sort of try.
If you, like, 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.
Super.
And if people want to have training at their company, what do you tell them?
I tell them, call me, email me.
Like, you can email me at my email address, my info.
And the list of the courses I offer is on my website.
That's at learner.co.il.
Ironic, the last name I know, but it's L-E-R-N-E-R, not L-E-A-R.
Learner.co.il.
And people can see that there.
Cool.
Yeah, we'll put a link in the show notes.
All right.
Well, Reuben, it's been great to talk to you about this stuff.
And yeah, I didn't even get to ask you about the confessions of a public speaker.
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.
And maybe next time you're on, we'll talk some about that.
I'd be delighted.
And we can do a PyCon chatting it up and exchanging horror stories with one another.
That sounds like it'll go well over a beer in Cleveland.
I'll see you there.
Excellent.
See you there, Michael.
Yeah.
Talk to you later.
This has been another episode of Talk Python to Me.
Our guest on this episode was Reuben 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/team training.
Want to level up your Python?
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.
Or if you're looking for something more advanced, check out our new async course that digs into
all the different types of async programming you can do in Python.
And of course, if you're interested in more than one of these, be sure to check out our
Everything Bundle.
It's like a subscription that never expires.
Be sure to subscribe to the show.
Open your favorite podcatcher and search for Python.
We should be right at the top.
You can also find the iTunes feed at /itunes, the Google Play feed at /play,
and the direct RSS feed at /rss on talkpython.fm.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Now get out there and write some Python code.
I'll see you next time.
Bye.