#130: 10 books Python developers should be reading Transcript
00:00 Michael Kennedy: 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 Koola 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 18th, 2017. Welcome to Talk Python To Me, a weekly podcast on Python, the language, the library, the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I am @MKennedy. Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via @talkpython. This episode is brought to you by Rollbar and us, at Talk Python Training. Be sure to check out what we're offering during our segments. It really helps support the show. Timo, welcome to Talk Python.
01:10 Timo Koola: Thank you.
01:11 Michael Kennedy: 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.
01:31 Timo Koola: Yeah, sounds great.
01:33 Michael Kennedy: Yeah, it sounds fun, huh? But, before we get to that, let's start with your story. How'd you get into programming in Python.
01:37 Timo Koola: I started with Python in 2005. I started programming professionally in '97. I was a philosophy major, and I was thinking whether I should be starting an academic career or get a real job, and I ended up getting a real job. Then, I did something like C and Perl, and all sorts of stuff and slowly wandered into, sort of, a middle management in big companies. In 2005 I figured out that I don't want to do that. I want to be a programmer, and kind of re-learned programming back then. I had done something like, I had always done something like Perl programming. Very small, throw away 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.
02:43 Michael Kennedy: That's really funny. Isn't it weird how some of these huge companies, they'll waste crazy amounts of money on certain things, and then others, 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.
02:57 Timo Koola: Yeah. 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 a 60 thousand people company.
03:09 Michael Kennedy: Oh my gosh.
03:11 Timo Koola: They didn't have a centralized process for that. Then I ended up writing, at first, a 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 at first. I got used to that in two weeks. I 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 the system that you did back then." That's how I got into Python and 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 little with Python. I've done quite a few Twitter bots. That's kind of a fun way to keep up your Python programming skill.
04:10 Michael Kennedy: Oh, cool, yeah. So, tell me about some of your Twitter bots.
04:13 Timo Koola: The most interesting ones aren't finished, but I have two. James Joyce Ulysses Reader that reads Ulysses, perpetually, by James Joyce, and also Finnegan's Wake. There's 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.
04:40 Michael Kennedy: Yeah, I'll put the two Twitter accounts in the show notes, and people can follow them if they want.
04:44 Timo Koola: Yeah.
04:46 Michael Kennedy: And you said you also do some chat bots? Some AWS Lambda chat bots or something like that?
04:50 Timo Koola: Yeah, that's what I do at the work right now. We define it something like a conversation or comments. We take, let's say a product catalog, any kind of a structural data associated with that, and some handmade rules, and try to make it as automated as possible, and generate a chat bot that you can talk to your product catalog with.
05:16 Michael Kennedy: Oh, that's really cool. So, are you using Alexa skills, or how are you understanding the words there?
05:23 Timo Koola: Oh, well, we are both experimenting with AI, which I think is the state of the art at the moment, and then we need to have our own base data to understand Finnish. Take the Finnish sentences, and then take out the stuff that Finnish language adds. Finnish language is quite different from many of the other European languages like English, and German, or even Swedish.
05:49 Michael Kennedy: Yeah, sure. So, are you enjoying working on chat bots?
05:54 Timo Koola: 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 the expected level of intelligence that people want from them, and the bar is quite high.
06:08 Michael Kennedy: Yeah, I've heard people describe both the voice assistants and the chat bot text equivalents as having this problem of the uncanny valley.
06:20 Timo Koola: Yeah.
06:20 Michael Kennedy: And I think this problem, originally, it was stated in terms of animated movies. So, think Shrek or something like that, where, if 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?
06:51 Timo Koola: Yeah, exactly. I think that's exactly what's going on there, and also, it's kind of, even if the system is quite smart, it makes different mistakes than a human would do. What we've found out in our user studies is that you really need to concentrate on a task, satisfy the user's need on a single task. That's how you get there. 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...
07:28 Michael Kennedy: Yeah.
07:30 Timo Koola: That's when it goes sour.
07:31 Michael Kennedy: 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 Echos, and Siri, and HomePods, and all these things are really going to push these companies to make it legitimate. Google Home for example.
07:45 Timo Koola: Yeah, exactly. I have an Echo, and you quickly forget how magical it would have been five years ago. It can pick up your speech in 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.
08:03 Michael Kennedy: Sure, yeah. What are your three favorite things that you do with your Echo?
08:08 Timo Koola: Setting up timers and alarms.
08:12 Michael Kennedy: Wake me up tomorrow at 6:30?
08:14 Timo Koola: Yeah, wake me up at 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 started I need to do laundry tomorrow. Add that to my calendar. Stuff like that.
08:30 Michael Kennedy: Yeah.
08:31 Timo Koola: Then, one of my 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, 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's Alexas went off there. Sing a song, and then they sing a song or tell a joke, and it's kind of funny. Funny how kids interacted with that, and I think it's going to lead something like that. Voice is going to be something like a touch screen 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, quite the way off the iPhone. You started touching every screen even if they didn't work.
09:37 Michael Kennedy: Yeah, that's right. After the iPad came out, there were videos of kids touching real magazines. Little two-year-olds going, "This one is broken."
09:45 Timo Koola: Yeah, exactly.
09:46 Michael Kennedy: Voice will probably be like that. It won't listen to me. It's a refrigerator, it doesn't talk. Sorry. Nice, alright, yeah, I think it's definitely going to be an interesting wave, and I think it must be fun to work with it.
09:58 Timo Koola: Yeah.
09:58 Michael Kennedy: So, there's probably a good place to switch over, start talking about the books. So, you've chosen 10 plus one books for us that you feel are pretty central reading for Python programmers.
10:10 Timo Koola: Yeah. I don't know if these are the definitive 10 books to read, but I try 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 regular Python programmer. Everyone is going to read Python Programming, at least at some point, and everyone probably ends up starting with the Learning Python, but I hope I picked a nice alternative to Learning Python in this instance.
10:47 Michael Kennedy: Yeah. Nice, so, your first book is Automate The Boring Stuff: Python Practical Programming For Total Beginners by, friend of the show, Al Sweigart.
10:58 Timo Koola: Yes. I've listened to that episode, and today when I was preparing for this and I was checking through that 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 there's a chapter about image manipulation that I will almost immediately take in to use after this when I go back and start writing stuff.
11:27 Michael Kennedy: Yeah, it's really cool. It's a very gentle introduction, and one of the things I like about it is I 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 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?
12:02 Timo Koola: Yeah.
12:02 Michael Kennedy: And, so, this book actually comes with a bunch of little problems you can solve, one is automating workflows with Excel, which, I'm sure, resonated well with you given your background.
12:11 Timo Koola: Yeah, I think that kind of solved a problem. It's really a sense of someone trying to learn a new skill 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.
12:43 Michael Kennedy: Yeah, it's really great. So, I also had out, 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, 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.
13:10 Timo Koola: Yeah.
13:10 Michael Kennedy: 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. He and I both are living a similar life. He writes the books and has the courses. I do the podcast and have the courses. So, yeah, if you want to take this as a video course version, that's available as well.
13:28 Timo Koola: Yeah.
13:29 Michael Kennedy: Nice, okay, and then the next one is actually a really short book, right?
13:32 Timo Koola: Yeah. This is something that, when I was learning, was on my desk. Also, often, I carried with it because it's, kind of, 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 that kind of stuff.
13:55 Michael Kennedy: Yeah.
13:56 Timo Koola: And it's kind of a thing that you really need to just put it in your long-term memory.
14:03 Michael Kennedy: Right, sorted of list versus list.sorted. Things like that.
14:06 Timo Koola: Yes. Yeah, exactly.
14:08 Michael Kennedy: So, the book you're referencing is Python Pocket Reference: Python In Your Pocket by Mark Lutz.
14:13 Timo Koola: Yeah. Sadly, it's two or three years old already, and I think it's Python 3.3. Oh, no, no, actually it's Python 3.6 as well, is covered.
14:26 Michael Kennedy: Oh, great, yeah.
14:26 Timo Koola: Yeah.
14:28 Michael Kennedy: And most of the stuff, along with this Python 3, hasn't actually changed that much.
14:32 Timo Koola: Yeah.
14:33 Michael Kennedy: It's more additive rather than changes, too.
14:35 Timo Koola: Yeah, and it's always with this kind of 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 they are timeless.
14:56 Michael Kennedy: 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. I'm pretty good at memorizing these obscure details of programming languages and what not, but, you know, the one that I really need a pocket reference for is JavaScript. I'm always like,
15:14 Timo Koola: Yeah.
15:15 Michael Kennedy: "God, how do I iterate an array correctly in JavaScript again?". I feel like I'm always googling for JavaScript stuff even though I've been doing it for years.
15:23 Timo Koola: Yeah.
15:23 Michael Kennedy: But, with Python, yeah, this is cool for people learning Python.
15:26 Timo Koola: Yeah, exactly. I have the JavaScript one and CSS one, and the only thing is that JavaScript and CSS, they are moving so fast that you're probably learning something that you don't need to learn.
15:41 Michael Kennedy: Yeah, probably.
15:42 Timo Koola: Yeah.
15:43 Michael Kennedy: 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 Beazley and Brian Jones.
15:52 Timo Koola: Yeah, I had it before and I don't know where I lost my copy, but it was really a sense of, 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--
16:10 Michael Kennedy: 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.
16:24 Timo Koola: Yeah.
16:24 Michael Kennedy: 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?
16:35 Timo Koola: Yeah, and this was really a sense of, back then. Now-a-days, it would be a good reference, but often, you just type something into Google and end up in Stack Overflow.
16:48 Michael Kennedy: Sure, so I think this is interesting, coming at it from two ways. The way that you're talking about where you type something into Stack Overflow is, I know I want to make a temporary file and 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?
17:16 Timo Koola: Yeah.
17:16 Michael Kennedy: You could go through these 15 or 20 things, and you're like, "Whoa." Actually, you would be pretty capable. You could almost treat each one of these as a project. You know what I mean? People who are new often have a hard time finding something concrete to practice.
17:30 Timo Koola: Yeah.
17:30 Michael Kennedy: And it seems like there's hundreds of little practices with the solution right here, and I think that's pretty nice.
17:37 Timo Koola: Yeah, and also, kind of a guaranteed quality of these. When you go over that Stack Overflow stuff, you may end up--
17:46 Michael Kennedy: 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?
17:55 Timo Koola: Yeah. And especially if you're new to technology, you really can't tell good answers from bad answers. It doesn't mean that the most important one is the best one.
18:06 Michael Kennedy: Yeah, if I could just uncheck that accepted answer because you know the next one is better.
18:12 Timo Koola: 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.
18:23 Michael Kennedy: Yeah, I think, looping it back to book one, I'm pretty sure Al Sweigart shows you how to take a trace-back error and use Google to find the answer for that. How to fix it.
18:34 Timo Koola: 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. The way of working has changed and I think it's really cool, and sometimes you lose sight of how much we have progressed,
18:57 Michael Kennedy: Yeah
18:57 Timo Koola: And how much easier stuff is. And it's not--
18:58 Michael Kennedy: Yeah, for sure.
19:00 Timo Koola: It's not only good, but it's mostly good.
19:04 Michael Kennedy: 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. 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 compliance 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 'em 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 Wrangling with Pandas, NumPy, and Ipython with Wes McKinnley, McKinney, sorry Wes.
20:17 Timo Koola: Yeah, exactly, and I thought this was something, 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 machine learning, deep learning, and that kind of stuff. It's mostly really boring cleaning up and finding data, and this covers that part. You need to know--
20:48 Michael Kennedy: Right, and that to me, is like the primary goal of Pandas, right?
20:53 Timo Koola: Yeah.
20:54 Michael Kennedy: Pandas is all about loading up semi-structured data, putting it into a consistent structure, maybe re-organizing 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?
21:10 Timo Koola: Yeah, exactly, and it's 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. I think, if you come somewhere from R. The forte of R is cleaning up data and putting it up in a, let's say a 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.
21:47 Michael Kennedy: Yeah, it's pretty cool. So, it starts by introducing you to IPython, Jupyter, and NumPy, and Pandas, and then it really talks about loading, cleaning, transforming, merging, and reshaping data, which it's, you know, it's so powerful with that, and even some visualization stuff. So, it's pretty cool. If you got to do a lot of that kind of thing, then, 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--
22:18 Timo Koola: Yeah.
22:19 Michael Kennedy: Definitely a definitive source of knowledge for that, however.
22:21 Timo Koola: Yeah, exactly.
22:23 Michael Kennedy: Yeah, nice. 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 with this one?
22:36 Timo Koola: This is, kind of, 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, 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 comes with the definitions. What is legacy code? It bluntly defines legacy code as something that doesn't have a test, and then it goes on slowly teaching you how to move from that tier or state to something that is almost enjoyable. Building up, decoupling the system, building up unit tests.
23:29 Michael Kennedy: 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 Effectively With Legacy Code, the original Refactoring book by Martin Fowler.
23:50 Timo Koola: Yeah. That's an excellent book, yes.
23:52 Michael Kennedy: Yeah, and then the Agile Principles, Patterns, and Practices by Robert C. Martin. Those three kind of come together to attack the same problem from multiple directions, and the concept that I still remember-- Sorry, 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, really, like you said, does teach you to think in interesting ways about systems, especially systems which they call brown field systems, not green field where it's half a million lines of code. It's been working for 15 years. It's mission-critical. Please, do not break it, but you have to now take it over and add features to it. What do you do? So, there's all these interesting ways of 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.
25:01 Timo Koola: Yeah.
25:02 Michael Kennedy: And I think that's just really very interesting.
25:05 Timo Koola: Yeah, I really like the notion of seams. "Oh, it has a name. I've been doing this 10 years, but I didn't know this technique had a name."
25:17 Michael Kennedy: 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, it's definitely something that'll change the way that you think about programming, and especially large, old systems.
25:38 Timo Koola: Yeah, and that's where we all end up at some point, doing old, big systems.
25:44 Michael Kennedy: Yeah, that's right. We all end up there somehow. Alright, 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 Okken.
26:00 Timo Koola: Yeah.
26:01 Michael Kennedy: Python Testing With Pytest.
26:00 Timo Koola: Yeah. I bought it and 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 Python--
26:13 Michael Kennedy: It's like I've been doing it wrong for years.
26:14 Timo Koola: Yeah.
26:15 Michael Kennedy: Oh my gosh, I've got to put this down and go fix it right now.
26:18 Timo Koola: Yeah. I like the Pytest philosophy compared to Unittest and all. It's more Pythonic, and reading this book, I realized I've used 10% of the possibilities there is, and it's a quick read. You probably will read it through in one evening or two, and, if you are not super familiar with Pytest, it will probably make you change your project structure and make it more Pytest-able.
26:48 Michael Kennedy: Yeah, that's awesome. Brian did a really good job with this. So, he talks about writing test functions, using the assert stuff, all the standard things, you know, fixtures, but also things like the tempter fixture, the monkey patching stuff, the doctest name spaces, and plugins like finding and using the Pytest plugins, even how to create your own. So, yeah, very, very cool stuff.
27:12 Timo Koola: Yeah, exactly.
27:13 Michael Kennedy: Alright. The next one we have is, sort of, the other side of the Panda story. Once you have the data, how do you go in and 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.
27:32 Timo Koola: Yeah, I had half a dozen of these books, and I think this one was the best companion to all those online courses that everyone probably goes through, either the Coursera one or the Udacity one, or one of my favorites is course.fast.ai. You go through the course, and then you have a vague understanding of the concepts, and then you need to read the book. There's 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 kind of goes through many of the algorithms quickly. It has practice questions, and is, all-around, a good reference to accompany you with learning through trial and error, and through, perhaps, some online course. And, while 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.
28:53 Michael Kennedy: It's really cool. So, it has the fundamentals of machine learning for the first part, and it just goes into what does an end-to-end machine learning project look like, classification, models, perfecter 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 do distributed computation of TensorFlow across multiple machines, and GPUs, and all kinds of good stuff. It sounds really, really fun. Alright, do you get to do any of this kind of stuff with your chat bots?
29:30 Timo Koola: I've mostly done stuff with Finnish language, I have this huge data set of Finnish cursing, and I've been going though that with verti-wick 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 loosen up almost like you're believing in other human beings, but also it really, really gets you nice patterns around what kind of things make people curse.
30:09 Michael Kennedy: Yeah, what are people really passionate about?
30:12 Timo Koola: Well, it's 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 that gets-- Well, you could probably-- This is Finnish, so you could probably follow Finnish sports teams, how they are doing through how people are cursing. Are they cursing because we're losing, or cursing like well, we won this time.
30:46 Michael Kennedy: Yeah. How are they expressing their extreme emotion, in a positive or negative way?
30:53 Timo Koola: Well, it's mostly about the same.
30:56 Michael Kennedy: Yeah, it's tough. I'm sure it's actually a really tricky natural language processing problem.
31:03 Timo Koola: Yeah, it's something that I have a dataset of 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.
31:17 Michael Kennedy: That is actually pretty cool. Alright, 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 reading list for a very long time. I haven't read it, and it's kind of grouped in there with Steven 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?
31:48 Timo Koola: Yeah. This is interface design, and it starts with, 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 stuff that is immediately usable, or that makes you think stuff that don't make stupid error messages. Make the software that you're creating. Think it as 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's stuff. If they give you something, you don't lose that. That's really, really good metaphors of how your program should be, that it solves the user problem, and not only your problem as a business or as a developer.
32:48 Michael Kennedy: Right, and I think this might be one of the first places where the concept personas came from.
32:53 Timo Koola: I think this is the origin of that, but I'm not 100% sure.
32:58 Michael Kennedy: Yeah, so the idea is to break up the users into prototypical groups, and then try to think through interacting with your software, whether it's a website, it's an app, it's whatever. Think through using that. I guess you could even do a forum, an API like the open source library if you wanted.
33:16 Timo Koola: Yeah, yeah.
33:17 Michael Kennedy: Think through working with it with the various personas, and 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.
33:27 Timo Koola: Yeah, exactly. Thinking yourself through your user's point of view.
33:31 Michael Kennedy: Yeah. That sounds really cool.
33:33 Timo Koola: Yeah. It's something that I've revisited lately. I had read it 15 years ago when it was first or second edition, and it's a really good book. It has really good one sentence summarizations of what makes software good, and not only the user interface good.
33:51 Michael Kennedy: Yep, and this one is from September 2014. The fourth edition. So, very nice.
33:56 Timo Koola: Yeah, it's up-to-date to iOS 7 level or something like that, so it has pretty recent UI and screenshots in there.
34:06 Michael Kennedy: 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 what-not. It's Thinking In Systems: A Primer, prim-mer, take your pick.
34:25 Timo Koola: Yeah. By Donella H. Meadows. I think it's one of the lesser known books, but it's one of those, I think, classics that everyone thinks is the Fifth Discipline by Peter Senge, and I think it's kind of a new step in abstraction level, or two up from your code, and this is the kind of stuff that you end up worrying about. It's very simple systems that have inactives, 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 can be 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 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's making sure that the store has everything. It's not their smartness or stupidity that makes the store go run out of beer on a hot summer day. It's all kinds of interfaces that a convenience store has to other people, and even weather that affect everything.
36:14 Michael Kennedy: 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 think this can apply to software systems or human systems, right?
36:28 Timo Koola: Yeah, exactly. It's kind of, I've mostly been in pretty small companies lately, but I've also gone to big, big IT departments to do 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 built up during 20 years, it's really slow, and you sometimes end up with 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 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 do that unless you go 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 that you can do to, perhaps make things faster?
37:45 Michael Kennedy: 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?
37:51 Timo Koola: Yeah, exactly. Yeah. When you're big organizations, those things start adding up.
37:57 Michael Kennedy: Yeah, there's a nice quote from the book that says, "Some of the biggest problems facing the world, war, hunger, poverty, and environmental degradation, are essentially system failures. They cannot be solved by fixing one piece in isolation from the others because even seemingly minor details have enormous power to undermine the best efforts to narrow-minded thinking." It's pretty cool.
38:18 Timo Koola: Yeah, I like the book, and it's one of those 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, perhaps the more fashionable approach, at least now-a-days, compared to systems thinking.
38:39 Michael Kennedy: Yeah, the next one that you chose is somewhat related to this, called Thinking, Fast and Slow by Daniel Kahneman.
38:45 Timo Koola: Yeah.
38:46 Michael Kennedy: 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 haven't got to it. Tell us about it.
38:53 Timo Koola: Yeah, this is the word irrational is not the right word, but it's about people can't help themselves. They have this fast thinking system which is evolutionary creation if you detect the danger and you need to react immediately.
39:12 Michael Kennedy: I heard a noise. Is that a lion or a squirrel?
39:12 Timo Koola: Yeah exactly. Stuff like that. There's this slow deliberate side of you that can solve mathematical puzzles and can learn other languages and--
39:25 Michael Kennedy: Make programs.
39:27 Timo Koola: Make programs and stuff like that. And it's kind of, pairing with the other one, is also About Face and Thinking In Systems. It's kind of, you need to understand people, and people aren't as left-brained as our industry often thinks.
39:46 Michael Kennedy: Yeah, you were a philosophy major, right?
39:48 Timo Koola: Yeah.
39:48 Michael Kennedy: A lot of the people in the Hobbs and those guys, they talked about the rational person versus the irrational, and they were often treated people as just rational thinkers. A lot of the economic policy in capitalism, and John Keynes, and those types of guys, they always, okay. People are going to act rationally for themselves, but maybe not, right?
40:12 Timo Koola: No, yeah, exactly. It's not like, rational means that you follow the same rules all the time and 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. Just like you can't help yourself. If someone says that this is worth a thousand dollars, and you know that it's not true, that's called a price anchor. You know that it's not. Not even close to that. And you, even knowing that, and even knowing the affect, you still have a thousand dollars there, effecting your evalutaion of the prize.
40:56 Michael Kennedy: Right. This thing is normally sold for a thousand dollars, but it's on sale for $599.
41:00 Timo Koola: Yeah.
41:00 Michael Kennedy: You can trick people to make them think it's a good deal versus, well, it's just for $599. They might go, "Well, that's not a good deal. That's way too expensive."
41:08 Timo Koola: Yeah, and when you see the price $599, you start thinking through your needs and your values, but when you contrast it with the thousand dollar going rate, and it's "Well, it's practically free. Can I buy it?".
41:22 Michael Kennedy: Yeah, the craziest example that I can think of is Black Friday, the crazy shopping experience after Thanksgiving in the US every year.
41:30 Timo Koola: Yeah.
41:31 Michael Kennedy: So, bring this back to software. What lessons can we take from this for helping users, helping designer software, things like that?
41:39 Timo Koola: All these books build up a toolbox of things that are outside the immediate day-to-day programming, and it's really good to understand people even if you are writing back-end software, you are still writing software for people, and people are not, well, you're serving them. You're in the service business. You need to be like a really good waitress that serves them with the stuff that they eat, with the stuff that solves their problem.
42:11 Michael Kennedy: Right, even if they don't necessarily know they need it maybe, yeah?
42:14 Timo Koola: Yeah. That's a really good software is stuff that solves a problem that the user is not even aware of.
42:20 Michael Kennedy: This portion of Talk Python To Me 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 Talk Python.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 Makai 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?
43:29 Timo Koola: Yeah, this plus one is I think everyone should have a fun book outside your--
43:35 Michael Kennedy: Outside your specialty, right?
43:37 Timo Koola: Yeah, outside your specialty, you should have one book, one fun book, and mine is Learn You a Haskell for Great Good. I'm fascinated by Haskell. I really don't understand anything about it, but this book, I occasionally pick up and read a chapter there, and look at monads 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 back to every now and then, and this is mine.
44:11 Michael Kennedy: 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.
44:25 Timo Koola: Yeah, and it's, I believe that you also need to 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 I probably wouldn't write production code with it.
44:50 Michael Kennedy: 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 four languages I would choose before I would pick that language for a thing at least. But, it really opened my eyes to the way we can write programs and think through solving problems algorithmically is way broader than I thought.
45:16 Timo Koola: Yeah. One of those Scheme, LISP, or Haskell are really good at that. My programming languages 101 was on Eiffel. I don't know if you remember that language back from the early 90s.
45:29 Michael Kennedy: Which language?
45:30 Timo Koola: Eiffel.
45:31 Michael Kennedy: Yeah, I do remember the name, but I don't know anything about it.
45:33 Timo Koola: Yeah, object oriented programming to the max. It's all sorts of things that you have multiple inheritance there. One of the really cool things about that language was a design by contract. It had a language level support for assertions in classes, preconditions for functions, and post-conditions 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 programmers.
46:12 Michael Kennedy: Yeah, absolutely. Alright, 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.
46:44 Timo Koola: Yeah.
46:45 Michael Kennedy: 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?
46:52 Timo Koola: I used to be a solid Vim guy, and when not coding, I use that. I used to be like this can handle a broken terminal after a nuclear war. I can really do anything with this. 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 and I've also used IntelliJ stuff 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, and the cost of change wasn't justified, I would say.
47:54 Michael Kennedy: Yeah, I hear ya. Alright, go PyCharm. That's my favorite as well. And, notable PyPI package?
48:00 Timo Koola: Yeah, well I had two in my mind. It's the old one. Natural Language Toolkit for Python which solves many problems, would solve many problems like 20 years ago that people are struggling today with any kind of a text processing and splitting text to like sentences or paragraphs, and stuff like that, and learning in multiple languages, but the one that I picked today is called Newspaper. I'm so fascinated with this one right now. I was writing one of those web-scraper thingies a couple of months back, and then I just, there must be something that you could do with newspapers directly, and it's a full-blown system for picking up articles from a newspaper page, and then when you have the article, pick up its title, its main texts, pictures, and stuff like that.
49:00 Michael Kennedy: I'm flipping through the GitHub page. This thing is incredible. There's some things that I'm "Oh, that's pretty neat. I could probably use that some day." This just makes me want to try it straight up.
49:10 Timo Koola: Yeah, it's one of those. Python comes with that batteries included thingie. This just made me happy when I found this. This is exactly like the batteries included, and you don't need to write your own damn web-scraper again for the thousandth time.
49:26 Michael Kennedy: 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, some news article. Literally, give it 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.
49:59 Timo Koola: It doesn't work as well on all webpages, but it's really, really impressive that you even have something like this.
50:06 Michael Kennedy: Cool. Alright, that's a really great recommendation, and I've never heard of it. So, thank you.
50:09 Timo Koola: Yeah.
50:10 Michael Kennedy: Alright, 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.
50:16 Timo Koola: Yeah, thank you.
50:17 Michael Kennedy: You bet, bye. This has been another episode of Talk Python To Me. Our guest has been Timo Koola, 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. Hence, Talk Python To Me listeners, track a ridiculous number of errors for free at rollbar.com/talkpythontome. 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 Jump Start By Building 10 Apps at talkpython.fm/course to experience a more engaging way to learn Python, and if you're looking for something a little more advanced, try my Write Pythonic 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 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.