This week we welcome David Kopec (@davekopec) as our PyDev of the Week! David is the author of Classic Computer Science Problems in Python from Manning, as well as several other books. He was even interviewed about his book by Talk Python! If you would like to see what open source projects he is working on, then you should head on over to Github. Now let’s take some time to get to know David!
Can you tell us a little about yourself (hobbies, education, etc)?
Before I start, I want to thank Mike for including me in this series. It’s an honor.
I’m an assistant professor in the Computer Science & Innovation program at Champlain College in beautiful Burlington, Vermont, USA. Before becoming a full time professor, I worked professionally as a software developer, and I’m still open to taking projects on a consulting basis. I have a bachelors degree in economics (minor in English) from Dartmouth College and a masters degree in computer science, also from Dartmouth.
I’m the author of three programming books: Dart for Absolute Beginners (Apress, 2014), Classic Computer Science Problems in Swift (Manning, 2018), and Classic Computer Science Problems in Python (Manning, 2019). However, I no longer recommend the Dart book because it’s very outdated. I’m also an active contributor to open source.
When I’m not working, I enjoy learning about American history, entrepreneurship, and keeping up with the world of computing (although that’s kind of my job too). I also have all the same hobbies that just about everyone has—cooking, traveling, film, reading (classics, biography, history, business dramas), television (Frasier & The Curse of Oak Island!), music, video games (Zelda & AOE2!), podcasts, stock trading, etc.
Why did you start using Python?
When I started graduate school at Dartmouth about a decade ago, I realized that many of my classes were in Python, so I thought: “I better get good at this language!” I really liked the language from the beginning, because of its succinctness and rich standard library. I appreciate how Python often closely resembles the pseudo-code you find in a textbook or you write on the board, but it’s not pseudo-code, it’s real-code.
I’ve used Python on-and-off for web development projects, and we teach several of our computer science courses at Champlain in Python.
What other programming languages do you know and which is your favorite?
It’s a fairly long list—I know. I guess I’m a bit of a language optimist, because the one I like best is often the one I’m really deep into using on a project. Well, if you asked me five years ago about my favorite, I would probably say Objective-C. However, today I don’t really have a favorite. My go-to languages right now are Swift for building Mac & iOS apps, Python for web or scripting work, and C for some of my hobby projects.
I know what I don’t like, though. And that’s C++. I begrudgingly started to learn some of the recent changes in C++ 11, 14, and 17 last week. And while they generally make the language a bit better, they also make the thing I dislike most about C++ worse—its size. It’s just such a big language with so many features that it’s hard to wrap your head around it when you’re not using it every day. I’ve heard it said that even people who write C++ professionally usually only use a subset of the language. I hope to never have the misfortune of writing C++ professionally, so hopefully I will never have to find out. All kidding aside though, it’s not my favorite language. But based on my prior history, maybe I’d start to like it more if I just wrote more of it!
One recent worry I’ve had is that perhaps I’m context switching languages too much. In my work, it’s not unusual for me to be answering student questions in Go, Swift, and Python during the day and then coming home and doing some of my own projects in C. The worry is that I’m no longer spending enough time in a single language to be fully realizing the benefits of mastery. Instead I’m trying to remember how to do something differently in one language than in another.
Thanks for doing the interview, David!