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
,
,
,
,
,
,
,
Similar Posts:buy xanax

February 1st, 2007 at 7:21 pm
, 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.
February 1st, 2007 at 8:05 pm
, My choice of Ruby books would - (1) Ruby for Rails (2) The Ruby Way (3) Programming Ruby (4) Ruby Cookbook
February 1st, 2007 at 8:29 pm
, [...] An excellent blog post by Peter Szinek got me thinking on my choice of the Best Ruby Books for the year 2006. [...]
May 24th, 2007 at 6:42 am
, 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