WEBVTT

00:00:00.001 --> 00:00:03.400
One of the hallmarks of successful developers is continuous learning.

00:00:03.400 --> 00:00:07.840
The best developers I know don't just keep learning, it's one of the things that drives them.

00:00:07.840 --> 00:00:12.900
That's why I'm excited to bring you this episode on 10 books Python developers should read.

00:00:12.900 --> 00:00:17.240
You'll meet Timo Kola, who is an avid reader and self-learner in the Python space.

00:00:17.240 --> 00:00:21.040
He's found 10 books from his experience that have had a huge effect on him,

00:00:21.040 --> 00:00:28.120
and we'll discuss those now. This is Talk Python To Me, episode 130, recorded July 18, 2017.

00:00:28.120 --> 00:00:49.480
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.

00:00:49.480 --> 00:00:53.600
This is your host, Michael Kennedy. Follow me on Twitter, where I'm @mkennedy.

00:00:53.600 --> 00:00:57.480
Keep up with the show and listen to past episodes at talkpython.fm,

00:00:57.480 --> 00:01:00.040
and follow the show on Twitter via at Talk Python.

00:01:00.040 --> 00:01:04.420
Talk Python To Me is partially supported by our training courses.

00:01:04.420 --> 00:01:07.940
Have you tried to learn Python but got stuck or lost focus?

00:01:07.940 --> 00:01:15.200
We know how it feels to try and jam fact after fact, loop construct after turn hair expression, into your head.

00:01:15.200 --> 00:01:19.320
At best, it's boring. At worst, it can turn you off programming altogether.

00:01:19.800 --> 00:01:23.340
That's why we built our course, Python Jumpstart by Building 10 Apps.

00:01:23.340 --> 00:01:26.580
This course guides you through carefully planned applications.

00:01:26.580 --> 00:01:30.100
It starts simple, but progresses to quite real apps.

00:01:30.100 --> 00:01:33.020
Best of all, you won't be learning dry facts.

00:01:33.020 --> 00:01:37.600
You'll be learning like the pros do, by building real applications and learning in context.

00:01:37.600 --> 00:01:43.480
If you want to start building with Python, just visit talkpython.fm/course to get started.

00:01:43.480 --> 00:01:46.100
Timo, welcome to Talk Python.

00:01:46.100 --> 00:01:46.780
Thank you.

00:01:47.060 --> 00:01:48.060
It's great to have you here.

00:01:48.060 --> 00:01:50.480
I'm really looking forward to talking about these books.

00:01:50.480 --> 00:01:56.140
You and I are both avid readers, and I think one of the best things you can do for your career,

00:01:56.140 --> 00:01:59.540
or just even as a person, is to keep reading.

00:01:59.540 --> 00:02:06.880
And so maybe we can use this episode to inspire a bunch of people to do some technical and some not-so-technical reading.

00:02:06.880 --> 00:02:08.320
Sure. Sounds great.

00:02:08.320 --> 00:02:09.000
Yeah, sounds fun.

00:02:09.000 --> 00:02:11.560
But before we get to that, let's start with your story.

00:02:11.560 --> 00:02:12.860
How did you get into programming in Python?

00:02:12.860 --> 00:02:15.820
I started with Python in 2005.

00:02:15.820 --> 00:02:20.120
I started programming professionally in like 97.

00:02:20.120 --> 00:02:29.920
I was a philosophy major, and I was thinking whether I should be starting an academic career or get a real job.

00:02:30.000 --> 00:02:32.080
Then I ended up getting a real job.

00:02:32.080 --> 00:02:44.680
Then I did something like CE and Perl and all sorts of stuff and slowly wandered into sort of a middle management in big companies.

00:02:44.680 --> 00:02:51.020
And 2005, I figured out that I don't want to do that.

00:02:51.020 --> 00:02:55.580
I want to be a programmer and kind of relearned programming back then.

00:02:55.580 --> 00:03:03.260
I had done something like, I always did something like Perl programming, very small throwaway scripts.

00:03:03.580 --> 00:03:12.200
And then I was given a task of writing an Excel for time reporting in a team.

00:03:12.200 --> 00:03:13.300
It was quite funny.

00:03:13.300 --> 00:03:18.940
It was a really big company, but they handled time bookkeeping with an Excel sheet.

00:03:18.940 --> 00:03:19.780
That's really funny.

00:03:19.780 --> 00:03:26.100
Isn't it weird how like some of these huge companies, like they'll waste crazy amounts of money on certain things.

00:03:26.100 --> 00:03:28.200
And then others like, no, we can't do anything.

00:03:28.200 --> 00:03:29.380
There's no system we're going to buy.

00:03:29.380 --> 00:03:30.640
We're not going to build one or anything.

00:03:30.640 --> 00:03:32.060
We're just going to like, here, use Excel.

00:03:32.060 --> 00:03:32.560
Yeah.

00:03:32.560 --> 00:03:38.560
It was like, here's a network drive and everyone writes down their own Excel sheet.

00:03:38.560 --> 00:03:41.660
And we need a summary report for the management.

00:03:41.660 --> 00:03:45.140
And it was like a 60,000 people company.

00:03:45.140 --> 00:03:49.280
And they didn't have like a centralized process for that.

00:03:49.280 --> 00:03:53.340
And then I ended up writing first that reporting system in Perl.

00:03:54.060 --> 00:03:56.780
Then I thought, well, my friend was using Python.

00:03:56.780 --> 00:03:58.680
And I thought, well, this looks neat.

00:03:58.680 --> 00:04:01.300
Although I hated, of course, the white space first.

00:04:01.300 --> 00:04:04.000
I got used to that in two weeks.

00:04:04.000 --> 00:04:06.440
Figured out that, hey, this is actually a feature.

00:04:06.440 --> 00:04:08.540
Reading is more important than writing.

00:04:08.540 --> 00:04:11.780
And then, well, I wrote that.

00:04:11.780 --> 00:04:17.400
And a couple of years later, my friend said, well, it's still reporting full hours for you.

00:04:17.400 --> 00:04:19.780
The system that you did back then.

00:04:19.780 --> 00:04:22.440
And that's how I got into Python.

00:04:22.680 --> 00:04:25.760
And I've done, after that, I've done web stuff.

00:04:25.760 --> 00:04:33.020
And previous project before this company that I'm now working in, I was two years doing Android programming.

00:04:33.020 --> 00:04:37.700
And all the time I've been doing something a little with Python.

00:04:37.700 --> 00:04:41.180
I've done quite a few of Twitter bots.

00:04:41.180 --> 00:04:46.040
That's a kind of a fun way to keep up your Python programming skill.

00:04:46.040 --> 00:04:46.620
Oh, cool.

00:04:46.620 --> 00:04:46.860
Yeah.

00:04:46.860 --> 00:04:48.460
So tell me about some of your Twitter bots.

00:04:48.460 --> 00:04:50.740
The most interesting ones are in Finnish.

00:04:50.740 --> 00:04:54.200
But I have two James Joyce readers.

00:04:54.200 --> 00:05:01.520
Ulysses Reader that reads Ulysses perpetually by James Joyce.

00:05:01.520 --> 00:05:03.100
And also Finnegan's Wake.

00:05:03.100 --> 00:05:09.460
These two kind of really hard books split to 140 characters at a time.

00:05:09.860 --> 00:05:12.040
And sometimes it's quite funny.

00:05:12.040 --> 00:05:15.360
And most of the time it's quite boring to follow them.

00:05:15.360 --> 00:05:15.900
Yeah.

00:05:15.900 --> 00:05:19.960
I'll put the two Twitter accounts in the show notes so people can follow them if they want.

00:05:19.960 --> 00:05:20.220
Yeah.

00:05:20.220 --> 00:05:22.060
Nice.

00:05:22.060 --> 00:05:26.240
And you said you also do some chatbots, like some AWS Lambda chatbots or something like that?

00:05:26.240 --> 00:05:26.680
Yeah.

00:05:26.720 --> 00:05:28.760
That's what I do at the work right now.

00:05:28.760 --> 00:05:32.840
We define it something like a conversational commerce.

00:05:32.840 --> 00:05:40.100
We take, let's say, a product catalog, any kind of a structural data associated with that.

00:05:40.100 --> 00:05:51.700
Add some like handmade rules and try to make it as automated as possible and generate a chatbot that you can talk to a product catalog with.

00:05:51.700 --> 00:05:52.880
Oh, that's really cool.

00:05:53.100 --> 00:05:58.620
So are you using like Alexa skills or like how are you understanding the words there?

00:05:58.620 --> 00:06:06.680
Well, we are both experimenting with like wit.ai, which I think is the state of the art at the moment.

00:06:06.680 --> 00:06:17.660
And then we need to have our own bits that understand Finnish or take the Finnish sentences and then take out the stuff that Finnish language adds there.

00:06:17.820 --> 00:06:24.860
Finnish language is quite different from many of the other European languages like English and Germany or even Swedish.

00:06:24.860 --> 00:06:25.780
Yeah, sure.

00:06:25.780 --> 00:06:27.280
Nice.

00:06:27.280 --> 00:06:29.240
So are you enjoying working on chatbots?

00:06:29.240 --> 00:06:29.740
Yeah.

00:06:29.740 --> 00:06:33.520
It's also, well, it's kind of interesting to see.

00:06:33.520 --> 00:06:42.120
We are quite aggressive in user testing and how to see what's like the expected level of intelligence that people want from them.

00:06:42.120 --> 00:06:43.920
And the bar is quite high.

00:06:44.720 --> 00:06:44.960
Yeah.

00:06:44.960 --> 00:06:54.880
I've heard people describe both the like the voice assistants and the chatbot text equivalents and having this problem of the uncanny valley.

00:06:54.880 --> 00:06:55.880
Yeah.

00:06:55.880 --> 00:07:00.400
And I think this problem originally it was stated in terms of like animated movies.

00:07:00.400 --> 00:07:06.780
So think Shrek or something like that, where if it clearly, the characters clearly look animated, people are fine.

00:07:06.780 --> 00:07:11.100
If they look perfectly real or are real, people are fine.

00:07:11.100 --> 00:07:15.880
But if they're really, really close to real, but not quite, it kind of creeps people out.

00:07:15.880 --> 00:07:22.300
And things are getting good enough that we're getting a little bit into this uncanny valley where it works, it works, it works.

00:07:22.300 --> 00:07:22.820
Wait a minute.

00:07:22.820 --> 00:07:23.840
You don't understand that?

