Slashdot Mirror


Beginning Ruby

TimHunter writes "Peter Cooper's Beginning Ruby: From Novice to Professional has two audiences, novices with no programming experience who want to learn Ruby as their first programming language, and veterans who want to add Ruby to their programming toolkit. Cooper's response to this challenge is a solid entry in the limited arena of Ruby tutorials. Even though the early chapters are marred by the occasional reference to an advanced topic, readers will appreciate the plentiful examples and thoughtful description of the Ruby language." Read below for the rest of Tim's review. Beginning Ruby: From Novice to Professional author Peter Cooper pages 631 publisher Apress rating 7 reviewer Tim Hunter ISBN 1590597664 summary An introduction to Ruby programming

Ruby is an object-oriented programming language in the same family as Perl and Python. Ruby is very popular for writing web applications but also widely used for the general-purpose programming tasks. Ruby is available for Linux, Mac OS X, and Microsoft Windows. It is Open Source software with a commercially friendly license.

I agreed to review this book in particular because, even though the Ruby community has a strong tradition of encouraging newcomers, there are actually very few resources for the Ruby beginner. Ruby has gained a repuation for being easy to learn and therefore is attractive to people with limited or no programming experience. Novice programmers post almost daily requests for help and direction to the ruby-lang mailing list.

In addition to serving people with no progamming experience, Beginning Ruby is also aimed at experienced programmers who want to learn Ruby. Progammers coming from languages such as Java or C++ often struggle with Ruby's dynamic typing and (even with the recent explosion of Ruby-related books) the relative scarcity of documentation. Beginning Ruby tries to satisfy this audience by explaining Ruby's design, history and place in the programming world and including an extensive survey of the currently-available Ruby libraries.

Beginning Ruby is divided into 3 parts. The first part is aimed at neophytes. Experienced programmers, especially those experienced with object-oriented programming, will be able to skip chapter 2 and skim chapters 3 and 4.

The book starts simply. Chapter 1 isn't even about programming. This chapter explains how to install Ruby on Windows, OS X, and Linux. The instructions are thorough and aimed squarely at beginners. For example, Cooper explains how to get a command prompt on Windows and how to run Terminal.app on OS X.

Chapters 2 and 3 introduce fundamental concepts such as variables, expressions, control flow, classes, and objects. Cooper emphasizes experimentation. He says that irb, Ruby's interactive programming module, "provides the perfect environment for tweaking and testing the language, as you cannot do any real damage from within irb." Such assurances are helpful, especially to the beginner who may be slightly afraid that he's going to somehow make a mistake that will "break" his computer.

Explaining programming to beginners is hard. I've read a number of books that try to teach object-oriented programming concepts to people with no programming experience whatsoever. None were stunningly successful. This one isn't either. The problem is that books are linear, but there are simply too many things – concepts, keywords, tools – that have to be introduced nearly simultaneously and initially taken on faith. Cooper distracts his readers by peppering his text with too many "don't worry about this yet" disclaimers and assurances that explanations will appear later. His references C and Perl will be meaningless and possibly confusing to the beginning programmer.

Chapter 4, "Developing a Basic Ruby Application," starts by explaining what a text editor is and offering a few recommendations for text editors on Windows, OS X, and Linux. Then it guides the reader through his first real program, a script to read a text file and compute simple statistics such as the number of lines and words. This is a well-chosen example that will, when completed, make the student feel like he's accomplished something.

Chapter 5, "The Ruby Ecosystem," feels out-of-place. This chapter doesn't teach anything about Ruby programming. Instead it explains Ruby's history, introduces Ruby On Rails, and talks about the Open Source movement. Little, if any, of this material will be interesting to a fledgling programmer. The chapter finishes with a list of internet-based Ruby resources such as mailing lists, IRC, and blogs. All of this seems much better suited as an appendix and indeed the list of resources appears again in Appendix C.

Part 2, "The Core of Ruby," has a slower pace. With the very basic material covered, Beginning Ruby gets a better footing. Starting in this part the material is useful to both beginners and veterans.

This is probably as good a place as any to talk about the examples, which are numerous and very likely the best part of the book. Most of the the examples are short and to the point. A few extend over several pages. My overall impression is that they are well-chosen and well-coded. I especially like the way the examples appear on the page, visually distinctive but without interrupting the flow of the text. Source code for all of the examples may be downloaded from the Apress web site. However, even though the files are divided into a directory per chapter, the examples aren't numbered in the text so it's difficult to find the code for the example you're looking at. I ended up using grep to search for keywords in the sources.

