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 them.
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 at Talk Python.
Talk Python to Me is partially supported by our training courses.
Have you tried to learn Python but got stuck or lost focus?
We know how it feels to try and jam fact after fact, loop construct after turn hair expression
into your head.
At best, it's boring.
At worst, it can turn you off programming altogether.
That's why we built our course, Python Jumpstart by Building 10 Apps.
This course guides you through carefully planned applications.
It starts simple, but progresses to quite real apps.
Best of all, you won't be learning dry facts.
You'll be learning like the pros do, by building real applications and learning in context.
If you want to start building with Python, just visit talkpython.fm/course to get started.
Matt, welcome to Talk Python.
Oh, hi.
Thanks, Michael.
Thanks for letting me come on the show.
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?
Sounds good.
Happy May 4th.
May the 4th of the force be with you.
Yes, may the 4th be with you.
Awesome.
All right, so we're going to talk about kind of a sampling of things.
Data science, books, careers.
These are questions that we both get a lot, and we've 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
is we can definitely exchange some ideas there, maybe help some people, you know, jumpstart their
career.
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?
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.
So we were doing pair programming back in 1983.
We had a byte magazine.
And we'd 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 peek and poke and changing the background color of that.
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.
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, an 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.
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 this green blue.
It's amazing, right?
Like, people today wouldn't be amazed with this.
That's silly.
But yeah.
How do I make the dragon fly?
Yeah, exactly.
My brother and I messed around on the Commodore for a while 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 a prologue.
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.
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 seemed sort of 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 these smart PhDs.
And one of them was doing Tickle.
And I needed to do, make a, what we called a term suggester to pick out the relevant terms of the corpus.
And he wanted to do it in Tickle.
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...
Wow, that's awesome.
Yeah, yeah.
We sort of promptly forgot our Perl and Tickle and hid that we were using Python from the rest of the company, but moved forward like that.
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's implemented.
It was not looked upon.
People were sort of disappointed that we were using...
This is back in 2000.
So Python was not widely used at the company.
Everything was Java and .NET.
That was the cool, cool thing to use at that time.
Yeah, that was definitely the hotness.
And, of course, they were doing, like, soap, web service exchange, all sorts of badness.
Yeah.
Yeah, we implemented our own version of soap that we called Dove.
And, yeah, that was the glory days.
They gave you a nice, creamy hands afterwards that wouldn't dry them out or anything, huh?
Yeah, you were all enterprise-y.
Nice.
So I'm glad the XML-heavy days are behind us, especially the namespaces.
So the...
Okay.
So the search engine stuff sounds really cool.
Are you still working on that?
Are you doing something different these days?
So these days, I spend most of my time doing...
I'm working at a company called Far Better, 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.
That's really awesome.
We're definitely going to have to dig into that.
That sounds really fun.
So you're still doing plenty of Python there, I presume?
Yeah, doing Python there.
And occasionally, you know, every couple of weeks, I'll do a training as well.
So my employer is nice enough to give me a little time to actually do training as well.
So I'm still involved doing training as well.
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?
Yeah.
The days before then.
Two weeks away.
Yeah, two weeks.
Yeah.
What tutorials are you doing?
So I'm giving beginning hands-on Python and intermediate hands-on Python.
So I've been giving some version of these tutorials for probably about 10 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's some labs and go and do these labs.
And this year I've tweaked them and we're going to build a Markov chain from scratch and sort
of introduce all the basic constructs in the beginning class.
And then in the intermediate class, we're going to go over sort of the meaty parts of Python.
So talk about generators and decorators and all that fun stuff and introduce those in the
context of making a Markov chain generator.
So it should be fun.
Interesting.
Yeah, that sounds awesome.
Do you find that people, like there, 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?
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, 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 like 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 a while 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, see your 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 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.
Yeah, for sure.
And get more out of the language.
Yeah.
So it sounds like your intermediate tutorial would kind of cover that stuff.
That's cool.
And then you're also running the Young Coders Workshop.
What's that?
Yeah.
Kind of know about it, but tell everyone about it.
Yeah.
So I believe it's for 12 to 16 year olds.
You can bring your kids and or your kids can come to it.
You don't have to bring them.
And we're just going to give them a Raspberry Pi and they can get an introduction to Python
for the day.
So 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.
Yeah.
That's really cool.
And are these pretty much sold out?
Yeah.
I believe I got an email from the tutorial organizer and they said that every tutorial session was
sold out, which, yeah, it's awesome.
I mean, I think my first PyCon was 2005 and there was 300 something people there.
And now, you know, there's a 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 great timing.
Yeah.
It's no longer tucked under the corner in that broom closet on that one project.
Right.
Now it's the thing they're seeking out.
Yeah.
So that's awesome.
Yeah.
So I, I, I've tried to hit this message like beginning of this year, you know, PyCon's
going to sell out.
Everybody get your tickets.
And I've, you know, if you don't get them, you're going to be sad.
Don't wait.
And I've heard from a few people that said, I'm going to go to PyCon.
I'm getting my tickets.
I'm just thinking, oh no.
A little bit later.
Nope.
No more tickets.
Yeah.
I've had people asking me like, how is there like a back door?
Do you know someone I can, yeah, I can get tickets from?
Well, you should have got them when everyone was saying they're going to
sell out, but yeah, well it's, you know, there's an, I don't want to go too far
down this because we want to stay in the other topics, but they could choose larger places.
They could do Moscone center in San Francisco, but they're really trying to strike the balance
between not having too huge of a conference, holding it in locations like Portland or Ohio
or wherever, where it's not super expensive to come to.
And so there's this, this trade-off between sort of growing to fit the size of as many
people as want to come, but then also like maybe pricing.
people out or making it difficult.
So it's, it's tough.
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 yes, absolutely.
Absolutely.
I've organized like small training events.
This seems harder.
Yeah.
So speaking of things that are harder, writing books, you, you've been doing, you know,
I knew about your pandas book and then I started to look on Amazon and you have a lot
of books.
Yeah.
I guess it's sort of misleading how many books I have there.
I sort of have three books and then one of the books has been sold as sort of sub booklets.
And, and so, well, I guess, yeah.
So yeah, some of them aren't huge.
They're like 60 or 80 pages, right?
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.
It's like literally a notebook.
It's like the thing that was where you put your notes before all this computer stuff.
Yeah.
I Python, right?
namespaces, namespace clash there.
Exactly.
It sounds great though.
So what's in there?
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.
And 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 or 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 it's fun to see what happens when you throw something out over the fence like that.
That sounds really cool.
And so you basically self-published this?
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 using restructured text
to easily publish e-books and LaTeX 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 have liked it.
And so I'm happy for that.
That's cool.
So you say 3.6 notebook, not Python 3 notebook.
Yeah.
Is there going to be like a 3.7 next December or whenever that ships?
I guess there could be if I get patches for it.
Why is it 3.6 versus 3?
The new 3.6 features came out.
f-strings.
I wanted to put those in there.
The async and await stuff.
I put that in there.
I guess I can go on a little rant.
I think 3.6, I don't know how much I should say here.
3.6 is a good version of Python 3.
Let's leave it at that.
I think if you're going to use Python 3, you should use 3.6.
Yeah, for sure.
There's a ton of internal improvements like speed and memory usage on dictionaries and objects and all sorts of stuff.
So yeah, a lot of non-obvious things as well.
So then you have a couple of 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?
Yeah.
Those actually, 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 rewriting my slides, I'll write a book instead of rewriting my slides,
which clearly I underestimated the amount of time and effort it goes to create a book.
The conference was like three months away and I thought, oh, I can whip this out.
And it was probably almost a year or so, maybe nine months.
What is that, a week of work?
Yeah, yeah, yeah.
Oh my God, this.
And so...
Do that this evening.
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 want, that I would have wanted.
And so it was sort of inside of me and I wanted to put it out.
And so I guess that was my therapy or something to write a book.
That's really great.
Yeah.
Or your affliction.
Yeah.
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 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 the overview of Pandas.
Sure, sure.
So Pandas, what's a good way to describe Pandas?
I think in my book, I describe 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 you can even combine the different data frames, right?
In sort of a join-like way?
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.
OLTP type database.
And so most analytical databases tend to be columnar versus row oriented.
And that gives you some advantages in that most of your columns are homogenous.
And 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 another magnitude faster than you would get if it was pure Python.
And you're also saving on memory spaces as well because you don't have a Python object under the covers there.
Right.
A lot of it is like C structures, much like NumPy.
Yeah.
So you can, when you load data, you can say, I want to treat this as a float.
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, and then 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 munch it and whatnot.
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 and data frames and some of the database operations.
And you do some kind of analysis, right?
Like on avalanches, you said?
Yeah.
I live in Utah and snow is in Utah.
And so I like to take advantage of the snow.
And so I ski.
And so sometimes I do backcountry skiing, which involves hiking up a mountain and then skiing down.
And that invariably when you're 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, and 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.
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.
Like, no, this we're getting this and we're going to use this.
It's going to 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 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?
Yeah.
And that's another couple of days.
And you're good with that.
Yeah.
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, you know, 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.
Yeah, that's good.
So I'll be sure to link to all those things if people want to check them out, especially learn more about pandas, which sounds really fun.
Check out the avalanche analysis.
Cool.
Yeah.
Thanks.
Yeah.
I'm interested in hearing about your avalanche.
So we'll have to catch up at PyCon.
Absolutely.
That sounds like a good story.
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 and May has been brought to you by Rollbar.
One of the frustrating things about being a developer is dealing with errors.
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, and 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, like this is not your standard career, right?
And one of the things that we both kind of talked about when we planned out the show was,
let's talk a little bit about helping people, you know, supercharge their career as a Python developer, right?
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's 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, it's...
Yeah, you talked about PyCon.
It's like 10x from what it was, you know, 10 years ago.
Yeah.
And there's a huge demand for people who can program.
And there's a huge demand for Python right now.
I mean, I just, the other day went over, like, Hacker News has the who's hiring post every month.
And Python's right up there, number one or number two, behind JavaScript in the most desired languages.
So it's a great time to be a Python developer.
Yeah, I did a thing that covered basically the active GitHub repositories.
And Python is number two for the language of most active GitHub repositories, non-trivial ones.
JavaScript being ahead of it.
But I think JavaScript's over-counted, right?
Like, if you do Django, you're also a JavaScript developer.
If you do Flask or Pyramid, you're a JavaScript developer.
If you do Ruby on Rails, you're a JavaScript developer, right?
Like, you can't avoid JavaScript.
Yeah.
For better or for worse, JavaScript is the lingua franca of the web, right?
I mean, that's, everyone's browser speaks JavaScript.
Yeah.
And the thing that I think is interesting about that is, like, how much does that skew these statistics?
Like, JavaScript being on the top all the time, is that because it's pervasive everywhere, so you just have to have it?
Or is it really JavaScript is so much in demand as its own individual thing?
I don't know the answer to that.
Yeah.
I mean, 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.
Yeah, sure.
Server-side JavaScript versus client-side, something like that.
So you said you think that the way people pursue jobs these days is somewhat broken.
What do you mean by that?
As, you know, the leader or the, not the leader, I guess the person who ran the user group and someone whose 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, emailing some jobs at randomcompany.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 like 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.
Yeah.
And whatever that means, you know, it's just hard for people to feel vulnerable, I guess.
And so you can randomly send off.
Yeah.
Like, go give a talk at your meetups.
Write a, 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?
Yeah.
And it can be hard, right?
I mean, the internet can be a ruthless place where, you know, if you're out there, you're going to 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 going to be less effective than it could be otherwise if you're not out there networking.
Well, I want to hear what you, what you mean by networking, but I'm going to 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.
Yeah.
And so.
Yeah.
There's like, like sort of these dark matter jobs, which make up the majority of, 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 can 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 got to get out there and be present with these people, right?
So what do you mean by networking though?
Yeah.
I mean, I agree with you a hundred percent 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, aren't that way.
And so.
You just don't have the scale, right?
To go through, we can't hire a hundred new people and keep 50 of them.
Like that just doesn't work.
Yeah.
And, and a lot of companies, like you said, have positions and don't want, they'd rather just go through people they know and, and hire it that way.
Cause it's a lot cheaper and a lot easier.
And it's, 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 I, you know, there's meetups and whatnot.
And it's interesting.
You go to like a meetup and like the Utah meetup every time they start off with, okay, who's hiring?
And there'll be, you know, a handful of people who 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 there's a handful, 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 email.
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.
I, 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 their 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 is 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 like drudgery.
It can be something in sports, you know, here in Utah, there's a bunch of geeks who go
skiing, you know, backcountry skiing and will 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 se.
Yeah.
If you're really bold, you could put on something, right?
Like the data science hiking group or something, right?
Yeah.
And maybe in Silicon Valley, the odds are that, you know, you're playing Frisbee.
Someone in Palo Alto, it's pretty, pretty high odds that someone there or most of the people
there are going to be like some, have some tech related job or whatnot.
But even here in Utah, I'm involved in Frisbee groups here and there I've seen jobs.
People have gotten jobs by playing Frisbee.
So put yourself out there.
Yeah.
You might have a master's degree, but the thing that really did it was that, ultimate Frisbee
game that could be a culture fit for some people.
Yeah, for sure.
I feel like there's sort of two different groups, like getting into the programming space is a
huge step change.
Like to go from, no, I've, 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?
Yeah.
So what advice, especially do you have for like the people on there trying to make that
first step?
I talked 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 bootcamp 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.
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 I'm like you said, I'm coming from some slightly, 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?
Assuming it's restricted to Python somehow.
It's restricted to Python.
What should they learn in Python?
Yeah.
Like that a standard Python developer might do.
Yeah.
Or data scientists using Python might do.
Yeah.
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 se, but they're using Python.
That's Jupyter notebook and Python tooling and 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 pigeonholing Python into just for strictly programmers maybe does a disservice to that, right?
Yeah, I agree.
One of the big draws of the language is that it's so flexible.
And if you think of Ruby, you think of like Rails and you think of like 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 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, that 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.
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 you want to go?
Do you want to do web development?
Okay, then I can tell you what you probably need to work on.
You want to do DevOps?
I can tell you what you need to work on.
You want to do data science?
Same.
But if you just say, I want to do Python, what do I do?
Like, it's not quite differentiated enough to really decide, right?
Yeah.
I mean, I guess I would say if you want to 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.
Yeah.
Although, you know, you say that and I probably would have said the same thing.
But, I mean, they've got all the process pipelining stuff done in Python for even the big game shops, right?
I mean, obviously, you wouldn't write the game in Python.
Yeah.
No, no, that's true.
Python is in a great place right now.
And it's, you'd be, I'm not you, but I mean, it's amazing at all the places they're using Python.
Yeah, for sure it is.
I also feel like people don't often enough take, like, what is their specialty and think,
how can I take my specialty plus Python and make it, like, supercharged, 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.
Yeah.
Or if you're in finance or if you're whatever, you know, like, like, how do you put those together?
Because that'll give you a huge boost, I think.
Yeah.
And a lot of, 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 than the reverse of, like, giving someone who has data science skills domain knowledge in some specific niche.
Yeah.
I think I agree with that for the most part.
You know, two random people, not maybe some expert programmer, right?
Yeah.
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 and 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 because 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 because those are hard to sort of do all at once and make that not seem like you just threw it together.
Yeah.
You see young, I say 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, you know, even that I'm using today, this stuff didn't exist a few years ago.
So it's sort of constant churn of learning new things.
Yeah.
If you don't want to learn new things, you're going to hate this job.
Yeah.
Speaking of jobs, let's talk about your job.
You're working on a startup based on Python and I'm always excited about businesses running on Python.
So let's talk about what you guys are doing there a little bit.
Yeah.
Startups called Far Better.
And what's the URL?
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 putting the dots in the I's and crossing the T's 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 where you're what airport you're 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 where we just say, where do you want to go and when you need to be there?
Don't even worry about the airport.
And we 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 is the good airline these days.
Well, I shouldn't be brand sensitive.
But, you know, based on your priorities, right?
But it does.
Yeah, it does matter which one, because a lot of times you have frequent flyer miles.
You might get a free upgrade on one and not the other.
If you fly a lot, you care that you're not stuck onto like some cheapo thing.
We're based on, you know, the idea here is that business travelers are going to 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 going to miss that, if I'm not going to 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 will 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 a while, actually see it come out.
Yeah, that sounds like a really cool project.
And you said originally it was written in Clojure and then you guys have converted it to Python 3, right?
Originally it was written in Clojure 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 the 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 Clojure 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've taken 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.
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.
Yeah.
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 going to 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.
And these are like little services that you piece together in your app.
But now we have things like Lambda.
Yeah.
You want to talk about the trade-offs and how that's working?
Yeah.
The serverless architecture, I guess.
Or I don't know.
Maybe I think someone called it milli-services 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 it...
Maybe tell people what Lambda is really quick.
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 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.
Yeah.
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?
Yeah.
And, you know, one of the nice things about Lambda is that it supports Python out of the
box.
And up till 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 .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.
That's cool.
And how much like 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 like say pandas or I've got, you know, SQLAlchemy and I want to talk to
RDS or, you know, like how much like foundational dependencies can you ship up there?
I think there's a limit of, I want to say like a hundred 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, up to AWS.
And so there's some work in, in doing that, unless it's pure Python, right?
If you, 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, Mac or Windows version because AWS isn't running on
that.
Yeah.
I'd be surprised if they had Macs back there somewhere.
Not likely.
Yeah.
Probably not going to happen.
No, probably not.
Very interesting.
So this whole architecture is working out for you though.
like sort of consolidating a little bit and just going in like all these little microservices,
these are now Lambda functions.
We're going to push those out.
Yeah.
Does the rest of your app also run in like an EC2 or something like that?
Mm-hmm.
We've got the elastic load balancer in front and then we've got the Django app that's stateless
and then we've got DynamoDB on our backend.
And so it's been very simplified and you've got JSON sort of talking over the place and, but
it does the job and it's pretty cool.
That's cool.
What do you think of DynamoDB?
And that's one of the more extreme cloud hosted NoSQL databases I would say if I describe it.
Yeah.
I have sort of mixed feelings about AWS and that like there's a huge amount of vendor lock-in,
which is good for Amazon, right?
because you get sort of gets sucked in there.
But, you know, 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 the relational database.
So I think it just sort of depends on what your architecture is.
Sure.
Yeah.
I share your concerns with the lock-in and 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.
Yeah.
I imagine that like this serverless, I imagine Google would probably come out with something
if they haven't already or, you know, there'll be competition 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's good.
So hopefully, hopefully there'll be some competition and that will keep everyone in check.
I hope so.
All right.
Well, 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 going on to make that happen there?
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 the cost was really
important to you.
So we're going to, you know, on the back end, tweak your preferences based on what you're
really doing.
Right.
You say this matters more, but you're not actually behaving that way, right?
Yeah.
Based on behavior and not what you think your behavior is.
But we're not there yet.
No, it sounds really cool.
Yeah.
I don't want to don't want you to spill the secret sauce, but it's cool to hear what you're
doing.
Yeah.
All right, Matt.
So final two questions.
Okay.
If you're going to write some Python code, what editor do you open up?
I use Emacs and I'm currently using the Space Max variant of that.
So, I mean, I've used that since late nineties 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.
Yes, exactly.
Well, it's just going to hit their screens.
It won't really hurt you.
Yeah.
But when I'm teaching, I typically use idle.
So you can cringe at that as well.
Okay.
Sure.
All right.
Awesome.
And then sort of notable PyPI package.
You have over a hundred thousand to pick from these days.
That's pretty incredible.
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 modern soap package in Python.
So it has Python 3 async support.
And so you're sort of blending the old enterprise stuff with the latest and greatest of Python.
So Zeep.
Z-E-E-P.
All right.
It sounds cool.
Okay.
So final call to action.
People, there's a lot of stuff they can check out.
They can check out your travel company.
You've got your books.
You've got your, probably they can meet you at PyCon, right?
Yeah.
I'll be at PyCon.
Be at the tutorials.
I'm going to 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 Coders camp.
But come up and talk with me if you want to.
Otherwise, I guess you can follow me on Twitter if you want to.
Dunder M. Harrison is my handle on Twitter.
Nice.
And I'll put that in the show notes as well.
Cool.
All right.
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.
Yeah.
Thanks.
I appreciate it.
Bet.
Talk to you later.
Okay.
We'll see you.
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 slash Talk Python to Me 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.
I'm sure you'll find a class you'll 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 the 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 Smix.
Corey just recently started selling his tracks on iTunes, so I recommend you check it out at
Talk Python.fm slash 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.
Smix, let's get out of here.
Stay tuned.