Full show notes can be found at http://podcastinit.com/episode-2-reuven-lerner.html
Episode 2 Brief intro
- Recording date/time
Reuven Lerner Interview
- Please introduce yourself
- How did you get introduced to Python?
- How did you break into the field of providing Python trainings?
- What are the most common languages that your students are coming from?
- What are some of the biggest obstacles that people encounter when learning Python?
- Where does Python draw the inspiration for its object system from?
- In what way(s) does learning Python differ from learning other languages?
- What sorts of materials/mediums do you use for training people in Python?
- Do you use your book (Practice make Python) as follow up material for your trainings?
- In your freelance work, what portion of your projects use Python?
- Have you seen a change in the demand for Python skills in the time between when you first started using it and now?
- What types of projects would cause you to choose something other than Python?
- Reuven Lerner
- Chris Patti
- Tobias Macey
Click here to read the raw transcript...
Hello, and welcome to another episode of podcast.in it. We are recording today on April 21 2015. We have Tobias Macey and Chris Patti as your hosts. And today we're interviewing Reuven Lerner.
Why don't you introduce yourself?
Sure. So my name is Reuven, I've been a software developer now for I guess, more than 20 years. Over the last few years I've been doing, I would say less than less projects and development work and more and more training to such a degree, that now I would say, a good 90% of my work is doing training. And a huge proportion of that training is in Python, but like site that I grew up, as you can hear in the US, I went to high school college there. I've lived in Israel now, halfway between Tel Aviv and Jerusalem and a city called moonbeam since 99.
That's very cool. Israel seems from everything that I've heard, like a really neat place to live. It's such an interesting confluence of cultures. And obviously, it's really sort of interesting, for better for worse region. What brought you there? How did you end up deciding to move there?
I'm sure. How long do we have?0:01:30
I would say sort of put a nutshell it this way. I went to Jewish schools and Jewish camps. And the basic sort of history lesson that we got there was Jews that wanted to live it as over 2000 years. Wouldn't it be great if we could go back? And I sort of looked around and said, actually, guys, we can we have a country again, you might not have noticed,0:01:50
and the fact that as someone in the high tech world, I could make a decent living here just made it a more compelling case. So I came here, my plan was basically to come to Israel as soon after college as possible. And about two and a half years after graduating, I paid off my loans. And through a lot of frugal living, I moved to Israel. And I must say, I've been very, very pleased here on all fronts. I mean, if I'm not going to claim that there are no problems in Israel, but I feel like Far from it. But I feel like these are the sort of the sorts of problems that I want to wrestle with, on a sort of personal national basis. And we lived in Chicago for years was doing my PhD coursework at Northwestern. And much as I enjoyed Chicago, I really enjoyed, I enjoyed living back in the US for a little while, that only cemented my my feelings that the US is a nice place. So here, but uh, but I actually very comfortable with my decision to move to Israel.
Very cool. So how did you get introduced to Python? When did you first come across it and what made you want to stick with it?
I know, I've been thinking about this, actually, I'm not hundred percent sure when it was. So I'll give you a little background. So I went to MIT undergrad, and you have to do an undergraduate thesis when you're there. And I did something this was just before the web started. my undergrad thesis was this new idea that you got one program that spoke many different protocols. And it really barely kind of work. And that's okay, it was an undergrad thesis. But in order to get that going, I went to a local bookstore. And I bought two books, one was on set and off, and another was on Pearl. And so I was sort of really getting into pearl. And I did all sorts of stuff with pearl. And I knew at that point, this was in the early 90s, there was a lot of rivalry between the pro world and the Python world. And it just sort of out of necessity and out of interest. I started learning about Python as well. And I still sort of saw myself as more of a pro guy, and then sort of pro committed suicide. And so I said, Well, you know, Python is actually doing pretty great. Maybe I can do some there. And so it's probably been a good, certainly more than 15 years, I would say about 20 years at this point, that I've been using Python on a regular basis, sometimes more regular than others. So there was a period where I did tons of work in Python, there's a period of work where a period of time I did tons of work in Ruby, I would say over the last five, six years that I've been getting more and more to doing training. And the demand for Python training is so extensive, that many of the people who know me for doing Ruby are sort of surprised that how strong I am in Python, but I see actually the community and the language and the business opportunities, quite frankly, just growing and growing in Python, which is not as drew for Ruby, I'd say for now.
Yeah, I definitely agree. Actually, I think I think that while Ruby is thriving in its niches, in terms of Ruby on Rails, and and also in infrastructure as code with Chef, I think Python is is definitely gaining ground in terms of it's being used in so many more diverse contexts. Like in the sciences, and you know, and obviously, there's there's web quite a bit of web programming being done with it. But also, it's also doing infrastructure as code with invisible unsolved, and you know, it's being embedded into 1000 different projects. And, and, and people are just recognizing that it's a really sort of good general purpose, language that's easy to learn and has a great deal of depth for you to grow into as you as you learn it more fully. So I definitely agree.
Absolutely. I'll say along those lines, by the way, that when I started doing training in Python, he classes, I was convinced that all my students would be web people. Because like, right, that's what I do with it. Right. So that's what everyone must be doing with it. And I could not have been further from the truth, the overwhelming majority of people who are doing the were in my training are in, you know, automation, they're in testing. They're in, you know, big data analysis, all sorts of fields, which is the now like just growing growing in the Python space, and are helping the language to really extend itself, tentacles, for lack of a better term into all sorts of new areas that that I never would have imagined. And quite frankly, that I'd never really learned about before,
before I was forced to teach it and deal with these people. Right. That's great. And that kind of dovetails with our next question. How did you break into the field of providing Python trainings? How did you sort of get your start making make a name for yourself and, and have people eating down your door?
Yeah, it's kind of wild. So I've been doing training. So So basically, so I moved to Israel in 95. So that's 20 years ago, and I already had consulting work from my previous employer in the US Time Warner, and we had a fantastic relationship, I still have a good relationship with many of the people I knew from there. And so I arrived doing pearl analytics, and I was doing all sorts of stuff in those those fields. And people said to me, Well, it's nice that you do the development, would you mind giving us some training in this? And so I had my toes in the training water for a while. And I did a little Python training as well here in there, but not that much. But the real sort of Python training tsunami happened probably about six years ago, I was still working on my dissertation. I really didn't want to have to deal with the training marketing. And I figured if I hitched my, my wagon to a bigger horses, it were hard to bigger wagon. I don't know what the metaphor is. That event, then maybe I could maybe Haha, I could finish my dissertation faster, and new clients. And so I spoke with a company called john Bryce, which is sort of the 900 pound gorilla of training in Israel. And I sent and I said, I'd like to do Ruby on Rails training. And they said, Yeah, you know, this Ruby thing, it's kind of flash in the pan, we don't think there's really room for training and it but send us your resume. And within hours, they call me at least Oh my god, you know how to do Python, we must have you do Python training. And since then, I've been doing between two and three courses a month, almost non stop. And right now we're recording this late April, and I'm almost solidly booked through the end of December. With training. It's just nuts. And I love it. I really it energizes me like I mean today, so I slept four hours last night, because I was trying to get an article done for Linux journal. I talked for eight hours today came home finished the article just did our podcast talking to you guys. And I'm a zombie. No and And truth be told, when I'm training, it gives me such energy. I love it. I love the questions people have. I love interacting with them. I love seeing those aha moments, or oh my god moments like you could do all that in one or two lines. And of course, the point in Python is yes, you can. And you can read it six months later, which was nothing not necessarily true for lawyers, even sometimes Ruby, right. So So training was sort of a offshoot of my internal interactions with john Bryce. And recently, I decided to sort of now that I finished the dissertation for the fish, the PhD,
I've returned to doing training on my own through my own company directly. And that has just increased the demand even more much to my pleasant surprise. Right. Yeah, it's interesting to hear from the perspective of somebody providing training, how much of a demand there really is for Python, because you see all these different reports that come out about the comparative popularity of various various programming languages. And they all can be taken with a bit of a grain of salt, but having that type of perspective on which languages are actually in demand on a map my larger companies really interesting, particularly since you're saying how a number of them were really terribly interested in Ruby on Rails, but they really want to learn about my father.
Oh, for sure. So I'll tell you. First of all, I think someone that each of these big multinational companies, and I mean, companies that drink for like, I do training in Cisco, HP, VMware, EMC, these big, big vendors, these big companies, or someone, I think in the top basically said, we have to do some standardization, we have to choose a smaller subset of languages to work with. And Python is good for a lot of people. And so let's just run. And so everything from internal web apps, to big data to testing everything, they're doing a lot of standardization on Python. And not only they doing this a lot of companies, but he's gotten the demand is almost insatiable, it turns out that when I'm saying Sysco, giving training, I'll often meet someone else, you know, new person, I'll say, oh, what are you doing here? Oh, I'm giving Python training. Like we're both there on the same day. And then really, the demand is almost insatiable. And I would say it's going to grow before it shrinks, in part, because such a huge number of universities are now teaching Python as an intro language. And you know, that some ridiculously large portion of those students are going to finish school, no graduate from college, go off and do startups and What language are they going to use? What clue is going to be Python? Because that's the one they know best? Yeah. And so we're going to see another five to 10 years, I think of this at least.
What's it's funny, by the way, the mentioned Lyft, seems like others that I went to MIT. And so I was brainwashed into believing that list is the best language ever, and continue to believe that. And it actually sort of hurt me inside of it. When they said they were moving away from Steam toward Python. And the argument they use was basically, the intro courses changed, because computing is changing what we want to teach our students has changed. And we can get those ideas across better with Python them with lyst. I'm not 100% sure that I agree with that. Because I really do think that there are many things I learned both in that course and from lyst, in general, that have been so useful. I didn't recognize the time, of course, the age of 18. You don't recognize anything, but right, you're like, wow, that was such a useful insight that has carried me through and I use some of those things in my teaching, even now, nowadays, I still think people should learn lyst. But it is pretty great that they can indeed use a practical language that has theoretical depth in an interest. Yes, course.
So out of curiosity, when you're performing these Python trainings, these big companies, is there a particular language that most of the most of your students are coming from? Or is it sort of a mystery, various languages, languages they've all used for,
Yes, definitely. Very much different. Two different things of learning a language and what it is and what the semantics are versus how learning how to use the language in an idiomatic manner.
Right. And I would say that over the years, I've been learning what the idioms are that surprise people, or that are most useful to them. And I've tried more and more to gear my training in that direction, for instance, almost never talked about, like sculpting in Python, it's so obvious, until I discovered it's not. It's not to people who are not used to it. And so now I have a long section where I talk about scoping evil, and I explained to them different kinds of variables and le GB, and how this works and the sort of fun tricks you can play with that as well. And and I think those insights, maybe they're not going to be redefining true to false and false true in their day to day work. certainly hope not, although I do suggest that they do it to someone they don't like when they go to a cup of coffee. But But you know, understanding le GB really give you deep insights into how the language works, and what's going wrong when you're trying something.
Right, I'm sure and speaking to your your point about what's idiomatic in different languages, that was I mean, I was a Ruby guy for years and years and years, I've only been kind of a Python convert, although I still love Ruby for the last, you know, I don't know, four or five months or so. And that was one of the most challenging aspects of learning Python for me is, so many of the concepts are very similar. But the idioms are so different. And in, in kind of, if you're coming from a different environment, you're used to different things, and intuitive ways, like the, you know, no implicit return thing. I know, it's a small thing. And most of the nice guys are like, Well, why would you do it any other way, but you used to Ruby where implicit return happens, and it can, you know, lead to some hair pulling and just work moments.
And actually, yeah, that actually, I must say, that drives me totally bonkers. And maybe it's just my like, you know, lyst, Ruby, even pearl persona coming out. But I come on, can we just have implicit return? And I understand know, everything has to be explicit. But But I really actually do miss that. And they're very, I mean, also the whole thing where when you do assignment, like we're, I would say, even like, you know, you're sorting a list, where returns none, I love getting things back and then being able to change them. And yes, we've sorted and so forth. But I know that's behavior that I just sort of shrug my shoulders out and say, Well, I tell my class and I say, well, they never called me to ask what I thought. So
that's the that's the both the blessing and the curse of having a benevolent dictator for life. Right, as unfortunately, everybody has an opinion. But is it the only one that really matters?
So what are some of the biggest obstacles that people encounter? Speaking of idioms and idiomatic code? What are some of the biggest obstacles that people encounter when they're learning Python?
So first of all, the whole dynamic typing thing, I think, really takes them by surprise, and sort of gives them the chills, you know, so like, just I guess, yesterday, I was doing it yesterday. And today, I gave the first day of an intro Python course to accompany here in Israel. And both days, I think, because people were coming from the static compiled languages, both these people, I this one of my, one of the exercises I give them is just a number guessing game. So get raw input from user, and we're almost always using Python two, to seven. And so you'll write input, get a string, and that compared with a randomly generated number, from the random module, and I do this on purpose, because they know they're going to get tripped up. And they're going to remember the hard way that Ryan would always returns a string. Someone says, oh, why don't we just declare the variable to be an integer, and then automatically right input when it's assigned to that to that variable, it will become an integer. I was like, no, that's not the way it works. You can't have a variable that's a certain type is the fact that variables aren't type fact that parameters are variables aren't type just gives them the willies. Similarly, I think, Oh, you know, what's, what's hard for them? Also, the whole splat argument thing, that and keyword arguments, they think it's super cool. And they cannot wrap their heads around it either hard for them? Or they don't, they don't know why they would want it.
I'll totally admit that. I totally love it. I think it's a great feature. But I have to admit that I find it hard to wrap my head around sometimes. And whenever I see it in code, I have to be like, what's this? Do it again? What? You know, so it's definitely, I can definitely appreciate that. It's one of those. I mean, for you, for someone who comes from a language like Lisp, it's like, well, of course, you have hammock arguments, like what why would you want to do it any other way? So it's a great feature, but it can be it can when you first encounter it, or even after you first encounter it, it can feel kind of alien.
Yeah, it took a little while for that to sink in for me when I first started using Python. Mm hmm.
Yes, yeah. So I'm one of the exercises I give is an XML generator in a function. And so I say like, you know, so the tag name should be the first parameter, and the content should be the second parameter. And then you can take any number of keyword arguments. And those are turned into attributes inside the opening tag. And that usually confuses them, because they say, wait a second, where am I supposed to use the splat? Like, where am I supposed to get any number of arguments takes a while to realize? Well, first of all, just because you've learned about a tool doesn't mean you have to use it. But second of all, in that particular case, getting a default argument is typically more appropriate and more useful than having the black there as lead arcs. But the keyword, you know, he would arguments. Well, that's just super handy. And then you can have this API that looks nice, and does some things with you behind the scenes. That's another one of the things that drive them nuts. Oh, I know, the fact that objects are totally exposed and open. Right, like, so I mean, I even go through the motions out, okay, here's a person object, let's create together and etc. They're like, No, do not use these erase these getters and setters. We don't need that. And people will say, but but we're supposed to have, you know, our objects is supposed to be black boxes. And I say, Well, not really in Python. Yeah. But what if we want to have programmatic access or change the API overtime, evolve it? Wouldn't that be better to have a better Saturday? I say, Well, actually, the way Python approaches is a property. And typically, my intro classes don't even get to properties depends on how sort of how the class structure but usually not. But I say like half a dozen answers to these things. But they're different than the answers that you're used to. And just because the object system doesn't work, or just because the approach isn't what you're using, doesn't make it wrong, it just makes it different. It's a different set of trade offs.
That's, that's really interesting. You say that properties are one of the things that I kind of, like, you know, as I said, as I admitted already, I'm kind of a Python newbie, still, I've been using it for a few months. And I certainly, you know, too long and write my code today. And there are various aspects of it that I haven't quite wrap my head around yet. And that leads me to wonder, you know, many languages, like there's almost nothing new under the sun computer science, right? Like every language countries various its features back to some lineage of somewhere else, where it is pythons object system, like that, that aspect of properties, objects working differently than you need See, where do you think it it drew its object oriented inspiration?
Well, interesting, you say that, because I've always said, and thought, I think it's even true that a lot of the Python object system came from small talk. So you can I mean, you came from Ruby, you've spent some time in Ruby, like to be told, if I have to teach Ruby and Python, I often will come up with a new exercise in one language and use it in the other because the languages are under the surface, very similar in some ways. And the object system is very similar in some ways, except icon somewhere said, No, no, no, instead of doing everything, through messages, everything through methods, we're going to turn that around, and we're going to make everything look like data access. And so like properties are basically the inverse of Ruby's attributes where Ruby attributes we make data look like methods, right? And, and in Python, we make our methods look like data. And I've got to assume that it was widow or someone else, and maybe when the languages that he learned, he just really liked that approach. And it definitely is a bit of a bastardization or like a real revolution from what small talk did. And I don't know, I don't know, it's an interesting approach, there's sometimes when I sort of roll my eyes, I really have to do it this way. But the whole objects design, basically, if you understand how attributes work, then you understand the hold on objects as demand inheritance, for instance, just come straight out of that, you know, there's no special rule for inheritance. It's just an extension of or a special case of attribute lookup. And that I think, is really elegant. Where did it come from? Exactly? I don't know. That's a good question. I'd love to find out.
Any one of our listeners can tell us if there's gotta be some language history laughs out there who can install this on this? I'm sure.
Yeah, I'm sure another thing that people particularly coming from things like c++ or Java have trouble with is the lack of protected and private methods in Python.
Oh, my God, they go nuts over that.
Right? I mean, right, right. Because they sort of wonder how is this possible? How can this language I mean, so it has dynamic typing, everything is open, nothing is private, protected, and especially like many of the people who might teach are in the security industry. And to them, this whole notion of, we're just going to be really optimistic and nice and friendly, and everything will work great. They say, you know, everything we do professionally, I say, well, maybe but it's worked pretty well, for two decades, you know.
And, interestingly, too, Python is actually quite popular in the security industry as well.
Right? So I, I don't know, I don't know what it's very.0:24:43
I can't explain it. I mean, I do tell them that if you really want I mean, there's always a way around it. But if you really want sort of extra security to pretend that things are private protected, you can always, you know, you can always use something like a descriptor. But truth be told how many people are going to do that? Almost none? I don't know how I mean, I'm sure we're going to hear from people now. Right. But like, how often do people really use descriptors? After all, they're super cool. But yeah, I think I think it's, you know, maybe 5% of the population, and that 5% might need it. Yeah, but I think it's a it's a relative rarity.
Once again, I think it comes down to just having to think about different ways of structuring your systems in your code right around this new model, new way of working and sure it's just a matter of getting people to change their mind about things is is the hard part.
Yes. Yes. Oh, here's another thing that that people are surprised by. And sort of intrigued by, which is, of course, comprehension, comprehension, comprehension, and dictionary comprehension, where they see it as almost like black magic. And, you know, they see, so I give lots of examples, what we can do, we usually, depending on the length, of course, the type of the course, we then practice it, some degree or another. But I know that people don't get it, like they don't see the sort of, Okay, I have a problem. comprehension is my solution. And this is what I'm going to get back. I think part of is just sort of years of training, where if you work with functional languages, or you know, if you use these sorts of tools, like map, reduce filter for years, then you sort of see those solutions to a huge variety of problems. But for a lot of people, all they see is this wacky syntax. And they're not quite sure what they're doing or how they're getting it, but they're getting results back. That don't quite make sense.
Yeah, I was gonna say that, for me list comprehension. comprehension is, in general, are one of the Python features that I find myself struggling with, not because I can't understand them when someone else uses them. And I see them in source code, and I say, comprehension, it does this bus. Because the syntax is so alien to me that when I find I need to do something, I'll you know, hit a code review. And they'll say, well, gee, a comprehension could do this a lot more cleanly and elegantly. It's like, Oh, yeah, I just, I never would have thought of that. Because it's this. For me in my you know, really limited way of thinking it's just this Bizarro world thing off in a corner somewhere that I haven't quite embraced yet. And I can only imagine other newbies have a similar challenge with them.
Yeah, sure. I often tell my students in Israel that we have an advantage because it helps to read a list comprehension from right to left. Actually, just recently, like a week or two ago, I've got to write this up in a blog post. But I think that it can help to think of a list comprehension or a comprehension. In terms of SQL, a lot of people know SQL, if you think of like, and I've also started reading my comprehension, three lines, breaking it up. So you've got the you've got the expression, you get back. And then you've got the source that you're iterating over, and then you've got your if statement. And I said, I realized that if you sort of make that analogous to SQL, it's like a select call, right, you've got your select from some source were and you're filtering it out. And once I made that analogy for people, it really just the last few weeks is working with us that I think helped to solidify their understanding of the syntax, it's still a little weird for them, but at least it sort of became close to something they're familiar with.
No, I totally agree. I think that's actually quite brilliant. Because years and years ago, I worked for man, I worked for a couple of years in the financial service industry. And my boss at the time was one of these brilliant sequel hackers, just like, you know, he said, sequel is like, go and learn the rules and five minutes, it can take years and years to really appreciate all the all the all the strategies involved. He, he actually taught me a way of structuring sequel, you know, query statements in exactly the same format that you're kind of talking about, like, this really rigid format with the the Select part of the clause on top, and then, you know, farmers in the next line, and where is in line after that is this really sort of like, almost visual way representing the syntax, right. So as opposed to this big, long lobby thing, like it kind of the the format, the US shows you what the code is trying to do, by virtue of the way it's laid out? And it sounds like this way that you're talking about laying out list comprehension? does the same thing?
Yeah, yeah. Okay. Now, I have to write this up at some point.
You do, because I want to read it.
Yeah, it's definitely a very interesting metaphor. It's0:29:33
thinking about it. It's very intuitive, when you leverage it in that manner. So yeah, that's great. So another question we have is, how teaching Python differ from other languages? Are there different approaches that you would take for when you're using a Python course versus a Ruby or herbal course.
So first of all, like the Ruby and Python courses, I teach, at least the language parts, like it's not doing, you know, web stuff, or something, quite frankly, I just steal from each language, I really seen the languages as sort of similar enough to each other, obviously, their differences, obviously. So. So here, for instance, when I'm talking about Ruby, I have to talk about blocks actually talk basically, about functional programming way earlier. So my Python course, I basically say, listen, folks, this section on functional programming on comprehension, and passing parameters, which are functions, like this is the hardest part of the course. And if you don't get it, it's not you. And, and you don't need it to be a Python programmer. But in Ruby, if you don't get blocks your suck. So so that's one difference. I think what else, I think in Python to go way, way farther, also, without creating classes, but you don't need to be class. You don't need to create methods either. And so we can sort of I spent the first day to day and a half of my Python courses just talking, like we don't even create functions. We're just using the built in data structures and methods. And then we functions. And then we talked about objects. Yeah. In part, because I think it's really important that people get these basics down, in part because you can, but again, in Ruby, you sort of need to be mixing and matching a lot more to get the sense that people get it. You don't know what classes is Ruby, once again, you're sort of song.
I don't agree. And I actually think i think that that's kind of one of the the awkwardness around learning Ruby, because I've certainly encountered quite a number of of introduction to Ruby learning Ruby kind of books where they either show objects right up once more, these weeks have a very, very, very, very, very the end of the book. And and and in Ruby's case, at least you get to the end of the book, and you get two objects. And you're like, why didn't you teach me that in chapter one, because it would have made a whole lot of things a whole lot clearer, and, you know, easier. And I can, I can see what you mean, though, Python kind of has different aspect to it, so that you really don't need us objects for a significant amount of like, Great procedural coding with some really, you know, deep, useful data structures, you really don't need to use objects unless the problem domain really calls for it.
Right, we don't even had some sort of blog post, I think about a year ago, maybe two or three years ago at this point, where he was asked, How do I make my Python programs faster? And my guess is he's asked this so often, they finally just got sick of it. He said, okay, folks, I'm going to write down my notes. And one of the first things he wrote was don't use objects, like just use the built in data structures. They're fast. They were their intuitive. They've been really highly refined and optimized over the years. And, and why not? And that's something else that people sort of need to share that if you're coming from, say, the Java or the C sharp world, yeah, someone wants to write Hello, world. The first instinct is, oh, I gotta write a class. And by the way, so slow down, what problem are you trying to solve? And and what the analogies avenues is, like, you want to have a toolbox, and then pick the right tool of the toolbox, not just pick the first thing that comes to mind.
Right, absolutely. And it also strikes me listening to you that languages like closure is a for instance, which you know, is enjoying quite a burst in popularity lately. It doesn't have objects either. And, you know, people are just using the data structures that it pretty much provides and using those as building blocks. And obviously, people are doing some pretty amazing, pretty complex things, once again, without object. So it's just a matter of sort of breaking out of your usual mode of thought and embracing a different addict, completely different model for doing your work. Actually, thank you. You inspired a pic that I hadn't thought of hideous, and then I'll put it up. next section. Oh, good. So what sorts of materials or medium Do you use for training people in Python?
So this has been going through a bit of an evolution over the years, and I'm always looking for new things. So I I'm a big Emacs user, right? I went to MIT went through the brainwashing process. Back when I was there, like like when I was there in the Secretary's use the Mac, so like, obviously, the students can use it. And you know, my daddy max file has been steadily growing over 20 plus years, every so often, I've ruined it every time I say, really? What's this doing in here, but I just use that and I tell my students, you don't have to use Emacs, right? Like there are some weird people who don't sicko sickos, that's why I call it actually tell my students, they use my term just because they need something that's a little shallower learning curve. So I use the max. And then I used to use just a regular old python shell. And someone said to me, why aren't you using I Python? I said, Oh, yeah, I've heard of it. I'll try it. And of course, I tried. I said, Oh, my God, this is so much better. But I could not use a Python notebook just because I do a lot of my examples, like my demos are with files. Some point? I don't know exactly when, but it's something I don't know, if I've let you do files. I said, Oh, wow. That's amazing. And so literally, a month or two ago, I switched to doing all my live coding demos. And I have a lot of when I'm teaching, because if people ask me a question, I want them also to get the feeling that if they have a question when they're working, they should turn type eyes on and they should try it. What happens if the only answer to that is let me try not to look it up. Look it up. It's not bad. But but that's why you have this, this beautiful sandbox of the interactive, you know, the rebel. So I've lately over the last month or two I've been using I Python notebook. And then my standard thing at the end of each day is people send me emails where my class, I send them a zip file with all the exercises to this, like business solutions that I solved in front of them of the exercises, plus the slides and PDF. Plus, now I can send them the iPhone notebook. And they can then replay everything that I demo to them in a lecture. So I bought the notebook has become like an essential part of my teaching as well. Third thing is the Python to I don't know if you're familiar with the Python tutor site, python tutor.com. Oh, my God, it's amazing. It's amazing. I forgot the name of the person who did it. It's beautiful, fantastic. The number of occasions of which someone says yeah, but why. So for instance, I have an example I often use, where I create a small list, you know, my list equals ABC. And then I create a larger list like big list equals my list my list my list. So now we have four names for the same list. And I show them that if you change index 00 of the big list, you're really changing the original my list as well. And this point, people's noses sort of wrinkle, and they are kind of wondering what's going on, I pulled the Python tutor, which has a dynamic, dynamically generated graphical display of the innards of your Python program. And they can see the arrows they can see the boxes, and just becomes instantly clear.
Wow, that's that's really, that's really awesome. I did not know about that. And I will definitely plan some quality time go play with that. Because as I said, there are definitely a few Python concepts that I could use some rushing up with. And that sounds like a really useful tool. Thank you.
Come across it before, but it's been a while since I've had called the user. So definitely thank you for the reminder.
So I understand that you recently wrote a book called practice make Python if I'm correct, yes. I'm just wondering if that's something that you generally use as a follow up reference for your trainings.
So it was basically suggested my my students, I think it was about a year ago, a little less than a year ago, over the course of two weeks. After every class during the breaks, he would say to me, okay, listen, we're taking a four day course, that's great. But there's always going to be this gap between finishing the course, and then wanting to use the information in our actual work. Where can we go to get exercises? I said, Well, you know, there's that Shaw's learn Python the hard way. And they said, Yeah, yeah, we've done that. Next. I said, I know, but it sounds like a business opportunity. So basically, I said, what I asked them what would happen if I gave you a book or sold you a book with 50 exercises that would force you to really think in Python, and then you would have to work at it, but it would probably give you some benefit. And they all said, Oh my god, I would definitely get that. Now, they're all liars, because they didn't all get that. I will hunt them down. But basically, what I do is I wrote up 50 of the exercises that I most like using in my courses, either as demos or as exercises that I see, give people that a humble that they're forced to work. And sometimes the solution is as little as one or two lines. But getting to those one or two lines is the magic. And it's where the learning really comes from. And so I wrapped up the book, I guess, I finished writing it about, I don't know, probably January or something January, February. And I've been slowly, very slowly but surely making videos to accompany if people want that package. But that's just time consuming. And I'm so busy with other things, it's taking way longer than I would like. But the book is not a tutorial, because I really think that there are enough tutorials out there in the world that will need something for after you're done with the tutorial. And so what I call my book is like your second Python book, where's the book to read after you've taken a course?
That's really awesome, because I'm definitely in that category of, I've read some of the tutorials I read, you know, dive into Python. And as I say, I've been using it at work now for four or five months. And and so I'm definitely past intro phase. But I'm not really to the point where like, you know, when you're in that kind of tentative stage where you're not quite comfortable with every aspect of it, and it's not like, it doesn't feel like that really well used tool that like now just sort of like fits in your hand like it was meant to always be there. I'm not there yet. And I think something like this book be incredibly useful to get me there.
Good. I hope so. And I've been very fortunate. Also, a lot of people who have read it have emailed me with corrections or suggestions or insights. And I like that. And also when I'm teaching, like, from my perspective, what's what's most important, both from my perspective as a teacher, but also for the learning processes, the interactions, the asking questions, is the wrestling with things it's talking about talking through. So fortunately, in Israel, people are not bashful, and they are more than happy to say, That's stupid, or that's a terrible idea, or what do you think about this really challenging. But I really think that that helps with the learning. And so I've also been learning from the people who've written the book and sending email suggestions. And so if anyone out there gets to get the book and has ideas, suggestions, improvements, that would be fantastic. I mean, I would say, easily, easily, half or more, probably even two thirds of the exercises, were either inspired by or improved on by students in my classes, who gave me feedback. And it really helped me to refine that.
That's very cool. And speaking of getting the book, Reuben has very kindly offered a discount code, which will be passing on to our listeners, you can find it in the show notes rather than us trying to say it and having0:41:13
a cross gobbled0:41:14
or anything, we'll just link to the book in the awesome discount code there for in case you want to avail yourself of this0:41:20
So I'm in your freelance work, what portion of your projects use Python?
Interesting, you should. So that's of course, the question. So for us actually was kind of embarrassing that I was doing most of my freelance work in Ruby, and most of my training in Python, not as I was using Python lots of different ways. But it was sort of like this, you know, Bruce Wayne, Batman kind of thing, I guess. I'm not sure which is I'll let you guys figure out the analogy where I've always had some clients use Python, sometimes more, sometimes less, they've always been some people using for whether it's database work or web stuff. And certainly, I've always done some product on my own with it. But truth be told, it's really only since I've started getting heavily into the training, that I've been diving myself into Python and using it for more and more things, and trying to find sort of the corners of different stuff. So recently, I've been asked to do more and more training using non pie pie big data types of things. So there, I started, just sort of doing it on my own. But the number of actual paid projects I've done over the actually the not true in the last five years, the number of paid projects that done in Python, I would guess it's about 10% 20%. At most, there was a period, maybe 10 years ago, when all there was an iPod. I did some stuff on the web with so and it's stuff, databases, Postgres with all kinds of analysis. So sort of come comes and goes, and I think this is one of those periods now words, what's coming? Like, I think it's safe to say that over the next year, probably the overwhelming majority of my work, will my project work will be in Python.
You know, listen, as far as you know, you mentioned you embarrassed to say whatever Don't be as far as I'm concerned, it's tool to task, right. Like, I mean, if your clients are willing to pay you and they want Ruby, and that's the kind of work that you you know, want to be doing or need to be doing, then by all means use Ruby, as far as I'm concerned. I love Python, I think it's a great language. I love Ruby, I think it's a great language, but they're just tools. Like I think this kind of like creased partisanship is something that we can leave behind. I think I think, especially in the polyglot era that we're kind of entering. So many companies now are as much as you know, some are standardizing a lot are kind of saying like, well, what is Python? Well, let's use it for that what is you know, closure, good wallets, use it for that, or whatever the case may be. And I think that's an attitude that we should all embrace.
I agree, I wrote this blog post for like, a year or two ago, where I said, I made the analogy that Ruby is Oscar and Python is Felix from the0:44:01
and, and you know, you could learn for both of them. And you could enjoy both of them. And each of them has their works. But but the like, knowing both is really where the the the interesting things happen.
So I was just wondering if you've seen a change in the demand for iPhone skills, and the time between when you first started using it or using it professionally, at least, and most recently, within the top down or
above above? It's crazy. So you know, back in the Stone Age, you know, 20 years ago, we started using Python. Yeah, when I got to Israel, basically. And I said to people I do know, at that point was mostly pearl and Linux. People looked at me, like I know falling off from the moon, like pearl Linux, open source. What is this thing? Oh, yeah, it's that it's that thing that's not windows. And the fact that only windows a decent Hebrew support only made it harder for it to break in the over the years, I've seen a growing interest in Python. And then it was like, explosion about five years ago, who's it's just unbelievable. There's now as I said, insatiable demand that I even had these guys, I gave a talk about Ruby, I guess, about two years ago. And there were two people came there. And afterwards, they came up to me, they said, Listen, we're not really interested in Ruby, we're really interested in Python. And we're hoping that someone who came to your talk, who knows Ruby will be interested in learning Python and working for us, because we can't find anyone. Like the demand is so crazy. They were like coaching people from other languages. And I said, I have bad news for you guys. The only thing rare in Israel than a Python programmer is a Ruby are. So good luck with that approach. But the demand is growing. And as I think the, for variety reasons, first of all, companies are taking it seriously. They're realizing this is not a toy language is a serious language you can use to solve serious business problems. And I often tell people is in the 60s and 70s, what we cared about with programming was that the darn thing worked, if it worked, we were delighted. And the 80s and the 90s, when we cared about what didn't work fast, and nowadays, we worry about it isn't maintainable and doesn't let my programmers achieve maximum velocity. And so Python just hits the sweet spot on that nowadays, people are expensive, and computers are cheap. And so if I can get a 10 times or five times even two times increase in my programmer productivity, but it means I just spend 20%, more install on servers, who cares, right? Like, that's totally worthwhile. And a lot of the companies I think, have done the math and said, Yeah, that's good for us. Why should we spend tons of money? A lot of people come to come from MATLAB, right? That's right, the number of people that teach you are MATLAB users, like, yeah, we're going to use sign up, right? Because it's free. And you know, how much it costs, you have these libraries in MATLAB, I said, actually have no idea these at all, it costs a lot, per seat per year. So so that, it's really, it's astonishing. It's astonishing to see the number of companies, people, places that are interested in Python. And really, I think it's just just growing.
I bet it must be really exciting, actually, for those people moving to Python from that lab, because Matt labs an awesome tool. But with something like Python, you have this incredibly rich ecosystem of not only can you do your numerical analysis, you can bring in like, you know, statistics and data analysis with panda or like, you know, or image processing with Phil or one of these other tools. And I mean, you just have this amazing, you know, plethora of tools to draw from, and you don't have to think in terms of, well, gee, if I want to use this, I'm going to have to pay another $5,000, or I have no concept of the amounts involved. Money just isn't an issue because most of them are free. It's got to be incredibly liberating for them.
Right? Right, they no longer have to make decisions on Do we have the budget to use this? Is this is this the most appropriate tool. And people just like the language, they like it. They like its breath. Like, it's definitely like the community. And you see, I mean, addition to for all this stuff, just today, I had people in my class, who who are big users of our now I used are my dissertation analysis, I love art, it's really great. And ours big claim to fame is that it does, and it's a systematic language as a great language for that. And it has a huge sort of like, you know, pipe is a huge number of languages. So Ours is a similar number of packages and what they call CSC Ram. Lots of mine just be doing statistical analysis. But I see little by little by little people are contributing to Python two side by non pie and all those packages. And I think in a few years, we might see my son eating ours lunch. In that sense, it can't yet because it doesn't have the same plethora of modules, but it's getting there for enough people. And then you can have another bunch of people who who are just like, you know, stoked to use my son, and are contributing to the community. Also, it's almost a matter of increasing returns.
Yeah, I've heard anecdotally about a lot of people moving from our Python, particularly when they want to production eyes what they're working on. So they may use our for doing the research and development phase of a project or when when they actually need to handle larger volumes of data. And they move it over into Python, because my understanding is that when you start loading large data sets, and are just really starts to slow down. So
yeah, that's not the reason my dissertation was so late, but I'm
great. So what kinds of projects might you encounter that will cause you to choose a different programming language in Python?
Hmm, question. Well, first of all, there's just like the the fun and experimenting kind of thing, right, like, so I really, I want to try more closure, and play with that, especially software transactional memory, which I would not be surprised if it ends up in Python at some point in the future, but obviously doesn't exist now. Because it just seems like an incredibly cool concept, a fun thing to play with. And of course, it's lyst. So it must be good.0:50:16
if I were writing, and no one should ever trust me if I do write such a thing, right. But if I were writing an operating system, if I were writing a desktop application, one of those things were speed is really crucial, then I think I would, I would choose a real systems programming language, if I writing something needed to scale massively, or that really, really, really needed threads that were truly parallel, not use processes, I would use something else. I still because I've used Ruby, and because I've used rails Sinatra for so many years, that's still one of my first inclination of what to use for web stuff. So my website, for instance, runs and Sinatra. And you know, it's totally great. It works fine. For my purposes. If I were doing it, scratch today, well, I use flash, maybe, maybe, maybe not, who knows. But I would take for the like your average project, like a year. For instance, here's a here's a story. So I run I live in the city Modine halfway between Tel Aviv and Jerusalem. And when I got to the city in 99, I started where I guess I sort of took over an email list for people who live here 15, I guess, you know, 16 years later, we have 3000 people on the email list, local forum. And I decided a few months ago, that was just not worth my while to run an email server of my own anymore. So I decided to move everyone to Google Groups. Well, Google Groups only lets you ask people to move themselves, have them do that. So the left me with 1500 people to move. And Google Groups only lets you add 100 people at a time manually each day. So I wrote, I was like, well, I figure this out. I know, I'll use my phone. I know, I'll use sets. And like in a few lines of code. Basically, I was able to download the list from my old system down the list from Google Groups, turn each of those using a set comprehension into a set, do set one mindset to grab 100 people and there you go, now hundred people I'm going to move today. And so those sorts of applications that are just so trivially easy to do in Python, that I find my like, this is like, clear that I would use it for Yeah, yeah, like system stuff. systems that did web still, for me, I think I would look at other languages first. But that might happen less and less over the coming years. I wouldn't be surprised.
Right? I'm glad you mentioned closer I know, I find that language particularly exciting as well, because software transactional memory aspect, especially when you start to realize that the way it handles data structures being atomic by default, like reading just becomes, you know, concurrency just becomes such a dramatically easier problem to reason about. I think that is a really cool concept. And that's going to be one of my pics is one of his talks where he discusses some of the aspects of that. It's a really cool lock.
So let's, um, unless anybody has anything else, let's move on to the picks, shall we? Reuven? Why don't you list your picks?
Okay, so I'm going to mention a few things here. First of all, so I run a few different in addition to my copious free time, right to my training, and my development work and book writing and whatnot. So I got this site that I've been running for a few years and a few years Haha, a few months now. It's about six months called daily tech videos of daily tech video.com. And the idea is that every day I find a really great conference talk or other video that explains something, typically about software, typically about open source dynamic languages, or databases or web stuff, because hey, what do you know, I'm interested in open source dynamic languages, and databases and web stuff. And I have a little intro and I described the talk. And that's been going on, as I said, for a while, and so far has been getting some attention. And I'd be very curious to hear from people what they think. And if they talks that they're interested in certainly there are plenty of Python talks in there. Not surprisingly, number two, oh, well, a bunch of other interesting pics. So I been among the places I go to do training is in China, I've been there six times, seven times, in the last three years. I'm going twice more this year. And I just think it's super fun. And super cool. I'm learning Chinese. I just really, really enjoyed traveling there. And so part of my obsession has been reading books about China, and interesting analysis. And so a book that I read just recently by Evan ourselves, who was the New Yorkers correspond in China. It's called age of ambition chasing fortune, truth and faith in the new China, brilliantly written, really reported fascinating book, either if you do go to China, or if you don't go to China, it's still worth reading about what is really going on there. And how is the government trying to influence people influence policy? And how are people sort of pushing that? And in what ways these are the way we would expect in the western what ways is not Peter Hassler also wrote some great books is another good first, he wrote about that, I guess my final only here once, right? So I got it, like, give you the whole thing. It's supposed to came out a few, a few years ago, actually. It's called mindless eating, why we why we eat more than we think. And it's this guy named Brian Wednesday, who is a professor of marketing at Brunel. And he has done some of the most brilliant psychology experiments I've ever heard of. Because basically, what he does, is he's trying to figure out what influences people to eat more or less. So for instance, he'll go to a restaurant, but not just any restaurant, test restaurant that's used by the restaurants are now so it's designed for people to do experiments, usually experiments and management. And half of the room will hear one type of music and the other half the room will hear another type of music. And then they measure how much does the music affect how much food you order, and it actually has an effect? Or how much will you spend, or what happens if you have empty plates in so on and so forth. And so I just find like the experiments were brilliantly designed hilariously funny and very insightful. And I think I've covered now the world and psychology and computer stuff, so there's really nothing else left to document so the the
last thing is awesome. I have to say any, you know, obesity being viewed as kind of a worldwide problem in the developed world at least, you know, it'd be really interesting to see some of the insights as far as why people do what they do. Very cool. So those great pics I move on to my pics now. I usually have a beer pic as I like craft beer. better for worse. And I just encountered a local beer comparatively local. I live in the Boston area and so this is from Spencer Massachusetts town closer, you know more around Mr county where I grew up. Spencer Trappist, in the the Trappist monks their brew a really nice Belgian beer. And a lot of the time I find that American breweries trying to do Belgian style beers, kinda with a few exceptions fall flat on their face because the thing that makes Belgian beers kind of amazing is that they have this incredible sort of depth and fruitiness and real complexity. Like, you know, it comes from the yeasts, in those breweries being you know, reading in captivity for generation after generation creating these just awesome flavors. And the Trappist kind of nailed it with this. It's it's one of my favorite domestic Belgian style ales, and I highly recommend it. So as far as technical pics, as I mentioned, Reuben inspired me to recommend pick, rich hickeys talk the value of values. And this was a keynote for I think, either a closure or a GBM conference where he basically talks about how so many of our basically all of our current programming languages were designed around this place based programming paradigm, you know, was a memory saving technique where you had this place, it was a variable, and you commuted the state of that of that valid variable to make various things happen. But in the modern era, where we have eaten by memory, there's kind of no point to that model anymore. And there's a new model that can really change the way you think about solving problems and make your life dramatically easier. So I love that, I recommend it highly. The next tech is a VM plugin, my VM is my editor of choice, at least for now, I like it quite a bit. I like you guys
are all good. Emacs lovers.
And I used Emacs for years, I just I got to the point where the shows how old I am back at the time, you know, we had old, free Intel Unix class workstations with very limited, you know, amounts of memory and disk allocated per user. And I just got to the point where waiting for Emacs to load was just like, I feel like I'm spending years of my life, which is really silly now. Because, again, in our modern machines, there's absolutely no, like, Emacs comes up, like poof, you know, no problem at all. But I know that when I switched to them, and my brain kind of works in them, but you complete me is a really neat editor for doing auto completion, syntax based and otherwise. And it's it's written in c++, which is kind of nice, as opposed to some of the others which are written in higher level languages like Lua or in the like. So it's pretty snappy. And it does the job building it and installing it is a bit of a pain, but it's worth it's worth the exercise to get there least in my limited experience.
compilation step is actually finding
Oh, really? Oh, I didn't know that. Oh, very cool. Well, it's pretty snappy. In any case, thank you, Tobias. Tobias actually recommended this to me earlier. So I was going to passing that along. And my last pic is something because I'm mostly a Mac guy, I, you know, do most of my day to day work on Linux servers, but I love having a Mac as our primary desktop environment is this awesome little tool called size up that lets you sort of assign it basically lets you manipulate OS X windows in any way you can possibly, you know, imagine flipping them from monitor to monitor, adjusting their size and position, etc, etc, all with, you know, keystroke. And for me, I'm partially blind. And mice are like an atom enemy, like, I have to touch the mouse, my productivity takes a significant nosedive. So having a small tool like this, and it is commercial that you know, it costs some really small amount of money, I forget exactly what is huge, because I can really sort of like1:01:01
drive my environment, little1:01:02
Corvette, as opposed to flailing around with the mouse like a really have this person that I am.1:01:08
So I think that's about it for pics, me, Tobias, How about yours.
So harking back to the practicing and practice as a way to really learn a language, there's a really great web based environment called check IO, that is somewhat gamified way of performing a number of different practice problems. So it's got a really nice visual aspects to it. And there are different islands and each island has a different sort of a theme to it. And each of the problems has a little bit of a story blurb, you go with it, that means that presents the particular problem that you're trying to solve Python. And one of the things that really makes it great is that once you've submitted a solution, you can put it up for review. And other people in the community can post reviews on your code to either you know, congratulate you on a job well done, or to give you tips on different ways that you can achieve the same result. And you can also look at other people's submissions, you can learn that way, you're all solving the same problem, you can get an idea as to the different ways people are approaching it. So it's really interesting, Guido actually occasionally hopped in and provide some reviews of people's code. So
tour, I haven't had as much time to use it recently as I would like, but definitely worth a look particularly for people who are looking for a way to get some practice in the language but don't necessarily have a project and they're working on with it. My next pic is I guess you could kind of call it a toy, but it's something called Snap Circuits. And what it is, is a way to introduce people to the world of electronics. So rather than having Do you have a soldering gun, and a bunch of schools of wire to build different circuits, it uses snaps just like you would find on your clothing. And it's got a grid based board that the different components snap on to and then they snap to each other to form the actual circuit. So it has batteries, and then it'll have photo resistors, regular resistors, DC motors and all kinds of different components. And one of the things that's really great about it is that you can actually start really, really small, nice kids to get a VL. And something that will work for you or your kids actually got it for my my older son, and then they have expansion kits. So you can rather than having to go out and buy and make it all in one spend the extra money, you can actually just get an expansion capital, turn your small get into the bigger one. So it's a really great idea really great execution. And it also comes with a project booklet of different circuits that you can use and teaches you about why it works the way it does. For next week recently got a new Android tablet, and I spent a little spent a little while researching it trying to figure out which one to get ended up going for the NVIDIA Shield tablet. So it's marketed as a gaming tablet. But I don't use it as such. It's just a really powerful really great tablet need inch, it comes with a built in stylist is really useful for taking down quick notes where I would otherwise pull out a notepad and a pen. It's powerful. It's got two gigs of RAM and some crazy number of cores with a Nvidia GPU built into it. It's got a great screen, and for and for all that it's actually really affordable price. And then the other pic that I'm going to choose is the Samson go Mike, which is what I actually have been using to record these episodes. It's really nice, well designed microphone, very small and compact, easy to transport. And one of the really nice things is that if you get one the USB on the go adapters, you can actually plug the microphone into your tablet and have a portable recording studio. And my last pic, we recently signed up for something called Zoho apps, which is sort of a competitor to Google Apps, but it has a free tier as well as never paid years and as a really pretty impressive suite of different products that you can use along with it. Most recently, I was looking around and found out that they actually have a password vault that you can use for sharing credentials between different people in an organization as mail docs calendar, and overall seems to be really well executed.
Yeah, I'm pretty impressed with that one as well. Actually Tobias prodded me into it switching to it from from the Google for our show notes, and, you know, our internal documents in the like, and I'm pretty impressed thus far. It's pretty, it's pretty well put together.
Alright, so ruin, we want to thank you very much for taking the time to join us and speak with us today. And for anybody who would like to follow you or find out more about what you're up to what would be the best way to find you or contact you.
So my website learn.co.il. From there, you can get to my blog long.larry.co.al. Strangely enough, I'm on Twitter as at Reuven m learner. And so basically everything I do sort of publicly whether it's webinars, books, announcements, blog posts, either my blog or my Twitter feed, or both will have them and I'd be delighted to hear from people email, Twitter, you name it. I'm always delighted to hear from people who have questions or comments, or just want to get in touch and say hi.
Yes, thank you very much for taking the time to talk to us. We've been it's been it's been really great.