Chapter 6 is a slower pass through Ruby, focusing on Ruby's object-orientation. Though fewer than part 1, there are still problems with references to concepts that have not yet been introduced. For example, Cooper uses the require method in the context of namespaces even though require has not been introduced. Indeed, it's not even necessary to mention namespaces at all in this chapter since the entire concept could've been held off until the next chapter, which explains how to create programs from code in multiple files.

The remaining chapters in this part start to address the needs of the serious Ruby programmer. This is a lot of ground to cover, including documentation, debugging, test-driven development, I/O, databases, and how to deploy Ruby programs. I particularly liked Cooper's thorough instructions for installing and creating RubyGems, Ruby's third-part library management system. There are so many topics to cover that each one gets only an introduction, but Cooper uniformly provides links to extended online documentation.

The last chapter in this part works through an even larger example, a Ruby "chat bot." This is an ingenious and entertaining example, the kind of program that, had I read it when I was just starting to learn programming, would have spent many happy hours tweaking. Call me a geek, but I got a chuckle out of the example on page 383 of two very stupid bots conversing.

Part 3 is called "Ruby Online." Of course it starts with the obligatory chapter on Ruby on Rails. I suppose publishers require such a chapter in all Ruby books, even though RoR is more than amply covered by other excellent books. I'm not a RoR programmer so I blew off this chapter.

Chapter 14 describes Ruby's support for the Internet via its HTTP, email, and FTP libraries. Chapter 15 covers other networking support libraries. As usual there are many excellent examples. Chapter 16 is a very good survey of the standard and add-on libraries that the serious Ruby programmer will find useful. Each library is demonstrated with an example, and Cooper provides a link to the complete documentation.

At the start of this review I said that Beginning Ruby is divided into 3 parts, but actually there are four. The last part consists of 3 appendices. Appendix A is a summarization of Part 2. Appendix B is sort of a "semi-reference" to Ruby's core libraries. This is not intended to be a complete reference. Instead, Cooper limits his discussion to the most useful methods of the core classes. As I mentioned earlier, Appendix C is a list of Internet-based Ruby resources such as web pages, mailing lists, IRC channels, and blogs.

I'm giving Beginning Ruby a 7. It's a good book for someone who wants to learn Ruby as his first programming language. It could be better. I liked Cooper's patient and thoughtful explanations about installing Ruby and RubyGems, how to use a command line, and what a text editor is for. Cooper supplies answers to all the typical Ruby-nuby questions, but his explanation of basic concepts is marred by the occasional confusing reference to advanced or even irrelevant topics. For the experienced programmer who learns best by reading and working through examples this book is a good choice. Dave Thomas' Programming Ruby, The Pragmatic Programmer's Guide (a.k.a. the Pickaxe) is a tough competitor, but each book has a considerable amount of material that is not found in the other book. For example the Pickaxe's core library reference is exhaustive but it has only a limited amount of the kind of tutorial explanations that is Beginning Ruby's strength. Beginning Ruby is available in PDF format from Apress' web site at about half the price of the paper book.

I have been programming Ruby as a hobby for over 5 years. Apress gave me a review copy of this book, but otherwise I have no connection to the author or publisher."

You can purchase Beginning Ruby: From Novice to Professional from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