00:07:23.840 --> 00:07:24.720
That doesn't make any sense.

00:07:24.720 --> 00:07:25.560
Why don't you understand that?

00:07:25.560 --> 00:07:25.760
Right?

00:07:25.760 --> 00:07:26.420
What do you think?

00:07:26.540 --> 00:07:27.220
Yeah, exactly.

00:07:27.220 --> 00:07:29.560
I think that's exactly what's going on there.

00:07:29.560 --> 00:07:38.060
And also, it's kind of a, even if the system is quite smart, it makes different mistakes than human would do.

00:07:38.820 --> 00:07:42.620
What we found out in our user studies is like that.

00:07:42.620 --> 00:07:48.860
You really need to concentrate on a task, satisfy the user's need on a single task.

00:07:48.860 --> 00:07:54.180
That's how you get the, and then concentrate on one specific domain.

00:07:54.180 --> 00:07:57.740
That's how you get the most satisfactory results.

00:07:57.740 --> 00:08:04.200
When you open it up, people start expecting it to be able to answer everything.

00:08:04.200 --> 00:08:06.740
And that's when it goes sour.

00:08:06.960 --> 00:08:08.480
Yeah, but it's going to get better, right?

00:08:08.480 --> 00:08:11.460
I mean, it's already in the last five years gotten so good.

00:08:11.460 --> 00:08:19.600
And all of these Amazon Echoes and Siri and HomePod and all these things are really going to push these companies to make it legitimate.

00:08:19.600 --> 00:08:20.600
Google Home, for example.

00:08:20.600 --> 00:08:21.700
Yeah, exactly.

00:08:21.700 --> 00:08:27.720
I have an Echo and I, you quickly forget how magical it would have been five years ago.

00:08:27.860 --> 00:08:32.740
It's like, it can pick up your speech on another room.

00:08:32.740 --> 00:08:36.740
And usually it's quite, at least it understands what you said.

00:08:36.740 --> 00:08:40.740
It doesn't necessarily do anything smart with it, but it understands you.

00:08:40.740 --> 00:08:41.160
Yeah.

00:08:41.160 --> 00:08:43.420
What are your three favorite things that you do with your Echo?

00:08:43.420 --> 00:08:47.460
Setting up timers and alarms.

00:08:47.460 --> 00:08:49.980
Like wake me up tomorrow at 6.30?

00:08:49.980 --> 00:08:51.540
Yeah, wake me up tomorrow.

00:08:51.540 --> 00:08:58.000
And I almost exclusively do my calendar appointments through Echo because it's quite natural.

00:08:58.000 --> 00:09:03.740
And you can have your shopping bags in your hand and start that I need to do laundry tomorrow.

00:09:03.740 --> 00:09:06.200
Add that to my calendar and stuff like that.

00:09:06.200 --> 00:09:06.480
Yeah.

00:09:06.580 --> 00:09:11.020
Then one of the favorite things is to watch my kids interact with that.

00:09:11.020 --> 00:09:18.440
I think even if I'm a bit skeptical that they will be as big as, let's say, mobile apps or something like that.

00:09:18.440 --> 00:09:26.840
But when you see kids interacting with them, it's just like they really genuinely try to have a grasp on what is going on there.

00:09:26.840 --> 00:09:30.080
And they are really entertained by something like Alexa.

00:09:30.080 --> 00:09:30.980
Oh, sorry.

00:09:30.980 --> 00:09:32.760
Probably someone else.

00:09:32.760 --> 00:09:34.040
Alexa went off there.

00:09:34.040 --> 00:09:35.480
But sing a song.

00:09:35.480 --> 00:09:37.540
And sing a song.

00:09:37.540 --> 00:09:39.060
Or tell a joke.

00:09:39.060 --> 00:09:43.580
And it's kind of funny how kids interact with that.

00:09:43.580 --> 00:09:46.200
And I think it's going to lead something like that.

00:09:46.200 --> 00:09:53.560
Voice is going to be something like a touchscreen in the sense that you expect that feature to be there.

00:09:53.560 --> 00:10:05.100
If you go to a vending machine and you could do something more quickly by saying something to it or be frustrated with it and you expect it to listen to you.

00:10:05.380 --> 00:10:06.680
It's quite the way.

00:10:06.680 --> 00:10:13.980
Like after iPhone, you started touching every screen even if they didn't work that way.

00:10:13.980 --> 00:10:13.980
Yeah.

00:10:13.980 --> 00:10:14.200
That's right.

00:10:14.200 --> 00:10:18.060
After the iPad came out, there were videos of kids touching real magazines.

00:10:18.060 --> 00:10:20.680
Like little two-year-olds going, this one is broken.

00:10:20.680 --> 00:10:21.940
Yeah, exactly.

00:10:21.940 --> 00:10:23.400
Voice will probably be like that.

00:10:23.400 --> 00:10:24.580
It won't listen to me.

00:10:24.580 --> 00:10:25.480
It's a refrigerator.

00:10:25.480 --> 00:10:26.360
It doesn't talk.

00:10:26.360 --> 00:10:26.860
I'm sorry.

00:10:26.860 --> 00:10:27.820
Yeah.

00:10:28.940 --> 00:10:29.380
Nice.

00:10:29.380 --> 00:10:29.600
All right.

00:10:29.600 --> 00:10:29.740
Yeah.

00:10:29.740 --> 00:10:31.800
I think it's definitely going to be an interesting wave.

00:10:31.800 --> 00:10:33.800
And I think it must be fun to work with it.

00:10:33.800 --> 00:10:34.360
Yeah.

00:10:34.360 --> 00:10:38.740
So that's probably a good place to switch over, start talking about the books.

00:10:38.740 --> 00:10:45.720
So you've chosen 10 plus 1 books for us that you feel are pretty essential reading for Python programmers.

00:10:45.720 --> 00:10:46.360
Yeah.

00:10:46.360 --> 00:10:50.700
I don't know if these are like the definitive 10 books to read.

00:10:51.040 --> 00:10:59.840
But I tried to pick up things that are relevant for a newcomer and relevant for someone intermediate.

00:10:59.840 --> 00:11:06.220
And then there are a couple of books that are totally outside of the box of a regular Python programmer.

00:11:06.220 --> 00:11:10.860
Everyone is going to read Python programming at least at some point.

00:11:10.860 --> 00:11:18.160
And everyone probably ends up seeing like starting with the learning Python.

00:11:18.160 --> 00:11:24.480
But I hope I picked a nicer alternative to learning Python in this system.

00:11:24.480 --> 00:11:24.820
Yeah.

00:11:24.820 --> 00:11:25.120
Nice.

00:11:25.120 --> 00:11:30.900
So your first book is Automate the Boring Stuff, Python Practical Programming for Total Beginners

00:11:30.900 --> 00:11:33.300
by friend of the show, Al Swigert.

00:11:33.300 --> 00:11:34.020
Yes.

00:11:34.020 --> 00:11:35.720
I've listened to that episode.

00:11:35.720 --> 00:11:40.660
And today when I was preparing for this and I was checking through the book and I realized,

00:11:40.660 --> 00:11:44.280
hey, this is actually really relevant still to me.

00:11:44.280 --> 00:11:46.460
It's a really good introductory book.

00:11:47.080 --> 00:11:51.420
But then there are chapters like Automating Excel Workflow.

00:11:51.420 --> 00:11:58.040
Or today I discovered that there's a chapter about image manipulation that I will almost

00:11:58.040 --> 00:12:03.360
immediately take into use after this when I go back and start writing stuff.

00:12:03.360 --> 00:12:03.720
Yeah.

00:12:03.720 --> 00:12:04.560
It's really cool.

00:12:04.560 --> 00:12:06.040
It's a very gentle introduction.

00:12:06.520 --> 00:12:11.640
And one of the things I like about it is it has some applied aspects.

00:12:11.640 --> 00:12:17.540
Because a lot of times I feel like the biggest mistake people, books, presentations, whatever,

00:12:17.540 --> 00:12:21.820
make when they're trying to teach programmers is they go, here are all the facts.

00:12:21.820 --> 00:12:28.140
And assume at the end of this, you know, semester course or this book or whatever, you'll be able

00:12:28.140 --> 00:12:29.140
to do something interesting.

00:12:29.260 --> 00:12:31.280
But for now, here's how you define a variable.

00:12:31.280 --> 00:12:32.340
Here's what a string is.

00:12:32.340 --> 00:12:33.960
Here's how you define a loop.

00:12:33.960 --> 00:12:35.300
Here's how you define a function.

00:12:35.300 --> 00:12:37.180
And it's just boring, boring, boring.

00:12:37.180 --> 00:12:37.460
Right?

00:12:37.460 --> 00:12:38.160
Yeah.

00:12:38.160 --> 00:12:41.320
And so this book actually comes with a bunch of little problems you can solve.

00:12:41.320 --> 00:12:46.340
Like one is automating workflows with Excel, which I'm sure resonated well with you, given

00:12:46.340 --> 00:12:47.000
your background.

00:12:47.000 --> 00:12:47.640
Yeah.

00:12:47.640 --> 00:12:47.720
Yeah.

00:12:47.720 --> 00:12:55.060
I think that kind of solve a problem is really essential for someone trying to learn a new

00:12:55.060 --> 00:12:55.460
skill.

00:12:55.460 --> 00:12:59.080
It's especially if you are not a programmer yourself.

00:12:59.080 --> 00:13:00.140
There's this book.

00:13:00.140 --> 00:13:05.800
And I think that many of the Raspberry Pi books are extremely good examples of those.

00:13:05.800 --> 00:13:09.820
Either they are funny or either they solve your real problem.

00:13:09.820 --> 00:13:16.680
And that's a good motivation to go through all that string and list and do all the stuff

00:13:16.680 --> 00:13:18.820
that you end up doing with Python.

00:13:18.820 --> 00:13:19.140
Yeah.

00:13:19.140 --> 00:13:19.980
It's really great.

00:13:19.980 --> 00:13:26.920
So I also had Al recently on the show on episode 106 for his Invent Your Own Computer Games with

00:13:26.920 --> 00:13:27.220
Python.

00:13:27.220 --> 00:13:33.040
So depending on your experience level and what makes you tick, if you want to actually get

00:13:33.040 --> 00:13:35.520
work done, check out the Automate the Boring Stuff to learn Python.

00:13:35.520 --> 00:13:41.100
If you want to write games, like maybe you're trying to get your younger kid who's in high

