Have you ever had a friend who was mostly functional, but not quite with it? Like, this is a kid that refuses to eat salads with salad dressing and wears shorts when it’s 10 degrees outside. You’re friends for multiple years, but then one day, you finally go to his place and you find out that his parents collect Victorian era dolls and pose them in realistic situations. And then as you stare into the eyes of Sally, the life-size doll enjoying a cup of tea, you realize, with a sense of sadness and acceptance, where your friend's weird quirks come from.
This is how this book made me feel. After using R for several years, I was finally looking under the covers at what made R tick. It isn’t always pretty, but all the quirks that make R so hard to learn if you come from a sane language like python or Java finally have a motivation.
This is actually no indictment of the book itself. Hadley does an admirable job of explaining the differences between R’s THREE object systems (this is particularly insane to me) and their motivations. In fact, Hadley does such a good job describing the motivations behind some of the quirks in R, that some of them even seem like a reasonable idea.
So at the end of the day, will this book make you a better R programmer? Honestly, it depends on who you are. Everyone could benefit from the chapter on data structures, subsetting and functional programming. If you are a day-to-day data analyst, some of the profiling and knowledge of the inner machinations of R could be helpful in edge cases. If you’re a serious R package developer, this stuff is extremely useful.
The chapters on meta-programming were pretty mind-numbingly boring and really only useful in a niche set of cases. Actually, Hadley Wickham himself insists that the metaprogramming chapters of this book are okay to skip. The two best chapters were the chapters on base data structures, functional programming and performance analysis. Even if you have a formal background in these areas, these chapters are the most informative on R’s design philosophy: flexibility is king.
Moreso, the exercises in this book are really top notch. Every question presents a different challenge that makes you think like an R language designer! The questions certainly aren’t easy (no way did I finish all of them), but they will make you think long and hard about the tradeoffs that R had to make.
This is the perfect book for someone who wants to understand R at a level slightly deeper than necessary for an analyst and less than a base R contributor. If you're interested in programming language design or at looking under the hood of R, this book rocks.