#111: Pythonic Career Advice and More Transcript
00:00 Michael Kennedy: It's time for some Pythonic job and career advice with Matt Harrison. Listen in as we discuss how most developer jobs never make it to full job listings that you actually see out there and available, and how you can get in on 'em. We also discuss his books and avalanche research with the Pandas library. This is Talk Python To Me, episode 111, recorded May 4th, 2017. 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. This episode is brought to you by Rollbar and Hired. Thank them both for supporting the show. Check them out at Rollbar and at Hired_HQ on Twitter, and tell them thank you. Matt, welcome to Talk Python.
01:19 Matt Harrison: Oh, hi, thanks, Michael. Thanks for letting me come on the show.
01:22 Michael Kennedy: Yeah, we've had some conversations on Twitter and sort of brushed shoulders on the internet, if you will, and haven't really had a great chance to sit down and talk, so, let's do it over Skype tonight, huh?
01:34 Matt Harrison: Sounds good, happy May 4th. May the 4th of the force be with you.
01:40 Michael Kennedy: Yes, may the fourth be with you, also.
01:42 Matt Harrison: Yes.
01:44 Michael Kennedy: So, we're gonna talk about kind of a sampling of things. Data Science, books, careers, these are questions that we both get a lot, and we had some, I'm not sure I should speak for you, but definitely I can say that I've had some non-standard career paths that I think as, we can definitely exchange some ideas there and maybe help some people, you know, jump start their careers, and finally, you've got a cool project going on that we'll talk about, but before we get to all of those, let's start at the beginning. What's your story, how did you get into programming in Python?
02:15 Matt Harrison: Yeah, so I'm, I guess, a child of the '80s, and back in 1983, my Dad came home from work one day with a box that said Commodore 64 on it, and my brother and I proceeded to teach ourselves BASIC, I think mostly he taught it and I sort of sat and watched him, and so we were doing pair programming back in 1983, we had a Byte Magazine, and we would just sit down and copy what was in the magazine, and learn code from that. That was my first foray into that, and I can still remember typing peak and poke and changing the background color of that.
02:56 Michael Kennedy: Do you think that that's kind of a lost skill, or a lost way of learning, of, here's a bunch of text, I have to literally type this in to make it work, right? Like, will that ever come again? Probably not, right, not really.
03:09 Matt Harrison: I doubt it, I mean I think the Raspberry Pi is probably the closest that we have right now, but if you think about it, you have, you know, and iPhone or a tablet device that comes with a GUI environment and everything is, all these apps on it are, a lot of them are hundreds of man-years to make, and we were plopped into a BASIC environment, and you sort of had to learn to do everything from scratch, and it's interesting, because I teach kids programming, and I think about my experience, and it's really different from, they want to jump in and start doing 3D programming and games and that, and people who are new to computers, they don't appreciate a lot of what's going on underneath, I guess.
03:54 Michael Kennedy: That's an interesting point, that you really have different expectations of what you get out, right? Like, you're saying, like, "Oh my gosh, I made the screen blue, it's amazing!" Right, like people today wouldn't be amazed with this.
04:06 Matt Harrison: That's silly.
04:07 Michael Kennedy: How do I make the dragon fly?
04:09 Matt Harrison: Yeah, exactly. My brother and I messed around on the Commodore for awhile, and it wasn't until high school that I did much more programming, I took the AP computer science class in high school, and did Pascal then, and I also did a summer program where I did Prolog. I felt that programming was important, and it changed the way I thought, I was in the university, it wasn't until the university that I sort of went down the programming path, or computer science path, and sort of locked in on that. So, and then, you know, the rest is somewhat history. I, in school, did Java, Lisp, C, and taught myself PERL at the end of school, because I was told that if I knew PERL, then I would be employable, which was sort of funny, being in the middle of Silicon Valley, and not being employable, coming out of school, which just seems very silly. So I taught myself PERL, and proceeded to get a job doing PERL, and eventually I came to Python, because the company I was working for, it was a search company, and I was tasked with working with all of these smart PhDs, and one of them was doing Tcl, and I needed to do, make a what we call a "term suggester" to pick out the relevant terms of the corpus, and he wanted to do it in Tcl, and I was a PERL person, and neither of us wanted to cross that bridge to the other side. And so he said, "well, I hear there's this cool language called Python, I think we should try that," even though, like, white space is important in it, maybe we can get over that, and use Python to solve this problem. And we sort of both agreed on that, that white space wouldn't be a huge deal, and three days later, we had a working prototype, and I don't think either of us really looked back. We sort of--
06:06 Michael Kennedy: Wow, that's awesome.
06:07 Matt Harrison: Yeah, yeah. We sort of promptly forgot our PERL and Tcl, and hid that we were using Python from the rest of the company, but moved forward like that.
06:16 Michael Kennedy: Did Python eventually become something that was widely used within the company, or was it like, you guys kind of had this side-project, and, yeah, we don't talk about how it was implemented.
06:25 Matt Harrison: It was not looked upon, people were sort of disappointed that we were using, this was back in 2000, so, Python was not widely used at the company. Everything was Java and .NET, that was the cool thing to use at that time.
06:38 Michael Kennedy: Yeah, that was definitely the hotness, and, of course, they were doing like, SOAP web service exchange, and all sorts of badness, yeah.
06:45 Matt Harrison: Yeah, we implemented our own version of SOAP, that we called it Dove, and yeah, that was the glory days--
06:55 Michael Kennedy: He gave you a nice, creamy hands afterwards that wouldn't dry them out or anything, huh?
06:59 Matt Harrison: Yeah, you were all enterprise-y.
07:02 Michael Kennedy: Nice. So, I'm glad the XML-heavy days are behind us, especially the namespaces.
07:10 Matt Harrison: Yeah, okay.
07:11 Michael Kennedy: So, the search engine stuff sounds really cool, are you still working on that, or are you doing something different these days?
07:17 Matt Harrison: So these days I spend most of my time doing, I'm working at a company called FarBetter, and we're creating a business travel app. So the idea is to use computers to do something that computers are good at, like searching a lot of different options, and so the elevator pitch for that is to, you enter where you want to go and when you want to be there, and hit go, and in a minute we have a complete itinerary plan that crawls 100 million different options, and picks the best flight for you based on your preferences, be it brand, or cost, or schedule.
07:52 Michael Kennedy: That's really awesome, we're definitely gonna have to dig into that, that sounds really fun, so. You're still doing plenty of Python there, I presume?
07:58 Matt Harrison: Yeah, doing Python there, and occasionally, you know, every couple of weeks I'll do a training as well. So my employer's nice enough to give me a little time to actually do training as well, so I'm still involved doing training as well.
08:12 Michael Kennedy: Okay, speaking of training, you're giving a couple of tutorials coming up at PyCon, and, like you said, it's May 4th, and what is that, that's like 15 days until PyCon, maybe even sooner for your tutorials, right, they're the days before then, so, you know.
08:27 Matt Harrison: Two weeks away.
08:28 Michael Kennedy: Yeah, two weeks.
08:28 Matt Harrison: Yeah.
08:30 Michael Kennedy: What tutorials are you doing?
08:31 Matt Harrison: So, I'm giving a beginning hands-on Python, and an intermediate hands-on Python, so. I've been giving some version of these tutorials for probably about ten years now, so it's definitely a great way to get involved, and sort of share, I guess, my love of Python, and help others learn Python. I've tweaked them a little bit, this year. Traditionally they've been more of a, "here are some labs and go and do these labs," and this year I've tweaked them, and we're going to build a Marcov chain from scratch, and sort of introduce all of the basic constructs in the beginning class, and then in the intermediate class, we're gonna go over, sort of, the meaty parts of Python, so, talk about generators and decorators, and all of that fun stuff, and introduce those, in the context of making a Markov chain generator, so, it should be fun.
09:23 Michael Kennedy: Interesting. Yeah, that sounds awesome. Do you find that people, like, obviously there's plenty of people who are super experts in Python, but do you find there's a large number of people that maybe, like, can read the basic syntax, and they do the basic things they know how to do from C, but they don't really take advantage of the language?
09:39 Matt Harrison: I guess that was my experience, and I, you know, doing training. Where Python is right now, I mean, a lot of my training is enterprise, big companies that are migrating people from, ironically, Java and C# to Python, and so, you know, and my experience was very similar to that, where I said, we learned Python in three days, and that's, in three days we had a working prototype in Python, and, you know, once you get past, sort of, the replace curly braces with colons, and indent, you can sort of read Python, and you can be pretty proficient with it. And, so, I've seen that people will sort of say, "well, I can understand this, I can read it, let's, sort of, do that." And then you sort of throw in decorators and yields, and people's eyes sort of glaze over, and they just sort of ignore those sorts of things, right, and I think I was sort of in that camp for awhile, as well, and didn't really appreciate those, or didn't really see the need for them. And part of my tutorials, sort of, to get across the point of, yeah, you can get around with basic Python, and you can be proficient in it, and program like it's C, or Java, and whatnot, but there's a lot of syntax sugar that's pretty nice in Python, that you can do cool stuff with, and so, if you can take advantage of that, and wrap your eyes, or wrap your brain around closures and decorators, and generators, you can do a lot of cool stuff with that, so. And you can apply it to a lot of problems that are pretty common in programming.
11:14 Michael Kennedy: Yeah, for sure, and get more out of the language. So, it sounds like your intermediate tutorial would kind of cover that stuff, that's cool. And then you're also running The Young Coder's workshop, what's that?
11:23 Matt Harrison: Yeah.
11:23 Michael Kennedy: I kind of know about it, but tell everyone about it.
11:24 Matt Harrison: Yeah, so, they, I believe it's for 12 to 16 year olds, you can bring your kids, or your kids can come to it, you don't have to bring them, and we're just gonna give them a Raspberry Pi, and they can get an introduction of Python for the day, so that's, I'm doing the beginning workshop that will be on Saturday at PyCon. So, that should be fun, I've done elementary kids in the past, and was hoping to get my kids up there, but it turns out they actually have scheduling conflicts, so they won't be up there, but I'll still be doing that. So, it should be good, I like learning, and helping other people learn, so, that should be fun.
12:05 Michael Kennedy: Yeah, that's really cool. And are these pretty much sold out?
12:08 Matt Harrison: Yeah, I believe that I got an email from the tutorial organizer, and they said that every tutorial session was sold out. Which, you know, that's awesome. I mean, I think my first PyCon was 2005, and there was 300-something people there, and now, you know, there's, the conference has just grown to a really big conference, and it's crazy that, it's awesome, but it's really good to see the growth, and see, you know, like I said, enterprises coming to Python and wholeheartedly accepting it, so, it's a great time.
12:43 Michael Kennedy: Yeah, it's no longer tucked into the corner in that broom closet on that one project, right? Now it's the thing that they're seeking out.
12:48 Matt Harrison: Yeah, yeah, so.
12:50 Michael Kennedy: That's awesome. Yeah, so I've tried to hit this message, like, the beginning of this year, you know, PyCon's gonna sell out, everybody get your tickets, and, you know, if you don't get them, you're gonna be sad, don't wait, and I've heard from a few people that have said, "I'm gonna go to PyCon, I'm getting my tickets," and I'm just thinking, "Oh, no." A little bit later, "Nope," no more tickets.
13:09 Matt Harrison: Yeah, I've had people asking me, like, "Is there a back door, do you know someone I can get tickets from?" Well, you should have got them when everyone was saying they're gonna sell out, but.
13:20 Michael Kennedy: Yeah, well. I don't wanna go to far down this, because we want to stay on the other topics, but they could choose larger places, they could do Moscone Center in San Fransisco, but they're really trying to strike the balance between not having too huge of a conference, holding it in locations like Portland, Ohio, or wherever, where it's not super expensive to come to, and so there's this trade-off between, sort of, growing to fit the size of as many people who want to come, but then also, like maybe pricing people out, or making it difficult, so, it's tough.
13:51 Matt Harrison: Yeah, and kudos to them, I think the organizers do a great job. So it's not something that I would want to do, so.
13:59 Michael Kennedy: Yes, absolutely, absolutely. I've organized like, small training events, this seems harder.
14:04 Matt Harrison: Yeah, yeah.
14:06 Michael Kennedy: So, speaking of things that are harder, writing books. You've been doing, you know, I knew about your Pandas book, and then I started to look on Amazon, you have a lot of books.
14:16 Matt Harrison: Yeah, I guess it's sort of misleading, how many books I have. I sort of have three books, and then one of the books has been sold as, sort of sub-booklets, and so, well, I guess, so.
14:31 Michael Kennedy: Yeah, some of them are huge, they're like 60 or 80 pages, right?
14:33 Matt Harrison: Yeah. So, I guess I now have four books, I just recently released this Tiny Python 3.6 Notebook, which people lament the name, because it's not a Jupyter notebook, it's just a little, teeny book, that--
14:49 Michael Kennedy: It's like, literally a notebook, it's like the thing that was where you put your notes, before all of this computer stuff, I think.
14:54 Matt Harrison: Yeah, yeah.
14:55 Michael Kennedy: iPython, right?
14:56 Matt Harrison: Namespaces, name clash there.
14:58 Michael Kennedy: Exactly. It sounds great, though, so what's in there?
15:01 Matt Harrison: Yeah, so that's just a little book that I wanted to give to attendees of my training classes that just had, here's the basic syntax of Python, and if you forget something, you can look up decorators or generators, or the basic syntax, and have it all in a physical place if you're a physical person. So, that's my latest book, and that came out I think a month or two ago. I actually experimented and put the source up on GitHub, so, that's freely available to anyone who wants to look at it, peruse it, and, you know, if you want a physical version, you can get those on Amazon, or whatnot, but yeah, it's there, and people have offered to translate it into other languages, and whatnot, and, you know, as they've sort of started that process, but, I think they got bored, so, we'll see what happens, but. But it's fun to see what happens when you throw something out over the fence like that.
16:05 Michael Kennedy: That sounds really cool, and, so, you've basically self-published this?
16:09 Matt Harrison: Yeah, yeah. I don't want to get into, like, a big self-publishing versus publishing, but, for me, I think self-publishing sort of made sense, and so I went down that route, and with my prior books I had made a tool chain that allows me to, using restructured text, to easily publish e-books and lotech from the same source, so it's pretty easy to do that, for me, so. That's what I've done there, and I think the feedback's been pretty good on it so far. I think people have liked it, and it's sold a little bit, people liked it, and so I'm happy for that.
16:51 Michael Kennedy: That's cool, so, you say three six notebook, not Python 3 notebook?
16:56 Matt Harrison: Yeah.
16:56 Michael Kennedy: Is there gonna be like, a three seven next December or whenever that ships?
17:00 Matt Harrison: I guess there could be, if I could get patches for it. Why is it three six versus three, the new three six features came out, f-strings, I wanted to put those in there, that async and await stuff, I put that in there. I guess I could go on a little rant, I think three six, I don't know how much I should say here, three six is a good version of Python 3, let's leave it at that. I think if you're gonna use Python 3, you should use three six.
17:28 Michael Kennedy: Yeah, for sure, there's a ton of internal improvements, like speed and memory, you said join dictionaries and objects, and all sorts of stuff, so yeah. A lot of non-obvious things as well. So then you have a couple books that seem like they're a little bit like your tutorials, like a foundational one, and an intermediate one, with the things that we talked about before, right?
17:46 Matt Harrison: Yeah, the impetus for those books actually came from my tutorials, so. I had given my tutorials at PyCon, and I got accepted to give one at OSCON, The O'Reilly Open Source Conference, and I thought, well, instead of just re-writing my slides, I'll write a book, instead of re-writing my slides. Which, clearly I underestimated the amount of time and effort that goes to take, create a book, the conference was three months away, and I'm "Oh, I can whip this out," and it was probably almost a year or so, maybe nine months.
18:23 Michael Kennedy: What is that, a week of work?
18:24 Matt Harrison: Yeah, yeah, yeah.
18:25 Michael Kennedy: No problem, I've got this.
18:26 Matt Harrison: Yeah, and so there's a ton of work that goes into a book. I feel like I'm a creator, I like to create things, and this is the book that I would have wanted. And so, it was sort of inside me, and I wanted to put it out, and so, I guess that was my therapy, or something, to write a book.
18:48 Michael Kennedy: That's really great. Or your affliction.
18:51 Matt Harrison: Yeah.
18:52 Michael Kennedy: So, the other one I want to talk about is, you have a book called Learning The Pandas Library: Python Tools For Data Munging, Analysis, And Visualization. So, I know Pandas is a really great library, I've seen some of the like, data-loading, transformation, cleaning type of tricks you can do to it. And it seems really cool, but we've not really talked about Pandas very much on the show. We've mentioned it, but not really. What is it, why do you use it, maybe give everyone listening who doesn't know, like, overview of Pandas.
19:22 Matt Harrison: Sure, sure, so Pandas. What's a good way to describe Pandas? I think in my book I described Pandas as a way to create in memory database, and do database-type operations on tabular data in Python, and some people might not like that definition, but, basically if you have tabular data, and you need to filter it, or tweak it, or do operations on it, Pandas is a great tool to do that. And--
19:50 Michael Kennedy: You can even combine the different data frames, right, in sort of a join-like way?
19:55 Matt Harrison: Yeah, basically anything you can do with a database, you can do in Pandas. So there are basically two main data structures that most people worry about, one is a series, and you can think of a series as a column of data, and a data frame as a bunch of columns, which turns out to be a row. And I say columns versus rows, because typically Pandas is used more for doing analytics than more of an OLTP type database, and so most analytical databases tend to be column-er, versus row oriented. And that gives you some advantages, in that most of your columns are homogenous. So Pandas can do some fancy things there, where, rather than implementing this in pure Python, it can take advantage of things like NumPy and cython under the covers, and so you can get some pretty big speed-ups when you're doing numerical processing on these columns that's 10 or maybe another magnitude faster than you would get if it was pure Python, and you're also saving on memory space, as well, because you don't have a Python object under the covers there.
21:07 Michael Kennedy: Right, a lot of it is like, C structures, much like NumPy?
21:11 Matt Harrison: Yeah, so you can, when you load data, you can say, "I want to treat this as a float, or I want to treat this as an integer," or, you know, if you have string type data, you can say "I want to treat this as a categorical value," and so it can do some optimizations under the covers to make those things performant and memory-efficient, as well. That's a pretty brief introduction to Pandas, but, yeah, once you go from that, you can, there's a semi-famous tweet from, I think it's Big Data Borat, or some Borat avatar, where he says, "80% of Data Science is cleaning your data and the other 20% is complaining about cleaning your data." And so, something like that, I just butchered it, but the gist is that Pandas is that tool that allows Big Data Borat to do the 100% there, of taking his data and clean it and munge it and whatnot.
22:13 Michael Kennedy: Big Data Borat, that's awesome. Yeah, I suppose there's probably a bunch of good things on Twitter that I'm missing out, there. So, you go through, in your book, and you talk about these data structures, and, like you said, series in data frames, and some of that database operations, and you do some kind of analysis, right, on avalanches, you said?
22:32 Matt Harrison: Yeah, I live in Utah, and it snows in Utah, and so I like to take advantage of the snow, and so I ski, and so sometimes I do back-country skiing which involved hiking up a mountain and then skiing down, and that, invariably, when you are out in nature, and you don't have someone taking care of the avalanches for you, you have to be careful about where you ski, because a lot of times those good places to ski are also good places for avalanches to occur. And so, you know, there's websites and whatnot that track this sort of thing, and there's a Utah avalanche website, and so, the sort of capstone chapter, I guess, in my book, I go through an example analysis where I took, scraped the data off of this website, and did some analysis, and figured out, you know, how many slides there are per year, how many people typically die, sadly, in avalanches per year, and where avalanches occur, and elevations, and aspects, and that sort of thing. So, just showing an example of taking something that isn't easily accessible, there's no CSV floating around with this avalanche data, and using Python sort of end-to-end, to grab the data, do some munging on it, and I ended up doing a little infographic that the Utah avalanche center used, and basically all done in Python. So, pretty good testament to the power of Python.
22:32 Michael Kennedy: That sounds really, pretty interesting. I like the fact that it's, like, it wasn't accessible, you had to go, like, scrape it off the website, now, we're getting this, we're gonna use this, it's gonna be great. I was actually trapped by an avalanche up at Snowbird one time, I was supposed to be doing a training class in Salt Lake City, and instead was stuck up there, and if you guys find me at PyCon, we can grab a beer and talk about being stuck in avalanches. So, I definitely can see why you would study those there, so one of the things that you decided to do after writing this book was like, hey, maybe I'll make a video course, because that's also quick and easy, right? Was that a week?
22:32 Matt Harrison: Yeah, yeah, and that's another couple days, and you're good with that, so I made a video course, basically, that O'Reilly's published, so introduction to Pandas for developers, and that basically takes the contents of the book and puts them into Jupyter notebooks, and goes over all your basics, taking you from zero to hero in Pandas. And it also goes over that avalanche example as well, and if people prefer video form. So, that was another thing where I sort of said, "Hey, I'm a creator, and I'll create this," and it was a good experience for me, to get it out there. Therapeutic, I guess.
22:32 Michael Kennedy: Yeah, that's good. So I'll be sure to link all those things, if people want to check them out, especially, learn more about Pandas, which sounds really fun, I want to check out the avalanche analysis.
22:32 Matt Harrison: Cool, yeah, thanks. I'm interested in hearing about your avalanche, we'll have to catch up at PyCon, and--
22:32 Michael Kennedy: Absolutely.
22:32 Matt Harrison: That sounds like a good story.
22:32 Michael Kennedy: Yeah, it was quite the stressful day, but it turned out to be pretty fun. Hey everyone, Michael here, let me take just a moment and thank one of our sponsors who makes this show possible. This portion of Talk Python To Me is brought to you by Rollbar. One of the frustrating things about being a developer is dealing with errors. For relying on users to report errors, digging through log files trying to debug them, or a million alerts just flooding your inbox and ruining your day. With Rollbar's full-stack error monitoring, you get the context, insight, control you need to find and fix bugs, faster. Adding the Rollbar Python SDK is just as easy as pip install Rollbar. You can start tracking production errors and deployments in eight minutes or less. Rollbar works with all the major languages and frameworks, including the Python ones, like Django, Flask, Pyramid, as well as Ruby, .Net, Node, iOS, and Android. You can integrate Rollbar into your existing workflow, send error alerts to Slack or HipChat, or automatically create new Jira issues, Pivotal Tracker issues, and a lot more. They have a special offer for Talk Python To Me listeners. Visit TalkPython.fm/Rollbar, sign up and get the bootstrap plan free for 90 days. That's 100,000 errors tracked for free. But, you know, just between you and me, I hope you don't encounter that many errors. Give Rollbar a try today, just go to TalkPython.fm/Rollbar, and if you happen to be going to PyCon this year, be sure to stop by Rollbar's booth. Get a live demo, and pick up some of their swag. You know, doing all this stuff, all this, writing these books, video courses, training, this is not your standard career, right? And one of the things that we both kind of talked about when we planned out this show, was, well, let's talk a little bit about helping people, super-charge their career as a Python developer, right?
22:32 Matt Harrison: Yeah, this is something that I've experienced as a person who's been doing Python for more than, you know, since the turn of the century, and, you know, someone who is now training people to use Python. And also, I run the Utah Python user group for about five years, and so I've seen, sort of, the change in demand and the, basic, I mean--
22:32 Michael Kennedy: Yeah, you talked about PyCon, it's like 10x from what it was, you know, 10 years ago.
22:32 Matt Harrison: Yeah, anecdotally I think I searched for Node as I was looking in those Hacker News posts, and I don't think Node appeared as much as Python. So, maybe there's some solace in that.
22:32 Matt Harrison: As, you know, the leader, or the, not the leader, I guess the person around the usergroup, and someone who's, people come up to me and say, "Hey, I want to get a job, how do I get a job?" It seems that, you know, e-mailing some jobs at random company dot com and dropping your resume there is probably the worst way to get a job. I sort of speak from experience of like, there's got to be a better way to do it, and it seems likr a lot of times, people who are interested in development and whatnot are also the more introverted type, or don't want to sort of put themselves out there. And whatever that means... It's just hard for people to feel vulnerable, I guess. And so you can randomly send off--
22:32 Michael Kennedy: Yeah, go give a talk at your meet-ups, create a blog and consistently write for it, create open-source projects, speak at conferences, all of these things, you know, carry some inhibitions with them, right?
22:32 Matt Harrison: Yeah, and it can be hard, right? The internet can be a ruthless place, where, you know, if you're out there, you're gonna get trolled, or whatnot, and so that can be pretty daunting for a lot of people. My advice to people has consistently been, though, the best way to get a job is to network. And you can, you know, try and not do that, but your job search is gonna be less effective than it could be otherwise. If you're not out there, networking. And networking--
22:32 Michael Kennedy: Well, I want to hear what you mean by networking, but I'm gonna add that, I feel like the experience with the companies that I've worked for, when we go to hire somebody, has largely been, let's try to find somebody, and if we have to, we'll post a public job listing, and people can submit their resumes. But that's, like, a last resort.
22:32 Matt Harrison: Yeah.
22:32 Michael Kennedy: And so, there's like, these sort of dark matter jobs, which make up the majority of like, getting, moving around and getting going in programming jobs, where it's like, "I know Sarah, she's an awesome programmer, like, she could really do this, let's just talk to her." Like, oh, great, we don't have to interview anybody, Sarah's in, right, like that sort of thing happens a lot. And so, you've gotta get out there and be present with these people, right? So what do you mean by "networking" though?
22:32 Matt Harrison: Yeah, I mean, I agree with you 100% in that, a lot of these, finding a job, or hiring people is expensive for a company, as well. And unless you're the Google type, who are going to have some process where they churn, and they're okay with rejecting good people, because they just don't want to hire bad people, not every, you know, most companies aren't that way. And so--
22:32 Michael Kennedy: They just don't have the scale, right? To go through, we can't hire 100 new people and keep 50 of them, like, that just doesn't work.
22:32 Matt Harrison: Yeah, and a lot of companies, like you said, have positions and don't want, they'd rather just go through people they know, and hire it that way, because it's a lot cheaper and a lot easier, and they know what they're getting. And so, I think networking there, you know, you can call it various things, but it doesn't have to be necessarily work-related. I guess, there's meetups and whatnot, and it's interesting, you go to a meetup and, like, the Utah meetup, every time you start off with, "Okay, who's hiring?" And they'll be, you know, a handful of people stand up and say, "This is what we're hiring for." And you can go up and talk to them, and sort of figure out what they're doing, and also, they say, "Who needs a job?" And there are a handful of people who stand up and say, "This is what I'm looking for," and there's connections that are made there, which is a lot better than randomly sending an e-mail, but I would sort of even go further, like, networking doesn't even have to be like this "Okay, I need to go talk about code." When I lived in the Bay Area, I played ultimate frisbee a lot. And so, you know, I played a game down in Palo Alto with, there are VCs playing in that game, and I played a game that was a block away from the Apple campus, and I played in a league down there, and you think about, this was back in the early 2000s, but, like, all the big companies, the Oracles and the IBMs and Microsoft and Google, like, I knew people at all those companies, just from playing frisbee. And networking doesn't have to be drudgery, it can be something in sports, you know, here in Utah there's a bunch of geeks who go skiing, you know, back-country skiing, and we'll go skiing before work. It can be church, if you're involved in a church group or whatnot, or school, or conferences and meetups are sort of what people classically think of as networking, but it doesn't have to be limited to sort of technical pursuits, per say.
22:32 Michael Kennedy: Yeah, if you're really bold you could put on something, right, like the Data Science hiking group, or something, right?
22:32 Matt Harrison: Yeah, and maybe in Silicon Valley, the odds are that, you know, you're playing frisbee with someone in Palo Alto, it's pretty high odds that someone there, or most of the people there are going to be, like, have some tech-related job or whatnot. But even here in Utah, I'm involved in frisbee groups here, I've seen jobs, people have gotten jobs by playing frisbee. So, put yourself out there.
22:32 Michael Kennedy: Yeah, you might have a masters degree, but that thing that really did it was that ultimate frisbee game.
22:32 Matt Harrison: That could be a culture fit, for some people.
22:32 Michael Kennedy: Yeah, for sure. I feel like there's sort of two different groups. Getting into the programming space is a huge step change. Like, to go from "No, I have no experience" to, like, "I have my first job" seems really, pretty challenging and like a big step, and then it feels to me like once you're kind of in the door, people are like, "Oh, you can program? We need programmers," to some degree, right?
22:32 Matt Harrison: Yeah.
22:32 Michael Kennedy: So, what advice especially do you have for like, the people on their, trying to make that first step?
22:32 Matt Harrison: I talk to a lot of people who come from, maybe, a QA, or they're doing tech support, or something, and they want to get into programming, and I think if you want to get into programming, the thing that you need to show, is you need to show that you can program. And so, that might be taking some project and sort of implementing it from end-to-end, or that might be going to some coding boot camp and figuring out that, "Yeah, I can do all this stuff," and have something to show after it. But, you need to have something that allows you to get a foot in the door, and after that, you know, if you've got a foot in the door, and you're sort of legitimate, then you shouldn't have a problem, but getting that first little project, or, it can be a challenge for a lot of people.
22:32 Michael Kennedy: Yeah, you know, one of the things people often ask me, I got a question today from somebody, a listener, saying, "Look, I know I want to get into programming in Python, and I have some experience, but," like you said, "I'm coming from some slightly different area, what should I learn?" Right, like, should I learn web development, should I learn databases, should I learn Data Science, like, what should I learn? What would you tell that person? I'm assuming this is restricted to Python, somehow.
22:32 Matt Harrison: It's restricted to Python, what should they learn in Python?
22:32 Michael Kennedy: Yeah, yeah, like that a standard Python developer might do. Or Data Scientist, using Python might do, yeah.
22:32 Matt Harrison: I talk about that a lot in my courses, it's like, one of the big draws of Python is that it's not basically limited to development, right? I mean, you have these Data Scientists who are determining what ads we click on and whatnot, and a lot of them aren't classical programmers, per say, but they're using Python, or Jupyter notebook, and Python tooling, day in and day out. And a lot of the devops type stuff as well, you know, with like, SaltStack, these people aren't programmers either, they're more devops type, and there's a lot of Python in that world, as well. I personally trained a lot of people specifically to use Python, and that's what they're using it for, so, I think, pigeon-holing Python into just for strictly programmers maybe does a disservice to that, right?
22:32 Michael Kennedy: Yeah, I agree.
22:32 Matt Harrison: It's one of the, I think, big draws of the language is that it's so flexible, and if you think of Ruby, you think of Rails, and you think of PHP, you think of the web, or you think of R, and you think of Data Science, but Python sort of has communities and groups that are sort of in all of those camps, and, you know, it's not just a breadth thing, but it's pretty deep as well. There's deep tools in Python, so, I think someone's got to figure out, you know, if they want to be a programmer, yeah, you can go down that programming route in Python, but there are other avenues for making a living using Python that don't necessarily require that your title be Software Engineer.
22:32 Michael Kennedy: Yeah, I think that's a pretty good point, I threw it out there super vague, because that's the way I always get it, right, but I feel like people have to decide, like, what general direction do you wanna go. Do you want to do web development? Okay, then I could tell you what you probably need to work on. You want to do DevOps, I could tell you what you need to work on. You wanna do Data Science, same, but if you just say "I wanna do Python," what do I do, like, it's not quite differentiated enough to really decide, right?
22:32 Matt Harrison: Yeah, I mean, I guess I would say, if you wanna do Python, then mobile apps is probably what you don't want to do, right, or 3D games is probably what you don't want to do.
22:32 Michael Kennedy: Yeah, although, you know, you say that, and I probably would have said the same thing, but they've got all the process pipeling and stuff that in Python, for even the big game shops, right? I mean, obviously you wouldn't write the game in Python.
22:32 Matt Harrison: Yeah, no, no, that's true, Python is in a great place right now, and it's, you'd be, not you, but, I mean, it's amazing all the places they're using Python.
22:32 Michael Kennedy: Yeah, for sure it is. I also feel like people don't often enough take what is their specialty, and think, "How can I take my specialty, plus Python, and make it, like, super-charged," right? Like, do you know biology? Find a way to work with biologists, where, like, they're totally missing the game of, like, having automation and computers solve their problems. Or if you're in finance, or if you're, whatever, you know, like, how do you put those together, 'cause that'll give you a huge boost, I think.
22:32 Matt Harrison: Yeah, and a lot of the, like, when you read Data Science career type things, it's like, some people are of the opinion that it's easier to take someone who has domain knowledge and sort of make them, give them Data Science skills, then the reverse of giving someone who has Data Science skills domain knowledge in some specific niche.
22:32 Michael Kennedy: Yeah, I think I agree with that, for the most part, you know. To random people, not maybe some expert programmer, right, who knows. This portion of Talk Python To Me is brought to you by Hired. Hired is the platform for top Python developer jobs. Create your profile and instantly get access to thousands of companies, who will compete to work with you. Take it from one of Hired's users, who recently got a job and said, "I had my first offer within four days, and I ended up getting eight offers in total. I've worked with recruiters in the past, but they were pretty hit or miss. I tried LinkedIn, but I found Hired to be the best. I really like knowing the salary up front, and privacy was also a huge seller for me." Well, that sounds pretty awesome, doesn't it? But wait until you hear about the signing bonus. Everyone who accepts a job from Hired gets a $300 signing bonus. And, as Talk Python listeners, it gets even sweeter. Use the link TalkPython.fm/Hired, and Hired will double the signing bonus to $600. Opportunity is knocking, visit TalkPython.fm/Hired, and answer the door. I guess the takeaway is, like really the thing that carries the weight in all of this is people who hire programmers hire them because they have proof, or they can show experience of actually doing the thing, unlike so many other jobs, right, where like, "I have a business degree! Well, I must be great at running businesses, 'cause it came from a good school," so you're hired, right? No, you have to show that I can do these things, and so, building up stuff for that proof, in advance, over time, like, not the week before you want to try this, right, but like, have a GitHub repository with as much interesting things you can do. Contribute to open-source projects. Write a blog, work on things, right, like, build this up, 'cause those are hard to sort of do all at once, and make that not seem like you just threw it together.
22:32 Matt Harrison: Yeah, you see young, I see young people, like teenagers, who have contributed to repositories, and get jobs, and so it's not like you have to spend years doing this sort of thing, but, you know, you do have to show that you can do it, right, and I think another skill that is pretty essential is that you, especially if you're starting out, is that you have the aptitude and ability to like, learn, and are sort of willing to be taught, because a lot of stuff that, even that I'm using today, this stuff didn't exist a few years ago, so it's sort of a constant churn of learning new things.
22:32 Michael Kennedy: Yeah, if you don't want to learn new things, you're going to hate this job. Speaking of jobs, let's talk about your job. You're working on a start-up based on Python. I'm always excited about businesses running on Python, so let's talk about what you guys are doing there, a little bit.
22:32 Matt Harrison: Yeah, the startup's called FarBetter, and--
22:32 Michael Kennedy: What's the URL?
22:32 Matt Harrison: FarBetter.com, F-A-R-B-E-T-T-E-R, and there's a little video there that explains the basic gist of it, but hopefully we're just finishing, dotting the Is and crossing the Ts, and get something out to our beta users here pretty soon. But, again, the idea here is that, you know, I've done a lot of traveling, and traveling is somewhat annoying, you know, if I want to go to the Bay Area, it says, "What airport are you flying out of, what airport are you flying into?" And, in the Bay Area, there are three different airports. And I don't really actually care which airport, I care, what's the most convenient for me, and so we think we've got a pretty good UE (User Experiece) where we just say, "Where do you want to go and when do you want to be there?" Don't even worry about the airport. And we'd go out and figure out what the inventory is, what the nearest airports are to you, and to where you're going, and then we sort of figure out all the different combinations, and we take advantage of AWS, and figure out, based on your preferences, what would be the best trip for you, based on, you know, if you're a Delta person, or, I guess, Delta's the good airline these days. Well, I shouldn't be brand sensitive, but. Based on your priorities, right, if--
22:32 Michael Kennedy: Yeah, it does matter which one, because a lot of times you have frequent flier miles, you might get a free upgrade on one and not the other, if you fly a lot, you care that you're getting stuck onto some, like, cheapo thing.
22:32 Matt Harrison: We're based on, you know, the idea here is that business travelers are gonna fly once or more a month, and business travelers actually are really brand-sensitive, so they want to get their trip to Hawaii at the end of the year, and I want to fly Delta, or whatever airline, every time, if I can, but, you know, if I'm gonna miss that, if I'm not gonna make that deal, because another airline, because I have a layover, maybe I'll take the direct flight, even if it's off-brand, because I'll get the million dollar deal, or whatnot, right, and so schedule could trump that. And so we've got a system written in Python, that in under a minute we'll figure out a customized itinerary based on your preferences. So, it's pretty cool, and it's kind of fun to see something come together like that, and it's gratifying to, after working on something for awhile, actually see it come out.
22:32 Michael Kennedy: Yeah, that sounds like a really cool project. And you said originally it was written in Closure, and then you guys have converted it to Python 3, right?
22:32 Matt Harrison: Originally it was written in Closure, and we implemented it, and did a microservice style of architecture there, which, I think was great, and was probably super-scalable and whatnot, but they problem was the engineers weren't scaling, and so, you know, with two engineers and having half a dozen or more microservices, it's kind of hard to keep track of everything, and having 15 plus years of Python experience and less than that of Closure experience, we decided that, let's simplify this a little bit, keep it simple, and start from scratch and take advantage of Python. And we're taking advantage of the async stuff in 3.6, and that's pretty cool, and I think our only regret is that we didn't port to Python a little bit earlier.
22:32 Michael Kennedy: Yeah, sure. Well, that sounds really interesting. You said that you had a bunch of microservices, and you've actually, like, condensed that down to a Django app plus AWS Lambda. And I'm seeing this as a trend, I think it's happening quite a bit, I mean, the idea of microservices was, we're gonna take some big, monolithic app, and break it into these little bits of functionality, like maybe here's the thing that charges the credit card, that's a service, and here's the thing that does login, and here's the thing that, you know, creates a user, or whatever, right, and these are little services that you piece together in your app. But now we have things like Lambda. Do you want to talk about the trade-offs and how that's working?
22:32 Matt Harrison: Yeah, the server-less architecture, I guess, or, I don't know, maybe I think someone called it milliservices now, instead of micro, but. Yeah, I mean, again, it comes back to the point of, like, you've always got to be learning, like this Lambda stuff, when we started this project, didn't exist. And so it wasn't really an option, but it is now, and--
22:32 Michael Kennedy: Maybe tell people what Lambda is, really quick, 'cause--
22:32 Matt Harrison: Yeah, so if you're not familiar with Lambda, it's basically a way to expose a function, and scale out a function where you can say, "I'm going to let you run 100 versions of this function at the same time," and pull back the answers, and you don't have to necessarily start up 100 VMs or whatnot, Amazon takes care of that for you, you just tell it what function you want to run and you can call it depending on what your service-level agreement is, X number of times concurrently, so--
22:32 Michael Kennedy: It makes so much sense to me, I mean, with microservices, while it's cool to break your stuff up into these small pieces, you really end up with, like, 10 little servers to babysit and manage and configure.
22:32 Matt Harrison: Yeah.
22:32 Michael Kennedy: Like, many of them are down like charge credit card, well, like, that's a function. Maybe we could just make it a function that runs like magically on AWS, right?
22:32 Matt Harrison: Yeah, and, you know, one of the nice things about Lambda is that it supports Python out of the box. And, up 'til last week, or two weeks ago, it was Python 2, but they recently now support Python 3.6, so, I think you have Python, Java, and maybe .Net, so, pretty limited choices there, but we're good with Python there. And it's pretty cool, so, you know, the architecture of this app has changed, but it's radically been simplified, but it still scales out, which is pretty cool.
22:32 Michael Kennedy: That's cool, and how much supporting infrastructure can you have on Lambda, like, I haven't really tried to use it in, you know, in anger. Right, like if I've got, say, Pandas, or I've got, you know, and I want to talk to RDS, how much foundational dependencies can you ship up there?
22:32 Matt Harrison: I think there's a limit of, I want to say like 100 megabytes of how much you can pack up into a function? Don't quote me on that, but basically, since we're developing on Mac, you've got to basically take a Docker image, and then get all of the dependencies in that Docker image, and then zip that up, and then send that tarball or zip file up to AWS. And so, there's some work in doing that, unless it's pure Python, right, if you want to take advantage of like Pandas or something, you've got to use a Linux version, and not any random, you know, random Mac or Windows version, because AWS isn't running on that.
22:32 Michael Kennedy: Yeah, I'd be surprised if they had Macs back there, somewhere. Not likely.
22:32 Matt Harrison: Yeah. Yeah, probably not going to happen.
22:32 Michael Kennedy: No, probably not. Very interesting, so this whole architecture is working out for you, though, like sort of consolidating a little bit and like all these little microservices are now Lambda functions, we're gonna push those out?
22:32 Matt Harrison: Yeah.
22:32 Michael Kennedy: So, does the rest of your app also run like EC2 or something like that?
22:32 Matt Harrison: We've got the Elastic Load Balancer in front, and then we got the Django app that's stateless, and then we've got DynamoDB on our back-end, and, so, it's been very simplified, and you've got JSON sort of talking over the place, but it does the job, and it's pretty cool.
22:32 Michael Kennedy: That's cool, what do you think about DynamoDB? That's one of the more extreme cloud hosted NoSQL databases I would say if I describe it.
22:32 Matt Harrison: Yeah, I have sort of mixed feelings about AWS, in that, like, there's a huge amount of vendor lock-in, which is good for Amazon, right, because you sort of get sucked in there, but if you have, if you can take advantage of their functionality and it works for you, you should do that, and not everything needs to be in a relational database, so I think it just sort of depends on what your architecture is.
22:32 Michael Kennedy: Sure. Yeah, I share your concerns with the lock-in on these cloud platforms as well, I mean, they're even more lock-in than OSs, in some ways, which is kind of crazy, but, yeah, it's going to be an interesting world in 10 or 20 years when there's a few of these giant things that just run everything.
22:32 Matt Harrison: Yeah, I imagine that the server-less, I imagine Google would probably come out with something if they haven't already, or, you know, there'll be competitions there, but it seems like Amazon, everyone's just sort of following Amazon and can't really compete with this giant behemoth right now, but competition is good. So hopefully there will be some competition, and that will keep everyone in check.
22:32 Michael Kennedy: I hope so, I hope so. Alright, we're getting a little bit short on time, so I guess we should probably leave it there, but that sounds fun. I guess one more question, like, what kind of Machine Learning, Data Science, AI stuff you got goin' on to make that happen there?
22:32 Matt Harrison: Basic idea is that we've spent a lot of time making a mathematical model that represents a trip, which isn't necessarily trivial, and then throwing a bunch of computing power at going through that search space, and figuring out, based on your preferences, what those best trips are. You know, over time we want to put some machine learning into that, and saying, you know, "You said that brand was really important to you, but it turned out that cost was really important to you," so, we're gonna, you know, on the back end, tweak your preferences based on what you're really doing.
22:32 Michael Kennedy: Right, you say this matters more, but you're not actually behaving that way, right?
22:32 Matt Harrison: Yeah, based on behavior, and not what you think your behavior is. But we're not there yet--
22:32 Michael Kennedy: No, it sounds really cool, yeah. I don't want you to spill the secret sauce, but it's cool to hear what you're doing.
22:32 Matt Harrison: Yeah.
22:32 Michael Kennedy: Alright, Matt, so, final two questions.
22:32 Matt Harrison: Okay.
22:32 Michael Kennedy: If you're gonna write some Python code, what editor do you open up?
22:32 Matt Harrison: I use Emacs, and I'm currently using the spacemacs variant of that, so, I mean, I've used that since late '90s, and I guess you can pry it from my cold, dead fingers, or whatever. I duck as people throw their vim-flavored tomatoes at me.
22:32 Michael Kennedy: Yeah, exactly. Well, it's just gonna hit their screens, it won't really hurt you.
22:32 Matt Harrison: Yeah, but when I'm teaching, I typically use Idle. So, you can cringe at that as well.
22:32 Michael Kennedy: Okay, sure. Alright, awesome, and then, sort of notable PyPI package, you have over 100,000 to pick from these days, it's pretty incredible.
22:32 Matt Harrison: I guess we'll bring it back to the start, one that we've liked at work is a package called Zeep, which is a SOAP, a modern SOAP package in Python. So, it has Python 3 async support, so you're sort of blending the old enterprise stuff with the latest and greatest of Python. So, Zeep, Z-E-E-P.
22:32 Michael Kennedy: Alright, that sounds cool. Okay, so final call of action, people can, there's a lot of stuff they can check out. They can check out your travel company, you've got your books, probably they can meet you at PyCon, right?
22:32 Matt Harrison: Yeah, I'll be at PyCon, be at the tutorials, I'm gonna be at O'Reilly's booth I think on Friday, so, if you want to meet me there, I'll be around as well. Saturday, I'll be in the young coder's camp, but, you know, come up and talk with me if you want to, otherwise, I guess, I guess you can follow me on Twitter if you want to, DunderMHarrison is my handle on Twitter, so.
22:32 Michael Kennedy: Nice, and I'll put that in the show notes as well.
22:32 Matt Harrison: Cool.
22:32 Michael Kennedy: Alright, well, Matt, thank you for being on the show. It's been great to chat with you about all these projects and see what you're up to.
22:32 Matt Harrison: Yeah, thanks, I appreciate it.
22:32 Michael Kennedy: You bet, talk to you later.
22:32 Matt Harrison: Okay, we'll see you.
22:32 Michael Kennedy: This has been another episode of Talk Python To Me. Today's guest was Matt Harrison, and this episode is sponsored by Rollbar and Hired. Rollbar takes the pain out of errors. They give you the context and insight you need to quickly locate errors that might have otherwise gone unnoticed, until your users complain to you, of course. As Talk Python To Me listeners, you can track a ridiculous number of errors for free, just go to Rollbar.com/TalkPythonToMe to get started. Hired wants to help you find your next big thing. Visit talkpython.fm/hired to get five or more offers with salary and equity presented right up front, and a special listener signing bonus of $600. Are you or your colleagues trying to learn Python? Well, be sure to visit training.talkpython.fm. We now have year-long course bundles, and a couple of new classes released just this week. Have a look around, and I'm sure you'll find a class you enjoy. 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 iTunes feed at /iTunes, Google play feed at /Play, and direct RSS feed at /RSS on TalkPython.fm. Our theme music is "Developers, Developers, Developers" by Corey Smith, who goes by Smixx. Corey just recently started selling his tracks on iTunes, so I recommend you check it out at talkpython.fm/music. You can browse his tracks he has for sale on iTunes, and listen to the full-length version of the theme song. This is your host, Michael Kennedy. Thanks so much for listening, I really appreciate it. Smixx, let's get out of here.