00:13:41.100 --> 00:13:44.980
school or something interested in Python, maybe the Invent Your Own Computer Games would be a

00:13:44.980 --> 00:13:45.580
good one.

00:13:45.580 --> 00:13:46.200
Yeah.

00:13:46.200 --> 00:13:50.100
You also pointed out that Al has this as a video course on Udemy.

00:13:50.100 --> 00:13:53.780
And so I feel a bit of a kinship to Al here.

00:13:53.780 --> 00:13:56.220
Like he and I both are living a similar life.

00:13:56.220 --> 00:13:57.980
Like he writes the books and has the courses.

00:13:57.980 --> 00:14:00.440
I do the podcasts and have the courses.

00:14:00.440 --> 00:14:04.020
And so, yeah, if you want to take this as a video course version, that's available as

00:14:04.020 --> 00:14:04.300
well.

00:14:04.300 --> 00:14:04.920
Yeah.

00:14:04.920 --> 00:14:05.280
Yeah.

00:14:05.280 --> 00:14:05.440
Nice.

00:14:05.440 --> 00:14:05.680
Okay.

00:14:05.680 --> 00:14:08.040
And then the next one is actually a really short book, right?

00:14:08.040 --> 00:14:08.420
Yeah.

00:14:08.420 --> 00:14:12.720
This is something that I, when I was learning, was on my desk.

00:14:12.720 --> 00:14:19.880
Also often I carried with it because it's kind of a, I had trouble wrapping my head around

00:14:19.880 --> 00:14:21.580
Python lists.

00:14:21.580 --> 00:14:29.160
There was something really, really, I couldn't tell when the method was mutable and when it's

00:14:29.160 --> 00:14:30.820
going to create me a new one.

00:14:30.820 --> 00:14:35.200
And then that kind of stuff is, and it's kind of a thing that you really need to be

00:14:35.200 --> 00:14:37.540
to just put it in your long-term memory.

00:14:37.540 --> 00:14:38.280
It doesn't.

00:14:38.280 --> 00:14:38.600
Right.

00:14:38.600 --> 00:14:41.380
Like sorted of list versus list.sorted.

00:14:41.380 --> 00:14:42.140
Things like that.

00:14:42.140 --> 00:14:42.640
Yeah.

00:14:42.640 --> 00:14:43.100
Exactly.

00:14:43.100 --> 00:14:49.020
So the book you're referencing is Python Pocket Reference, Python in Your Pocket by Mark Lutz.

00:14:49.180 --> 00:14:49.460
Yeah.

00:14:49.460 --> 00:14:49.500
Yeah.

00:14:49.500 --> 00:14:53.080
Sadly, it's like two or three years old already.

00:14:53.080 --> 00:14:55.960
And I think it's Python 3.3.

00:14:55.960 --> 00:15:01.420
If, oh no, no, actually it's Python, Python 3.6 is as well as covered.

00:15:01.420 --> 00:15:01.760
So.

00:15:01.760 --> 00:15:02.720
Oh, great.

00:15:02.720 --> 00:15:02.900
Yeah.

00:15:02.900 --> 00:15:03.340
Yeah.

00:15:03.340 --> 00:15:03.660
Yeah.

00:15:03.660 --> 00:15:07.340
And most of the stuff, like long as it's Python 3 hasn't actually changed.

00:15:07.340 --> 00:15:08.020
Yeah.

00:15:08.020 --> 00:15:08.540
That much.

00:15:08.540 --> 00:15:10.600
It's more additive rather than changes too.

00:15:10.600 --> 00:15:10.900
Yeah.

00:15:10.900 --> 00:15:11.320
Yeah.

00:15:11.320 --> 00:15:18.180
And it's always with this kind of a technical books, there's some sort of risk of

00:15:18.180 --> 00:15:22.660
obsolescence if it's tied to a certain version of something.

00:15:22.660 --> 00:15:30.880
And the books that I chose here should be so that they are either up to date or then are

00:15:30.880 --> 00:15:31.340
timeless.

00:15:31.340 --> 00:15:32.280
Yeah.

00:15:32.280 --> 00:15:32.680
Yeah.

00:15:32.680 --> 00:15:32.880
Yeah.

00:15:32.880 --> 00:15:37.580
There's a few books in this list that are definitely timeless and then more timeless than others.

00:15:37.580 --> 00:15:39.900
But yeah, this is really nice.

00:15:39.900 --> 00:15:45.700
Like I, I'm pretty good at memorizing these obscure details of programming languages and whatnot.

00:15:45.700 --> 00:15:49.480
But you know, the one that I really need a pocket reference for is JavaScript.

00:15:49.480 --> 00:15:54.480
I'm always like, God, how do I iterate an array correctly in JavaScript again?

00:15:54.480 --> 00:15:58.300
And this, like, it's always, I feel like I'm always Googling for JavaScript stuff, even though

00:15:58.300 --> 00:15:59.160
I've been doing it for years.

00:15:59.160 --> 00:16:01.900
But Python, yeah, this is cool for people learning Python.

00:16:01.900 --> 00:16:02.740
Yeah, exactly.

00:16:02.740 --> 00:16:05.820
I have the JavaScript one and CSS one.

00:16:05.820 --> 00:16:12.500
And I, the only thing is that JavaScript and CSS, they are moving, moving so fast that

00:16:12.500 --> 00:16:17.780
you're probably learning something that you don't need to learn when you're trying to

00:16:17.780 --> 00:16:18.020
learn.

00:16:18.020 --> 00:16:18.620
Yeah.

00:16:18.620 --> 00:16:19.080
Yeah.

00:16:19.080 --> 00:16:23.220
So then the next one you picked, I think, is a really interesting book as well.

00:16:23.220 --> 00:16:27.680
And that's the Python Cookbook by David Beasley and Brian Jones.

00:16:27.680 --> 00:16:28.280
Yeah.

00:16:28.280 --> 00:16:35.560
It's, I had it before and I don't know where I lost my copy, but it was really essential.

00:16:35.560 --> 00:16:40.960
So I think when I started learning Python, Stack Overflow didn't exist at all.

00:16:40.960 --> 00:16:46.260
So this kind of a ready-made recipe for your program that you can just drop in.

00:16:46.260 --> 00:16:46.480
Yeah.

00:16:46.480 --> 00:16:51.780
So the idea is that it's broken into general areas like stuff to do with strings, stuff to

00:16:51.780 --> 00:16:55.600
do with data structures, numbers, iteration, files.

00:16:55.600 --> 00:17:00.100
And then for each one of these, there's maybe 15 to 20, how do I do this?

00:17:00.100 --> 00:17:02.860
How do I iterate over a fixed set of records?

00:17:02.860 --> 00:17:05.040
How do I print a file to the console?

00:17:05.040 --> 00:17:06.960
How do I communicate with serial ports?

00:17:06.960 --> 00:17:09.620
How do I print bad file names?

00:17:09.620 --> 00:17:10.820
And so on and so on, right?

00:17:10.820 --> 00:17:11.200
Yeah.

00:17:11.200 --> 00:17:13.720
And this was really essential back then.

00:17:13.720 --> 00:17:21.540
Nowadays, it would be a good reference, but often you just type something into Google

00:17:21.540 --> 00:17:23.600
and end up in Stack Overflow.

00:17:23.600 --> 00:17:24.040
Sure.

00:17:24.040 --> 00:17:26.700
So I think this is interesting coming at it from two ways.

00:17:26.700 --> 00:17:32.960
Like the way that you're talking about where you type something into Stack Overflow is, I

00:17:32.960 --> 00:17:36.200
know I want to like make a temporary file in directory.

00:17:36.200 --> 00:17:40.780
So you type maybe that into Google and it probably finds something on Stack Overflow and you're

00:17:40.780 --> 00:17:41.280
kind of good.

00:17:41.280 --> 00:17:47.660
But it could be that you're coming from a place of less experience and you want to learn

00:17:47.660 --> 00:17:49.340
how, you kind of want to get a feel for it.

00:17:49.340 --> 00:17:52.260
What can I do with the file system and files in Python?

00:17:52.780 --> 00:17:52.920
Yeah.

00:17:52.920 --> 00:17:54.540
You could go through these 15 or 20 things.

00:17:54.540 --> 00:17:59.500
You're like, whoa, actually you would be pretty capable if you could almost treat each one

00:17:59.500 --> 00:18:00.560
of these as a project.

00:18:00.560 --> 00:18:01.320
You know what I mean?

00:18:01.320 --> 00:18:06.380
Like people who are new often have a hard time finding something concrete to practice.

00:18:06.380 --> 00:18:07.180
Yeah.

00:18:07.180 --> 00:18:11.600
And it seems like there's, you know, hundreds of little practices with the solution right

00:18:11.600 --> 00:18:11.820
here.

00:18:11.820 --> 00:18:12.800
And I think that's pretty nice.

00:18:12.800 --> 00:18:13.180
Yeah.

00:18:13.220 --> 00:18:16.900
And also kind of a guaranteed quality of these.

00:18:16.900 --> 00:18:21.820
When you Google and Stack Overflow stuff, you may end up.

00:18:21.820 --> 00:18:21.820
Yeah.

00:18:21.820 --> 00:18:25.720
Well, you also waste a lot of time on Stack Overflow because they're trying to do a thing,

00:18:25.720 --> 00:18:28.500
but they're trying to do it slightly differently than you were trying to do it.

00:18:28.500 --> 00:18:29.740
So it doesn't quite fit.

00:18:29.740 --> 00:18:30.260
You know what I mean?

00:18:30.260 --> 00:18:30.720
Yeah.

00:18:31.120 --> 00:18:36.780
And especially if you're new to technology, you really can't tell good answers from bad

00:18:36.780 --> 00:18:37.240
answers.

00:18:37.240 --> 00:18:41.880
And it doesn't mean that the most upvoted one is the best one.

00:18:41.880 --> 00:18:42.060
Yeah.

00:18:42.060 --> 00:18:47.160
Sometimes you're like, if I could just uncheck that accepted answer because you know the next

00:18:47.160 --> 00:18:47.580
one's better.

00:18:47.580 --> 00:18:48.560
Yeah, exactly.

00:18:48.680 --> 00:18:54.340
It's one of those first steps of understanding technology is to start understanding which

00:18:54.340 --> 00:18:57.380
of the Stack Overflow questions are bad and which ones are good.

00:18:57.380 --> 00:18:58.640
Yeah.

00:18:58.640 --> 00:19:02.980
I think, you know, looping it back to book one, I'm pretty sure Al Swigert shows you like

