Books I've read in the second quarter of 2017
Grammar Girl’s Quick and Dirty Tips for Better Writing
Mignon Fogarty, aka Grammar Girl, is best known for her educational, award-winning podcast Grammar Girl Quick and Dirty Tips for Better Writing. With over 500 episodes, spread over more than 10 years of existence, it’s one of the longest-lived and most popular active podcasts. It’s a shame I never had the time to listen to it, so I tried to partially redeem myself by reading this book, which could be described as the collection of the greatest hits from the podcast.
The book delivers exactly what is promised on the cover: collection of short and useful tips that will help you improve your writing. Grammar Girl explores various topics, including grammar, punctuation, usage and style. This book is especially useful if you are not a native English speaker or don’t have much writing experience. Combine it with Strunk and White’s The Elements of Style and you will get tremendous results in just a few hours.
The thing I liked the most about the book is Grammar Girl’s gentle approach to teaching. She never tries to be authoritative or judgmental, unlike most of the other academically oriented authors writing about grammar. She also offers a lot of examples, analogies and silly memory tricks: you will always remember the difference between i.e. and e.g. after reading this.
Grammar Girl’s book helped me a lot and I can’t recommend it enough. If you are into audiobooks, be sure to pick up the audiobook version, because her narration is as great as the content itself.
Spelunky (Boss Fight Books Book 11)
Spelunky is a procedurally generated platformer created by Derek Yu. It was one of the most critically acclaimed games of the last decade. Even though I love the roguelike genre (I’ve spent hundreds of hours in The Binding of Isaac, Nuclear Throne and Galak-Z), I’ve never played Spelunky, but that didn’t prevent me from reading the book about it.
Spelunky book was written by the game’s author himself. I began reading without high expectations, but after only a few pages I knew I was in for a treat. Derek is a game designer, but his writing puts a lot of professional writers to shame. He presents the complete history of the game and talks about his game-design philosophy. Nowadays, when you can get achievement for literally starting the game, games that don’t hold your hand every step of the way give you back hope. On every page of this book I found some idea that made me think “This is how games should be made!” This book quote best sums up Spelunky’s philosophy:
We can’t have everything that we want all at once, though. We can’t know what to expect and also be surprised. We can’t be free from frustration and also be challenged.
Spelunky is built on simple ideas. Derek explains how the levels are generated and how game characters behave. One would think that understanding these systems would take away something from game enjoyment, but it’s the complete opposite. Many of the game’s “bugs” resulted in some fascinating new way to beat the game (Solo Eggplant Run by Bananasaurus Rex was particularly impressive and nerve-racking). Spelunky can be completed in less than two minutes, but it takes hundreds of hours to master it.
You don’t have to know anything about the game to enjoy this book. Whether you are a gamer, a game-designer, or just a programmer, this book absolutely belongs on your bookshelf.
Production-Ready Microservices: Building Standardized Systems Across an Engineering Organization
Microservices are all the rage these days, so I wanted to become more familiar with some of the best practices in the field. This book had some good reviews and was relatively short. Besides that, Susan J. Fowler is probably a microservices expert, having previously worked on microservices standardization at Uber, and currently working as an engineer on the in infrastructure team at Stripe (she is also an Editor in Chief of Increment, which you should totally read). That lead me to believe she would certainly have some unique insights to offer. Unfortunately, this book fell short of my expectations.
Central theme of Production-Ready Microservices is building available services, which require the following goals to be met: stability, reliability, scalability, fault tolerance, catastrophe-preparedness, performance, monitoring, and documentation. If you already know how to achieve them, this book doesn’t offer you anything new. If you don’t, it will not help you implement any of them. Some of the important topics were only mentioned in passing. For example, service discovery has one dedicated paragraph; you can’t really do anything with that. Besides that, all of the book’s topics had been previously described more in-depth in both SRE Book and The Cloud Book. Even though the book is very short, it’s not really packed with content; James Hamilton talks about the most important ideas behind internet-scale services in less than twenty pages in his paper On Designing and Deploying Internet-Scale Services. One great thing about this book are checklists at the end of each chapter, but even they are inferior to checklists from The Cloud Book.
Susan’s heart is at the right place, but the book could have been a lot better. She did much better job with the Increment. Go read it instead.
Distributed systems for fun and profit
Distributed systems are incredibly hard to get right; just read any of the Kyle Kingsbury’s Jepsen analyses and you’ll see what I’m talking about. Even though there is a lot of literature on the topic, most of it is in the form of academic papers, thus making it hard for beginners to get started in the field. During one of his Jepsen talks, Kyle mentioned this free online book as a good introduction to distributed systems. I had it bookmarked for more than a year, but now I finally found some real motivation to read it.
This book only touches the surface of distributed systems. It’s also very short: less than 100 printed pages. Nevertheless, it still talks about all the important stuff: CAP theorem and FLP impossibility, time and order, consistency models and protocols, CRDTs, etc. Each chapter provides a high-level overview of a single topic. You will not be able to implement any of the described algorithms, but don’t worry: each of the key papers in the field is mentioned, so you’ll know where to find a more serious treatment. Even though the book is aimed at beginners, I think some parts of it you can understand only if you have some previous knowledge. For example, 2PC and Paxos are described briefly, but there is no way you could understand what is really going on if this is the first time you encounter these two protocols.
You will not become an expert after reading this book, but at least you will get to know the most important ideas behind modern distributed systems. It is also short, so there is no excuse for not reading it. If you like it, you should also consider reading Kyle’s notes on distributed systems.
Hitler’s Hangman: The Life of Heydrich
Reinhard Heydrich was one of the most sinister and dangerous Nazi officials. He was a chief of the Reich Security Main Office, Reich Protector of Bohemia and Moravia, and creator of infamous Einsatzgruppen. Even though he was one of the key architects of the Final Solution, he is not as widely recognized by the general public as Heinrich Himmler, for example. Part of the reason for that is probably that he never received much attention in literature of the Third Reich. This book attempts to collect all the known information about Heydrich into a single, readable volume: everything from his early childhood to his assassination in Operation Anthropoid.
Nothing in his childhood indicated what he would eventually become. Initially, he was not even a model Nazi: he was dismissed from the German navy, which devastated him and threatened to end his career. The key moment in his life came after that, when he landed a job in the SS. It’s extraordinary how some moments can shape the history of humanity. He was not qualified for the job in the intelligence organization, but because he was reading a lot of crime fiction at the time, he was able to impress Himmler who was even less qualified. This book is full of similarly interesting details about him. For example, did you know he was flying combat missions for Luftwaffe and was once hit by the Soviet fire behind enemy lines, but somehow managed to escape? Or that his assassination could have been a complete failure? Heydrich actually died of sepsis during his recovery in the hospital, where penicillin shot could have saved him had it been used at the time. For these little pieces of knowledge alone, this book is worth reading. But that’s not all: you’ll learn about his meteoritic rise through Nazi ranks, history of the Final Solution, his terror rule in the Czechoslovakia, and the constant fight for power between him and other Nazi figures.
Hitler’s Hangman is a great read, but not without flaws. Good part of the book describes general history of security organizations and Nazi terror in Germany. If you are a seasoned World War II reader, you are probably familiar with most of it. Also, I did not get as much insight into Heydrich’s personality as I have hoped, but because I learned so many new things from this book, that’s not a huge problem. If you are like me and want to learn as much as possible about Third Reich, you should absolutely read this book. If you are just a casual reader, you might want to skip it and read some of the great general histories of the Third Reich.
I usually stay away from all self-help or get-rich-quickly books, but this one is different. Judging this book only by the title, you would be tempted to put it in the same category with thousands of other garbage books on the same topic, but you would be wrong—Ramit Sethi actually knows what he’s talking about. I first became familiar with him when I read two of his interviews with Patrick McKenzie: Ramit Sethi and Patrick McKenzie on Getting Your First Consulting Client and Ramit Sethi and Patrick McKenzie On Why Your Customers Would Be Happier If You Charged More. He had some great advice for running the consulting business, which lead me to think his book might actually be good.
Despite what the title says, this book is not about getting rich in the way people usually think about it—it’s about managing your money responsibly (don’t get me wrong, you will have hundreds of thousands of dollars saved for your retirement if you follow his advice from the book, but that’s not the first thing people have in mind when talking about getting rich). Everything in this book has been said elsewhere before, but Ramit combines all of that and talks about money in a way everybody can understand. One would think that in the 21st century managing your credit cards responsibly, putting the money in 401(k) and investing money into index funds would be common knowledge, but that’s not the case in practice. Ramit tries to correct that. You will learn everything you need to know about credit cards, checking and savings accounts, 401(k) and Roth IRA, index and lifecycle funds, buying a house or a car, and much, much more. You will also learn that investing is not about picking stocks, and that by only using an index fund for investing, you will automatically be ahead of most professionals that actively manage funds.
Everything is nicely summarized at the end of each chapter, so you can easily come back and remind yourself when needed. This book could have been much shorter (you could essentially just read this comment for investing the right way), but because everything in it is incredibly important, I don’t mind it that much: he had to get the point across, and that means he had to go into details sometimes or say things repeatedly. As a nice bonus, he also talks about his personal financial setup: which credit cards he’s using, which banks he’s using and what types of accounts he has, how does he split money between accounts automatically, etc.
This book is mostly focused on readers living in the US, but that doesn’t mean you shouldn’t read it if you are living somewhere else. Most of the advice applies everywhere in the world—you can manage your debt, use an online bank, save money, or get a raise wherever you live. Highly recommended.
Style: Lessons in Clarity and Grace
I read The Elements of Style about half a year ago, immediately after starting this blog. It’s classic and indispensable resource that has stood the test of time, but it is only a starting point for aspiring writers. I needed a more comprehensive and detailed style guide. Grammar Girl’s book was a nice addition, and Garner’s Modern English Usage is fantastic reference, but for more lessons on writing style, I had to look elsewhere. Matt Might recommended this book multiple times. You really can’t go wrong following Matt’s advice, so reading it was a natural choice.
The book starts with the quote from Matthew Arnold:
Have something to say, and say it as clearly as you can. That is the only secret of style.
This is Style in a nutshell. Despite what many people believe, there is nothing bad in writing short and clear sentences. How many times have you struggled with textbooks and papers, thinking you are not smart enough to understand what the writer had to say? But it was not really your fault—even the most advanced ideas can be expressed clearly, and this book will show you how to achieve that clarity. Good writing happens on multiple levels (read this excellent article for a great summary of where writing can go wrong) and Style talks about each of them. It starts with basic correctness, advances to coherence on local and global level, and finally finishes with chapters on shape and elegance. Every advice is simple and practical. Here are just a few examples:
Make main characters the subjects of sentences. Make important actions verbs. Put old information before new information.
It sounds simple and obvious, but it’s often overlooked in practice. I also often fall into a trap of writing too many words just for the sake of it. Advices like this now make me think twice before I try to use a redundant word:
Delete words that mean little or nothing. Delete words implied by other words. Replace a phrase with a word.
Each lesson has fantastic summary at the end, so you can easily come back at any time and remind yourself of the most important principles. You can also put your newly found knowledge into action by doing exercises, which are really fun. Unfortunately, terrible navigation in the digital version (VitalSource Bookshelf) of the book prevented me from doing them in my first reading. Don’t repeat my mistake and get the paper book to get the most out of it.
Like in any other profession, you can’t become an expert overnight. You have to put a lot of time into writing to really improve it. Just reading books is not enough, but it’s still necessary, and this one is the single best resource on writing well I’ve found so far. You should read it multiple times to absorb all it has to offer.
Unwanted Advances: Sexual Paranoia Comes to Campus
Unwanted Advances is a terrific book about the insanity that Title IX has become in recent years. Jeff Gamso already wrote a great review of the book and I wholeheartedly agree with everything he says. I couldn’t possible add anything useful to what he said, so this time I’ll skip writing my own review and just forward you to his.
High Performance Browser Networking
Despite the bandwidth growth, modern web can sometimes seem worse that it was two decades ago (as Dan Luu would say, most of the web really sucks if you have a slow connection). With the rise of the mobile devices, web performance is more important than it ever was. If you want to deliver the best possible experience to your users, look no further—High Performance Browser Networking is a classic book in this field.
This book talks about everything you need to know about the networking as a web or a mobile application developer: network types (WiFi, 3G, 4G), internet protocols (TCP, UDP, TLS), application protocols (HTTP/1.1, HTTP/2), and high-level browser APIs (XMLHttpRequest, Server-Sent Events, WebSockets, WebRTC). Even if you are familiar with some (or all) of the topics, you will learn something new and interesting. For example, I never cared about how cellular networks work, but I learned a lot about them reading this book. And it’s not just trivia—knowing how modern mobile networks work is surprisingly relevant to performance. For that reason alone, this book was worth reading for me.
Most people think about the bandwidth as the most important aspect of web performance, and incorrectly assume that their performance problems will sort themselves out with the increased bandwidth. What I liked the most about this book is that the author correctly recognizes that the performance bottleneck for most websites is actually latency and makes it one of the central topics of the book.
To sum things up: if you are developing web or mobile applications, you should read this book. It’s completely free, so there is no excuse for not reading it (having to pay for it should not really be an excuse anyway).
This is the third and the final part of the monumental Richard J. Evans’ Third Reich trilogy (you can find my review of the second book in my previous summary of reading). It covers the Second World War, but mostly from the German perspective (Pacific War was not even mentioned, for example). That means it’s not the best choice if you want to get a comprehensive view of World War II from a single volume (Anthony Beevor’s The Second World War could be a good option in that case). In every other way, it’s magnificent.
Even though this is a very long book, it contains only a small (but fantastic) selection of topics. After all, any single book can only scratch the surface of the most documented war in human history. Here are just a few examples to illustrate what I’m talking about:
-
This book talks about Operation Barbarossa in about a couple dozen pages, thus making it one of the better covered topics. But to even begin to understand what really happened in the Eastern Front, you would have to read something like War Without Garlands: Operation Barbarossa 1941-1942. Battle of Stalingrad was also covered, but for a comprehensive understanding you would have to read Stalingrad: The Fateful Siege: 1942-1943.
-
Operation Overlord played the critical part in the liberation of Europe. It was mentioned in this book only in passing, in single sentence, but there is a whole book dedicated only to it: Overlord: D-Day and the Battle for Normandy.
-
Nazi concentration camps are covered in great detail, so you will actually get a fairly good understanding of them. But again, there is so much more to learn about them. You want a comprehensive history? Read KL: A History of the Nazi Concentration Camps. You want to know more only about Operation Reinhard death camps? Belzec, Sobibor, Treblinka is the book for you. How about just Auschwitz? Anatomy of the Auschwitz Death Camp is only one of the vast number of books on Auschwitz. The list goes on and on.
This book paints a picture about World War II using only a small number of carefully selected topics. From the military standpoint, you will learn about occupation of Poland, invasion of Russia, Battle of Stalingrad, Battle of Kursk, and the final defeat of Nazi Germany, among others. But this book doesn’t talk about military history as much as about the social aspects of the war: harsh living conditions in the ghettos of Poland, evolution of the Final Solution, life in Germany during the War (including the effects of the allied bombing campaigns on people), Nazi treatment of Jews, gypsies, homosexuals and other minorities, T4 program and wartime medical experiments, etc.
Evans himself is a great writer; the book will keep your attention until the last page. He also tries to be as objective and as honest as possible, without being judgmental. As I said previously: if you have the time, you should absolutely read this trilogy—it is one of the greatest history works ever written.
Twitter and Tear Gas: The Power and Fragility of Networked Protest
Zeynep Tufekci is one of my favorite people on Twitter. She plays an incredibly important role in raising the awareness about effects of technology on politics and society. One of her recent efforts was writing an open letter—signed by the world’s foremost experts on security—calling the Guardian to retract the irresponsible story about the alleged WhatsApp backdoor. These are just some of the many reasons I was super excited about her writing a book.
Twitter and Tear Gas describes how social networks forever changed the landscape of protests, with all the good and the bad sides that accompanied the change. Facebook and Twitter are replacing the mainstream media, enabling people to bypass the government censorship, but are also bringing new set of problems—we have just replaced one form of censorship with another, where algorithms and Silicon Valley geeks can decide what is news, who can speak and who can’t (even though that’s not the main topic of the book, it is the most scary one to me). Technology is helping ordinary people, but oppressive regimes can use it, too—if Recep Tayyip Erdoğan had not used the FaceTime during the recent coup, it probably would have been successful and the Turkey could have been a completely different country today.
I was already familiar with most of the topics in the book, so I didn’t learn much from it, but that’s not really the book’s fault. The only real complaint I have is that some chapters are too abstract and uninformative, but besides that, it’s a great read.
Cracking the Coding Interview: 189 Programming Questions and Solutions
Software developer job interview process is hopelessly broken (for a more poetic take, you should absolutely read Kyle Kingsbury’s wonderful trilogy on technical interviews). With Google leading the way, the situation is unlikely to change soon. Passing the programming interview requires the skills that are completely unrelated to the skills needed to actually perform well on your job. This book will help you pass the interview without actually learning algorithms or being able to deliver solutions to the real-world problems you will be facing.
The problems in this book are completely disconnected from the reality, but that’s the problem of the interview process—the author of the book just takes the advantage of the unfortunate state of affairs. If you though that the FizzBuzz was complete nonsense, wait until you see the multithreaded version! Lot of the problems are posed with silly and unrealistic restrictions, where perfectly sane solution for a problem is not allowed, in order to test… I have no idea what. Some problems promote terrible coding practices. For example, almost every solution in the strings chapter assumes ASCII encoding, and would be completely broken for Unicode.
What I especially disliked about this book was the attitude that you should be able to rederive algorithms that some of the greatest minds in computer science invented. On whiteboard. In thirty minutes.
You might recognize this as the topological sort algorithm on page 632. We’ve rederived this from scratch. Most people won’t know this algorithm and it’s reasonable for an interviewer to expect you to be able to derive it.
That’s Kahn’s algorithm. You should also be able to reinvent precedence climbing, Floyd’s Tortoise and Hare algorithm, and Dijkstra’s Shunting-yard algorithm. All of the previous algorithms are described in the book like something that you should be able to come up with on your own (without mentioning the authors). That’s just completely insane.
If your only goal is to game the programming interview, but not really learn about algorithms, this book is a fine choice. But even in that is the case, better choice, in my opinion, would be Elements of Programming Interviews. It is strictly superior in every way, but also harder to get through. If you actually want to learn about algorithms, read Algorithms, The Algorithm Design Manual, or Introduction to Algorithms.