I had some time this past summer and decided that I wanted to experiment a bit with Ruby. I tried Poignant three or four times, and each time I would put it down after half an hour, with the same thought - "Why is this book, widely regarded as the One True Way to learn Ruby, fucking around so much? I don't want foxes and cartoons, I want syntax, rules, conventions, and information."
Maybe it's just me, but the way I tend to learn a new language is with a bunch of docs on one screen, and an IDE/REPL on the other. I read some stuff from the doc, try it out on the other screen, and move one. After a few units of time doing that, I'll write up a trivial project to try and make the various bits I've learned work together. Once that's done, I'll have a sufficient grasp of the syntax and general themes of the language that I can dig deeper into various parts of it to learn what I need to keep going.
You know what the "best" language book I've read is? K&R, ore more precisely, K&R2. It gets to the point, and tells you exactly what you need to know about what you looked up in very clear and exact language. It doesn't hold your hand, and it doesn't make you read about foxes.
Poignant always seemed like it was designed for someone who had no idea what programming was and wanted to end up being somewhat fluent in Ruby. That's good and all - there's certainly a market for that - but not what I look for when I'm in the market for a book on a programming language.
EDIT: Why the downmod - casual use of the f-bomb or contravention of established orthodoxy?
Agreed. It takes maybe a half hour of experimenting to know enough of the syntax of a language to start being mildly productive, and the rest of the time is spent trying to learn the standard library and language specific idioms -- which can take years. This is one reason why I've always found the PHP.net website to be useful, despite the fact that PHP has a significant number of serious warts. Admittedly, it could use a lot of work, the comments are less than spectacular, and some of the things it suggests are downright dangerous, but it's an excellent reference for the list of functions, how to use a function, and often times when to use a function -- unlike many language intro and function reference works. Let's say I want to do a DNS lookup. The PHP docs for dns_get_record are overly complete, you're well on your way to starting to use that (the problem with PHP is deciding _which_ of the four or five functions that do the same thing you should use, not a walk in the park either, I know). At ruby-doc.org, the docs for Resolv::DNS don't appear to include any examples, and the method prototypes listed link to the code for the method. Why would I want to see that?! I'm using a library so I don't need to know how the code works. I learned perl and a lot of other languages from complete, working programs, not samples a handful of lines long that performed contrived actions just for the sake of having an example.
Probably the best book for really learning Ruby is The Ruby Way by Hal Fulton. Hal clearly gets Ruby.
The book is thorough (although possibly a little out of date now), introduces a lot of idiomatic Ruby, and has just the right amount of geeky inside jokes.
Yes, I meant mainly that it doesn't cover Ruby 1.9 or some newer libraries. While the Ruby landscape has changed a little since it came out, The Ruby Way still covers the core language and many still relevant libraries quite well.
> You know what the "best" language book I've read is? K&R
I also loved K&R. I like concise and precise books about languages. For me the fun part is the ability to make you "feel" the language by practice. I like when I can do something, and do it in a new way in a project of my own.
Recently, the best language learning book I read was "Real World Haskell".
With all due respect, if you had such trouble with Poignant, the you probably also would have had a hard time with Ruby. Not to imply that you couldn't understand Ruby or write in Ruby, but just that Ruby has a very distinct character, a personality almost, and I suspect you and Ruby would not have gotten along.
For me, it's that way with Python. Honestly, Python is not fundamentally different from Ruby except this: In Python, there is "one right way". For some programmers that's a saving grace, for others it's akin to a death sentence. To each his/her own...
I don't believe I agree. Ruby is straightforward; I don't have any trouble at all understanding it. I enjoy _why's cartoons. That doesn't mean that reading _why's cartoons is in any way a good way (for me) to learn Ruby, which is a counterexample to your "probably".
Ruby is hardly difficult.
(For the sake of anecdotes: I find Python to be stultifyingly simplistic, with a number of negative features, and generally poor libraries. I find Ruby to be the wrong balance between dynamism and performance. I find both of them to lack syntactic abstraction.)
I didn't mean to imply that Ruby was difficult (though I could see how you might read my reply that way). I merely meant that Ruby embodies a certain philosophy of programming and programming languages, and, while _why is an extreme example, he is still a very accurate embodiment of the Ruby philosophy.
Claims like this bother me, whether about Ruby or Python. a programming language is simply that -- a language used to program computers. It doesn't have a personality. It has a distinct syntax, methods, etc. It is the community which gives it a personality, if any.
"I believe people want to express themselves when they program. They don't want to fight with the language. Programming languages must feel natural to programmers. I tried to make people enjoy programming and concentrate on the fun and creative part of programming when they use Ruby."
Honestly, I don't even agree with me. That comment came out wrong. What I meant to say was that I feel it is obtuse to say something like "you will probably have a hard time with Ruby if you have a hard time with this goofy book."
Distinct syntax creates a personality, similar to how haikus read differently from sestinas. The form is the function is the attitude is the personality. They're one and the same.
I enjoyed the unrelated sidebars in _why's Poignant Guide, but I don't think I really learned anything useful from it. The pickaxe book was more helpful for me. I've been using ruby for more than 3 years now and I really enjoy it, so I get along with it OK.
To this day I still sometimes think that I should trudge through all of the poignant guide, but then I remember what a tedious time I had and decide not to.
I love the poignant guide! It (along with Ruby being an awesome language) got me into Ruby.
It's great because you read it because you enjoy it, and then you happen to learn Ruby in the process.
It also has some interesting analogies, examples, and ways to remember things. When talking about how block variables go inside |pipes|, he says:
I like to think of the pipe characters as representing a tunnel. They give the appearance of a chute that the variables are sliding down.
Much better at helping you remember the syntax than "block variables go in a comma-separated list which is enclosed by pipes" like you'd find in a normal book.
Indeed. You get the sense when reading it, that the author was having a blast writing it, which makes learning Ruby fun. Also, the way its written is almost like a captivating book, so you can't help but dive further in.
I remember picking up 'The Ruby Programming Language' written by Matz, got to the 2nd chapter before I hopped online and found the poignant guide. Made for a much more interesting time learning Ruby.
I'm a bit surprised this is a top link off of HN, I remember it topping reddit many years ago – hardly hacker “news.”
As I said about this product then, taking 3 tabs of LSD should not be required before reading a “how to program in this language“ book. The cartoons are great, but if they had some bearing on the content e.g.
3.times{ puts 'chunky bacon' }
then I wouldn't feel so much like I was sitting through some performance from the gifted kid class which is sort of boring and semi-insulting: Why yes, imagining what it would be like to be a butterfly at Valley Forge is very creative, but is neither dramatic nor historically enlightening (cf. Beavis and Butthead watching Beck's “Pay no Mind”).
If you like this learning style (as I did), and you are interested in haskell, BONUS' Learn You a Haskell for Great Good is a good intro as well: http://learnyouahaskell.com/
Wow: a lot of people really have some dislike for this book. Not surprising, since Hacker News emphasizes the code-obsessed mind.
I'm not somebody who lives in the world of programming, and this is the only guide to coding that I've ever read and learned from. _why phrases things in ways that make their concepts easy to grasp and he makes for a compelling read. People who insult that or call it drugged-up miss that he's not writing a technical guide. He's writing a poignant guide, and that means that the larger goal is getting people really emotionally invested in the language. You learn the bare minimum to the language, which is enough so that then you can go on and find technical manuals, understanding enough to not be instantly turned away.
I hate tech manuals. I use a few reference books, but I can't pick up a "Guide To X Language" and get very much from it. A guide that makes coding fun is exactly what I need.
I recommend why's guide to every non-techie I know who wants to jump into programming.
I had an HR friend of mine trying to make sense out of some data, and wanted to contract me to write a really simple script to make some sense out of his flat file data.
I didn't have time, and since he wasn't an idiot, I figured he could take it on himself, and gave him a link to the poignant guide, which he claims worked like a charm.
Now he's making me justify my salary to him.
For people who already know programming concepts, and just need to know syntax and what's different about Ruby from what they already know, I think the poignant guide is the long way there.
For this crowd, I understand the bitter reception.
I had some time this past summer and decided that I wanted to experiment a bit with Ruby. I tried Poignant three or four times, and each time I would put it down after half an hour, with the same thought - "Why is this book, widely regarded as the One True Way to learn Ruby, fucking around so much? I don't want foxes and cartoons, I want syntax, rules, conventions, and information."
Maybe it's just me, but the way I tend to learn a new language is with a bunch of docs on one screen, and an IDE/REPL on the other. I read some stuff from the doc, try it out on the other screen, and move one. After a few units of time doing that, I'll write up a trivial project to try and make the various bits I've learned work together. Once that's done, I'll have a sufficient grasp of the syntax and general themes of the language that I can dig deeper into various parts of it to learn what I need to keep going.
You know what the "best" language book I've read is? K&R, ore more precisely, K&R2. It gets to the point, and tells you exactly what you need to know about what you looked up in very clear and exact language. It doesn't hold your hand, and it doesn't make you read about foxes.
Poignant always seemed like it was designed for someone who had no idea what programming was and wanted to end up being somewhat fluent in Ruby. That's good and all - there's certainly a market for that - but not what I look for when I'm in the market for a book on a programming language.
EDIT: Why the downmod - casual use of the f-bomb or contravention of established orthodoxy?