00:19:02.980 --> 00:19:08.500
how to take like a traceback error and use Google to find the answer for that.

00:19:08.500 --> 00:19:09.920
How to fix it.

00:19:09.920 --> 00:19:10.260
Yeah.

00:19:10.260 --> 00:19:13.520
And that's one of those things that has really changed in 20 years.

00:19:13.520 --> 00:19:20.000
It's like you were completely screwed 20 years ago if something like that happened and it

00:19:20.000 --> 00:19:22.500
didn't show up on Altavista or something.

00:19:22.500 --> 00:19:28.920
It's like the way of working has changed and I think it's really cool and it's sometimes

00:19:28.920 --> 00:19:34.440
you lose the sight of how much we have progressed and how much easier stuff is.

00:19:34.440 --> 00:19:35.620
Yeah, it's for sure.

00:19:35.620 --> 00:19:38.860
It's not only good, but it's mostly good.

00:19:38.860 --> 00:19:40.420
It's mostly good.

00:19:40.420 --> 00:19:40.760
I agree.

00:19:40.760 --> 00:19:41.420
It's mostly good.

00:19:42.220 --> 00:19:45.340
This portion of Talk Python To Me has been brought to you by Rollbar.

00:19:45.340 --> 00:19:49.040
One of the frustrating things about being a developer is dealing with errors.

00:19:49.040 --> 00:19:49.520
Ugh.

00:19:49.520 --> 00:19:54.960
Relying on users to report errors, digging through log files, trying to debug issues, or getting

00:19:54.960 --> 00:19:58.060
millions of alerts just flooding your inbox and ruining your day.

00:19:58.060 --> 00:20:02.840
With Rollbar's full stack error monitoring, you get the context, insight, and control you

00:20:02.840 --> 00:20:04.800
need to find and fix bugs faster.

00:20:04.800 --> 00:20:08.800
Adding Rollbar to your Python app is as easy as pip install Rollbar.

00:20:09.040 --> 00:20:13.040
You can start tracking production errors and deployments in eight minutes or less.

00:20:13.040 --> 00:20:17.220
Are you considering self-hosting tools for security or compliance reasons?

00:20:17.220 --> 00:20:20.800
Then you should really check out Rollbar's compliant SaaS option.

00:20:20.800 --> 00:20:25.940
Get advanced security features and meet compliance without the hassle of self-hosting, including

00:20:25.940 --> 00:20:30.160
HIPAA, ISO 27001, Privacy Shield, and more.

00:20:30.160 --> 00:20:31.540
They'd love to give you a demo.

00:20:32.080 --> 00:20:33.240
Give Rollbar a try today.

00:20:33.240 --> 00:20:36.920
Go to talkpython.fm/Rollbar and check them out.

00:20:36.920 --> 00:20:43.660
The next one is switching us over to working with data, mostly from a data science, not

00:20:43.660 --> 00:20:49.120
database perspective, with Python for data analysis, data wrinkling with Pandas, NumPy, and

00:20:49.120 --> 00:20:51.360
IPython with Wes McKinley.

00:20:51.360 --> 00:20:52.040
McKinney.

00:20:52.040 --> 00:20:52.620
Sorry, Wes.

00:20:52.700 --> 00:20:54.000
Yeah, exactly.

00:20:54.000 --> 00:20:56.740
And I thought this was something like that.

00:20:56.740 --> 00:21:02.080
It was already years old, but it seems to be that there's a new version coming in September.

00:21:02.080 --> 00:21:09.200
So IPython stuff is updated with also Jupyter stuff and all that kind of stuff.

00:21:09.700 --> 00:21:16.560
So this is very good for most of the machine learning, deep learning, and that kind of stuff

00:21:16.560 --> 00:21:21.540
is most really boring, cleaning up and finding data.

00:21:21.540 --> 00:21:23.900
And this covers that part.

00:21:23.900 --> 00:21:25.160
You need to know.

00:21:25.160 --> 00:21:25.360
Right.

00:21:25.360 --> 00:21:28.700
And that, to me, is the primary goal of Pandas, right?

00:21:28.700 --> 00:21:29.180
Yeah.

00:21:29.180 --> 00:21:35.560
Pandas is all about loading up semi-structured data, putting it into a consistent structure,

00:21:35.560 --> 00:21:41.980
maybe reorganizing it like a group by or something like that, fixing the bad data or filtering

00:21:41.980 --> 00:21:45.700
out the bad data and getting it ready to then go do a thing with, right?

00:21:45.700 --> 00:21:46.660
Yeah, exactly.

00:21:46.660 --> 00:21:54.120
And it's like filtering out noise and either filtering out the missing data or adding default

00:21:54.120 --> 00:21:55.100
values for that.

00:21:55.100 --> 00:22:01.400
And that kind of stuff that is, you really need to know is, I think if you come somewhere from

00:22:01.400 --> 00:22:09.680
like R, that's like the forte of R is cleaning up data and putting it up in a, let's say,

00:22:09.680 --> 00:22:10.620
table structure.

00:22:10.620 --> 00:22:17.720
And this is the same thing for Python and very important when getting into machine learning

00:22:17.720 --> 00:22:22.840
and all kinds of data analysis and maybe data visualization tasks.

00:22:22.840 --> 00:22:23.140
Yeah.

00:22:23.140 --> 00:22:23.400
Yeah.

00:22:23.400 --> 00:22:23.820
It's pretty cool.

00:22:23.820 --> 00:22:29.840
So it starts by introducing you to IPython and Jupyter and NumPy and Pandas.

00:22:29.840 --> 00:22:36.360
And then it really talks about like loading, cleaning, transforming, merging, reshaping data,

00:22:36.360 --> 00:22:42.640
which it's, you know, that is so, so powerful with that and even some visualization stuff.

00:22:42.640 --> 00:22:44.440
So yeah, it's pretty cool.

00:22:44.440 --> 00:22:49.640
If you got to do a lot of that kind of thing, then yeah, Pandas is a good place to look.

00:22:49.640 --> 00:22:51.060
And this book seems like a really good one.

00:22:51.060 --> 00:22:53.580
It's from Wes McKinney, who is the creator of Pandas.

00:22:53.580 --> 00:22:58.240
So that's a good, definitely a definitive source of knowledge for that library.

00:22:58.240 --> 00:22:59.040
Yeah.

00:22:59.040 --> 00:22:59.440
Nice.

00:22:59.440 --> 00:22:59.880
Yeah.

00:22:59.880 --> 00:23:00.060
Okay.

00:23:00.060 --> 00:23:00.720
Yeah.

00:23:00.720 --> 00:23:06.980
So the next one that we're going to talk about is not as new as the 2016 version of that last

00:23:06.980 --> 00:23:07.280
book.

00:23:07.280 --> 00:23:10.200
It's called Working Effectively with Legacy Code.

00:23:10.200 --> 00:23:11.780
What's the story of this one?

00:23:11.860 --> 00:23:18.060
This is kind of like a, more like a book that teaches you how to think about code.

00:23:18.060 --> 00:23:22.600
And in a realistic situation, you rarely get to start something new.

00:23:22.600 --> 00:23:29.560
Usually, if you are done consultation like me, it's like you end up somewhere that it's already

00:23:29.560 --> 00:23:33.300
late and already not delivering what should be there.

00:23:33.700 --> 00:23:37.020
And this is answering questions.

00:23:37.020 --> 00:23:38.720
What can you do about that?

00:23:38.720 --> 00:23:39.920
What can you do there?

00:23:39.920 --> 00:23:44.360
And it's like, comes with the definitions of what is legacy code?

00:23:44.360 --> 00:23:48.960
It's bluntly defines legacy code as something that doesn't have a test.

00:23:48.960 --> 00:23:58.140
And then it goes on like slowly teaching you how to move from that zero state to something

00:23:58.140 --> 00:24:04.460
that is almost enjoyable, building up, decoupling the system, building up unit tests.

00:24:04.460 --> 00:24:04.860
Yeah.

00:24:04.860 --> 00:24:10.600
I feel like this book is certainly required reading, even though it's not based on Python.

00:24:10.600 --> 00:24:13.140
I think it does some C++ and some Java.

00:24:13.140 --> 00:24:15.160
Maybe there's even a C# version.

00:24:15.160 --> 00:24:15.960
I can't recall.

00:24:15.960 --> 00:24:22.520
But this book is kind of part of a trifecta of the working with effectively legacy code,

00:24:22.520 --> 00:24:26.320
the original refactoring book by Martin Fowler.

00:24:26.320 --> 00:24:26.740
Yeah.

00:24:26.740 --> 00:24:27.860
That's an excellent book.

00:24:27.860 --> 00:24:28.180
Yes.

00:24:28.180 --> 00:24:28.700
Yeah.

00:24:28.700 --> 00:24:28.960
Yeah.

00:24:28.960 --> 00:24:33.080
And then the agile principles, patterns, and practices by Robert C. Martin.

00:24:33.080 --> 00:24:38.360
Like those three kind of come together to attack like the same problem from multiple directions.

00:24:38.360 --> 00:24:43.620
And the concept that I still remember, so I'm looking here at my Amazon page for this book,

00:24:43.620 --> 00:24:46.580
and it says, you purchased this item on June 10th, 2005.

00:24:46.580 --> 00:24:52.860
So it's not a new book, but it's a, it's really, like you said, does teach you to think in interesting

00:24:52.860 --> 00:24:59.500
ways about systems, especially systems, which they called brownfield systems, not greenfield,

00:24:59.500 --> 00:25:02.480
where it's like, you know, here's half a million lines of code.

00:25:02.480 --> 00:25:04.160
It's been working for 15 years.

00:25:04.400 --> 00:25:05.720
It's mission critical.

00:25:05.720 --> 00:25:10.460
Please, you do not break it, but you have to now take it over and add features to it.

00:25:10.460 --> 00:25:11.520
Like, what do you do?

00:25:11.520 --> 00:25:12.480
Yeah.

00:25:12.580 --> 00:25:16.620
So there's all these interesting ways of like, how do you get it under test?

00:25:16.620 --> 00:25:21.240
How do you create what, the biggest thing that comes from this one in my mind is this

00:25:21.240 --> 00:25:22.220
concept of seams.

00:25:22.220 --> 00:25:28.440
How do you create these seams where this huge monolithic brittle thing becomes flexible in

00:25:28.440 --> 00:25:31.080
the certain ways that you need to extend it?

00:25:31.080 --> 00:25:36.460
And how do you carve off these little subsystems that change frequently that are very maintainable

