Looking to sharpen your professional skills? Here's Reuven's latest roundup of useful books to improve your knowledge and career.
In the computer industry, you don't have a choice—you must constantly keep learning new things, just to stay in place. I spend many hours each week reading blogs, watching conference videos and just exploring technologies on my own, because if I don't do that, I'm going to find myself unable to use the latest technologies to help my clients.
But of course, there is at least one other tried-and-true way to learn: books. Sure, books (or their electronic equivalents) have been eulogized numerous times during the last few years. But, programming-related books continue to be published, some by well known publishers and others by independent programmers.
Every so often, I take time in this column to review the latest crop of books that have helped make me more effective in my work. As always, the descriptions and reviews of these books (and other media) are not only subjective in terms of the content, but also in terms of the timing; it's quite possible that I only recently discovered a book that came out a while ago. I try to mention books here that you might find interesting or useful in your work, much as I've found them to be interesting and useful in my own work.
Perhaps the most interesting trend we're now seeing in the book market, and especially when it comes to computer books, is the number of self-published ebooks being produced. (Heck, I've written two of them myself: one on Python and another on regular expressions.) These books rely on word of mouth, social media and marketing by the developers/authors themselves.
There's no doubt that traditional publishers continue to have great reach and are producing more books (and well edited books, at that) than independent developers ever can hope to match. But the number of self-published ebooks continues to grow, as well as those sold via sites like https://leanpub.com. It will be interesting to see what happens in the coming years as book-creation systems, such as GitBook and Softcover, make it even easier to create and sell your own books.
So, what have I been reading, and what would I suggest you read as well?
I continue to enjoy reading programming books, partly because there's always something new to learn, partly because different authors offer different perspectives, and partly because I often can pick up insights and tricks that I can incorporate into my courses. I continue to use Ruby on Rails for Web development, so I always am happy to look at Ruby-related books.
One of my most favorite Ruby books is Metaprogramming Ruby by Paolo Perotta and published by the Pragmatic Bookshelf. The book has been updated to include Ruby 2, and although Ruby's underlying object system hasn't changed in many years, every version of Ruby is a bit different—and knowing how to take advantage of those differences can make a huge difference in your productivity. If you are using Ruby in your work, you really should read this book.
Teaching children to program always has been a passion of mine, so I'm always interested in books and software that try to teach kids how to program. Several years ago, I mentioned the book Python for Kids, and it shouldn't be much of a surprise to discover that there's now a book for kids to get into Ruby, called Ruby Wizardry. I think I should distinguish between two different goals here though. If you really want your children to learn Ruby, this book is an entertaining way to do so, with numerous examples and a storyline I'd like to think kids would enjoy. But, if you're trying to teach children to program and are agnostic on the language used, I'm not sure if Ruby is the right way to go. (See below for my recommendation of an on-line system that seems to be doing that right.) My limited experience with trying to teach Ruby, or even Python, to children has been fairly lackluster—not because the materials are bad, but because kids are less interested in the language than in what they can do with the language.
I have been using a great deal of Python in recent years and also have been teaching a huge number of Python classes around the world. I'm always looking for ways to explain advanced aspects of Python better; thus, Obi Ike-Nwosu's self-published Intermediate Python ebook caught my attention. I found that many aspects of this book put ideas into nice context and into a focus that otherwise might have been lost. If you have been working with Python for more than a few months and want to deepen your knowledge and understanding on a few topics, this book seems like a good place to go.
Finally, I continue to work a great deal with PostgreSQL, a database whose features and community continue to grow in size and quality with every passing year. Hans-Jurgen Schonig, a very accomplished PostgreSQL consultant and contributor, has written Troubleshooting PostgreSQL (published by Packt), a book that is something like a first-aid kit for PostgreSQL developers and DBAs. He touches on all of the sensitive topics, including indexing, transactions, locking, monitoring, replication and backups. Even if you have been using PostgreSQL for some time, Troubleshooting PostgreSQL is an excellent investment, one that will more than pay for itself in time saved and hair (not) pulled.
It was probably somewhat inevitable as someone who has worked with databases, uses Python and has an interest in statistics that I would slowly but surely slide into data science. I've thus been spending time during the last year, and especially the last few months, learning more and more about this fascinating subject—both so I can help my clients solve data-science problems and so I can offer training in the use of Python for data science. There has been an explosion of books about data science in the past few years, and I've been working my way through no small number of them.
Two high-quality books about data science are Doing Data Science by Cathy O'Neil and Rachel Schutt, published by O'Reilly, and Data Science from Scratch by Joel Grus, also published by O'Reilly. Grus uses Python and pushes hard in the use of functional programming techniques in Python, along with the standard data-science stack available to Python developers, such as matplotlib and pandas. But, he also provides no small amount of insights into how—and, just as important, when and why—we should use such techniques as linear regression vs. multiple regression vs. k-nearest neighbors. The book contains a very large number of code examples, and because it's written in Python, it's likely to use paradigms with which Python developers already are familiar, such as iteration and comprehensions. The former book, which I have recommended in earlier book-review columns, gives a serious introduction to the how and why, not only including code, but also the mathematical ideas behind that code.
Another book on this topic, currently in early release from O'Reilly, is Python Data Science Handbook written by Jake VanderPlas. If Doing Data Science takes a mathematical approach, and Data Science from Scratch takes a functional-programming approach, then this book takes what I'd call a practical approach—introducing the elements of Python that a budding data scientist most needs to understand, keeping the programming and mathematics at a reasonable level for people who are unfamiliar with either or both. I'm still reading through this early-release edition, but as an introduction to learning science with a relatively easy learning curve, it may soon become my most-recommended book for people new to the subject.
Ivan Idris has written two books for Packt Press that are good overall introductions to data-science tools in Python, namely Python Data Analysis and Python Data Analysis Cookbook. The former introduces the topics and (as with the book by Grus, mentioned previously) provides a tutorial into areas like visualization, time series and machine learning. The cookbook is a complementary volume; instead of teaching based on subjects, it takes a problem-solution approach. I'd suggest that reading the tutorial first is a good idea; you then can read through the cookbook's table of contents and/or index to find the specific issues on which you need to work.
If you're interested in data science, but would rather hear about the insights and perspective than the mathematics, read Dataclysm: Who We Are (When We Think No One Is Looking) by Christian Rudder, one of the founders of OKCupid. In this book, Rudder finds fascinating correlations that provide insights into human behavior—thanks to the huge number of data points collected by the dating site he runs.
I would be remiss if I were to ignore the amazing e-mail list produced by Analytics Vidhya, a name that doesn't quite roll off of the tongue of English-speaking Americans, but which offers daily insights for anyone interested in the technology, algorithms and practice of data science: analyticsvidhya.com.
I might be a software developer, but I also run a small company, so I'm always looking for books that can help me run my company even better or find new business opportunities.
One book, published just before I wrote this column, comes from a group of consultants with a Slack channel. They jointly wrote and published The independent consulting manual, an ebook meant for people who are consulting, or want to consult, but aren't sure where to start, how to find clients, how to price themselves or how to create products. The book (at independentconsultingmanual.com) has many famous contributors, all of whom have made the leap to running their own businesses, and the lessons they've learned, and contributed, make for extremely worthwhile reading.
One of the authors of the above ebook, and a co-panelist of mine on the Freelancers Show podcast, is Philip Morgan. Morgan has done a lot to encourage consultants to position themselves—that is, to define a specific niche in which they can be the best-known experts. His book, The Positioning Manual for Technical Firms (available at ThePositioningManual.com) is full of excellent advice, including many reminders that although advertising yourself in a specific niche might seem like a way to lose money, it's actually the ticket to making more and to becoming a more successful consultant.
Of course, I read about other subjects too. If, like me, you're interested in the intersection of history, science and food, you should read the book Consider the Fork by Bee Wilson, which describes the evolution (and diversity) of kitchen utensils and gadgets. Wonder why China and America have different-shaped spoons or how forks and the shape of our teeth are related? This book describes it all. I was introduced to this book by the great “Gastropod” podcast, which talks about these subjects in great depth.
Another great book that I read this year is What If by Randall Munroe, the author of XKCD. In What If, Munroe asks crazy hypothetical questions, but then proceeds to answer them with the perfect balance of science and humor. I read the first part of this book while eating at a restaurant, and I feel bad for the other patrons who had to endure me laughing quite loudly at the absurdities in this book, mixed together with (of course) great illustrations and explanations.
Finally, my children are getting older, so I have less and less of a chance to read to them. However, I did manage to read The Terrible Two by Mac Barnett and Jory John, a beautiful and funny story about pranks (or “hacks”, as we called them during my undergrad days at MIT), friendship and the all-important goal of making a school principal look foolish in front of the students.
I continue to listen to a very large number of podcasts each week, partly because I enjoy them so much and partly because they're so convenient for someone like me, who often commutes by bus or train to clients' offices.
Two new Python-related podcasts have emerged in the last year: “Talk Python to Me” and “Podcast.__init__” are both interesting, with great interviews and many insights into technologies that I either use every day or should start to learn.
Other podcasts that I enjoy tend to be on the subjects of politics and economics—from Slate's “Political Gabfest” and “Slate Money” to NPR's “Planet Money” to “Podcast for America”, an irreverent look at the US political race. But there are many other great podcasts to try, such as the BBC's “More or Less” about statistics, “Functional Geekery” about functional programming, “Freelancer Transformation” about how to become a successful consultant and “Startup”, which is all about what it's like to run a venture-based startup company.
I mentioned earlier my interest in helping children learn to code, and I've discovered (thanks to my ten-year-old son) a terrific site that does just that: Code Monkey (at PlayCodeMonkey.com) uses CoffeeScript of all things to teach programming to children. However, it does so using inventive and creative graphics, high-quality error messages and a staged approach that does a very good job of introducing programming to kids aged 8–12. In my son's case, his school paid for entry into all of the levels, but I would gladly have paid the $30 that Code Monkey charges to do all of the levels it offers, as well as build some of my own. It's rare for me to say that I have seen an educational technology that lives up to its hype, but this is definitely one of those times.
Finally, let me mention a site that I run called Daily Tech Video (DailyTechVideo.com), which offers a new, high-quality conference video every day. If you're interested in open-source technologies, programming languages, databases and even some computer history, I invite you to take a look at my site and even to suggest high-quality conference talks I might have missed. You also can follow the site's update on Twitter at @DailyTechVideo.