Practicing Ruby programming, starting with the pragmatic programmer's guide.