header image


December 21st, 2006

Since I am relatively new to Ruby, , I have no idea how life could have been in the dark ages of the non-Japanese-speaking Ruby community (1995 - 2000), , when there was no English Ruby book on the market. , The ice was broken by Andy Hunt and Dave Thomas with a pickaxe - err… , actually the Pickaxe (a.k.a. , “Programming Ruby”), , which has undoubtedly become an all-famous Ruby-classic since then. ,

In the foreword, , Matz, , the author of Ruby, , explains that since he is much better in coding than in documentation writing, , probably the authors did not have an easy job - what they could not find in the (rather scant) documentation, , had to figure out directly from the Ruby source code. ,

The Ruby book scene looks radically different today. , In fact we are facing the opposite problem: there are so much books on Ruby that sometimes it can be hard to choose which ones to read and in which order. , Probably it won’t be any easier to find the answers for these questions in the future: judging from the blogs and announcements, , the bigger part of the books is yet to come. , If you are new to Ruby you will most probably have a hard time figure out how to spend your money wisely [1] - so what’s the solution?

Of course there is no definitive answer for this question - I can only tell you what worked for me.

First I would definitely recommend David A. , Black’s Ruby for Rails [2]. , It is absolutely suited for newcomers (and for advanced hackers, , too), , no matter if you are new to Ruby and/or coming from a different programming language [3]. , I was also a Python enthusiast (through doing most of my everyday work in Java) when I have discovered Ruby - and David’s book was a perfect choice to switch very fast.

Currently I am undecided between the 2nd and the 3rd place, , so let’s say you should check them out in parallel - They are (of course) the pickaxe and Hal Fulton’s “The Ruby Way”. , They are both time-tested Ruby classics, , hence a must read. , However, , if you have time and/or money to read only one of the above books, , in my opinion it should be “Ruby for Rails”.

Although these three masterpieces are - in my opinion - among the most well-written and informative tech books available today, , you have to remember the good old rule: No matter how much books you read or how good they are - you will never become a true Ruby hacker until you actually begin to use the acquired knowledge and put it into practice. ,

After reading these books I wanted to jump into writing some cool stuff - Ruby seemed to be so elegant, , easy, , succinct - and to my greatest surprise, , I could not write too much sensible code :-) (at least not without referring to these books and/or google and/or ruby-talk more frequently that I considered o.k. , to call it programming on my own).

This is exactly the situation where the Ruby Cookbook should enter the scene. , The first three books give you a hint about what can be done with Ruby[4]. , The cookbook offers you well organized content in forms of recipes to show you how it can be done elegantly, , quickly and effectively in a ruby-esque way.

Probably the most frequent answer to the question ‘How should I improve my Ruby skills’ on the ruby-talk mailing list sounds: By starting your own project. , Since I put this advice into practice myself and it worked for me, , I have to agree: armed with the goodies from Learning Ruby, , The Pickaxe and the Ruby way, , the best thing to do is to grab a copy of the Cookbook and jump into your own project. , When I started my one, , a web extraction framework, , I had no idea about documenting Ruby code, , packaging the whole program into a gem, , logging, , writing unit tests (in Ruby) and automatizing these tasks (and a lot of other things - this post would be considerably longer if I would like to state everything). , However, , with the Ruby Cookbook by my side, , learning and putting things into practice from writing the first line until packaging the whole framework into a gem was a piece of cake. ,

If you are unfamiliar with the O’Reilly cookbook series format, , it is a set of ‘recipes’ (problem statement, , solution, , discussion) divided into categories (like Strings, , Arrays, , Hashes… , in this case) for easy lookup of the problem at hand. , While it would be possible and certainly edifying to read the book cover to cover from the start (in this case you should also consider that it has 873 pages), , I found that it really shines when you are stuck with a problem: you search for the relevant category and the relevant problem, , apply the solution, , read the discussion to understand what’s going on under the hood, , rinse, , repeat and after the 3rd or so cycle you will find out that you are not reaching for the book anymore (at least not because of this problem). ,

OK, , time to take a more detailed look at the content.