00:25:36.460 --> 00:25:38.120
without breaking the thing?

00:25:38.200 --> 00:25:40.520
I think that's just really very interesting.

00:25:40.520 --> 00:25:40.920
Yeah.

00:25:40.920 --> 00:25:43.480
I really like the notion of seam.

00:25:43.480 --> 00:25:47.320
It's like, oh, this, it has a name.

00:25:47.320 --> 00:25:52.660
I've been doing this 10 years, but I didn't know this, this technique had a name.

00:25:52.660 --> 00:25:53.120
It's cool.

00:25:53.120 --> 00:25:53.280
Yeah.

00:25:53.280 --> 00:25:58.340
Here's this thing that is inflexible, but in this one little axis, it is flexible and that's

00:25:58.340 --> 00:25:58.800
what I needed.

00:25:58.800 --> 00:25:59.540
So it's good.

00:25:59.540 --> 00:25:59.800
Right.

00:25:59.800 --> 00:26:01.160
Yeah.

00:26:01.160 --> 00:26:01.380
Yeah.

00:26:01.380 --> 00:26:05.400
So definitely recommend, I actually recommend all three of those books, but working effectively

00:26:05.400 --> 00:26:06.320
with legacy code.

00:26:06.320 --> 00:26:11.340
Well, it's definitely something that will change the way that you think about programming

00:26:11.340 --> 00:26:13.700
and especially large old systems.

00:26:13.700 --> 00:26:14.100
Yeah.

00:26:14.100 --> 00:26:14.480
Yeah.

00:26:14.480 --> 00:26:19.380
And that's where we all end up at some point doing old big systems.

00:26:19.380 --> 00:26:20.840
Yeah, that's right.

00:26:20.840 --> 00:26:22.220
We all, we all end up there somehow.

00:26:22.220 --> 00:26:23.060
All right.

00:26:23.060 --> 00:26:29.980
The next one is a perfect carry on from this concept of testing, but zooming forward in Python

00:26:29.980 --> 00:26:36.140
to something that's just now being released by my friend and Python Bytes co-host, Brian

00:26:36.140 --> 00:26:36.400
Hawken.

00:26:36.400 --> 00:26:36.760
Yeah.

00:26:36.760 --> 00:26:38.200
Python testing with pytest.

00:26:38.200 --> 00:26:38.540
Yeah.

00:26:38.540 --> 00:26:42.560
It's, I bought it and I started reading it.

00:26:42.560 --> 00:26:48.400
It is one of those books that after each chapter, you need to go and change something in your code.

00:26:48.400 --> 00:26:49.660
I've used pytest before.

00:26:49.660 --> 00:26:51.140
Like I've been doing it wrong for years.

00:26:51.140 --> 00:26:51.760
Oh my gosh.

00:26:51.760 --> 00:26:53.760
I got to put this down and go fix it right now.

00:26:53.760 --> 00:26:54.140
Yeah.

00:26:54.140 --> 00:26:59.580
I like the pytest philosophy compared to like a unit test and knows it's more PyTonic.

00:27:00.360 --> 00:27:06.400
And reading this book, I realized, oh, I've used like 10% of the possibilities there.

00:27:06.400 --> 00:27:08.160
It's like, and it's quick read.

00:27:08.160 --> 00:27:11.440
You probably will read it through in one evening or two.

00:27:11.440 --> 00:27:19.180
And it's, if you are not like a super familiar with pytest, it will probably make you change

00:27:19.180 --> 00:27:23.660
your project structure and make it more pytestable.

00:27:23.660 --> 00:27:24.200
Yeah.

00:27:24.200 --> 00:27:24.700
That's awesome.

00:27:24.700 --> 00:27:25.040
Yeah.

00:27:25.040 --> 00:27:26.400
Brian did a really good job with this.

00:27:26.640 --> 00:27:31.400
And so he talks about writing test functions, using the search stuff, all the standard things,

00:27:31.400 --> 00:27:38.940
you know, fixtures, but also things like the tempter fixture, the monkey patching stuff,

00:27:38.940 --> 00:27:46.000
the doc test namespaces and plugins, like finding and using the pytest plugins, even how to create

00:27:46.000 --> 00:27:46.440
your own.

00:27:46.440 --> 00:27:48.000
So yeah, very, very cool stuff.

00:27:48.000 --> 00:27:48.740
Yeah, exactly.

00:27:48.740 --> 00:27:49.400
All right.

00:27:49.400 --> 00:27:54.080
The next one we have is sort of the other side of the Panda story.

00:27:54.080 --> 00:27:56.280
Once you have the data, how do you get going?

00:27:56.480 --> 00:28:04.240
I would say this is one of the hottest developer software areas around just with machine learning.

00:28:04.240 --> 00:28:07.800
So the book is hands-on machine learning with scikit-learn and TensorFlow.

00:28:07.800 --> 00:28:08.560
Yeah.

00:28:08.560 --> 00:28:12.220
I had like half a dozen of these books.

00:28:12.220 --> 00:28:19.060
And I think this one was like the best companion to all those online courses that everyone probably

00:28:19.060 --> 00:28:23.260
go through, either the Coursera one or the Udacity one.

00:28:23.260 --> 00:28:27.640
Or one of my favorites is course.fast.ai.

00:28:27.640 --> 00:28:34.720
It's like you go through the course and then you have a like a vague understanding of the

00:28:34.720 --> 00:28:35.200
concepts.

00:28:35.200 --> 00:28:37.560
And then you need to read the book.

00:28:37.820 --> 00:28:45.640
There's like the definitive books like the deep learning by Ian Goodfellow or the elements of

00:28:45.640 --> 00:28:46.880
statistical learning.

00:28:46.880 --> 00:28:51.260
But they probably are too heavy to start with.

00:28:51.260 --> 00:28:56.840
This is kind of goes through like many of the algorithms quickly.

00:28:56.840 --> 00:29:10.700
It has like a practice questions and is all around good reference to accompany you with learning through trial and error and through perhaps some online course.

00:29:11.100 --> 00:29:18.200
And well, this is probably one of those books that wouldn't appear on this list maybe in a year or two.

00:29:18.200 --> 00:29:21.280
There probably are going to be many, many other books.

00:29:21.280 --> 00:29:26.180
But this one was like the books that have come out this year.

00:29:26.180 --> 00:29:29.200
I think this one was my favorite on this topic.

00:29:29.480 --> 00:29:29.960
It's really cool.

00:29:29.960 --> 00:29:33.120
So it has like the fundamentals of machine learning for the first part.

00:29:33.120 --> 00:29:42.660
And it just goes into like what is an end to end machine learning project look like, classification, models, or vector machines, decision trees, all that kind of stuff.

00:29:42.720 --> 00:29:52.460
And then it gets into actual neural networks and deep learning things with TensorFlow and training deep neural networks and stuff like that, which is really cool stuff.

00:29:52.460 --> 00:30:00.700
Even how to just like do distributed computation of TensorFlow across multiple machines and GPUs and all kinds of good stuff.

00:30:00.700 --> 00:30:01.800
It sounds really, really fun.

00:30:01.800 --> 00:30:02.800
All right.

00:30:02.800 --> 00:30:05.680
Do you get to do any of this kind of stuff with your chatbots?

00:30:05.680 --> 00:30:09.060
I've mostly done stuff with Finnish language.

00:30:09.060 --> 00:30:13.580
Like I have this huge data set of Finnish cursing.

00:30:13.580 --> 00:30:25.560
And I've been going through that with like Word2Weck and other kinds of machine learning and clustering algorithms to see what kind of patterns I can find.

00:30:25.560 --> 00:30:37.460
And it's kind of a funny way to look at data that makes you lose your belief in other human beings.

00:30:37.460 --> 00:30:44.960
But also it really, really gets you nice patterns around what kind of things make people curse.

00:30:44.960 --> 00:30:47.700
What are people really passionate about?

00:30:47.700 --> 00:30:54.120
Well, it's this kind of stuff that, well, probably would get moderated in a forum.

00:30:54.520 --> 00:30:58.180
It's like any type of day-to-day politics.

00:30:58.180 --> 00:31:04.560
But then there's sports and human relationships and stuff like that.

00:31:04.560 --> 00:31:07.860
Well, you could probably, well, this is Finnish.

00:31:07.860 --> 00:31:15.920
So you could probably follow Finnish sports team, how they are doing through how people are cursing.

00:31:15.920 --> 00:31:22.220
They are either cursing because we are losing or cursing that, well, we won this time.

00:31:22.220 --> 00:31:22.940
Yeah.

00:31:23.940 --> 00:31:29.020
Or how are they expressing their extreme emotion in a positive or negative way?

00:31:29.020 --> 00:31:32.140
Well, it's mostly about the same.

00:31:32.140 --> 00:31:33.780
Yeah, it's tough.

00:31:33.780 --> 00:31:38.540
I'm sure it's actually a really tricky natural language processing problem.

00:31:38.540 --> 00:31:45.300
Yeah, it's something that I have a data set of like 100 million Finnish tweets that contain a curse word.

00:31:45.300 --> 00:31:51.000
And I'm trying to figure out a way to make that somehow public and usable to everyone.

00:31:51.000 --> 00:31:52.580
It's really interesting data.

00:31:52.580 --> 00:31:53.760
That is actually pretty cool.

00:31:53.760 --> 00:31:55.820
Nice.

00:31:55.920 --> 00:31:56.920
All right.

00:31:56.920 --> 00:31:56.920
All right.

00:31:56.920 --> 00:32:04.600
So the next one that we're going to talk about is About Face, The Essentials of Interactive Design by Alan Cooper and some co-authors.

00:32:05.560 --> 00:32:09.560
And this one had been on my list, my reading list for a very long time.

00:32:09.560 --> 00:32:10.280
I haven't read it.

00:32:10.280 --> 00:32:19.060
And it's kind of grouped in there with, you know, Stephen Krug's Don't Make Me Think, 100 Things Every Designer Needs to Know About People and the Design of Everyday Things.

00:32:19.700 --> 00:32:23.940
A couple of those are about physical things, but this is about interface design, right?

00:32:23.940 --> 00:32:25.660
Yeah, this is interface design.

00:32:25.660 --> 00:32:31.960
And it's, well, it starts with like on the conceptual level, how to design systems.

00:32:31.960 --> 00:32:37.240
That's kind of probably only good to know if you're a Python programmer.

