#194: Learning (and teaching) Python in a vacuum Transcript
00:00 Michael Kennedy: How do you learn to program when you're working in a vacuum? Sure, there are resources on the internet, but sometimes just bouncing ideas off other people in person makes a huge difference. Join me, along with Rusti Gregory as we discuss how he's learning and teaching Python in a small town in Vermont. This is Talk Python To Me, Episode 194, recorded January 4th, 2019. Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter, where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via @talkpython. Hey everyone, before we get to our conversation with Rusti, I want to tell you about a new course we just launched, Introduction to Ansible. This one was created by Matthew Makai of Full Stack Python. If you're involved with deploying a web app or managing servers, especially Python web apps, you owe it to yourself to check out Ansible. It provides a declarative way to provision, configure, and evolve infrastructure and applications. What makes it even better is it's written in and can be extended in Python. Check out the course over at training.talkpython.fm. Corporate and team options are available, too. Now let's talk with Rusti. Rusti, welcome to Talk Python.
01:32 Rusti Gregory: Thank you, thank you for having me. It's good to be here.
01:34 Michael Kennedy: Yeah, it's great to have you here. Super excited to talk about learning Python and teaching Python in your world. But before we get to all that stuff, let's just start with your story. How'd you get into programming in Python?
01:45 Rusti Gregory: I've been playing around with the web for quite a long time. I had a Basic class in high school back in the early 90s. And then basically I start to work on the school webpage when I got hired out of school and taught myself HTML and CSS and kind of made the transition from using WYSIWYG editors into using Notepad++ and learning the code that way.
02:09 Michael Kennedy: I think that's really interesting. I don't feel like WYSIWYG editors are really much of a thing these days. They used to be big. I don't know if people listening realize how big they were. There was FrontPage, and there was Dreamweaver, and there was Visual Studio with its ASP.NET stuff. And it was very, like, write your website in Word.
02:29 Rusti Gregory: Feel like once you went to CSS that WYSIWYG editors couldn't really keep up with it. So then after that, you were just better off typing in code.
02:38 Michael Kennedy: I was thinking that as well. WYSIWYG editors, I guess sort of the best they could do was like tables.
02:44 Rusti Gregory: Right, right. Here's your table, change the color in your table. If you like it, stretch it to the right.
02:48 Michael Kennedy: I mean, didn't the early days of the web feel like a lot of borderless tables? It was crazy.
02:53 Rusti Gregory: It really was. Everything was a table. And merged cells and all that kind of stuff. It was great. But then once we had many different sizes of screens to deal with, it didn't really meet the needs of what we're going to. And then mobile, there's no way you could do a table-based design in mobile.
03:08 Michael Kennedy: Yeah, you don't hear too much about responsive tables these days.
03:11 Rusti Gregory: No. When I first started teaching HTML, we had to design two different sites, right? There was a mobile site for something, and then there was a regular site.
03:19 Michael Kennedy: Oh, that's right, I remember. Do you remember the .m domain? Like if it was talkpython.fm, it'd be m.talkpython.fm. I totally forgot about that subdomain.
03:29 Rusti Gregory: And there was all the horrible converters that you could use to just click a button and change your site into something that worked on mobile. Yeah, it was a lot of work.
03:38 Michael Kennedy: Yeah. Yeah, it was a lot of work. Programming used to be hard. It still is, but in a different way. I do want to just ask you a little bit about the CSS, since that's part of your transition here. And I feel like when you're trying to write websites, it's just so hard to get them to do what you want them to do and behave correctly until you sort of bite the bullet and learn CSS. And maybe it's a two or three week really hard studying period, but then on the other side, it just opens things up. I mean, you did a lot of CSS. How do you feel?
04:10 Rusti Gregory: It became a lot of fun, actually. It wasn't as much hard work, kind of doing things. And the early days of CSS, not all the browsers understood everything. So you had to, there was only certain things you could do, and then you had to hack it back so it worked in IE or whatever it was that you were doing. But it was a lot of fun. It really added the fun. It made me want to go further. I started just buying CSS books, and everybody took you through the basics of one site. Here, we're going to start at this site. We're going to end up with this site. So just design three or four sites as I read through these books, and eventually every book I bought, I'd already read, I already knew what they were saying. So I finally felt confident at that point.
04:46 Michael Kennedy: That's really cool. I think the book that I learned CSS through was something called CSS: The Missing Manual. I think that was it. It was a good one. Okay, so you started out with FrontPage and WYSIWYG stuff, and you sort of graduated to real web development, right, with CSS. And where'd the story go from there?
05:03 Rusti Gregory: Basically I started a little website business. We had two daughters at a time instead of one, and I needed to earn some extra money. So I started doing small websites for people, and then I found that there was a job open at a junior college. And I was making just as much money teaching web design as I was creating sites for small business, you know, small local businesses at that time. So that was a great jump for me. So I love to, I work at an elementary school during the day, so it was great to go and work with adults in the evenings and kind of get my coding fix at the same time. Was a lot of fun. And that got me into WordPress eventually. So then as soon as I got into WordPress, there was, you could use a lot of WordPress without having to get too heavy into databases or PHP at all. In fact, you really don't have to know anything about that, if you don't want to. But when I started with WordPress, you still had to create your own database programmatically, and the updates was a matter of overwriting files and things like that. So it was a nerve-wracking kind of process. So I had to learn a little bit more about PHP so I could fix things when I broke them. I never was able to create anything in PHP. I was only able to just change things.
06:11 Michael Kennedy: It was mostly a read-only thing.
06:14 Rusti Gregory: Correct, yeah. But it was, I knew I wanted to learn it. So then I bought a couple of PHP books, and I could never, ever crack it. I never got past just trying to figure out what the difference between integers and, not that that was too much, but it was boring. So I never got into the part where I could get to functions or creating stuff in there.
06:32 Michael Kennedy: Yeah, PHP takes a lot of heat or negativity from real programming languages or whatever. But a lot of the web runs on PHP. And in WordPress, in particular, a serious amount of what you do on the web is interact with WordPress, right, and PHP, and of course Facebook.
06:47 Rusti Gregory: I feel like I could go back now, and it would be easy because I've got the basics down. But I could never get past the basics. And every book I bought only showed me, you have to know these things so you can become proficient. So but I never to got to the part where I was proficient. I'd give up before then.
07:02 Michael Kennedy: Yeah, of course. Do you think that is because PHP is always, at least as I see it, it's always mixed in with the web, so you're programming in a webpage, where something like Python or JavaScript, you can do it separately.
07:17 Rusti Gregory: Yes.
07:18 Michael Kennedy: You sort of learn it in isolation and then bring it into the web.
07:22 Rusti Gregory: Right, there's a lot of moving parts when you're playing with, yeah, with something that's inside WordPress, or, yes.
07:29 Michael Kennedy: Exactly.
07:30 Rusti Gregory: For me, I couldn't really grasp a lot of the programmatic, programming concepts, for me. Writing functions, how those interacted, sticking things in hooks, all that didn't necessarily make sense. I didn't have anybody to ask at the time. I live in a pretty remote part of the world, and there's no formal training for any kind of those languages around here. There's nobody I could ask, other than message boards. And message boards weren't even that huge at the time, actually, or at least my experience with them wasn't very big at the time.
07:58 Michael Kennedy: I feel like there's a lot more communities out there that you can jump into these days. And we'll dig into that a little bit later.
08:04 Rusti Gregory: Yep.
08:05 Michael Kennedy: So what are some of the, if you had not a lot of people or official training, what are some of the resources you had available?
08:11 Rusti Gregory: There was a podcast, WP Tavern. I used to listen to a lot. Then he had a forum. There was, CSS Tricks was a great place. And that gentleman also had a forum there. So I'd go to those places. There was a guy called Justin Tadlock who was a big influence, that wrote a lot of the stuff about best practices and how to do things the right way when you're writing. I didn't really know there was such a thing as sloppy code and good code at the time. So I actually started to take some of his plugins for WordPress and just kind of change them to do things that I wanted, you know? I could open up one of his plugins and then see how, where he put different things and start to just change the language so it matched what I wanted to do and figure out how to do things that way.
08:48 Michael Kennedy: Yeah, sounds good. So you gave us a little bit of what you do day to day. But maybe expand on that just a little bit, so focusing on where you're coming from.
08:56 Rusti Gregory: Sure, so I'm an educational technology specialist at a K-6 school here in northern Vermont and spend most of my day kind of doing staff training, managing databases. I run the state testing for my school. I teach digital citizenship directly to kids. We work with the Hour of Code event and basically just kind of all around stuff. We have a hardware guy that does all the hardware stuff. But if you need to know how something works at school, then I'm usually the person that you ask. And if something's broken, we go to Josh. So, yeah.
09:28 Michael Kennedy: Nice, so this keyboard doesn't work, call Josh.
09:30 Rusti Gregory: Exactly. If I can't fix it in 10 seconds, it gets moved on to him.
09:36 Michael Kennedy: Yeah, exactly. So it sounds pretty interesting, like a bunch of different things. What does digital citizenship entail? Like I can imagine things about that, but maybe tell us what it means when you're teaching it.
09:47 Rusti Gregory: It's teaching kids what the correct behavior is online, how to get around basically, that if it happens online, it's the same as if you'd done something to somebody in real life. It's also being aware of advertisements. And I taught a lesson on Photoshopped images online. And things like that, just trying to get kids an awareness of the digital world.
10:08 Michael Kennedy: Yeah, I think that's pretty important. I think it's going to get harder. It's going to get harder, too.
10:11 Rusti Gregory: It is, a lot of kids are using technology, kind of not necessarily in the shadows but not, parents aren't aware of what's going on. As long as kids are quiet, a lot of the population that I work with, the parents are kind of happy. And they don't ask a lot of questions. So it's kind of our job to make sure that they are aware of all these things that are going on out there.
10:29 Michael Kennedy: Exactly. I'm also a big fan of the Hour of Code. We kind of are a little bit out of phase with the right time to talk about it, but, since it's usually December, but maybe tell people real quick about the Hour of Code, as well.
10:43 Rusti Gregory: Hour of Code's a movement that started about three or four years ago. I want to say maybe we're in the fourth or fifth year. And it's a movement to try and get every child exposed to coding for an hour during the school year, just an hour to get started. We try and get to every kid in school and make sure that they have an opportunity to code for an hour and just basically intro everybody to it. And it's also an intro for students and the staff, sorry, the staff and the adults that work at our schools, to try and get them exposed to what coding means and how easy it is to get started. We never really get in depth in the Hour of Code, but it's really just designed to be an introduction. We're not trying to train everybody to be a computer scientist, but we want everybody to understand what goes on in their computers.
11:22 Michael Kennedy: Yeah, people probably get tired of me saying it, but I really think that we don't need a whole lot more programmers. But I think we need a lot more people with some specialty that also have programming skills to amplify that specialty. I think the Hour of Code is right in line with that, inspire you to think, oh, this programming thing I could do, and I'm also interested in biology. So maybe some point down the road, you're like, oh, I need to automate this thing. I can program that. I can figure out how to program that.
11:49 Rusti Gregory: That's exactly how we approach it at our school. And I think most schools are that way, as well. We don't expect everybody to do it for the rest of their lives, but we want people to be more than a consumer if we can help it.
11:59 Michael Kennedy: Yeah, we definitely need more creators and fewer consumers. What kind of technology do you teach? Do you teach Scratch, or, you said elementary school, so these are first, or kindergarten to fifth, sixth grade, something like that?
12:14 Rusti Gregory: Yep, we're K-6. So basically we don't get much further than Scratch. I've had a couple of Python students so far, but just for very basic stuff. They're going on to middle school, where they might have more opportunities there. So for the most part, if I can get kids, access to kids and get a small group of Scratch creators, then that's what I'll do on a regular basis. So we're starting to do that on, every six weeks, eight weeks, change out the group, just trying to get kids a little bit excited. And if I can get them to understand loops and maybe if we get to variables, that'd be great.
12:44 Michael Kennedy: Yeah, for sure. What grade levels did you go through with this fun?
12:49 Rusti Gregory: So fifth and sixth grade. Sixth grade is where I get the most access to kids. So that's where I'll work most with Scratch, and that's the only place that I would really even try Python.
12:57 Michael Kennedy: Yeah, I think definitely, you have to be a decent typist, decent reading level and stuff to do written code. I did an Hour of Code thing a couple of times at my daughter's school. And we did it when she was in first grade I think. And we did end up doing it with everybody from first grade through fifth grade over that week. And the teachers and the administration were kind of blown away by how much the first, second, and third graders actually took to it and could do it. They were like, I don't even know if we could do it with them. They'd be really young. By the end, they had all these great little things built, and it was super cool.
13:31 Rusti Gregory: Yeah, it's a lot of fun. Actually with the Hour of Code, we do do kindergarten all the way through sixth grade. We do iPad apps for kindergarten, first, second grade from Code Carts. And there's I want to say a block, Box Island. There's a couple different activities. And they're mostly just little drag and drop, five or six instructions in a row kind of thing. And then the Hour of Code has hundreds of activities that I let the kids, the older kids get, the more choice they get. And that's where they first start with this program called CodeCombat, which is the first time where they actually can start typing in code. And it's a great introduction to, and that's where I got started, actually, with Python.
14:08 Michael Kennedy: I want to ask you more about CodeCombat, but I realize I sort of jumped ahead on your story without letting you talk about how you went from WordPress into Python.
14:16 Rusti Gregory: No worries, it got a little long, so. WordPress, I spent a lot of time in that for years and years and years, and then actually the Hour of Code two years ago, I decided I was going to try to learn a little bit more actual coding, 'cause I don't know that, I mean, HTML and CSS is writing code, but I don't necessarily consider it, it's not programmatic code. So I started with CodeCombat after the Hour of Code. And then I bought a subscription to it, which was like $75 for a lifetime kind of access to all the activities. And it opened up a lot more activities. And I just banged away at it all summer. And things finally started to stick for me. I finally was getting used to the syntax and all the type of stuff. And then I bought a couple other books after that, but CodeCombat's really what kind of got me over the hump. It's a program written for fifth and sixth graders to expose them to coding, but I found it really, really valuable as kind of an introduction.
15:12 Michael Kennedy: 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, 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. So I had not heard of CodeCombat before. And I checked it out when you mentioned it in the show notes. And it is really cool. I really like it.
16:12 Rusti Gregory: Yeah, it is. It's a really great way, I think they've really kind of hit on just enough intro for each concept, and then getting you to use it over and over again. It really was just kind of the repetition. And it might bore some people, but it was really what I needed for everything to just kind of stick.
16:27 Michael Kennedy: Yeah, so maybe I'll try to describe it for folks. And you'll have to correct my description, 'cause it's only from a little bit of experience. So you go in there, you've got this kind of universe of places. And you can go through these different areas. And they teach or challenge you with different skills. Some of them are just calling functions. Some of them are strings, like standard stuff. And it looks like you can do it in Python and Java, but I like to see that the default is Python, or JavaScript, sorry, the default's Python. That's really cool. And what I really like about it is it feels almost exactly like Scratch or one of these visual programming languages. But what I don't like about those is they show you, well, here's this block, and here's the move block, and here's the loop block, and all that kind of stuff. But it doesn't feel like programming, right? It's still like a big step to go from getting experience with that to actually writing a program, right? It's like a totally different way to be.
17:22 Rusti Gregory: Right.
17:23 Michael Kennedy: Whereas, yeah, whereas this, it's, you actually start writing code from the beginning, but it's so supportive, right? You type like one or two characters, and here's the list of the four or five things you can do. It's really nice.
17:36 Rusti Gregory: Yeah, the autocomplete's really handy there. It's a great bridge between the two.
17:40 Michael Kennedy: Yeah, so I definitely think this is a super cool thing for anyone either really early in learning to program or interacting with kids or other folks who are really early. This is real great.
17:51 Rusti Gregory: Yeah, I wouldn't hesitate to recommend it as a beginning place for children, for certain.
17:55 Michael Kennedy: Yeah, yeah, for sure. I think I'm going to do some stuff. My daughter still has a few days' vacation before school goes back. I might do a few little dungeon or whatever you call them with her on this one. It's cool. So yeah, I like that. So you started messing around with that for Hour of Code, and you're like, hey, this Python thing, not bad.
18:10 Rusti Gregory: Yep, Automate the Boring Stuff was recommended to me. I got onto, I started working with Millennial, who introduced me to Reddit. And basically started searching on there for what people recommended to get started. And Automate the Boring Stuff was really quite high on the top of everybody's list as a good book to get started with. So I picked that up, and basically I am the target audience for that book.
18:35 Michael Kennedy: That's cool, I've had Al Sweigart on the show before and talked about his book, but maybe just summarize some of the stuff that's covered there and why you're the target audience.
18:43 Rusti Gregory: Basically he says it's for people who just want to learn a little bit of code to help with their job. And basically a lot of what I do is managing other people's information. So it goes through, and it talks about how to crop pictures and how to, with Python, and then it goes into how to work with spreadsheets with Python and just all these different day-to-day tools that you could do. I mean, if your job's building houses, maybe they're not day-to-day tools. But for me or somebody who works in an office, it was really, really eye-opening. And also I wanted to learn programming at the same time. So it was really, really great for me. At the time, I was redoing the website, and I had all the pictures for the staff members. And so I just got a disk with 600 pictures on it. And I wrote a program that went through and cropped each picture and resized it to the size that I wanted so I could them on the website. And it was brilliant. I mean, I was hooked from the moment I did that.
19:30 Michael Kennedy: Yeah, you probably had that disk, you're like, this is going to take three days.
19:34 Rusti Gregory: Yeah. Probably took me longer to write that program than it would have if I'd sat there and stared at the computer, clicked incessantly for five or six hours. But it was a great experience.
19:44 Michael Kennedy: You escaped with your sanity, though.
19:46 Rusti Gregory: That's right.
19:47 Michael Kennedy: Yeah, I think that that's really a great way to leverage some of the, both programming skills you have and learn new programming skills. A lot of times I'll find myself doing something repetitive. I'm like, why is this just, this is a part of my day that is just really mundane and involves a lot of copy and paste or other mindless things. And then I'll just realize, you know what? If I just take an hour, write a little program to do this, then I'll never have to do this again. You know what I mean? And it'll always do it right.
20:14 Rusti Gregory: I see more and more opportunities for those types of things these days. It's just a matter of convincing people at work that that's valuable.
20:22 Michael Kennedy: Yeah, it's true, it's true. I think, I mean, that's the challenge around software and management. Let's put them as, you know, even things like should we take the time to write unit tests? Well, the prototype works. Just make it the real one, you know what I mean? Things like that. But when I was in that position, working a lot, people would ask me for estimates. Like Michael, how long is this feature going to take? And that feature's estimate would include how long it took to write tests. It would include how long it would take to write these little helper scripts and stuff. And I wouldn't say, well, this much for the helper script, this much for the tests, and this much for the main feature. It was like, it's going to take four days, right? And I just was sort of a don't ask, don't tell type of, like I'm not going to talk about it. They're not going to ask me. I'll give them something good on the deadline that's better than they thought. So it'll be fine. Yeah, it's cool. So you had the Automate the Boring Stuff book. You said there were some other books that you also enjoyed.
21:18 Rusti Gregory: Yep, Head First Python I really like a lot. I teach with a Head First book for my HTML and CSS class. So I kind of went to that first 'cause I like the style that they do. And Head First Python was great. Took me through and introduced me to Flask, and since I was already kind of a web guy anyway, that was an even bigger breakthrough for me. So that was a great book, and I learned a lot about Flask. But basically I stopped that book as soon as I learned enough about Flask to go out and start googling my own answers for things. And I was able to write my first couple web apps, which was great.
21:46 Michael Kennedy: Yeah, you have a cool web app for the state parks in Vermont, right? Tell us about that.
21:52 Rusti Gregory: Yeah, nobody's ever actually used it, a little known fact about that. But, not even my wife, whom I kind of built it for. But so basically there's this program in Vermont where if you go and you visit all the parks, they give you like these three worksheets that you work through, and you get certain points for, if your kids built a rock tower on the beach, take a picture and you get 10 points for it. It has to be in a state park or whatever. You get 250 points, then you take all your pictures together and you send them off. So basically if you look at a lot of the advertisements in Vermont, it's like us and our friends and our kids on the advertisements, 'cause they basically take your pictures doing all these activities and put them up all over the place. So anyway, at the end of the summer, usually all three couples, we all get together and sit there and go through all this paperwork and do everything to make sure we have enough points to send off these things. Then you get free entry to the parks the next year. So I was like, well, what if I could write something that would do this for us? Well, it didn't really do it, but it did all the thinking for us, anyway. So I wrote a little web app that you can log in. I had to teach myself how to make cookies and things like that. So you sign in, and then you can go through, all of the activities are listed. You just choose an activity, and then you hit submit. Then you can upload your pictures to it. Then it keeps track of how many points you've got. You have to have so many things from each category. So it keeps track of all that information for you. It renames your picture with the name of the activity. And at the end, you can hit a little button, and it zips all your pictures up, and you can download it. Then you can just give that to the state, and everything's all set.
23:16 Michael Kennedy: That's cool. So as part of the state program, do you get something back? Do you just get postage, you get to be part of the ads, or what? What do you get for doing it?
23:24 Rusti Gregory: That's what you're getting. You mean the average user?
23:26 Michael Kennedy: Yeah, if the average user goes through this thing that the state's put together.
23:29 Rusti Gregory: You get, yes, free entry into all the state parks the next year.
23:34 Michael Kennedy: Okay, that's pretty nice.
23:35 Rusti Gregory: Yeah, it's a decent trade off. Plus there's always the chance that you're going to see your kids on the poster when you go into the park or whatever, as well. Yeah, so I thought that would be a great use. It was great, basically all this was just bookkeeping. But I just kind of put it all into a little web app. And yeah, and made accounts for all my friends, and I think not even my wife has used it yet. So. But it was a lot of fun to create, it was a lot of fun to make. And yeah, I learned a lot doing it. It basically got me back into trying to learn a bit more about JavaScript, 'cause as soon as I started putting things in the app, I wanted them to look nice. So then I had to go back, and JavaScript and JQuery and stuff has changed a lot since I played with it a bunch. So I got back into learning JQuery, and then even trying to figure out if it was worth learning JQuery still.
24:22 Michael Kennedy: So you use Angular, you use React.
24:24 Rusti Gregory: Exactly, it took me days to figure out what all those were.
24:27 Michael Kennedy: I know, sometimes it's just, a little JQuery will go a long ways. That's pretty cool. I feel like this example highlights one of the things that can really help folks level up their learning and their programming skills, is to build a little project app, right? And if you wanted to, you could definitely expand this out, make this a really truly, a public website. Maybe even try to convince some of the folks to list it on the park pages where they talk about these things, stuff like that, right? So but just going through this project, I'm sure you've learned so many things, right?
25:03 Rusti Gregory: Yeah, it is, yeah. I learned a huge amount about Flask and about templates and all those, how everything interplays. And like I said, I teach myself cookies to make sure it was a sign in only site. And that was a huge, and how to store actual information. I stored everything in JSON files, and then every time there was a new page, I'd unpackage it, and then I'd dump it back at the end and stuff. So I figured out how to get around that. And I don't have to do that anymore. So the next thing for me is to learn databases so I can make sure, I can stick it in a database and stop having to stick things in JSON files.
25:34 Michael Kennedy: Yeah, for sure. That makes a lot of sense. I think it's these things that really help people learn, these little projects, and that's great. You also talked about some other resources. What else you got?
25:46 Rusti Gregory: Yeah, well, along the way, I was trying to learn Python with the intention of eventually teaching it. So my goal is to teach it in the school setting at some point. So I kept really kind of meticulous notes about everything that I was using along the way. Python Tutor, there's a website called Python Tutor Visualize. Like if you look for visualize Python, you'll get to it. And it basically shows you, you put your code in the left-hand side, and then on the right-hand side, as you create a variable, it's kind of like a debugger. But it's very, very, very visual. You can actually see what each variable represents. So if you're trying to go through a loop and you're trying to figure out what happens inside the loop, what x is equal to at this time and what two things are actually trying to match or whatever, you can actually see that on the side. And that was a huge, huge breakthrough for actually being able to understand what happens in a loop and understand when I'm trying to work with a dictionary, what that variable actually is at that point in time. And that was a huge breakthrough for me. That was a lot of fun to play with.
26:44 Michael Kennedy: Yeah, Python Tutor's a cool project by Philip Guo. He's doing a lot of neat stuff with it, yeah.
26:49 Rusti Gregory: So that was great. Repl.it was really good, Repl.it. Since I teach in a school that is all Chromebook, and I think a lot of educators these days are teaching in Chromebook schools, Repl.it was a great find. And since I've found it like a year and a half ago, it's changed so much and matured a lot. Now you can host your own data files and things like that on there. And that was a great thing. So you can just put something in there and then hit the run button, and you go. It's like having a little terminal. That was a lot of fun to play with. And that's a lot of fun also if you're looking for help online. You can put everything in there, and then you could just say, here's what I've got so far, instead of trying to go through and explain everything. But posting up a question on something like Reddit is really great for the answers you might get, but it takes a lot of effort to get it up there. Something like Repl.it makes it a lot quicker. You can actually show people what you've got.
27:36 Michael Kennedy: Right, yeah. If you're going to say, hey, I'm having this challenge, or why does it do this, right, having something like a Repl.it link, maybe a gist or something like that, like where it's not just, I'm trying to use this function, and it's behaving weirdly. It's like, okay, well, no one can help you with that.
27:53 Rusti Gregory: Right.
27:55 Michael Kennedy: But this is super cool. Another resource that I think, for Chromebooks, that's just recently announced, they actually sponsored the show a little while ago, but I'm just saying this 'cause I think it's really cool, is this thing called Coder.com.
28:07 Rusti Gregory: Yeah, I heard you talk about that, actually.
28:08 Michael Kennedy: Yeah, yeah, Coder.com is basically a Docker container that you get for free, plus Visual Studio code in the browser. So if you're on a Chromebook or something, you can just go to Coder.com and go there, and you have a bunch of Docker containers and a little terminal. You can install whatever you want, right? You have root access to your Docker container, basically. So it's really nice. So anyway, just throwing that out there as another one. All right, keep going. You got a bunch here.
28:37 Rusti Gregory: Right on, yeah, so Socratica is a YouTube channel, and they've got a lot of great videos describing little concepts, little bite-sized concepts in Python. I think it could work for a lot of languages, but it's Python specific. And that was a big help for just kind of understanding, you want to figure out what a list comprehension is or something, you can go there and find that. And they'll explain exactly what it is. Nice production values, and really, really informative. That was really good.
29:01 Michael Kennedy: Okay, that one I haven't heard of. I'll check that one out.
29:03 Rusti Gregory: Yeah, PrettyPrinted.com is a guy who's doing a lot of great YouTube videos on Flask specifically, a lot of, again, just little bite-size things on Flask. And that was huge for me, because there's not a lot of people out there that do very specific things for Flask, as far as YouTube goes. So that was a great find.
29:22 Michael Kennedy: That's a good one. That's Anthony Herbert. He's doing, yeah, he's doing good stuff as well, like you said, mostly with Flask, but Python.
29:28 Rusti Gregory: Uh huh, RealPython.com, and I know you've had Dan Bader on your show a few times, or quite a bit even. And Real Python is great. I started reading it before he took it over. It was a decent resource then, and now it's just amazing. He's coming out with things so often I don't have time to catch up and read them all.
29:47 Michael Kennedy: I know, I can't read it either.
29:49 Rusti Gregory: I'd almost appreciate if they released once a week, and then I could actually keep up with it. But yeah, so it's been really, really, really good. I go there, like I started using the pathlib library because I read an article there. And even though I feel it makes my life harder than just using OS a lot of the times, it's a great, great resource.
30:06 Michael Kennedy: Yeah, that's cool. I definitely agree with that one.
30:08 Rusti Gregory: I spend a lot of time on Reddit.com, the Learn Python there, just kind of browsing sometimes. If I'm bored or if I have 10 minutes to kill, I'll go there. Or if I have a question and I have the energy to actually go through and explain it, I'll put stuff there. I've always, always had really good luck. Only one time has somebody said, did you read the docs, which is, yeah, like the worst answer ever.
30:30 Michael Kennedy: Yeah, Q&A sites on the internet, people can be mean. But I feel Learn Python's pretty nice.
30:35 Rusti Gregory: Yeah, as far as actual sites, those are the main ones that I'd pulled up. And I've been kind of recording. I have a Google Keep site where I just have any minor thing that I find, I'll throw on there. But those would be great places to start for somebody else who's in a similar position, you know? I was working with a guy before that was learning Python kind of around the same pace as me. I went with Flask, and he was doing a lot of data stuff. He was a runner, so he was pulling his information out of Strava and playing with it and making maps and recording different things. And he worked a lot with APIs, so I learned a lot from APIs from him. And then it was a lot of fun when we were working together. But he's since taken a different job, so I'm kind of back on my own again.
31:13 Michael Kennedy: You lost your one colleague to bounce programming ideas off, right?
31:17 Rusti Gregory: I did. I'm actually, his replacement I've actually kind of talked into using a bit of Python for this and that. So we've been playing a lot with just, we use the Google App Suite, and you can kind of interact with that with Python if you're clever. And we've been trying to do that a bit lately. So yeah, it's been fun.
31:32 Michael Kennedy: Yeah, yeah, that's really cool. It could be a big challenge to be isolated like that, right? I mean, even in 2018, especially earlier in your career, to just be doing it totally on your own, 'cause I'm sure you've had lots of experiences like that, where you're like, this is not working. I know there's a two-minute fix to make it work. I've been trying to find that for a day now. And I still don't know what it is. But if I could ask somebody, they would just show me that this is the problem, right?
32:01 Rusti Gregory: Yeah, and if I could craft a good question for half an hour, I could post it on Reddit. And I will get my answer probably by the end of the day. Or it'd be great just to have a relationship with somebody where you can say, hey, remember that project I was on? Well, I've gotten to this point, and I have to do this or that, or hey, can you come over and look over my shoulder? That would be great. But yeah, even where I live, there isn't any place where I can go to take a formal Python class at like a university. There's three universities an hour away from me. But that's it. And even then, there's very few opportunities for things like that. Like, I'm ready to take some sort of a SQL course so I can try and get to the next level on that. And it's just, it's tough to find things like that. I can't take a computer course online, not a formal one. I've followed a few smaller courses online, but a semester-long course is not really an option for me and my learning style.
32:50 Michael Kennedy: Yeah, I'm not a big fan of those, to be honest, either. I know there's, like MIT and Courses and stuff that you can follow along, and there's Stanford courses online. And I just feel like, those are structured to be a format that somebody who is in a university every day taking six other or five other courses, and that's going to fit into their homework, attend course pattern, a little here and there. But honestly, what you learn in those courses, you could condense that to a week or four days, not 16 weeks if you didn't treat it that way.
33:27 Rusti Gregory: I get so much from the discussion, you know, the discussion in class and people's questions and going off on tangents and being able to read the room. There's so much involved in that. So especially with a programming course, it's something that I really want is an instructor in the room.
33:42 Michael Kennedy: Yeah, yeah. And those sort of MOOC classes, they don't typically have that. Maybe they've got like a higher TA for the online version, but that's not the same.
33:50 Rusti Gregory: Right.
33:52 Michael Kennedy: This portion of Talk Python To Me is brought to you by Rollbar. Got a question for you. Have you been outsourcing your bug discovery to your users? Have you been making them send you bug reports? You know, there's two problems with that. You can't discover all the bugs this way, and some users don't bother reporting bugs at all. They just leave, sometimes forever. The best software teams practice proactive error monitoring. They detect all the errors in their production apps and services in real time and debug important errors in minutes or hours, sometimes before users even notice. Teams from companies like Twilio, Instacart, and CircleCI use Rollbar to do this. With Rollbar, you get a real time feed of all the errors so you know exactly what's broken in production. And Rollbar automatically collects all the relevant data and metadata you need to debug the errors so you don't have to sift through logs. If you aren't using Rollbar yet, they have a special offer for you, and it's really awesome. Sign up and install Rollbar at talkpython.fm/rollbar, and Rollbar will send you a $100 gift card to use at the Open Collective, where you can donate to any of the 900 plus projects listed under the Opensource Collective or to the Women in Code organization. Get notified of errors in real time and make a difference in opensource. Visit talkpython.fm/rollbar today. So while you're throwing out these ideas of places people can go and check out stuff, I think they're all really good ones, couple I also will throw out there is, you talked about CodeCombat, which I think is really cool. There's also CheckiO, which is a similar idea and has Python. I kind of feel like CodeCombat is better for beginners, whereas this CheckiO is really nice, but you kind of have to be able to program directly, right? It's like more free-formed answers. But it's pretty cool as well. It's kind of a similar game-ification. The thing I like about that is you can compare your solution to other solutions.
35:46 Rusti Gregory: All right.
35:47 Michael Kennedy: That other people had, so you can see, like here's the five ways this was solved. And I always find, like I learned different things about my own programming style by comparing the answers. For example, I realized that I implicitly optimize for performance considerations, whereas I didn't think I was doing that. I was just like, I'm just going to solve this. But I had solved it slightly more complicated, oh, yeah, I could probably use this other simpler thing. But this is going to be a better answer, you know what I mean?
36:14 Rusti Gregory: As far as problems go, I think that's probably a good one to have.
36:18 Michael Kennedy: Yeah, it probably is. It probably is. But it just made me realize that's a thing that I do, 'cause I didn't even notice, right? But once you compare your answer to five others, you're like, well, why is this so short? Okay, oh, well, 'cause you could've done this, but I didn't actually want to do that, because, yeah, whatever. And also the Code Challenges platform for PyBites. It's similar to CheckiO in that you kind of got to write proper code, but that one's nice.
36:40 Rusti Gregory: I'll throw in Codewars, as well, while we're talking about that. Codewars is a very similar one, again. You grab an account, and then they throw, there's like eight different levels, and you work your way up the levels. But it's language agnostic. So you can solve the different issues with whatever language you choose, or multiple languages or things like that. And again, once you finish, they'll actually have tests that are written that they'll run against your code. So if you didn't-
37:07 Michael Kennedy: Oh, that's cool.
37:08 Rusti Gregory: Yeah, if you didn't make everything lowercase so it works through this, it'll fail the test, or things like that. So that's a pretty neat one. I find I never usually have the energy to just go and pick out a a random problem, because they get pretty complicated pretty quick.
37:24 Michael Kennedy: Yeah, yeah, I totally, totally agree. So one more I'll throw out real quick is Anvil, Anvil.works. I had them on the show as well, and basically that is a super easy way to create 100% Python-based web apps. And the reason I'm bringing it up in this context is my daughter went through, and she's like, dad, I want to create a web app. I'm like, yeah, it's a lot of work. There's a lot of concepts for us to cover. I mean, she's like nine at the time, right? So but you can go through this, and you can write JavaScript-y Python that runs where JavaScript would normally run. And you can drag and drop stuff and you get like a backend that's already set up. It's really cool. My daughter, at nine, created a pretty cool little data-driven web app out of it. And I thought, okay, well, a nine year old can do it and have fun, this is actually pretty cool.
38:10 Rusti Gregory: Very cool. So does it just run inside Anvil when you're finished, or can you download it?
38:16 Michael Kennedy: It has to run inside Anvil. So you've got to have an account there, basically, which is a bit of a drawback. But it also means it has the better integrations, right?
38:23 Rusti Gregory: Right.
38:24 Michael Kennedy: But what I really like about this as one of the examples is, so often programming is taught in terminals and REPls, and how many beginner programmers and kids and stuff go, oh my god, it's so amazing, it printed. You know, right? They're just completely, the expectation is not that I'm going to do something interesting in a terminal or whatever, right? They need some visual feedback. And one really nice way to get visual feedback is the web, if it's not too hard to make it work. And I think this strikes a good balance.
38:54 Rusti Gregory: Excellent.
38:55 Michael Kennedy: Yeah, so I'm going to talk about some of the roadblocks and maybe what we can do to help folks, especially who are learning in a vacuum 'cause they don't have any colleagues or they don't really know anybody or something like this.
39:09 Rusti Gregory: Yeah, boy, I don't know. It's been a slog, actually. I mean, things are getting, you have to get to the point where you get the vocabulary to ask the questions. And that takes a little while to get there.
39:21 Michael Kennedy: The online space is really good for helping people, but you have to have a minimum level before you can pop your head up and not just be dismissed as knowing nothing at all. Know what I mean?
39:32 Rusti Gregory: Yeah, and even just to google your question first, right, you've got to know exactly what you're trying to do, using the right nomenclature, right? So that's tough to get to. I think it depends on your learning style. I mean, my learning style, I've been following web tutorials for years and years and years. So it's pretty easy for me to just kind of get on and deep search whatever I'm looking for. I don't know if I have any solutions. I'd really like to see more classes available in high school where you can get started and things like that. I'm part of a group that's trying to make that happen here in Vermont. So I think that's really where we have to get the access.
40:07 Michael Kennedy: Yeah, absolutely. I think would certainly help more kids see that as an option, I think. What about mentors?
40:14 Rusti Gregory: Mentors would be great. You still have to find a place where you can kind of make those connections. Meetup groups and things like that can be kind of intimidating. I'm part of a code meetup group in Burlington, but I head down, and I don't know too many people there. And everybody else seems to know each other there. You can kind of listen to the conversations, and oh yeah, I just got a job with this new startup or whatever. It's not like a lot of basic meetups out there. WordPress has these things called Word Camps in there, and I've heard you talk a lot about PyCons. But the Word Camps are always kind of aimed at beginners, as well, for the most part. And I don't know that we have anything common like that, 'cause Word Camps have been kind of all over the place. And they're really, really common.
40:54 Michael Kennedy: Yeah, it sounds almost like you need like a learning to code meetup. Type of thing, not like, I'm a pro, and here's how we use Docker.
41:04 Rusti Gregory: Yeah, exactly.
41:04 Michael Kennedy: To optimize this other thing or whatever, right?
41:06 Rusti Gregory: Yep, so we've got a lot of, not a lot, we have a few conventions for teachers, tech conventions throughout the year. So my goal is to kind of go and show off some of the things that I'm doing with Python at those things to try and get other teachers aware of kind of what can happen.
41:21 Michael Kennedy: Yeah, I do think there are some opportunities at some of these main conferences, like PyCon, for example. But they're only once a year or maybe a couple times a year if you factor all the local ones you could get to. You also have to be at a certain level before you're willing to say, I'm going to travel to Cleveland.
41:37 Rusti Gregory: Right.
41:38 Michael Kennedy: To go to a conference for programmers. And that's going to help me get into programming, right? That's a pretty hard stretch to make. I think it's true, but I don't think most people would believe it.
41:50 Rusti Gregory: Right. Yeah, and maybe just exposure to some sort of language to get started, 'cause I've heard a lot of people, a lot of the guests on your show, they're always like, oh, yeah, I used Python for a few things. I started writing in this language. And here I am learning Python, and I'm thinking to myself, that's crazy. How could you just go over and do one thing? I couldn't do that in this other language. And then I started, I bought a JavaScript book about four or fives months ago, and I started going through like, oh, this isn't that bad. This isn't that bad. I could, if I had a little task to do in this, I could do that. And so then if I want to use not JQuery for something, I feel pretty confident I can do that now. And I can go and google what I need to do, because I know the concepts in general. So that's a big help. So just exposure to some sort of language would help you if you want to then learn Python later on.
42:35 Michael Kennedy: Yeah, absolutely. I definitely think that learning your second language is an important step, whatever that programming language is. Once you know two, you're like, oh, I've learned multiple programming languages. Now all of a sudden the third, fourth, and fifth seem way more approachable. You know what I mean? It's not scary.
42:54 Rusti Gregory: If you want to go anywhere near the web, you're going to need about three or four languages under your belt that you, if you just knew CSS, people would probably laugh at you.
43:01 Michael Kennedy: You couldn't do anything, really. I totally agree. The web is tricky, because you really do have to do three or four programming languages. You've got to do some kind of database, so SQL or something along those lines. You've got to do a server-side language, so Python or something. You've got to do JavaScript, CSS, and HTML. Maybe you can get away with no JavaScript for a while, but that's still four to five.
43:22 Rusti Gregory: Yeah, you can only not do JavaScript until you want people to enjoy what they're looking at. Then you're pretty much going to have to do that too.
43:28 Michael Kennedy: Yeah, yeah, exactly. Exactly. Interesting, I don't really know a whole lot for the learning in a vacuum stuff that'll help. I do think there're some opportunities for a couple things. I think there are some online communities, I know there's a bunch, and I don't really track them that carefully, but there's some Slack channels. And I have a Gitter channel for the podcast at gitter.im/talk-python. And people go on there and ask questions like, hey, I'm trying to do this. Any ideas on which is better or how should I do that? Sometimes there's a lot of good conversation there. There's the Pythonista Cafe from Real Python and Dan Bader. There's the PyBites Slack channel. Those are all places people can drop in and talk to other folks that are maybe at different levels, you know, or at their level, rather. Yeah, there's still that human side of things that really in the early days can help. I definitely, when I started programming, it was very much in isolation. Maybe there was one other person that kind of knew some stuff in the very early days, and then it's just like two or three of us at a company of scientists or other places, right, where we all knew some stuff, but it was definitely a lot of a challenge to...
44:39 Rusti Gregory: Yeah, even just one person that you can kind of geek out with and talk about different things or concepts and stuff, it just really, really helps. Yeah, so I'm concentrating on growing the number of budding coders around me.
44:52 Michael Kennedy: Yeah, you pass that Automate the Boring Stuff around. Hey, have you seen this? Check this out. That's really cool. One other thing that you did bring up that's maybe interesting is PythonAnywhere. Yeah, have you used that?
45:06 Rusti Gregory: So as soon as I started making my web app, I basically had to figure out how to get it out there to the wide world. I've always used Bluehost as my web host, and it was, I started looking at how to run Python on it, and it just didn't seem like it was going to be possible. There were ways you could hack it to make it happen, but there wasn't a path to getting something on there. So then asking around again, I found PythonAnywhere. And it was really, really easy to start, other than the fact that the very first app that I tried to put on there, as soon as I put it on there, the home directory was different. So everything was broken. I think I almost cried. I had worked for three months getting this to work on my computer, and then I put it up on there. I was so psyched. And then it just broke. So spent about two days going back in there and rewriting all the paths. But yeah, it was great once I got it working. PythonAnywhere allows you to put up, it gives you one site. You're just going to get your username dot PythonAnywhere. It's free, so if you're just playing around and learning how to do things, it's a great, great resource. I've been trying to get my app on Digital Ocean, just because I want to be able to, I like the pricing structure for Digital Ocean. I'm ready to take it to the next level and have a little bit more control over things. But I followed the tutorials so many times, and I get to a certain point, everything's working, everything's working, then I try and do the Gunicorn level, and poof, nothing. So that's a bridge I'm going to cross one of these days.
46:28 Michael Kennedy: Yeah, that's definitely a challenge. I mean, both, you touched on a couple levels. Like I just, I built this thing. It's working. How do I get it on the internet? That is, for a lot of folks, that is a huge challenge, 'cause they probably don't have a whole lot of Linux admin experience. Something like Bluehost, they maybe don't really support Python. But you already have an account with them, like how can I cram my Python app into their structure? And that probably doesn't fit. It's definitely another step that you have to take, going through these, where it's certainly a challenge.
47:00 Rusti Gregory: I was on Reddit, actually, explaining problems, 'cause it gets down to this sockets issue, and you got to say, it's got to go to this socket. And I know it's some kind of permission problem, but so I was trying to explain it on there. And I kept going, I was like, ah, works great on PythonAnywhere. But as soon as I get over here, the guy's like, well, if you don't really understand sockets, maybe you should just be on PythonAnywhere. So like, well, maybe there's some truth to that. So I've given up for the time being and just kind of going there. But if I wanted to create something serious, that would be a roadblock for me. So and I guess there's other places.
47:31 Michael Kennedy: Well, I totally understand what he's saying there, but at the same time, how will you ever understand sockets if you don't beat your head through against this wall and get through it on Linux and get the thing set up, right? It's not like, well, you just need another more year experience, and sockets'll be obvious, right? Linux sockets for transporting between Nginx and Gunicorn, right, that skill is not like you're going to ambiently pick that up, right? You have to just go through that step. And maybe more time it would be easier. But at the same time, I don't know. I do think there's a lot of power in learning how to just deploy your app on Linux, right, whether that's Linode, Digital Ocean, or something else. I think those are some of the really best hosts, right?
48:15 Rusti Gregory: That's like the next level, right? You could actually make what you want happen. Because one of the things that coding has done for me is made me feel like a little kid again, like I can do anything. You know, like I can't do anything, but you know what I mean? It just made me feel like my computer is this huge wonderful machine that I can create stuff on. And that's been a wonderful, wonderful feeling. But then if you can't show it to anybody and get it out there in the world, it definitely falls a little short, because then it's just you telling people what you did. As opposed to being able to show off what you created. So it was great to find PythonAnywhere. It really, really was awesome. And it's a great resource. And you know, it's just a little bit more expensive than any other options. So it's easy enough to get your stuff out there, but to take it to that next level, there's definitely, I mean, there's experience and skill that needs to happen to make that happen.
48:58 Michael Kennedy: I definitely appreciate that. It makes me feel like a kid again, right? Like when you're a kid, you feel like you can build anything. Think of the days of Lego or Hot Wheels or all those kinds of things that you fiddle with as kids, the little building block stuff. And it's just like, yeah, I can do that in the digital world.
49:16 Rusti Gregory: You go from being a consumer to being a creator again. Like, we did this thing, I Love My School week two years ago at my school. And it was I Love My School week, my principle comes down, and she's like, oh, can we get every kid in the school to tweet during this time? I was like, ah, I don't really know. We don't really want to give them the password. So she's like, well, I tell you what. You get it all on a Google form, and I will set my alarm, and I'll tweet every five minutes. I'll tweet three of them out. And I'm like, I don't think that's probably how you should be spending your time. I think we could figure out something different. So we spent all this time looking around online, and we found something that worked with Google Sheets, and it was this auto-tweeter and everything. Well, last year for this event, I created that. I wrote it, and it was rock solid. It did exactly what we wanted instead of having to, we probably tried out seven different systems the years before, before we were coding. So it just gives us that ability to take control of those types of tasks.
50:06 Michael Kennedy: That's so cool. 'Cause it's not that big of a project.
50:09 Rusti Gregory: No, it isn't really.
50:10 Michael Kennedy: But it can make a big difference to who it's for, right?
50:13 Rusti Gregory: Yeah, you find out what Python package you need, and you write a loop, and that was it. It's pretty cool.
50:18 Michael Kennedy: Yeah, the real danger is that it goes crazy.
50:22 Rusti Gregory: We did get a few complaints that people told us that we were tweeting a little too much. But it wasn't my idea. I was just carrying it out, just in my defense.
50:28 Michael Kennedy: Yeah, yeah. But if it gets stuck in a loop or something. Then you'd have a lot of tweets. That'd be bad. But no, that's really, really cool. You also, you talked about building stuff again and being a creator. I think one of the things that would be really nice that you talked about would be to have little devices or IoT things for kids, right? And there's definitely some good options for Python there.
50:55 Rusti Gregory: Yeah, I listened to your podcast where you interviewed the guy that did the Python for Micro:bits, or not, yeah, Micro:bits. And I went to, that was the same weekend we had this convention. And I went down there, and I got to play with Micro:bits for the very first time, like an hour and a half after, 'cause I listened to your podcast while I was driving to it. And it was fantastic.
51:14 Michael Kennedy: Oh, wow.
51:15 Rusti Gregory: Yeah, I'm pretty psyched about Micro:bits now, I have to say. So my wife is English. We used to live there for a while when we were first married. So I've kind of connected a lot to, I follow a lot of English kind of education news. I was pretty excited to be able to get ahold of these things. And I'd really like to kind of replicate what they did in England kind of here in Vermont. I haven't taken any steps towards it yet.
51:34 Michael Kennedy: Right, the whole BBC Micro:bit and all that kind of stuff, right?
51:37 Rusti Gregory: Yeah, trying to get one in every sixth grader's hands would be amazing. So that's one of my long-term goals here. Maybe shorter-term goals, but just to try and seek out funding from some Vermont businesses and things like that. So we've got a couple cool big tech companies here that might be amenable to something like that. They're really, really great for kids to just kind of see what they're doing. You hold it in your hand and see the effects of your code.
51:59 Michael Kennedy: Yeah, I definitely think one of the keys in the early stages of getting involved in this kind of stuff is early feedback, quick feedback, and visual feedback of some type, right?
52:11 Rusti Gregory: Right.
52:12 Michael Kennedy: And if you're putting together a little device, and the fan blows every time you walk by it or it counts the number of people that walks through the door, that's pretty concrete.
52:20 Rusti Gregory: Yeah, very cool. And Scratch just made, Scratch just updated Tuesday or Wednesday, and now it's got an extension in there so you can write in Scratch. It'll show up on the Micro:bits, even. So it's very, very neat kind of bridge for kids to get that.
52:34 Michael Kennedy: Yeah, and they're not super expensive. It's not like trying to get a laptop for everybody.
52:40 Rusti Gregory: Right.
52:41 Michael Kennedy: It feels like it's half a funding problem and half a bureaucracy problem.
52:44 Rusti Gregory: Right, yeah, making people realize that it's important, that's always the challenge.
52:49 Michael Kennedy: We're lucky that we have the BBC and the UK for plowing through and doing that the first time. And they've got one of the podcasts I did with Nicholas about that, we talked a lot about the results, right? It was not just having done it, but they sort of studied the outcomes, which I thought was really cool, as well.
53:06 Rusti Gregory: Yeah, they lead the way in quite a few different things. I mean, they put smartboards in every room in the entire country all at once and things like that that really make a big impact. Things that you can't do because of the way our education system's structured compared to theirs, so it's pretty neat, right?
53:21 Michael Kennedy: Yeah, a lot of other countries have very, more nationwide same education, whereas us, there's cities or towns five miles apart and totally different. Bureaucracies manage that, right? It's quite different.
53:36 Rusti Gregory: We have it more different here. Every, my kids go to a school of 106 children, and they have their own school board. It's unique.
53:45 Michael Kennedy: Yeah, unique. I'll leave it at that. So another thing you were talking about is computer science education and Python.
53:52 Rusti Gregory: Yeah, I'm a member of a computer science advocacy group for Vermont. And there's some people from the state education agency are involved, and then there's a number of educators involved, as well. And we're just kind of running into this thing where I'm probably the only Pythonista in the group. I think there's a lot of Java teachers, because your AP computer science stuff uses Java.
54:15 Michael Kennedy: Right, so if you want to be an AP computer science teacher in the United States, you basically had to learn Java. And once you learn Java, if you're not a programmer, why would you learn other languages?
54:23 Rusti Gregory: Exactly, or there's just, it's just kind of an old-school mindset, you know? Nowadays you probably want to have a few different languages available. But anyway, so we're really struggling with the number of people who can teach computer science. It's not an easy subject to necessarily grasp. The amount of teachers that we have in there, one of the things they always say is if you have a computer science degree, you're probably going to go and make a lot more money than you are instead of deciding to come in and be a teacher and spend most of your day trying to tell kids to get off their phones and pay attention or do whatever rather than work in an office and not have to deal with those types of things. So yeah, so we're trying to kind of increase the amount of people who can teach computer science, just kind of on an introductory level. I don't think, I don't know how much there's going to be into getting people into being able to teach AP classes and things like that. But you got to start somewhere.
55:18 Michael Kennedy: Absolutely. Well, if you got, say, 100 teachers to learn Python and people to teach it at basic level, surely some of them would just pick up things like Automate the Boring Stuff. They would get interested, and they would just naturally get better.
55:33 Rusti Gregory: I think in our entire state, they figured we had 43 people that were qualified. So yeah, there's a number of challenges, again. And a lot of them are older folks, too, that are on their way out of education. So yeah, lots of challenges in there to get it started. I'd like to see more teachers learn basic coding, because a lot of what's going on in schools right now is teaching regular teachers how to teach some things. There's a lot of, we'll learn with the kids, and that type of stuff, as opposed to, I'd love to see more and more teachers just take an introductory Python course and actually, yeah, maybe pick up Automate the Boring Stuff and see the value in those types of things. I think if you could get your average teacher to realize that coding isn't just something that they're going to do for an hour on Tuesdays, is that it could be interesting in general. And just get that, to see somebody's eyes light up the first time that they write a program that creates a file on their computer and then writes to it or something. That's just really powerful.
56:34 Michael Kennedy: Yeah, or there's some project, there's something that they were doing over, and some report they've got to write every month that was dreadful, and then all of a sudden, they can push a button, and half a second later, it's done. It's like, oh, this is like a magic wand.
56:47 Rusti Gregory: Yeah. I actually wrote a program that went through and, we have training, beginning of the year trainings, bloodborne pathogens, all that kind of stuff. And normally everybody has to sign off on a piece of paper. Well, they made that electronic a couple years ago. Then it was always, so then I created a spreadsheet that aggregated everything, just using the Google apps. And then every two weeks I get an email from my principle that said, oh, hey, how many people still need to complete this and that? I have to go through it and write it all, type or copy and paste it into an email and send it to her, and then she would contact everybody. Well, I automated that the other day, or beginning of this year, with Python. And now it just sends out the emails to people on Friday afternoons or Monday mornings. I think I did it Monday mornings so they would just say it was Friday afternoon. Yeah, and those types, I actually got a hug from my assistant principle when I wrote that one, 'cause she was so excited that it was actually, it was working and people were finishing what they needed to do on time. So that was pretty cool, those types of projects are fun.
57:47 Michael Kennedy: Yeah, that's awesome. She no longer has to be the bad person who goes around and nags everyone about something.
57:53 Rusti Gregory: Yep, and she gets an email saying, also, I just made two lists. One list for the people who are going to get the email, one list for her of everybody who was going to get an email. And then she gets an email with all the people on it. So it was a great solution, if I don't say so myself.
58:07 Michael Kennedy: Yeah, that's cool. It actually highlights an interesting thing that you hear a lot around code reviews.
58:14 Rusti Gregory: Right.
58:15 Michael Kennedy: So code reviews, you look at the code. Other, more, probably more or at least equally experienced programmers look at it and go, well, this is good, but you need to change this or that. And there's a lot of stuff that just linters and other automated systems can do, like oh, the indent is wrong here, this line is too long, this function has too many lines, et cetera, et cetera, right? When people sort of nitpick like that, they come across as this annoying person that always nitpicks on the details, and we're trying to talk about something more important, right?
58:43 Rusti Gregory: Right.
58:44 Michael Kennedy: But if just an automated build tells you, hey, your code is not quite right because x, y, and z, that doesn't cause the same emotional reaction as it does with that kind of stuff, so it feels like it must be similar here, right?
58:55 Rusti Gregory: I created a dummy account to send the emails out from, so it wasn't me. So there's my school automated email account now, so.
59:04 Michael Kennedy: Yeah, and it's the same type of thing, right? The system knows I haven't don't it. It says I have to do it. So I guess I'll do it so I stop getting this email, or eventually someone's going to talk to me about it, right? Like taking it away from having the person do the nagging is kind of a nice touch. One final thing we have time for, then we'll have to wrap it up.
59:21 Rusti Gregory: Sure.
59:22 Michael Kennedy: You had some thoughts about music education and programming education.
59:25 Rusti Gregory: Yeah, so one of your podcasts recently was saying that geometry was a good place to replace, good class to replace computer science with. And I really thought that was a great suggestion, actually. I've been telling that to people since then. But I've always figured that music was a great example of what the education has done to kind of create more musicians in the world, right? So in my school, it's around 600 kids, and we have two music teachers, no computer teachers, well, I mean, I kind of fulfill that role. But no official computer curriculum that goes all the way through. But we have an instrumental teacher and a vocal teacher, and they go through, and every kid gets exposed to it. And when you get into fourth grade, then you get to choose an instrument. And you get small group lessons and things like that. And then you go on, and my best friend is the music teacher at the middle school and high school, and then he gets the same kind of cadre of kids that go all the way through, and they do all these activities, and it's a very select group that has chosen to kind of be in this thing. But then you get a lot of musicians out of this, people who have chosen to go into that. They get pulled out of class 'cause it's important to get to their individual lessons. They put on concerts, all this. That's a lot of effort to go into this thing that isn't math, science, or reading. And I think that's a great model that we could do with computers. What if we, so I went to this computer science teacher conference in Rhode Island. We all drove down in this van for like six hours together. And everybody in the van was a musician except me. We were all computer people. I could imagine going to some kind of music weekend or music teacher convention and looking around in the van and having six out of seven people be programmers, as well, would be pretty cool.
01:01:03 Michael Kennedy: Yeah, I definitely think that's something to aim for. That's awesome.
01:01:06 Rusti Gregory: Yeah, everybody learns the kazoo, and then you pick your instrument. What if everybody learned Scratch, and then you got to pick, you got to either go the JavaScript or Python way afterwards. Or whatever, whatever it might be, just to funnel that and support it the same way we do with music. And if you want to see parents get up in arms about something, try and cancel a music program. They will go bats over something like that.
01:01:27 Michael Kennedy: Yeah, for sure. The point of the music program is not to make everybody a musician, right?
01:01:33 Rusti Gregory: Right, well, a professional musician.
01:01:36 Michael Kennedy: Yeah, a professional musician, right? Like as their job, right? It's not like, well, you first take this music class and that music class so that then you can go start the next Pearl Jam or whatever. It's just so you have some musical skills, right, for life.
01:01:50 Rusti Gregory: Everybody agrees that music is important, and everybody agrees that it's a life-enriching thing. Everybody agrees that we want more music in the world and that it's valuable for kids to do this, so we're going to put these resources into it. And you got to wonder why technology isn't to that quite same level, although technology does kind of bleed into just about everything else at this point. So it could be different.
01:02:12 Michael Kennedy: It does bleed in, but almost always bleeds in in the sense that it's a consumer situation.
01:02:17 Rusti Gregory: Right, good point.
01:02:18 Michael Kennedy: Like I was in biology class, so I used SAS to do the stats on my lab, right? But I didn't create.
01:02:26 Rusti Gregory: We spend all of our time trying to find the perfect tool to do this instead of creating a tool that might help it, you know? Like ah, we have to sort through all these other things and figure out what might do this.
01:02:35 Michael Kennedy: Exactly, exactly. So yep, I'm still of the belief that geometry is interesting, but not as useful as programming. It's the same types of things, logical thinking, sort of proof-type stuff, all that kind, it's the same as programming.
01:02:50 Rusti Gregory: I agree. You've converted me.
01:02:52 Michael Kennedy: Awesome. Well, I have no control over the geometry anywhere, but I can at least say my thoughts. I do have a couple math degrees. So I've thought about it. And I got quite far in my math education without really using much I learned at all in geometry, I'm pretty sure. We'll leave it at that, I guess. All right, so Rusti, I think I have to put the main conversation, sort of leave it there.
01:03:16 Rusti Gregory: All right.
01:03:17 Michael Kennedy: But it's time for the two questions, as always. So if you had to write some Python code, what editor do you use?
01:03:22 Rusti Gregory: Atom.
01:03:22 Michael Kennedy: Yeah, Atom's cool.
01:03:24 Rusti Gregory: Yeah, I had a student show it to me when we were in my HTML class. And I've been a huge fan. I kind of of thought, why isn't he using what I told him to use? And I started using it after he left class that night. It's wonderful. I really like it.
01:03:35 Michael Kennedy: This kid won this scenario. He was right.
01:03:39 Rusti Gregory: He was right. I never let him know that, but he was.
01:03:41 Michael Kennedy: Yeah, that's pretty cool. And notable PyPI package?
01:03:44 Rusti Gregory: I love pygsheets.
01:03:45 Michael Kennedy: Is that for talking to Google Sheets?
01:03:47 Rusti Gregory: It does. It talks to Google Sheets. It allows you to just kind of manipulate them as Python objects and do all kinds of things. And I kind of consider them like a poor man's database. So that's pretty much how we use them. We're able to have people enter things into Google Sheets, which is really easy to get information in there. Then I can do all kinds of cool stuff with it in Python once it's in there.
01:04:05 Michael Kennedy: Yeah, I can see that being really useful for organizations like yours where you're not going to build a whole app for them to do a thing. But if you can share a Google Sheet with them and then just code against that, they could still do their manual entry, but then you can generate all the analysis just by hitting a button.
01:04:22 Rusti Gregory: You got it.
01:04:23 Michael Kennedy: Or typing a CLI command.
01:04:24 Rusti Gregory: Yep, it's all out there in the web, too. You don't have to get people access to it or have a server or anything like that that people have access to.
01:04:30 Michael Kennedy: Yeah, exactly.
01:04:31 Rusti Gregory: Yep.
01:04:32 Michael Kennedy: Yeah, if it's online and shared without you running infrastructure, yeah, very cool. All right, so final call to action, people are learning Python or learning to teach Python, what do you have for them?
01:04:42 Rusti Gregory: I would say Automate the Boring Stuff, CodeCombat would be great. And Repl.it, if you're in a teaching situation, that's a great place where you can share code and check things out.
01:04:54 Michael Kennedy: Yeah, all right. Well, it was really interesting to talk about all these ideas with you. And I've got some stuff to go check out, as well. So thanks, Rusti.
01:05:01 Rusti Gregory: Perfect, thank you.
01:05:02 Michael Kennedy: Bye. This has been another episode of Talk Python To Me. Our guest on this episode was Rusti Gregory, and it's been brought to you by Lenode and Rollbar. Lenode 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. Rollbar takes the pain out of errors. They give you the context and insight you need to quickly locate and fix errors that might have gone unnoticed until users complain, of course. Track a ridiculous number of errors for free as Talk Python To Me listeners at talkpython.fm/rollbar. 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.