I would divide the book into five categories: Essentials, , Ruby Specific Constructs, , Advanced Techniques, , Internet and networking and Software Management/Distribution. , I will review them one by one briefly.

  • , Essentials include Strings, , Numbers, , Arrays, , Hashes, , Date and Time, , Files and Directories. , For a beginner Ruby journeyman, , these chapters are a real gold mine. , Though the cookbook is not really intended for total beginners (it assumes a fair amount of Ruby knowledge), , it certainly would not be impossible for a skilled (non-Ruby) programmer to understand most of the recipes since they are going from simple to complicated (e.g. , the String chapter begins with concatenating strings and closes with showing off text classification with a Bayesian classificator).

    , In this category I have probably learned the most Ruby best-practices from the chapters Arrays and Hashes [5]. , As a constant lurker on the ruby-talk mailing list, , I have had some hard time figuring out all those inject()s and collect()s and each_slice()s and each_cons()s and other enumerator/iterator things - when I have thought I already understood them, , somebody came with an even more complicated example and I was not so sure once again - until the moment I bought the book, , that is.

    , The cookbook is very good at eliminating these vague and wobbly things like I had: you will not only understand what’s going on, , but actually get comfortable using the idioms so typical for Ruby. , That’s so great about it. ,

  • , Ruby Specific Constructs featuring Objects and Classes, , Modules and Namespaces, , and Reflection and Metaprogramming. , Every newcomer to Ruby encounters the wonders that (not exclusively but most characteristically) make the language so beautiful: code blocks, , closures, , mixins, , the vast possibilities offered by metaprogramming and reflection just to mention some of them. , This chapter is written exactly to examine and discuss these constructs.

    , While probably I learned the most new things from this section, , I have to say that I have been missing a meta-level here: The chapters (especially about metaprogramming) presented a lot of fancy LEGO bricks but did not show how to build a Statue of Liberty or Eiffel tower out of them (well, , not even a simple medieval castle in my opinion :-). , Of course this does not need to be a problem - metaprogramming techniques should have a book on their own, , and anyway a cookbook is not intended to solve concrete problems but rather reoccurring/frequent ones. , Probably I am just too curious about the ways of the meta :-). ,

    , To sum it up, , this and the previous section (Essentials) together helped to beef up my rubyish programming style by an enormous magnitude in the practice - nearly all information you need is there in the other books as well, , but reading them does not make you comfortable with these techniques.

  • , Advanced Techniques include XML and HTML, , Graphics and Other File Formats, , Databases and Persistence, , Multitasking and Multithreading, , User Interface, , Extending Ruby with Other Languages, , and System Administration. , I was kind of unsure about this category - pairing UI with databases or system administration for example seemed odd for the first glance - but since I did not want to create even more categories, , I have decided to put everything here which did not fit into the other ones, , thus it can be viewed as a ‘miscellaneous’ section as well.

    , I would like to review two chapters here - HTML/XML and Databases and Persistence since these are the closest to my field of expertise and I also believe these two were the most deep in this category. , Again, , this does not mean that the other chapters were not good, , but in my opinion they just scratched the surface compared to above two.

    , The HTML/XML chapter really has it all: parsing, , validating, , transforming, , extracting data from XML documents, , encoding and XPath handling to highlight some interesting topics. , The coverage is surprisingly thorough for a language which is promoting YAML (Yaml Ain’t Markup Language) over XML. , The HTML chapters, , though there is just a few of them, , are also very useful:-downloading content from Web pages, , extracting data from HTML, , converting plain text to HTML and vice versa. , My only concern here is that I missed some third party package coverage (like RedCloth, , BlueCloth, , Hpricot or Mechanize) - but this is really nitpicking: if the author would take all my wishes into account, , the book would have several thousand pages :-)

    , Databases and Persistence starts off with serialization recipes (using YAML, , Marhsal and Madeleine). , Chapters on indexing unstructured as well as structured text (SimpleSearch, , Ferret) are a pleasant surprise before the must-have topics take off: connecting and using different kinds of databases (MySQL, , PostgreSQL, , Berkley DB) as well as Object Relational Mapping frameworks (Rails ActiveRecord and Nitro Og) and doing every kind of SQL voodoo magic of course. , What should I add? Probably nothing.[6]

    , I would really like to write something about the other chapters in this category, , too, , but since I am constantly bashed for the length of my posts, , just believe me that they are great as well :-).

  • , Internet and networking consists of Web Services and Distributed Programming, , Internet Services and (surprise! surprise!) Web Development: Ruby on Rails. , It would be really a cliché to write about why and how much the Internet is so important nowadays, , how much Web 2.0 rocks, , SOA and WS and REST and FOO and BAR rules etc. , so I won’t do that ;-). , However, , it is a fact that Web application development never mattered this much in the history - so these chapters were basically compulsory.

    , I would divide the category into two subcategories - Internet/Web stuff and distributed programming.

    , There is really not too much to add to the first category - there is an unbelievable amount of information crammed into two chapters: ‘abstract’ techniques (HTTP headers and requests, , DNS lookup etc), , using every kind of protocols (HTTP(s), , POP, , IMAP, , FTP, , telnet, , SSH…), , servlet, , client/server and CGI programming as well as talking to Web APIs (amazon, , flickr, , google) and Web services of course (XML-RPC, , SOAP). , In my opinion, , the category offers more than enough information to get started and/or explore advanced techniques.

    , It’s a shame that Distributed Programming got the half of a chapter only - O.K., , I admit I am somewhat inclined to these techniques and they are maybe not used by that much people. , The action is revolving mostly around DrB and Rinda, , with an exception of 2 MemcCached recipes. , The chapter closes with a nice ‘putting things together’ recipe by creating a remote-controlled Jukebox.

    , I did not get too deep into the Ruby on Rails chapter, , since I read Agile Web Development with Rails as well as Ruby for Rails and a lot of much more advanced Rails stuff previously - but judging from the recipe titles and skimming through some of them, , the chapter looks very informative and unquestionably helpful if you have had no prior experience with Rails.

  • , Last but not least, , Managing and Distributing Software includes Testing, , Debugging, , Optimizing, , and Documenting, , Packaging and Distributing Software and Automating Tasks with Rake. , If you plan to use Ruby for any other task than system administration (or writing very short scripts/one liners for whatever reason), , documenting, , testing, , debugging and automating tasks is absolutely crucial. , I know that lot of coders does not like to hear this - since they want to code and not write tests, , documentation etc. , - but I think nowadays, , a serious programmer, , no matter how much she would like to concentrate on hacking up feature MyNextCoolStuffWhichWillShakeTheEarth has to master these things. , In the long run, , any software that is undocumented, , tested and continuously refactored will turn into Spaghetti quite easily.

    , That said, , these chapters were excellent for me. , I have experience with these tasks in Java - however, , the toolset is radically different in some cases (like Ant vs. , Rake) and even if it is similar (Unit tests, , rdoc vs. , JavaDoc) the re-learning of them was inevitable. , Fortunately, , with the help of these recipes it was a breeze to learn them in Ruby (well, , I have to add that actually these things (as nearly everything else) are considerably easier to do in Ruby, , so the ease of learning stems from this fact as well). ,

    , Rake absolutely rocks. , Maybe I am also concerned because I have been working with Apache Ant a lot - well, , if the ratio between Ruby and Java code is say 1:10, , then the ratio between Rake and Ant files is 1:50 if we also consider simplicity, , maintainability and understandability. ,

    , Finally, , if you also plan to release your software, , the chapter Managing and Distributing Software can come handy. , I think if you would like to distribute your stuff to the masses, , packaging it into a gem is inevitable - rubygems are so cool that they made Rubyists too lazy to download something from a site instead of launching ‘gem my_cool_software’.