00:32:37.240 --> 00:32:47.020
But then it goes on like stuff like that are like immediately usable or that make you think stuff like that.

00:32:47.020 --> 00:32:48.880
Don't make stupid error messages.

00:32:49.560 --> 00:32:51.860
Make the software that you're creating.

00:32:51.860 --> 00:32:55.400
Think it as like a service person.

00:32:55.400 --> 00:32:59.460
You don't want to forget things that you have promised to a user.

00:32:59.460 --> 00:33:04.860
You don't want to pester the user with unnecessary questions all the time.

00:33:04.860 --> 00:33:07.860
And you don't lose your customer stuff.

00:33:07.860 --> 00:33:10.560
If they give you something, you don't lose that.

00:33:10.560 --> 00:33:18.920
It has really, really good metaphors of how your program should be that it solves the user problem.

00:33:19.420 --> 00:33:23.360
Not only your problem as a business or as a developer.

00:33:23.360 --> 00:33:23.800
Right.

00:33:23.800 --> 00:33:29.320
And it has a, I think this might be one of the first places where the concept of personas came from.

00:33:29.320 --> 00:33:34.020
I think this is the origin of that, but I'm not 100% sure.

00:33:34.200 --> 00:33:34.380
Yeah.

00:33:34.380 --> 00:33:46.660
So the idea is to break up the users into prototypical groups and then try to think through the interacting with your software, whether it's a website, it's an app, it's whatever.

00:33:46.660 --> 00:33:48.380
Think through using it.

00:33:48.380 --> 00:33:52.300
I guess you could even do it for an API like an open source library if you want.

00:33:52.300 --> 00:33:52.540
Yeah.

00:33:52.540 --> 00:33:53.060
Yeah.

00:33:53.140 --> 00:33:57.520
Think through like working with it with that persona, the various personas and like, what are their goals?

00:33:57.520 --> 00:33:58.740
What do they want out of this?

00:33:58.740 --> 00:34:00.480
What are they bringing to the table?

00:34:00.480 --> 00:34:01.820
How are they going to work with it?

00:34:01.820 --> 00:34:02.500
And things like this.

00:34:02.500 --> 00:34:02.640
Yeah.

00:34:02.640 --> 00:34:03.500
Yeah, exactly.

00:34:03.500 --> 00:34:07.500
Thinking your software through your users point of view.

00:34:07.660 --> 00:34:07.780
Yeah.

00:34:07.780 --> 00:34:08.940
That sounds really cool.

00:34:08.940 --> 00:34:09.320
Yeah.

00:34:09.320 --> 00:34:11.380
It's something that I revisited lately.

00:34:11.380 --> 00:34:16.480
I had read it like 15 years ago when it was first or second edition.

00:34:16.480 --> 00:34:18.320
And it's really good book.

00:34:18.320 --> 00:34:26.720
It's, it has really good, like a one sentence summarizations of what makes software good and not only the user interface good.

00:34:26.720 --> 00:34:26.920
Yep.

00:34:26.920 --> 00:34:31.120
And this one is from September, 2014, the fourth edition.

00:34:31.120 --> 00:34:32.080
So very nice.

00:34:32.080 --> 00:34:32.520
Yeah.

00:34:32.520 --> 00:34:37.460
It's up to date to iOS seven level or something like that.

00:34:37.560 --> 00:34:42.220
So it's, it has pretty recent UI screenshots in there.

00:34:42.220 --> 00:34:42.560
Nice.

00:34:42.560 --> 00:34:56.260
And then the next one that you chose is more of a high level thinking about stuff, not necessarily software in particular, but even politics and society and governments and whatnot.

00:34:56.260 --> 00:34:58.960
It's thinking in systems, Primer.

00:34:58.960 --> 00:35:00.420
Primer, take your pick.

00:35:00.420 --> 00:35:00.820
Yeah.

00:35:00.820 --> 00:35:02.460
By Donald L.H.

00:35:02.460 --> 00:35:02.820
Meadows.

00:35:02.820 --> 00:35:06.540
It's, I think it's one of the lesser known books, but it's one of those.

00:35:06.960 --> 00:35:12.280
I think the classic that everyone thinks is, is the fifth discipline by Peter Senge.

00:35:12.800 --> 00:35:21.140
And it's, I think it's kind of a, you step an abstraction level or two up from your code.

00:35:21.140 --> 00:35:24.540
And this is kind of a stuff that you end up worrying about.

00:35:24.540 --> 00:35:30.540
It's like a very simple systems that have like an actors and they have interfaces.

00:35:30.540 --> 00:35:36.020
Then there are stuff in the system that make it work as an entity.

00:35:36.020 --> 00:35:41.080
And it doesn't need to be anything complicated.

00:35:41.080 --> 00:35:47.380
It's it can be like a bathtub that has an incoming water flow and outgoing water flow.

00:35:47.380 --> 00:35:48.820
It can be a store inventory.

00:35:48.820 --> 00:35:51.520
You have stuff stolen from you.

00:35:51.520 --> 00:35:55.380
You have the stuff that is delivered from the factory.

00:35:55.380 --> 00:35:58.880
And then there are the customers that buy from you.

00:35:58.880 --> 00:36:05.560
Or if you have fresh produce, something may go bad before it's sold and stuff like that.

00:36:05.560 --> 00:36:09.480
And you end up in those systems.

00:36:09.480 --> 00:36:19.500
You easily end up in situations that you can't really predict or fix with any kind of a simple solution.

00:36:19.500 --> 00:36:22.120
You need to consider that.

00:36:22.120 --> 00:36:24.220
What are the delays?

00:36:24.220 --> 00:36:25.560
What are the feedback loops?

00:36:25.560 --> 00:36:27.680
What is the system doing itself?

00:36:27.680 --> 00:36:33.100
It's not just that someone who is making sure that store has everything.

00:36:33.100 --> 00:36:40.800
It's not their smartness or stupidity that makes the store run out of beer on a hot summer day.

00:36:40.800 --> 00:36:50.220
It's all kinds of interfaces that convenience store has to other people and even weather that affect everything.

00:36:50.220 --> 00:36:50.600
Yeah.

00:36:50.600 --> 00:36:58.320
It's really an interesting way to say, look, sometimes you need to go to a higher level and see all the things moving together.

00:36:58.320 --> 00:37:03.960
And you said you think this can apply to software systems or human systems, right?

00:37:04.080 --> 00:37:04.980
Yeah, exactly.

00:37:04.980 --> 00:37:06.460
It's kind of a...

00:37:06.460 --> 00:37:07.460
I've done like...

00:37:07.460 --> 00:37:11.360
I've mostly been in pretty small companies lately.

00:37:11.360 --> 00:37:18.080
But I've also gone to big, big IT departments to like cloud consultation and stuff like that.

00:37:18.080 --> 00:37:23.540
There are a thousand people that everyone is smart when you take them apart.

00:37:23.920 --> 00:37:33.300
But then when they work together with all the systems that have piled up during like 20 years, it's really slow.

00:37:33.300 --> 00:37:37.740
And you sometimes end up stuff that you really can't understand.

00:37:37.740 --> 00:37:38.040
Why?

00:37:38.040 --> 00:37:44.760
If you ask anyone, they will say that, well, this is not an optimal way of doing things.

00:37:44.760 --> 00:37:53.580
When I was young, I was like a gung-ho nerd going there and telling them, hey, you need to fix it like this and this and this.

00:37:53.580 --> 00:38:04.480
But you can't really, really do that unless you go like a step up or step two and ask, is there something that I don't know?

00:38:04.480 --> 00:38:12.640
If this ticketing system makes everything last two weeks, whenever I want something, it takes two weeks.

00:38:12.640 --> 00:38:14.200
These people are not stupid.

00:38:14.200 --> 00:38:15.300
You understand that.

00:38:15.300 --> 00:38:21.160
So what is it there you can do to perhaps make things faster?

00:38:21.160 --> 00:38:26.740
Why does it take two weeks for me to get a new keyboard when right across the street there's a store that sells the keyboard I want?

00:38:26.740 --> 00:38:27.920
Yeah, exactly.

00:38:27.920 --> 00:38:28.520
Yeah.

00:38:28.520 --> 00:38:33.060
When you have big organizers and those things start adding up.

00:38:33.060 --> 00:38:33.640
Yeah, yeah.

00:38:33.640 --> 00:38:35.240
There's a nice quote from the book that says,

00:38:35.240 --> 00:38:53.640
Pretty cool.

00:38:53.640 --> 00:38:54.160
Yeah.

00:38:54.160 --> 00:38:54.200
Yeah.

00:38:54.200 --> 00:38:55.220
I like the book.

00:38:55.220 --> 00:38:58.600
And it's one of those like one evening or two evening books.

00:38:58.600 --> 00:39:06.620
And then you can, if this is something you really like, there are a lot of books about systems thinking, this area in general.

00:39:06.620 --> 00:39:15.080
And also design thinking, which is kind of a perhaps the more fashionable choice nowadays compared to systems thinking.

00:39:15.220 --> 00:39:15.340
Yeah.

00:39:15.340 --> 00:39:21.080
The next one that you chose is somewhat related to this called Thinking Fast and Slow by Daniel Kahneman.

00:39:21.080 --> 00:39:21.920
Yeah.

00:39:21.920 --> 00:39:23.700
And this is a really cool book.

00:39:23.700 --> 00:39:24.400
I haven't read it.

00:39:24.400 --> 00:39:28.280
I've sort of put it on my list of things to read, but I haven't got to it.

00:39:28.280 --> 00:39:29.300
Tell us about it.

00:39:29.300 --> 00:39:29.480
Yeah.

00:39:29.480 --> 00:39:36.860
This is the word irrational is not the right word, but it's about people can't help themselves.

00:39:36.960 --> 00:39:48.320
They have like this fast thinking system, which is evolutionary creation of like you detect the danger and you need to react immediately.

00:39:48.320 --> 00:39:49.180
I heard a noise.

00:39:49.180 --> 00:39:50.620
Is that a lion or a squirrel?

00:39:50.620 --> 00:39:51.860
Yeah, exactly.

00:39:51.860 --> 00:39:52.740
Stuff like that.

00:39:52.740 --> 00:40:04.700
There's this slow deliberate side of you that can solve mathematical puzzles and can learn other languages and make programs and stuff like that.

00:40:04.700 --> 00:40:10.880
And it's kind of pairing with the other one is also the about face and thinking in systems.

00:40:10.880 --> 00:40:21.820
It's kind of you need to understand people and people aren't as like as left brain as our industry often thinks.