16 of 172 comments (clear)

  1. Re:Ruby as a first language? by shagymoe · · Score: 1, Insightful

    Maybe the problem is that, like a troll, you didn't give any good reason for your assertion that ruby is a bad language to start with. (assuming that puh-leese is an assertion.)

    Personally, I could never go back to perl, java or php from ruby, so it that is the case, why not bother starting with ruby?

  2. Re:Ruby as a first language? by EsbenMoseHansen · · Score: 4, Insightful

    I know (as in, have written a substantial amount in) perl, java, ruby, C++, C, and (god forbid) PL/I. I am acquianted with quite a number more (like Haskel, Lisp) And have no fear, ruby is a fine language to start with. Especially the irb shell is very nice for getting your bearings, and the functional support will be good for you if you ever turn to the hardcore languages, like Haskell, C++ and that ilk. On the other hand, if you prefer the more limited languages, like Java, you will still have a good idea about most concepts you'll find. The only thing you will not learn that are common is static overloading and type checking, which is easy enough to pick up.

    Good luck. Learning to code and coding is very rewarding :)

    --
    Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
  3. Enlighten me by pimterry · · Score: 4, Insightful

    Why is Ruby suddenly the big buzz these days? My internets inform me it's a high level server-side language (python for websites). Isn't the most important thing in a server side language fast performance rather than quick development time? I found an article on coding horror in the depths of my RSS reader talking about how Twitter are having no end of problems scaling their system, as they're using Ruby and it just isn't made for big, high traffic sites.
    If the main reason for writing server side software is web based applications, or at least dynamic content, isn't a huge factor in this how well it scales? Nobody makes sites to be used by 20 people.

    Finally, if anybody can explain it's popularity to me, should I learn it? I'm currently doing freelance web dev mostly in PHP, would it be useful? How? In my spare time I'm writing a AJAX web app with PHP back-end at the moment and it's mostly for my personal use (task tracking from anywhere), is Ruby good here with the limited audience the site'll have?

    1. Re:Enlighten me by Nafai7 · · Score: 2, Insightful

      I've been doing PHP programming for years, and I really enjoyed working with it as a scripting language.

      That said, I started playing around with Ruby on Rails. Honestly, simple tasks like database access is so much simpler to handle in RoR it's just amazing. Creating database driven web sites, with one-to-many and many-to-many relationships is at least 10x quicker than in PHP. You have to get used to the MVC style of programming of course.

      I'm still doing PHP at work, but at some point will push for a switch. Check this out to see a very simple walkthrough of creating a simple web site.

      Just a fan, in no way am I involved with the Ruby on Rails project itself.

    2. Re:Enlighten me by lewp · · Score: 2, Insightful

      Isn't the most important thing in a server side language fast performance rather than quick development time?

      Of course not. If it were, every high traffic website would be an NSAPI/ISAPI/Apache module. The vast majority of small to medium scale web apps are database limited much more than they are CPU limited on the web server. Twitter is such an app, as that coding horror article eventually mentions.

      As far as whether you should learn it, I get paid to write mostly PHP, and I'd say anybody else in my position should check Rails out just to compare and contrast. If anything, you might pick up a few tricks. I use Rails, and like it, but like any other tool it's not for everything. When I don't use it, I still find myself using Rails-esque constructs in my PHP/Java/whatever web apps, just because they get a lot of things right architecturally.

      --
      Game... blouses.
    3. Re:Enlighten me by Anonymous Coward · · Score: 1, Insightful

      I swear half the posts supporting Ruby read like marketing department press releases.

      Anyone know who is behind Ruby and who is paying for all these posts and slashvertisements? And why?

    4. Re:Enlighten me by arevos · · Score: 2, Insightful

      Isn't the most important thing in a server side language fast performance rather than quick development time? Only if you need performance. Not every dynamic site on the web needs to serve a bazillion people a day, and throwing hardware at a problem is often far cheaper than employing a skilled software developer for longer.

      If the main reason for writing server side software is web based applications, or at least dynamic content, isn't a huge factor in this how well it scales? Nobody makes sites to be used by 20 people. No, but very few sites have to deal with 11000 page views per second, as Twitter reputedly does. Since Rails (just) handles this, then it should handle more modest needs as well.

      Also, the main problem Twitter has is the database bottleneck, not Ruby's speed (or lack thereof). Rails is designed to work around a single database, so clearly any web app that requires a dozen database servers in parallel is going to take a few specialised plugins or patches to achieve.

      Finally, if anybody can explain it's popularity to me, should I learn it? I'm currently doing freelance web dev mostly in PHP, would it be useful? How? In my spare time I'm writing a AJAX web app with PHP back-end at the moment and it's mostly for my personal use (task tracking from anywhere), is Ruby good here with the limited audience the site'll have? Try it :)

      Ruby's pretty good with AJAX, since it integrate Prototype and Scriptaculous functions into lots of easy helper functions. It also helps do away with a lot of boilerplate code when accessing a database.
  4. It would be a great first language by BrewerDude · · Score: 4, Insightful
    In my opinion, Ruby would make a great first language.

    Many computer science departments, including MIT, use Scheme as the language for their introductory computer science course. It's a wonderful language and helps the students learn a lot of key concepts that are important for formal computer science.

    Scheme, though, is a little hard to use for real-world work. Ruby, on the other hand, is a great real-world language that has many of the features that I miss from Scheme: closures, lambda expresions, etc.

    I haven't read this book, so I can't recommend it, but I can heartily recommend Ruby as a language that would be great to learn to program in. It'll let you focus on the key concepts rather than the tedium of implementing them in lower level languages.

    Go for it!

  5. Re:When you step back and consider history by tyler.willard · · Score: 1, Insightful

    "...svelte complied language..."

    What is that even supposed to mean? Especially vis-a-vis C++; the next round of standardization is considering adding GC and threading.

    Let's even go a bit further, what is "compiled"?

    Does a VM count? How about JIT'd code?

    No, just native you say?

    Then how about the fact the IA-32 instruction set ain't exactly native anymore?

    This old cannard that dynamic runtime-based languages are somehow intrinsically inferior to native binaries is ridiculous. It's the same tired "I am t3h 1337 and neeh 100% control" argument that was wrong when it was used for arguing about assembler vs C*.


    *OK, before optimizing compilers got decent it was true...but only for a little while.

  6. Just too bad by Anonymous Coward · · Score: 0, Insightful

    Ruby is slower than pretty much everything, and using rails means committing to buying a supercomputer. The ruby community is the worst bunch of architecture astronauts ever.

  7. Re:Try Why the Lucky Stiff's guide by partenon · · Score: 2, Insightful

    +1 on this. Why's Poignant Guide to Ruby is the best tech book I've ever read. I just wish it was available when I was a newb. Why's book is not finished yet, but one can easily learn the basic programming concepts. CHUNKY BACON!! :-)

    --
    ilex paraguariensis for all
  8. Re:When you step back and consider history by arevos · · Score: 2, Insightful

    How many different programming tools do we need?
    Wouldn't a venn diagram of key language features show substantial overlap? Sure, but that's not to say they overlap in the same places. I've never come across two programming languages with exactly the same strengths and weaknesses.

    Ruby sounds like your typical well-done tool, which clearly has its audience.
    The only substantial criticism of Ruby I've ever heard is here Bah, you're obviously not looking hard enough :)

    You can write pages on criticism on any language. For instance, you could criticise Ruby on it's efficiency, it's dynamic typing, it's syntax quirks, it's libraries, it's readability, it's method naming conventions... The list is substantial, and many people disagree whether certain features are advantageous or disadvantageous (the classic example is dynamic vs. static typing). In fact, I'd say you don't really know a language until you can point out it's flaws.

    Still, I'm wondering, what is the Next Big Thing? Whatever it is, I'm hoping it will be functional ;)
  9. Re:Ruby as a first language? by happyfrogcow · · Score: 2, Insightful

    there are editor tools that will do that and more for you, and not just for LISP

    Shh, we need these Lisp jokes every once in a while to keep the Java people in Java, and the Ruby people in Ruby.

    And yes, it's "Lisp" these days not "LISP". Go lurk at comp.lang.lisp if you don't believe me.

  10. Re:first language by 0kComputer · · Score: 2, Insightful

    As a first programming language, if you are serious about programming, learn C or some Assembler, this will make you understand how a computer actually works and think before you write sucky code.

    Sucky in what way? Good code now days has more to do with structure and maintainability as opposed to squeezing every possisble extra CPU out of a procedure. Instead of wasting time learning C/assembler, which you probably wouldn't get any use out of, I would go with an OO language such as Java or .net. Stick to the high level languages, no matter what the code programming pursists say.

    --
    Top 10 Reasons To Procrastinate
    10.
  11. Beware of the hype around Ruby by Anonymous Coward · · Score: 1, Insightful

    I am a seasoned developer and one of my client pushed very hard for ruby/rails.

    This is a scripting language, and you really feel the difference with a more generic language.

    Ruby spirit is "wild" :

    you will have tons of libs that gonna patch standard classes everywhere (patch, like in patch, not extend)

    it ends up with conflicting changes !! one require of the wrong lib and rails is crashing everywhere and it is very difficult to diagnose

    duck typing renders code very hard to follow because sometime your ducks looks like ducks aren't really, you will know it late at the execution or in obscure cases

    thread works cooperatively, forget about integrating nicely native code

    Documentation is sparse or inexistent on lots of libs [comparing it to the apache libs for example]

    No coding convention is really followed

    No strict language spec : I find it really important because even with one it is often hard to standardize a language !

    No type, no help -> for everything you have to jump into a paper doc or an API search just to see what this function is taking as parameter forget about the productivity of your ctrl-space in Eclipse

    I18N is non existent and iconv horrible to use.

    etc... I could go on but I think you get the point ... In short, I feel it well behind Java or C# in a professional point of view

    I really went into ruby open minded and I am really disapointed : really, you try Ruby/Rails and it is a instant "WOW!" relayed by every journalist who just tried it ... My only advice is to let this "wow" period settle down before making a hard decision to switch.

    Guillaume.

  12. Re:first language by DragonWriter · · Score: 2, Insightful

    You make a good case that programmers eventually need to learn low-level concepts of how their platform works in order to troubleshoot obscure bugs and optimize performance.

    I'm still not sure why that means you should learn C or Assembler first.