Conclusion


If you would like to become a serious Ruby hacker, , don’t hesitate to buy this book. , In my opinion it is absolutely worth every cent - and even more. , My only problem is that there are no more recipes - however this is not a critique but rather a compliment: you simply can not get enough - not even from nearly 900 pages. , One could argue that some things are missing or he would rather see this instead of that (I believe the authors themselves have had some tough time deciding these matters) - but I guess everyone agrees that the material which made it to the book is absolutely top-notch. , 5 out of 5 stars - a great addition to anyone’s Ruby bookshelf.

Notes

,

[1] It is absolutely possible to learn Ruby withouth spending a nickel - there are excellent Ruby tutorials out there, , like Why’s poignant guide to Ruby ( with cartoon foxes and chunky bacon :-)) or the first edition of the Pickaxe book which is available online for free, , or Learning Ruby by Satish Talim, , and a lot of other ones, , too. , For some beginner ruby exercises you can also check out my earlier post: 15 exercises for learning a new programming language - or just use google…Back

,

[2] I am not sure whether it was the best move to include ‘Rails’ in the title - it may turn down some who would like to learn Ruby but not Rails. , However, , I can assure you that this book is a true Ruby masterpiece. , Though there are some interesting Rails techniques included, , the primary focus is unquestionably Ruby. , Back

,

[3] There is one possible exception: If you are new not only to Ruby but also to programming, , you should probably check out Chris Pine’s Learning to program first. , Back

,

[4] Of course there will be always some overlapping and not every book can be absolutely correctly categorized in every case (for example, , the Ruby Way has also a cookbook-like chapters) Back

,

[5] Of course this does not mean that the rest of the chapters were not that helpful - just coming from Python, , I did not have so much ‘wow’ moments. , Nevertheless, , they also teach a lot of idioms and are in no way less informative than the other two. , Back

,

[6] Devil’s advocate(tm) says: maybe some chapters on SQLite and Oracle, , as well as advanced SQL stuff would be cool - however, , this is really mega-über nitpicking since then the title should be ‘Ruby and SQL cookbook’ :-) Back

,

Similar Posts:buy xanax



If you liked the article, subscribe to the feed   and follow me on twitter!.


      

4 Responses to “”

  1. Satish Talim Says:

    , Thank you for mentioning my Learning Ruby site http://sitekreator.com/satishtalim/index.html
    I have since taken my own domain and the site has now moved to http://rubylearning.com/

    , Incidentally, , a good review of the book.

  2. Satish Talim Says:

    , My choice of Ruby books would - (1) Ruby for Rails (2) The Ruby Way (3) Programming Ruby (4) Ruby Cookbook

  3. Best Ruby Books - Learning Ruby Blog Says:

    , [...] An excellent blog post by Peter Szinek got me thinking on my choice of the Best Ruby Books for the year 2006. [...]

  4. Ruby Tutorial Says:

    , If you are in need of a beginners ruby tutorial I have one here.
    http://www.meshplex.org/wiki/Ruby/RubyonRailsprogrammingtutorials

    , It is specifically written for new programmers that want to learn ruby

Leave a Reply




Bad Behavior has blocked 1635 access attempts in the last 7 days.