00:40:21.820 --> 00:40:22.220
Yeah.

00:40:22.220 --> 00:40:23.700
You are a philosophy major, right?

00:40:23.700 --> 00:40:32.500
A lot of the people in the like Hobbes and those guys, they talked about like the rational person versus the irrational.

00:40:32.860 --> 00:40:36.840
And they often treated people as just rational thinkers.

00:40:36.840 --> 00:40:48.340
A lot of the economic policy and capitalism and John Keene's and those types of guys, they always say, okay, people are going to act rationally for themselves, but maybe not, right?

00:40:48.340 --> 00:40:49.180
No.

00:40:49.180 --> 00:40:50.140
Yeah, it's exactly.

00:40:50.140 --> 00:40:55.220
And it's not like the rational means that you follow the same rules all the time.

00:40:55.220 --> 00:41:04.940
And it's this book is full of examples that show that no, it's really easy to trick people and it takes a conscious effort.

00:41:04.940 --> 00:41:07.480
And sometimes it doesn't even help you.

00:41:07.480 --> 00:41:16.040
It's just like you can't help yourself that if someone says that this is worth $1,000 and you know that it's not true.

00:41:16.120 --> 00:41:17.320
That's called a price anchor.

00:41:17.320 --> 00:41:20.880
You know that it's not even close to that.

00:41:20.880 --> 00:41:31.160
And even knowing that and even knowing the effect, you still have the $1,000 there affecting your evaluation of the price.

00:41:31.160 --> 00:41:31.660
Right.

00:41:31.660 --> 00:41:35.740
Like here, this thing is normally sold for $1,000, but it's on sale for $599.

00:41:35.740 --> 00:41:36.460
Yeah.

00:41:36.580 --> 00:41:41.180
You can trick people to make them think it's a good deal versus, well, it's just for $599.

00:41:41.180 --> 00:41:42.480
They might go, that's not a good deal.

00:41:42.480 --> 00:41:43.360
It's way too expensive.

00:41:43.360 --> 00:41:43.900
Yeah.

00:41:43.900 --> 00:41:48.700
And when you see the price $599, you start thinking through your needs and your values.

00:41:48.700 --> 00:41:57.020
But when you contrast it with the $1,000 going rate and it's like, oh, well, it's practically free.

00:41:57.020 --> 00:41:57.840
Can I buy it?

00:41:57.840 --> 00:41:58.480
Yeah.

00:41:58.480 --> 00:42:04.920
The craziest example that I can think of is Black Friday, the crazy shopping experience after Thanksgiving in the U.S.

00:42:04.920 --> 00:42:05.620
Yeah.

00:42:05.620 --> 00:42:05.760
Yeah.

00:42:05.760 --> 00:42:08.520
So bring this back to software.

00:42:08.520 --> 00:42:14.460
Like what lessons can we take from this for helping like users, helping designer software, things like that?

00:42:14.460 --> 00:42:23.260
All these books like build up like a toolbox of things that are outside the like immediate day-to-day programming.

00:42:23.260 --> 00:42:26.180
And it's really good to understand people.

00:42:26.180 --> 00:42:31.700
Even if you are writing like backend software, you are still writing software for people.

00:42:31.700 --> 00:42:35.120
And people are not, well, you are serving them.

00:42:35.300 --> 00:42:36.640
You are in a service business.

00:42:36.640 --> 00:42:46.520
You need to be the like really good waitress that serves them with the stuff that they need, with the stuff that solves their problem.

00:42:46.520 --> 00:42:47.000
Right.

00:42:47.000 --> 00:42:48.980
Even if they don't necessarily know they need it, maybe.

00:42:48.980 --> 00:42:49.500
Yeah.

00:42:49.500 --> 00:42:55.080
That's like a really good software stuff that solves a problem that user is not even aware of.

00:42:56.360 --> 00:42:59.080
This portion of Talk Python is brought to you by us.

00:42:59.080 --> 00:43:04.980
As many of you know, I have a growing set of courses to help you go from Python beginner to novice to Python expert.

00:43:04.980 --> 00:43:07.020
And there are many more courses in the works.

00:43:07.020 --> 00:43:11.280
So please consider Talk Python training for you and your team's training needs.

00:43:11.280 --> 00:43:17.700
If you're just getting started, I've built a course to teach you Python the way professional developers learn by building applications.

00:43:18.220 --> 00:43:22.780
Check out my Python jumpstart by building 10 apps at talkpython.fm/course.

00:43:22.780 --> 00:43:25.900
Are you looking to start adding services to your app?

00:43:25.900 --> 00:43:29.060
Try my brand new consuming HTTP services in Python.

00:43:29.440 --> 00:43:34.520
You'll learn to work with RESTful HTTP services as well as SOAP, JSON, and XML data formats.

00:43:34.520 --> 00:43:36.360
Do you want to launch an online business?

00:43:36.360 --> 00:43:40.560
Well, Matt Makai and I built an entrepreneur's playbook with Python for Entrepreneurs.

00:43:40.560 --> 00:43:45.800
This 16-hour course will teach you everything you need to launch your web-based business with Python.

00:43:45.800 --> 00:43:49.340
And finally, there's a couple of new course announcements coming really soon.

00:43:49.340 --> 00:43:54.800
So if you don't already have an account, be sure to create one at training.talkpython.fm to get notified.

00:43:54.920 --> 00:43:58.580
And for all of you who have bought my courses, thank you so much.

00:43:58.580 --> 00:44:00.520
It really, really helps support the show.

00:44:00.520 --> 00:44:02.740
Those were the 10 books.

00:44:02.740 --> 00:44:05.180
And then you gave us a plus one, right?

00:44:05.180 --> 00:44:11.300
Yeah, this plus one is like, I think everyone should have a fun book outside your...

00:44:11.300 --> 00:44:12.400
Outside your specialty, right?

00:44:12.400 --> 00:44:15.240
Yeah, outside your specialty, you should have one book.

00:44:15.240 --> 00:44:16.580
One fun book.

00:44:16.580 --> 00:44:19.120
And mine is Learn Your Haskell for Great Good.

00:44:19.120 --> 00:44:22.140
It's like, I'm fascinated by Haskell.

00:44:22.140 --> 00:44:24.480
I really don't understand anything about it.

00:44:24.560 --> 00:44:34.800
But it's this book, I occasionally pick up and read a chapter there, look at more dads and look at higher order functions, which is also...

00:44:34.800 --> 00:44:38.140
That is very applicable to any kind of a Python application.

00:44:38.140 --> 00:44:40.300
But this is kind of a...

00:44:40.300 --> 00:44:45.960
You probably have your own fun book that you go every now and back to every now and then.

00:44:45.960 --> 00:44:47.160
And this is mine.

00:44:47.160 --> 00:44:48.240
Yeah, this is really cool.

00:44:48.240 --> 00:44:50.300
It's illustrated.

00:44:50.300 --> 00:44:53.460
It's supposed to be funny, but it also is supposed to teach you Haskell.

00:44:53.460 --> 00:45:00.600
And I think from a programming perspective, there's real value in knowing a language that's really different from what you do day to day.

00:45:00.600 --> 00:45:01.040
Yeah.

00:45:01.040 --> 00:45:01.700
And it's...

00:45:01.700 --> 00:45:01.780
Right.

00:45:01.780 --> 00:45:06.640
I believe that you also need to like know pretty theoretical stuff.

00:45:07.040 --> 00:45:08.280
And I...

00:45:08.280 --> 00:45:13.480
Well, somebody might disagree with me, but I think Haskell is mostly a theoretical thing.

00:45:13.480 --> 00:45:20.980
It has a nice type system and it has nice abstractions on side effects and stuff like that.

00:45:20.980 --> 00:45:21.360
But it's...

00:45:22.360 --> 00:45:25.600
I probably wouldn't write production code with it.

00:45:25.600 --> 00:45:25.960
Sure.

00:45:25.960 --> 00:45:31.920
The closest thing that I learned and studied and know a little bit close to this is Lisp or Scheme.

00:45:31.920 --> 00:45:36.340
And I would not go write anything in that at all.

00:45:36.340 --> 00:45:40.980
There's like four languages I would choose before I would pick that language for a thing at least.

00:45:41.680 --> 00:45:51.540
But it really opened my eyes to, oh, the way we can write programs and think through solving problems algorithmically is way broader than I thought.

00:45:51.540 --> 00:45:51.900
Yeah.

00:45:51.900 --> 00:45:56.480
One of those Scheme, Lisp, or Haskell are really good at that.

00:45:56.480 --> 00:46:00.800
My programming languages 101 was an AFL.

00:46:01.040 --> 00:46:05.180
I don't know if you remember that language back from the early 90s.

00:46:05.180 --> 00:46:05.820
Which language?

00:46:05.820 --> 00:46:06.580
AFL.

00:46:06.580 --> 00:46:06.820
Yeah.

00:46:06.820 --> 00:46:09.240
I do remember the name, but I don't know anything about it.

00:46:09.240 --> 00:46:09.440
Yeah.

00:46:09.440 --> 00:46:14.200
It's like object-oriented programming due to the max.

00:46:14.200 --> 00:46:19.940
It's like all sorts of things that you have multiple inheritance there.

00:46:19.940 --> 00:46:25.000
One of the really cool things about that language was like a design by contract.

00:46:25.140 --> 00:46:37.980
It had like a language level support for assertions in classes like preconditions for functions and postconditions for functions and invariants for classes and all that kind of stuff.

00:46:37.980 --> 00:46:47.580
It's probably something you wouldn't use today, but it gives you a nice perspective on how other people think of the problems that we face as a programmer.

00:46:47.580 --> 00:46:48.120
Yeah.

00:46:48.120 --> 00:46:49.240
Absolutely.

00:46:49.240 --> 00:46:49.820
All right.

00:46:49.820 --> 00:46:51.840
So, learn you a Haskell for great good.

00:46:51.840 --> 00:46:53.200
Very nice.

00:46:53.200 --> 00:46:53.440
Okay.

00:46:53.440 --> 00:46:56.320
So, this has been a very interesting list.

00:46:56.320 --> 00:47:00.240
And everyone has their own list of things that they really like.

00:47:00.240 --> 00:47:04.220
And certainly, many of these books are on my list as well.

00:47:04.220 --> 00:47:10.660
I would say, if people are listening, check out the episode page and go to the bottom.

00:47:10.660 --> 00:47:11.980
There's a discussion section.

