views:

126

answers:

3

I am looking for a delineation of describable stages that an aspiring Ruby programmer will have to confront, explore, and master before being considered as a professional or employable.

Basically, I've been fiddling with Ruby since late 2006 and still feel lost. It's completely hobby at this point so I haven't dedicated myself to it but after all the time I've spent reading about it, installing and reinstalling libs, buying 10+ books--maybe the best way to put it is that I'm a fan and not yet a practitioner. But I feel like after all the time, money, mental gymnastics, and emotion, I should start to reap some type of benefit or see some ROI.

So, once again I re-read another excellent Ruby book and what's such a trip to me is that I understand all of the fundamentals but I can never put them together to make any lib of consequence.

I know data types, operators, control flows, OOP, classes, modules, keywords, etc. I don't know how to combine them all.

Can someone who's traveled this path explain their perspective on the different stages one must go through, i.e., "completely clueless, to "understanding the syntax", to "making a tiny application", to "making a lib worthy of becoming a gem", to "holy moley this girl's good!"

+4  A: 

I think the best way to progress is to come up with a project that will interest you, and stretch you, that is expandable, so you can eventually have something more useful to others and complex. Then you will have learned how to do better design in Ruby, and more importantly you will learn more about the limits of Ruby.

Along the way you will have answered your own question.

James Black
Hi, Yes, I've always heard it's easiest to learn when you have something to actually work on--and, of course, context is key. I also recognize and admit that this is the type of endeavor that requires serious commitment to just experimenting, failing, and learning from mistakes in order to grow. I guess my response to your answer is that I don't know the next *milestone* or *achievement* that I should be aiming for and working towards and I wouldn't know what it would be like to complete it. I'd love to just hop in to some open source project but I don't think I'm ready for that quite yet.
Lolita
So, think about something that could be interesting. It may be a graphic statistical analysis tool. So, you start with just writing methods that can do averaging and mean. Then work on how to get data into the application. As you build on, eventually you may want to make it a web app, so then you add Rails to it.
James Black
Well, that is a good stage-by-stage milestone set up for a particular project. This is very pragmatic too in that my milestones have specs rather than just abstractions of stages. Thanks for helping shift my perspective on this.
Lolita
+2  A: 

Not necessarily in exact order...

  • Learning the syntax
  • Playing code-golf (Pick questions with > 10 upvotes. See also this and this.)
  • Figuring out the object system
  • Getting distracted by Smalltalk and Lisp as you realize where some of that stuff came from
  • Implementing a pet project of reasonable size
  • LEARNING RAILS
  • Implementing two or three public sites for your friends and yourself, for your portfolio
  • To understand a complex OO program, just pick a bigger challenge: use Treetop and write a language processor of some kind, or a paint program, or maybe an elaborate board game or adventure game, some kind of desktop application with complexity
DigitalRoss
Hello, This is actually quite motivating because I have already made some functional Rails sites (of course, much of it was copy/paste from tutorials and what not and I'd venture that I *recognize* Rails methods more than *understand* them) but when it comes to the nitty-gritty Ruby where I have no tutorials to follow, that's where I get paralyzed--almost like writer's block. But, I'd venture I'm decent at three or four of your bullet points.
Lolita
Sounds like you are doing quite well already then. I know what you mean, though, rails is so good you tend to do everything in just a couple of lines or a single loop...
DigitalRoss
Thanks for the encouragement and the links above. Yes, Rails spoils newbies--but the book I'm reading is pure Ruby so I am trying to learn "the method to the madness." Maybe it's also important to mention Ruby is my first language whatsoever (besides HTML/CSS) so maybe that's why I'm struggling. I imagine once I learn Ruby it'll be a lot easier to pick up other object-oriented languages.
Lolita
Wow, language #1 is Ruby?! Ruby was the *last* one I learned, after learning essentially everything else. I'm not sure I'm qualified to give you advice, as my path was so different. I would guess you just stick with Ruby and write bigger programs. Some might say that if want to really understand software, you will have to play a little with C and assembler someday, but I don't think there is any rush.
DigitalRoss
+1  A: 

Practice is the only way to do it.

Rails is a good starting point. But for the person with limited programming experience it may not be the best starting point. You may have trouble figuring out where Ruby ends and where Rails begins.

A better starting point would be tweaking an existing project. There is a metric buttload of gems that have open tickets. Pick one and submit a patch. Bug hunting through some one else's project will not take you from "understanding syntax" to "creating a lib that is worthy of being a gem", but, it get you close. Patching existing gems will provide insight into how a Ruby library is structured and fits together.

Don't expect to able to jump right into writing libraries. I believe the hardest part of creating that gem is settling on an idea that hasn't been done yet. The second hardest part is figuring out where to start. Again the only real way to learn that is through practice. Really getting to know existing libraries and following commit logs can give you examples of how others have built their libraries.

Once you feel comfortable with library design you can start practising the creation aspect of design. Ask yourself "How would I recreate this gem?" By answering you will develop your own process for attacking the problem, and hopefully produce your first gem. When your ready you can apply those skills to your own libraries.

EmFi