One of the hallmarks of successful developers is continuous learning.
The best developers I know don't just keep learning, it's one of the things that drives them.
That's why I'm excited to bring you this episode on 10 books Python developers should read.
You'll meet Timo Kola, who is an avid reader and self-learner in the Python space.
He's found 10 books from his experience that have had a huge effect on him,
and we'll discuss those now. This is Talk Python to Me, episode 130, recorded July 18, 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.
Timo, welcome to Talk Python.
Thank you.
It's great to have you here.
I'm really looking forward to talking about these books.
You and I are both avid readers, and I think one of the best things you can do for your career,
or just even as a person, is to keep reading.
And so maybe we can use this episode to inspire a bunch of people to do some technical and some not-so-technical reading.
Sure. Sounds great.
Yeah, sounds fun.
But before we get to that, let's start with your story.
How did you get into programming in Python?
I started with Python in 2005.
I started programming professionally in like 97.
I was a philosophy major, and I was thinking whether I should be starting an academic career or get a real job.
Then I ended up getting a real job.
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.
And 2005, I figured out that I don't want to do that.
I want to be a programmer and kind of relearned programming back then.
I had done something like, I always did something like Perl programming, very small throwaway scripts.
And then I was given a task of writing an Excel for time reporting in a team.
It was quite funny.
It was a really big company, but they handled time bookkeeping with an Excel sheet.
That's really funny.
Isn't it weird how like some of these huge companies, like they'll waste crazy amounts of money on certain things.
And then others like, no, we can't do anything.
There's no system we're going to buy.
We're not going to build one or anything.
We're just going to like, here, use Excel.
Yeah.
It was like, here's a network drive and everyone writes down their own Excel sheet.
And we need a summary report for the management.
And it was like a 60,000 people company.
And they didn't have like a centralized process for that.
And then I ended up writing first that reporting system in Perl.
Then I thought, well, my friend was using Python.
And I thought, well, this looks neat.
Although I hated, of course, the white space first.
I got used to that in two weeks.
Figured out that, hey, this is actually a feature.
Reading is more important than writing.
And then, well, I wrote that.
And a couple of years later, my friend said, well, it's still reporting full hours for you.
The system that you did back then.
And that's how I got into Python.
And I've done, after that, I've done web stuff.
And previous project before this company that I'm now working in, I was two years doing Android programming.
And all the time I've been doing something a little with Python.
I've done quite a few of Twitter bots.
That's a kind of a fun way to keep up your Python programming skill.
Oh, cool.
Yeah.
So tell me about some of your Twitter bots.
The most interesting ones are in Finnish.
But I have two James Joyce readers.
Ulysses Reader that reads Ulysses perpetually by James Joyce.
And also Finnegan's Wake.
These two kind of really hard books split to 140 characters at a time.
And sometimes it's quite funny.
And most of the time it's quite boring to follow them.
Yeah.
I'll put the two Twitter accounts in the show notes so people can follow them if they want.
Yeah.
Nice.
And you said you also do some chatbots, like some AWS Lambda chatbots or something like that?
Yeah.
That's what I do at the work right now.
We define it something like a conversational commerce.
We take, let's say, a product catalog, any kind of a structural data associated with that.
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.
Oh, that's really cool.
So are you using like Alexa skills or like how are you understanding the words there?
Well, we are both experimenting with like wit.ai, which I think is the state of the art at the moment.
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.
Finnish language is quite different from many of the other European languages like English and Germany or even Swedish.
Yeah, sure.
Nice.
So are you enjoying working on chatbots?
Yeah.
It's also, well, it's kind of interesting to see.
We are quite aggressive in user testing and how to see what's like the expected level of intelligence that people want from them.
And the bar is quite high.
Yeah.
I've heard people describe both the like the voice assistants and the chatbot text equivalents and having this problem of the uncanny valley.
Yeah.
And I think this problem originally it was stated in terms of like animated movies.
So think Shrek or something like that, where if it clearly, the characters clearly look animated, people are fine.
If they look perfectly real or are real, people are fine.
But if they're really, really close to real, but not quite, it kind of creeps people out.
And things are getting good enough that we're getting a little bit into this uncanny valley where it works, it works, it works.
Wait a minute.
You don't understand that?
That doesn't make any sense.
Why don't you understand that?
Right?
What do you think?
Yeah, exactly.
I think that's exactly what's going on there.
And also, it's kind of a, even if the system is quite smart, it makes different mistakes than human would do.
What we found out in our user studies is like that.
You really need to concentrate on a task, satisfy the user's need on a single task.
That's how you get the, and then concentrate on one specific domain.
That's how you get the most satisfactory results.
When you open it up, people start expecting it to be able to answer everything.
And that's when it goes sour.
Yeah, but it's going to get better, right?
I mean, it's already in the last five years gotten so good.
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.
Google Home, for example.
Yeah, exactly.
I have an Echo and I, you quickly forget how magical it would have been five years ago.
It's like, it can pick up your speech on another room.
And usually it's quite, at least it understands what you said.
It doesn't necessarily do anything smart with it, but it understands you.
Yeah.
What are your three favorite things that you do with your Echo?
Setting up timers and alarms.
Like wake me up tomorrow at 6.30?
Yeah, wake me up tomorrow.
And I almost exclusively do my calendar appointments through Echo because it's quite natural.
And you can have your shopping bags in your hand and start that I need to do laundry tomorrow.
Add that to my calendar and stuff like that.
Yeah.
Then one of the favorite things is to watch my kids interact with that.
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.
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.
And they are really entertained by something like Alexa.
Oh, sorry.
Probably someone else.
Alexa went off there.
But sing a song.
And sing a song.
Or tell a joke.
And it's kind of funny how kids interact with that.
And I think it's going to lead something like that.
Voice is going to be something like a touchscreen in the sense that you expect that feature to be there.
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.
It's quite the way.
Like after iPhone, you started touching every screen even if they didn't work that way.
Yeah.
That's right.
After the iPad came out, there were videos of kids touching real magazines.
Like little two-year-olds going, this one is broken.
Yeah, exactly.
Voice will probably be like that.
It won't listen to me.
It's a refrigerator.
It doesn't talk.
I'm sorry.
Yeah.
Nice.
All right.
Yeah.
I think it's definitely going to be an interesting wave.
And I think it must be fun to work with it.
Yeah.
So that's probably a good place to switch over, start talking about the books.
So you've chosen 10 plus 1 books for us that you feel are pretty essential reading for Python programmers.
Yeah.
I don't know if these are like the definitive 10 books to read.
But I tried to pick up things that are relevant for a newcomer and relevant for someone intermediate.
And then there are a couple of books that are totally outside of the box of a regular Python programmer.
Everyone is going to read Python programming at least at some point.
And everyone probably ends up seeing like starting with the learning Python.
But I hope I picked a nicer alternative to learning Python in this system.
Yeah.
Nice.
So your first book is Automate the Boring Stuff, Python Practical Programming for Total Beginners
by friend of the show, Al Swigert.
Yes.
I've listened to that episode.
And today when I was preparing for this and I was checking through the book and I realized,
hey, this is actually really relevant still to me.
It's a really good introductory book.
But then there are chapters like Automating Excel Workflow.
Or today I discovered that there's a chapter about image manipulation that I will almost
immediately take into use after this when I go back and start writing stuff.
Yeah.
It's really cool.
It's a very gentle introduction.
And one of the things I like about it is it has some applied aspects.
Because a lot of times I feel like the biggest mistake people, books, presentations, whatever,
make when they're trying to teach programmers is they go, here are all the facts.
And assume at the end of this, you know, semester course or this book or whatever, you'll be able
to do something interesting.
But for now, here's how you define a variable.
Here's what a string is.
Here's how you define a loop.
Here's how you define a function.
And it's just boring, boring, boring.
Right?
Yeah.
And so this book actually comes with a bunch of little problems you can solve.
Like one is automating workflows with Excel, which I'm sure resonated well with you, given
your background.
Yeah.
I think that kind of solve a problem is really essential for someone trying to learn a new
skill.
It's especially if you are not a programmer yourself.
There's this book.
And I think that many of the Raspberry Pi books are extremely good examples of those.
Either they are funny or either they solve your real problem.
And that's a good motivation to go through all that string and list and do all the stuff
that you end up doing with Python.
Yeah.
It's really great.
So I also had Al recently on the show on episode 106 for his Invent Your Own Computer Games with
Python.
So depending on your experience level and what makes you tick, if you want to actually get
work done, check out the Automate the Boring Stuff to learn Python.
If you want to write games, like maybe you're trying to get your younger kid who's in high
school or something interested in Python, maybe the Invent Your Own Computer Games would be a
good one.
Yeah.
You also pointed out that Al has this as a video course on Udemy.
And so I feel a bit of a kinship to Al here.
Like he and I both are living a similar life.
Like he writes the books and has the courses.
I do the podcasts and have the courses.
And so, yeah, if you want to take this as a video course version, that's available as
well.
Yeah.
Nice.
Okay.
And then the next one is actually a really short book, right?
Yeah.
This is something that I, when I was learning, was on my desk.
Also often I carried with it because it's kind of a, I had trouble wrapping my head around
Python lists.
There was something really, really, I couldn't tell when the method was mutable and when it's
going to create me a new one.
And then that kind of stuff is, and it's kind of a thing that you really need to be
to just put it in your long-term memory.
It doesn't.
Right.
Like sorted of list versus list.sorted.
Things like that.
Yeah.
Exactly.
So the book you're referencing is Python Pocket Reference, Python in Your Pocket by Mark Lutz.
Yeah.
Sadly, it's like two or three years old already.
And I think it's Python 3.3.
If, oh no, no, actually it's Python, Python 3.6 is as well as covered.
So.
Oh, great.
Yeah.
And most of the stuff, like long as it's Python 3 hasn't actually changed.
Yeah.
That much.
It's more additive rather than changes too.
Yeah.
And it's always with this kind of a technical books, there's some sort of risk of
obsolescence if it's tied to a certain version of something.
And the books that I chose here should be so that they are either up to date or then are
timeless.
Yeah.
There's a few books in this list that are definitely timeless and then more timeless than others.
But yeah, this is really nice.
Like I, I'm pretty good at memorizing these obscure details of programming languages and whatnot.
But you know, the one that I really need a pocket reference for is JavaScript.
I'm always like, God, how do I iterate an array correctly in JavaScript again?
And this, like, it's always, I feel like I'm always Googling for JavaScript stuff, even though
I've been doing it for years.
But Python, yeah, this is cool for people learning Python.
Yeah, exactly.
I have the JavaScript one and CSS one.
And I, the only thing is that JavaScript and CSS, they are moving, moving so fast that
you're probably learning something that you don't need to learn when you're trying to
learn.
Yeah.
So then the next one you picked, I think, is a really interesting book as well.
And that's the Python Cookbook by David Beasley and Brian Jones.
Yeah.
It's, I had it before and I don't know where I lost my copy, but it was really essential.
So I think when I started learning Python, Stack Overflow didn't exist at all.
So this kind of a ready-made recipe for your program that you can just drop in.
Yeah.
So the idea is that it's broken into general areas like stuff to do with strings, stuff to
do with data structures, numbers, iteration, files.
And then for each one of these, there's maybe 15 to 20, how do I do this?
How do I iterate over a fixed set of records?
How do I print a file to the console?
How do I communicate with serial ports?
How do I print bad file names?
And so on and so on, right?
Yeah.
And this was really essential back then.
Nowadays, it would be a good reference, but often you just type something into Google
and end up in Stack Overflow.
Sure.
So I think this is interesting coming at it from two ways.
Like the way that you're talking about where you type something into Stack Overflow is, I
know I want to like make a temporary file in directory.
So you type maybe that into Google and it probably finds something on Stack Overflow and you're
kind of good.
But it could be that you're coming from a place of less experience and you want to learn
how, you kind of want to get a feel for it.
What can I do with the file system and files in Python?
Yeah.
You could go through these 15 or 20 things.
You're like, whoa, actually you would be pretty capable if you could almost treat each one
of these as a project.
You know what I mean?
Like people who are new often have a hard time finding something concrete to practice.
Yeah.
And it seems like there's, you know, hundreds of little practices with the solution right
here.
And I think that's pretty nice.
Yeah.
And also kind of a guaranteed quality of these.
When you Google and Stack Overflow stuff, you may end up.
Yeah.
Well, you also waste a lot of time on Stack Overflow because they're trying to do a thing,
but they're trying to do it slightly differently than you were trying to do it.
So it doesn't quite fit.
You know what I mean?
Yeah.
And especially if you're new to technology, you really can't tell good answers from bad
answers.
And it doesn't mean that the most upvoted one is the best one.
Yeah.
Sometimes you're like, if I could just uncheck that accepted answer because you know the next
one's better.
Yeah, exactly.
It's one of those first steps of understanding technology is to start understanding which
of the Stack Overflow questions are bad and which ones are good.
Yeah.
I think, you know, looping it back to book one, I'm pretty sure Al Swigert shows you like
how to take like a traceback error and use Google to find the answer for that.
How to fix it.
Yeah.
And that's one of those things that has really changed in 20 years.
It's like you were completely screwed 20 years ago if something like that happened and it
didn't show up on Altavista or something.
It's like the way of working has changed and I think it's really cool and it's sometimes
you lose the sight of how much we have progressed and how much easier stuff is.
Yeah, it's for sure.
It's not only good, but it's mostly good.
It's mostly good.
I agree.
It's mostly good.
This portion of Talk Python to Me has been brought to you by Rollbar.
One of the frustrating things about being a developer is dealing with errors.
Ugh.
Relying on users to report errors, digging through log files, trying to debug issues, or getting
millions of 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 Rollbar to your Python app is as easy as pip install Rollbar.
You can start tracking production errors and deployments in eight minutes or less.
Are you considering self-hosting tools for security or compliance reasons?
Then you should really check out Rollbar's compliant SaaS option.
Get advanced security features and meet compliance without the hassle of self-hosting, including
HIPAA, ISO 27001, Privacy Shield, and more.
They'd love to give you a demo.
Give Rollbar a try today.
Go to talkpython.fm/Rollbar and check them out.
The next one is switching us over to working with data, mostly from a data science, not
database perspective, with Python for data analysis, data wrinkling with Pandas, NumPy, and
IPython with Wes McKinley.
McKinney.
Sorry, Wes.
Yeah, exactly.
And I thought this was something like that.
It was already years old, but it seems to be that there's a new version coming in September.
So IPython stuff is updated with also Jupyter stuff and all that kind of stuff.
So this is very good for most of the machine learning, deep learning, and that kind of stuff
is most really boring, cleaning up and finding data.
And this covers that part.
You need to know.
Right.
And that, to me, is the primary goal of Pandas, right?
Yeah.
Pandas is all about loading up semi-structured data, putting it into a consistent structure,
maybe reorganizing it like a group by or something like that, fixing the bad data or filtering
out the bad data and getting it ready to then go do a thing with, right?
Yeah, exactly.
And it's like filtering out noise and either filtering out the missing data or adding default
values for that.
And that kind of stuff that is, you really need to know is, I think if you come somewhere from
like R, that's like the forte of R is cleaning up data and putting it up in a, let's say,
table structure.
And this is the same thing for Python and very important when getting into machine learning
and all kinds of data analysis and maybe data visualization tasks.
Yeah.
It's pretty cool.
So it starts by introducing you to IPython and Jupyter and NumPy and Pandas.
And then it really talks about like loading, cleaning, transforming, merging, reshaping data,
which it's, you know, that is so, so powerful with that and even some visualization stuff.
So yeah, it's pretty cool.
If you got to do a lot of that kind of thing, then yeah, Pandas is a good place to look.
And this book seems like a really good one.
It's from Wes McKinney, who is the creator of Pandas.
So that's a good, definitely a definitive source of knowledge for that library.
Yeah.
Nice.
Yeah.
Okay.
Yeah.
So the next one that we're going to talk about is not as new as the 2016 version of that last
book.
It's called Working Effectively with Legacy Code.
What's the story of this one?
This is kind of like a, more like a book that teaches you how to think about code.
And in a realistic situation, you rarely get to start something new.
Usually, if you are done consultation like me, it's like you end up somewhere that it's already
late and already not delivering what should be there.
And this is answering questions.
What can you do about that?
What can you do there?
And it's like, comes with the definitions of what is legacy code?
It's bluntly defines legacy code as something that doesn't have a test.
And then it goes on like slowly teaching you how to move from that zero state to something
that is almost enjoyable, building up, decoupling the system, building up unit tests.
Yeah.
I feel like this book is certainly required reading, even though it's not based on Python.
I think it does some C++ and some Java.
Maybe there's even a C# version.
I can't recall.
But this book is kind of part of a trifecta of the working with effectively legacy code,
the original refactoring book by Martin Fowler.
Yeah.
That's an excellent book.
Yes.
Yeah.
And then the agile principles, patterns, and practices by Robert C. Martin.
Like those three kind of come together to attack like the same problem from multiple directions.
And the concept that I still remember, so I'm looking here at my Amazon page for this book,
and it says, you purchased this item on June 10th, 2005.
So it's not a new book, but it's a, it's really, like you said, does teach you to think in interesting
ways about systems, especially systems, which they called brownfield systems, not greenfield,
where it's like, you know, here's half a million lines of code.
It's been working for 15 years.
It's mission critical.
Please, you do not break it, but you have to now take it over and add features to it.
Like, what do you do?
Yeah.
So there's all these interesting ways of like, how do you get it under test?
How do you create what, the biggest thing that comes from this one in my mind is this
concept of seams.
How do you create these seams where this huge monolithic brittle thing becomes flexible in
the certain ways that you need to extend it?
And how do you carve off these little subsystems that change frequently that are very maintainable
without breaking the thing?
I think that's just really very interesting.
Yeah.
I really like the notion of seam.
It's like, oh, this, it has a name.
I've been doing this 10 years, but I didn't know this, this technique had a name.
It's cool.
Yeah.
Here's this thing that is inflexible, but in this one little axis, it is flexible and that's
what I needed.
So it's good.
Right.
Yeah.
So definitely recommend, I actually recommend all three of those books, but working effectively
with legacy code.
Well, it's definitely something that will change the way that you think about programming
and especially large old systems.
Yeah.
And that's where we all end up at some point doing old big systems.
Yeah, that's right.
We all, we all end up there somehow.
All right.
The next one is a perfect carry on from this concept of testing, but zooming forward in Python
to something that's just now being released by my friend and Python Bytes co-host, Brian
Hawken.
Yeah.
Python testing with pytest.
Yeah.
It's, I bought it and I, I started reading it.
It is one of those books that after each chapter, you need to go and change something in your code.
I've used pytest before.
Like I've been doing it wrong for years.
Oh my gosh.
I got to put this down and go fix it right now.
Yeah.
I like the pytest philosophy compared to like a unit test and knows it's more PyTonic.
And reading this book, I realized, oh, I've used like 10% of the possibilities there.
It's like, and it's quick read.
You probably will read it through in one evening or two.
And it's, if you are not like a super familiar with pytest, it will probably make you change
your project structure and make it more pytestable.
Yeah.
That's awesome.
Yeah.
Brian did a really good job with this.
And so he talks about writing test functions, using the search stuff, all the standard things,
you know, fixtures, but also things like the tempter fixture, the monkey patching stuff,
the doc test namespaces and plugins, like finding and using the pytest plugins, even how to create
your own.
So yeah, very, very cool stuff.
Yeah, exactly.
All right.
The next one we have is sort of the other side of the Panda story.
Once you have the data, how do you get going?
I would say this is one of the hottest developer software areas around just with machine learning.
So the book is hands-on machine learning with scikit-learn and TensorFlow.
Yeah.
I had like half a dozen of these books.
And I think this one was like the best companion to all those online courses that everyone probably
go through, either the Coursera one or the Udacity one.
Or one of my favorites is course.fast.ai.
It's like you go through the course and then you have a like a vague understanding of the
concepts.
And then you need to read the book.
There's like the definitive books like the deep learning by Ian Goodfellow or the elements of
statistical learning.
But they probably are too heavy to start with.
This is kind of goes through like many of the algorithms quickly.
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.
And well, this is probably one of those books that wouldn't appear on this list maybe in a year or two.
There probably are going to be many, many other books.
But this one was like the books that have come out this year.
I think this one was my favorite on this topic.
It's really cool.
So it has like the fundamentals of machine learning for the first part.
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.
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.
Even how to just like do distributed computation of TensorFlow across multiple machines and GPUs and all kinds of good stuff.
It sounds really, really fun.
All right.
Do you get to do any of this kind of stuff with your chatbots?
I've mostly done stuff with Finnish language.
Like I have this huge data set of Finnish cursing.
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.
And it's kind of a funny way to look at data that makes you lose your belief in other human beings.
But also it really, really gets you nice patterns around what kind of things make people curse.
What are people really passionate about?
Well, it's this kind of stuff that, well, probably would get moderated in a forum.
It's like any type of day-to-day politics.
But then there's sports and human relationships and stuff like that.
Well, you could probably, well, this is Finnish.
So you could probably follow Finnish sports team, how they are doing through how people are cursing.
They are either cursing because we are losing or cursing that, well, we won this time.
Yeah.
Or how are they expressing their extreme emotion in a positive or negative way?
Well, it's mostly about the same.
Yeah, it's tough.
I'm sure it's actually a really tricky natural language processing problem.
Yeah, it's something that I have a data set of like 100 million Finnish tweets that contain a curse word.
And I'm trying to figure out a way to make that somehow public and usable to everyone.
It's really interesting data.
That is actually pretty cool.
Nice.
All right.
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.
And this one had been on my list, my reading list for a very long time.
I haven't read it.
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.
A couple of those are about physical things, but this is about interface design, right?
Yeah, this is interface design.
And it's, well, it starts with like on the conceptual level, how to design systems.
That's kind of probably only good to know if you're a Python programmer.
But then it goes on like stuff like that are like immediately usable or that make you think stuff like that.
Don't make stupid error messages.
Make the software that you're creating.
Think it as like a service person.
You don't want to forget things that you have promised to a user.
You don't want to pester the user with unnecessary questions all the time.
And you don't lose your customer stuff.
If they give you something, you don't lose that.
It has really, really good metaphors of how your program should be that it solves the user problem.
Not only your problem as a business or as a developer.
Right.
And it has a, I think this might be one of the first places where the concept of personas came from.
I think this is the origin of that, but I'm not 100% sure.
Yeah.
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.
Think through using it.
I guess you could even do it for an API like an open source library if you want.
Yeah.
Think through like working with it with that persona, the various personas and like, what are their goals?
What do they want out of this?
What are they bringing to the table?
How are they going to work with it?
And things like this.
Yeah.
Yeah, exactly.
Thinking your software through your users point of view.
Yeah.
That sounds really cool.
Yeah.
It's something that I revisited lately.
I had read it like 15 years ago when it was first or second edition.
And it's really good book.
It's, it has really good, like a one sentence summarizations of what makes software good and not only the user interface good.
Yep.
And this one is from September, 2014, the fourth edition.
So very nice.
Yeah.
It's up to date to iOS seven level or something like that.
So it's, it has pretty recent UI screenshots in there.
Nice.
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.
It's thinking in systems, Primer.
Primer, take your pick.
Yeah.
By Donald L.H.
Meadows.
It's, I think it's one of the lesser known books, but it's one of those.
I think the classic that everyone thinks is, is the fifth discipline by Peter Senge.
And it's, I think it's kind of a, you step an abstraction level or two up from your code.
And this is kind of a stuff that you end up worrying about.
It's like a very simple systems that have like an actors and they have interfaces.
Then there are stuff in the system that make it work as an entity.
And it doesn't need to be anything complicated.
It's it can be like a bathtub that has an incoming water flow and outgoing water flow.
It can be a store inventory.
You have stuff stolen from you.
You have the stuff that is delivered from the factory.
And then there are the customers that buy from you.
Or if you have fresh produce, something may go bad before it's sold and stuff like that.
And you end up in those systems.
You easily end up in situations that you can't really predict or fix with any kind of a simple solution.
You need to consider that.
What are the delays?
What are the feedback loops?
What is the system doing itself?
It's not just that someone who is making sure that store has everything.
It's not their smartness or stupidity that makes the store run out of beer on a hot summer day.
It's all kinds of interfaces that convenience store has to other people and even weather that affect everything.
Yeah.
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.
And you said you think this can apply to software systems or human systems, right?
Yeah, exactly.
It's kind of a...
I've done like...
I've mostly been in pretty small companies lately.
But I've also gone to big, big IT departments to like cloud consultation and stuff like that.
There are a thousand people that everyone is smart when you take them apart.
But then when they work together with all the systems that have piled up during like 20 years, it's really slow.
And you sometimes end up stuff that you really can't understand.
Why?
If you ask anyone, they will say that, well, this is not an optimal way of doing things.
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.
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?
If this ticketing system makes everything last two weeks, whenever I want something, it takes two weeks.
These people are not stupid.
You understand that.
So what is it there you can do to perhaps make things faster?
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?
Yeah, exactly.
Yeah.
When you have big organizers and those things start adding up.
Yeah, yeah.
There's a nice quote from the book that says,
Pretty cool.
Yeah.
I like the book.
And it's one of those like one evening or two evening books.
And then you can, if this is something you really like, there are a lot of books about systems thinking, this area in general.
And also design thinking, which is kind of a perhaps the more fashionable choice nowadays compared to systems thinking.
Yeah.
The next one that you chose is somewhat related to this called Thinking Fast and Slow by Daniel Kahneman.
Yeah.
And this is a really cool book.
I haven't read it.
I've sort of put it on my list of things to read, but I haven't got to it.
Tell us about it.
Yeah.
This is the word irrational is not the right word, but it's about people can't help themselves.
They have like this fast thinking system, which is evolutionary creation of like you detect the danger and you need to react immediately.
I heard a noise.
Is that a lion or a squirrel?
Yeah, exactly.
Stuff like that.
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.
And it's kind of pairing with the other one is also the about face and thinking in systems.
It's kind of you need to understand people and people aren't as like as left brain as our industry often thinks.
Yeah.
You are a philosophy major, right?
A lot of the people in the like Hobbes and those guys, they talked about like the rational person versus the irrational.
And they often treated people as just rational thinkers.
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?
No.
Yeah, it's exactly.
And it's not like the rational means that you follow the same rules all the time.
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.
And sometimes it doesn't even help you.
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.
That's called a price anchor.
You know that it's not even close to that.
And even knowing that and even knowing the effect, you still have the $1,000 there affecting your evaluation of the price.
Right.
Like here, this thing is normally sold for $1,000, but it's on sale for $599.
Yeah.
You can trick people to make them think it's a good deal versus, well, it's just for $599.
They might go, that's not a good deal.
It's way too expensive.
Yeah.
And when you see the price $599, you start thinking through your needs and your values.
But when you contrast it with the $1,000 going rate and it's like, oh, well, it's practically free.
Can I buy it?
Yeah.
The craziest example that I can think of is Black Friday, the crazy shopping experience after Thanksgiving in the U.S.
Yeah.
So bring this back to software.
Like what lessons can we take from this for helping like users, helping designer software, things like that?
All these books like build up like a toolbox of things that are outside the like immediate day-to-day programming.
And it's really good to understand people.
Even if you are writing like backend software, you are still writing software for people.
And people are not, well, you are serving them.
You are in a service business.
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.
Right.
Even if they don't necessarily know they need it, maybe.
Yeah.
That's like a really good software stuff that solves a problem that user is not even aware of.
This portion of Talk Python is brought to you by us.
As many of you know, I have a growing set of courses to help you go from Python beginner to novice to Python expert.
And there are many more courses in the works.
So please consider Talk Python training for you and your team's training needs.
If you're just getting started, I've built a course to teach you Python the way professional developers learn by building applications.
Check out my Python jumpstart by building 10 apps at talkpython.fm/course.
Are you looking to start adding services to your app?
Try my brand new consuming HTTP services in Python.
You'll learn to work with RESTful HTTP services as well as SOAP, JSON, and XML data formats.
Do you want to launch an online business?
Well, Matt McKay and I built an entrepreneur's playbook with Python for Entrepreneurs.
This 16-hour course will teach you everything you need to launch your web-based business with Python.
And finally, there's a couple of new course announcements coming really soon.
So if you don't already have an account, be sure to create one at training.talkpython.fm to get notified.
And for all of you who have bought my courses, thank you so much.
It really, really helps support the show.
Those were the 10 books.
And then you gave us a plus one, right?
Yeah, this plus one is like, I think everyone should have a fun book outside your...
Outside your specialty, right?
Yeah, outside your specialty, you should have one book.
One fun book.
And mine is Learn Your Haskell for Great Good.
It's like, I'm fascinated by Haskell.
I really don't understand anything about it.
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...
That is very applicable to any kind of a Python application.
But this is kind of a...
You probably have your own fun book that you go every now and back to every now and then.
And this is mine.
Yeah, this is really cool.
It's illustrated.
It's supposed to be funny, but it also is supposed to teach you Haskell.
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.
Yeah.
And it's...
Right.
I believe that you also need to like know pretty theoretical stuff.
And I...
Well, somebody might disagree with me, but I think Haskell is mostly a theoretical thing.
It has a nice type system and it has nice abstractions on side effects and stuff like that.
But it's...
I probably wouldn't write production code with it.
Sure.
The closest thing that I learned and studied and know a little bit close to this is Lisp or Scheme.
And I would not go write anything in that at all.
There's like four languages I would choose before I would pick that language for a thing at least.
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.
Yeah.
One of those Scheme, Lisp, or Haskell are really good at that.
My programming languages 101 was an AFL.
I don't know if you remember that language back from the early 90s.
Which language?
AFL.
Yeah.
I do remember the name, but I don't know anything about it.
Yeah.
It's like object-oriented programming due to the max.
It's like all sorts of things that you have multiple inheritance there.
One of the really cool things about that language was like a design by contract.
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.
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.
Yeah.
Absolutely.
All right.
So, learn you a Haskell for great good.
Very nice.
Okay.
So, this has been a very interesting list.
And everyone has their own list of things that they really like.
And certainly, many of these books are on my list as well.
I would say, if people are listening, check out the episode page and go to the bottom.
There's a discussion section.
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.
I think that'll be lots of fun.
Yeah.
Yeah, nice.
Okay.
So, before we get out of here, let me ask you the two questions.
If you're going to write some Python code, what editor do you run?
I used to be a solid Vim guy.
When I'm not coding, I used to be like, this can handle a broken terminal after a nuclear war.
I can really do anything with this.
And then I realized maybe this is not a reason to choose a programming environment in 2010.
And then I started learning things.
When doing Java, I really enjoyed IntelliJ.
I've also used IntelliJ stuff like resharper on .net.
And it was quite easy to jump to PyCharm.
And I'm now a PyCharm convert.
I really use it.
That's the only thing that I open up when doing Python.
I've tried Visual Studio Code.
I really liked it.
But I already had familiarized myself with PyCharm.
Cost of change was not justified, I would say.
Yeah.
I hear you.
All right.
Go PyCharm.
That's my favorite as well.
And notable PyPI package.
Yeah.
Well, I had to, in my mind, it's like the old one, the natural language toolkit for Python,
which solves many problems, which solved many problems like 20 years ago that people are
struggling today with any kind of text processing and splitting text to sentences or paragraphs
and stuff like that and any multiple languages.
But the one that I picked today is called Newspaper.
I'm so fascinated with this one right now.
It's just like I was writing one of those web scraper things a couple of months back.
And then I just, there must be something that you could do with newspapers directly.
And it's like a full-blown system for picking up newspaper, like articles from a newspaper page.
And then when you have the article, pick up its title, its main text, pictures, and stuff like that.
I'm flipping through the GitHub page here.
This thing is incredible.
There's some things I'm like, oh, that's pretty neat.
I could probably use that someday.
This just makes me want to try it, like straight up.
Yeah, it's like one of those Python comes with that batteries included thingy.
This just made me happy when I found this.
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.
Yeah, yeah.
So let me give people a sense of this.
So I'll put the link, of course, in the show notes.
But you go and you install it and you say, from newspaper import article.
And then you say, create an instance of the article.
And you give it a URL, like some news article, literally.
Give it like the page of that.
Say download.
You can get the HTML.
You can parse it.
And it has a list of authors.
Publish date.
It has the date.
You can say, what's the top image?
You can run an NLP processing on it.
It has the keywords and a summary and all sorts of craziness.
It's really, really fascinating.
It doesn't work as well on all web pages.
But it's really, really impressive that you even have something like this.
Cool.
All right.
That's a really great recommendation.
I've never heard of it.
So thank you.
Yeah.
All right, Timo.
It's really fun to talk about these books and reminisce on some old ones and learn about
some new ones for me.
So thanks for being on the show.
Yeah.
Thank you.
You bet.
Bye.
This has been another episode of Talk Python to Me.
Our guest has been Timo Kola.
And this episode has been brought to you by Rollbar and us right here at Talk Python Training.
Rollbar takes the pain out of errors.
They give you the context and insight you need to quickly locate and fix errors that might have
gone unnoticed until your users complain, of course.
As Talk Python to Me listeners, track a ridiculous number of errors for free at
rollbar.com slash Talk Python to Me.
Are you or a colleague trying to learn Python?
Have you tried books and videos that just left you bored by covering topics point by point?
Well, check out my online course, Python Jumpstart by Building 10 Apps at
Talk Python.fm slash course to experience a more engaging way to learn Python.
And if you're looking for something a little more advanced,
try my WritePythonic code course at talkpython.fm/Pythonic.
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.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Now get out there and write some Python code.
Thank you.