Book Review: Ruby Wizardry

While I’m still cleaning up deeper mathier posts, let’s talk more about books.

So writing about technical topics for non-technical audiences is pretty dang hard. Teaching kids is, I think, the expert level version of this challenge. Not because kids are less intelligent than adults, but simply because kids have a smaller frame of reference and a lower threshold for boredom. This means you have to be extra sharp and concise and interesting to make a case for why something challenging is worth understanding.

A really successful example of good writing for young people is The Way Things Work. I read this book as a kid and while it was silly, and weird, and I laughed at all the doofy mammoths as a small child it was also really really good at explaining a number of scientific and engineering concepts. It never felt condescending. The silliness was never obtuse. It was very clear and very memorable.

A lot of other books, though, tend to be really uncomfortable in their efforts to try and feel NEAT and COOL. I just always picture the author as Steve Buscemi announcing “How do you do, fellow kids?”. When I was a kid I hated when books or tv shows were condescending or tried to Make Learning Fun in some heavy-handed manner. It drove me up the wall and I think most people can remember times someone talked to them like they were stupid when they were a kid and recall with perfect clarity how infuriating it was.

All of that preamble is to explain that I mentally chart writing aimed at kids on the Buscemi-Mammoth scale so we can talk about the book Ruby Wizardry.

First, I want to say that I don’t think the book is bad. I understand that this was probably not an easy book to write and for the most part it’s a clear book, which is a victory in its own right.

On the other hand, I do have some criticisms that put it a little closer to Buscemi-holding-a-skateboard than mammoths playing around illustrated gears.

First, the overall narrative felt distracting. Now, I want to be clear, I’m not against writing a serious book in dialogue form. That may not be a terribly fashionable approach to explanatory writing, but it can work and flow well and really break up the density of a topic. This narrative, though, just had a lot of text that felt extraneous but also not really interesting or entertaining either. I’m not saying this as an adult, I honestly tried to read this book from how I could best guess 8-y/o Clarissa would have read it. I would have been pretty bored by what I thought were really blatant “hey isn’t this fun!” writing. I think it’s even more egregious given that I just double checked and technically the book says it’s aimed at 10+, which is older than I thought. There were also Ruby jokes and _why puns that felt like in-jokes that stuck out as a bit random if you didn’t get why (no pun intended) they’d talk about chunky bacon. The humorous parts didn’t really add anything to the explanation in a lot of places.

There were also some pedagogical things that weren’t hugely problematic, but a little off. Mostly the order of topic introduction and mentioning topics but deferring any real discussion. For example, the concept of object IDs was introduced a good 30 pages before objects themselves. Blocks, which are Ruby’s anonymous functions, were introduced chapters before functions were introduced. Even a little thing like mentioning that you want to edit code with a text editor, but don’t use a word processor, without explaining what that even means. I know what it means and I’m sure if you’re reading this you know what it means, but someone completely new to programming wouldn’t. Overall it’s a relatively small problem, but geez that’s the kind of thing that used to bother me when I was reading technical books as a kid. I’d come across a concept and think “oh man, I don’t know what this is, did I miss something? Do I need to reread a section? Am I just stupid?”. Alright, most people probably don’t have that dramatic of a self-effacing reaction but, still, it’s a stumbling block that just doesn’t need to be there.

I also thought it was maybe a little odd to have a discussion about using symbols instead of strings for optimization in a book that’s aimed at complete newcomers to programming. I’m not saying it’s not an important point, but it felt digression-y for a book that was just barely describing how loops work.

On the other hand, and I know this might sound like me contradicting myself a little, I did think the chapter on refactoring was actually really good. Mostly because it explained the idea of looking at code and looking at how to improve it by understanding it. That’s a great lesson for a newbie.

Before the final part of this post, I want to make a side rant, a sub-rant if you will. Please, can we as a people stop talking about languages as being interpreted or compiled and can we please stop talking about “scripts” like they’re different than “programs”. Implementations are compilers or interpreters. The language is merely the language. While the most official implementation of Ruby is an interpreter, people have written Ruby compilers. It’s a silly distinction to try and make and it just confuses the heck out of people on the periphery. Not even that long ago someone tried to start an actual argument with me over the idea that JavaScript is a scripting language which they believed was inherently different than a programming language. Please. No more.

Now, it probably sounds like I hated this book. I swear I didn’t. If anything, this is half an exercise for me to work out my own thoughts about writing on programming for young people. If I were to summarize my complaints, though, I’d say the core issue is one of motivation. Being “fun” and trying to tell stories doesn’t inherently motivate you to care nor explain why each piece is important and that’s where I was disappointed. The story of wizards and royalty and jealous Pythonistas just wouldn’t have helped me learn the material or stick with it when I was a kid.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s