00:47:11.980 --> 00:47:18.820
Put your favorite book or two on there, and we can have a really nice list if everybody comes and contributes something that's not there yet.

00:47:18.820 --> 00:47:20.400
I think that'll be lots of fun.

00:47:20.400 --> 00:47:20.720
Yeah.

00:47:20.720 --> 00:47:21.200
Yeah, nice.

00:47:21.260 --> 00:47:21.420
Okay.

00:47:21.420 --> 00:47:24.640
So, before we get out of here, let me ask you the two questions.

00:47:24.640 --> 00:47:27.680
If you're going to write some Python code, what editor do you run?

00:47:27.680 --> 00:47:30.120
I used to be a solid Vim guy.

00:47:31.140 --> 00:47:39.880
When I'm not coding, I used to be like, this can handle a broken terminal after a nuclear war.

00:47:39.880 --> 00:47:42.000
I can really do anything with this.

00:47:42.000 --> 00:47:52.000
And then I realized maybe this is not a reason to choose a programming environment in 2010.

00:47:52.400 --> 00:47:54.780
And then I started learning things.

00:47:54.780 --> 00:47:57.320
When doing Java, I really enjoyed IntelliJ.

00:47:57.320 --> 00:48:03.280
I've also used IntelliJ stuff like resharper on .net.

00:48:03.280 --> 00:48:07.820
And it was quite easy to jump to PyCharm.

00:48:07.820 --> 00:48:11.200
And I'm now a PyCharm convert.

00:48:11.200 --> 00:48:13.200
I really use it.

00:48:13.200 --> 00:48:17.640
That's the only thing that I open up when doing Python.

00:48:17.640 --> 00:48:20.360
I've tried Visual Studio Code.

00:48:20.360 --> 00:48:22.200
I really liked it.

00:48:22.200 --> 00:48:25.980
But I already had familiarized myself with PyCharm.

00:48:25.980 --> 00:48:29.880
Cost of change was not justified, I would say.

00:48:29.880 --> 00:48:30.180
Yeah.

00:48:30.180 --> 00:48:30.740
I hear you.

00:48:30.740 --> 00:48:31.360
All right.

00:48:31.360 --> 00:48:31.940
Go PyCharm.

00:48:31.940 --> 00:48:33.440
That's my favorite as well.

00:48:33.840 --> 00:48:35.660
And notable PyPI package.

00:48:35.660 --> 00:48:36.200
Yeah.

00:48:36.200 --> 00:48:43.460
Well, I had to, in my mind, it's like the old one, the natural language toolkit for Python,

00:48:43.460 --> 00:48:49.680
which solves many problems, which solved many problems like 20 years ago that people are

00:48:49.680 --> 00:48:56.800
struggling today with any kind of text processing and splitting text to sentences or paragraphs

00:48:56.800 --> 00:48:59.720
and stuff like that and any multiple languages.

00:49:00.040 --> 00:49:04.460
But the one that I picked today is called Newspaper.

00:49:04.460 --> 00:49:08.080
I'm so fascinated with this one right now.

00:49:08.080 --> 00:49:13.600
It's just like I was writing one of those web scraper things a couple of months back.

00:49:13.600 --> 00:49:19.040
And then I just, there must be something that you could do with newspapers directly.

00:49:19.540 --> 00:49:29.280
And it's like a full-blown system for picking up newspaper, like articles from a newspaper page.

00:49:29.280 --> 00:49:36.220
And then when you have the article, pick up its title, its main text, pictures, and stuff like that.

00:49:36.220 --> 00:49:38.680
I'm flipping through the GitHub page here.

00:49:38.680 --> 00:49:39.800
This thing is incredible.

00:49:39.800 --> 00:49:42.460
There's some things I'm like, oh, that's pretty neat.

00:49:42.460 --> 00:49:43.520
I could probably use that someday.

00:49:43.520 --> 00:49:45.940
This just makes me want to try it, like straight up.

00:49:45.940 --> 00:49:50.960
Yeah, it's like one of those Python comes with that batteries included thingy.

00:49:50.960 --> 00:49:53.560
This just made me happy when I found this.

00:49:53.560 --> 00:50:01.600
This is exactly, it's like the batteries included and you don't need to write your own web scraper again for the thousandth time.

00:50:01.600 --> 00:50:02.560
Yeah, yeah.

00:50:02.560 --> 00:50:03.780
So let me give people a sense of this.

00:50:04.000 --> 00:50:06.500
So I'll put the link, of course, in the show notes.

00:50:06.500 --> 00:50:10.300
But you go and you install it and you say, from newspaper import article.

00:50:10.300 --> 00:50:12.880
And then you say, create an instance of the article.

00:50:12.880 --> 00:50:16.440
And you give it a URL, like some news article, literally.

00:50:16.440 --> 00:50:17.820
Give it like the page of that.

00:50:17.820 --> 00:50:18.340
Say download.

00:50:18.340 --> 00:50:19.260
You can get the HTML.

00:50:19.260 --> 00:50:20.640
You can parse it.

00:50:20.640 --> 00:50:22.420
And it has a list of authors.

00:50:22.420 --> 00:50:23.300
Publish date.

00:50:23.300 --> 00:50:24.200
It has the date.

00:50:24.200 --> 00:50:26.320
You can say, what's the top image?

00:50:26.800 --> 00:50:29.160
You can run an NLP processing on it.

00:50:29.160 --> 00:50:32.300
It has the keywords and a summary and all sorts of craziness.

00:50:32.300 --> 00:50:34.540
It's really, really fascinating.

00:50:34.540 --> 00:50:37.440
It doesn't work as well on all web pages.

00:50:37.440 --> 00:50:41.540
But it's really, really impressive that you even have something like this.

00:50:41.540 --> 00:50:41.760
Cool.

00:50:41.760 --> 00:50:42.140
All right.

00:50:42.140 --> 00:50:43.360
That's a really great recommendation.

00:50:43.360 --> 00:50:44.360
I've never heard of it.

00:50:44.360 --> 00:50:44.920
So thank you.

00:50:44.920 --> 00:50:45.260
Yeah.

00:50:45.500 --> 00:50:45.920
All right, Timo.

00:50:45.920 --> 00:50:49.760
It's really fun to talk about these books and reminisce on some old ones and learn about

00:50:49.760 --> 00:50:50.900
some new ones for me.

00:50:50.900 --> 00:50:51.980
So thanks for being on the show.

00:50:51.980 --> 00:50:52.320
Yeah.

00:50:52.320 --> 00:50:52.800
Thank you.

00:50:52.800 --> 00:50:53.280
You bet.

00:50:53.280 --> 00:50:53.500
Bye.

00:50:53.500 --> 00:50:57.640
This has been another episode of Talk Python To Me.

00:50:57.640 --> 00:51:00.000
Our guest has been Timo Kola.

00:51:00.000 --> 00:51:05.120
And this episode has been brought to you by Rollbar and us right here at Talk Python Training.

00:51:05.120 --> 00:51:07.900
Rollbar takes the pain out of errors.

00:51:07.900 --> 00:51:12.980
They give you the context and insight you need to quickly locate and fix errors that might have

00:51:12.980 --> 00:51:15.620
gone unnoticed until your users complain, of course.

00:51:15.620 --> 00:51:20.420
As Talk Python To Me listeners, track a ridiculous number of errors for free at

00:51:20.420 --> 00:51:22.760
rollbar.com slash Talk Python To Me.

00:51:22.760 --> 00:51:25.020
Are you or a colleague trying to learn Python?

00:51:25.020 --> 00:51:29.680
Have you tried books and videos that just left you bored by covering topics point by point?

00:51:29.680 --> 00:51:33.720
Well, check out my online course, Python Jumpstart by Building 10 Apps at

00:51:33.720 --> 00:51:38.320
Talk Python.fm slash course to experience a more engaging way to learn Python.

00:51:38.320 --> 00:51:41.300
And if you're looking for something a little more advanced,

00:51:41.460 --> 00:51:45.640
try my WritePythonic code course at talkpython.fm/Pythonic.

00:51:45.640 --> 00:51:48.360
Be sure to subscribe to the show.

00:51:48.360 --> 00:51:50.560
Open your favorite podcatcher and search for Python.

00:51:50.560 --> 00:51:51.800
We should be right at the top.

00:51:51.800 --> 00:51:55.140
You can also find the iTunes feed at /itunes,

00:51:55.140 --> 00:51:57.200
Google Play feed at /play,

00:51:57.200 --> 00:52:01.100
and direct RSS feed at /rss on talkpython.fm.

00:52:01.100 --> 00:52:03.000
This is your host, Michael Kennedy.

00:52:03.000 --> 00:52:04.360
Thanks so much for listening.

00:52:04.360 --> 00:52:05.420
I really appreciate it.

00:52:05.780 --> 00:52:07.380
Now get out there and write some Python code.

00:52:07.380 --> 00:52:07.380
Now get out there and write some Python code.

00:52:07.380 --> 00:52:07.940
Thank you.

00:52:07.940 --> 00:52:08.320
Thank you.

00:52:08.320 --> 00:52:08.820
Thank you.

00:52:08.820 --> 00:52:08.920
Thank you.

00:52:08.920 --> 00:52:09.320
Thank you.

00:52:09.320 --> 00:52:10.040
Thank you.

00:52:10.040 --> 00:52:10.060
Thank you.

00:52:10.060 --> 00:52:10.420
Thank you.

00:52:10.420 --> 00:52:11.420
Thank you.

00:52:11.420 --> 00:52:12.420
Thank you.

00:52:12.420 --> 00:52:13.420
Thank you.

00:52:13.420 --> 00:52:13.420
Thank you.

00:52:13.420 --> 00:52:13.420
Thank you.

00:52:13.420 --> 00:52:13.420
Thank you.

00:52:13.420 --> 00:52:14.420
Thank you.

00:52:14.420 --> 00:52:15.420
Thank you.

00:52:15.420 --> 00:52:16.420
Thank you.

00:52:16.420 --> 00:52:17.420
Thank you.

00:52:17.420 --> 00:52:18.420
Thank you.

00:52:18.420 --> 00:52:19.420
Thank you.

00:52:19.420 --> 00:52:20.420
Thank you.

00:52:20.420 --> 00:52:21.420
Thank you.

00:52:21.420 --> 00:52:22.420
Thank you.

00:52:22.420 --> 00:52:23.420
Thank you.

00:52:23.420 --> 00:52:24.420
Thank you.

00:52:24.420 --> 00:52:54.400
Thank you.

