views:

175

answers:

7

I love working with Rails but I keep tripping up against my own inefficiency: I'll spend time implementing some "useful" function only to discover subsequently that it was already in the framework, had I but known it!

Particular areas of wheel reinvention for me are

  • helpers and built-in class extensions
  • recently-released features that may not yet have lodged in my brain
  • plugins (a taxonomy of Rails plugins, if such a thing makes sense, would be a boon)
  • migration options
  • less-frequently used rake tasks
  • the options hash on just about everything

Obviously (?) we can't all remember all this stuff all the time. There are "cheat sheets", but unless they're up-to-date they can potentially compound the problem by appearing authoritative when they're really targeted at older versions.

What do StackOverflowers (Overflowing Stackers?) do to minimise this excise? Can anything be done?

I wondered if a set of Big Visible Charts might help, although goodness knows where I'd stick them in an open-plan office...

+1  A: 

I face this problem as well- and it was a lot worse when I first started with RoR. Now after over 1.5 years, I know what's available pretty well.

Basically what I do is if I am using parts of the framework I know... no big deal. If I need to do something I will likely have to create myself, I first google it or search the Rails API. Lately I have also begun searching github and some of the plugin sites like railslodge.com.

While this does not completely solve the problem, it has helped dramatically.

Scott Miller
+4  A: 

One thing here is to know about the existence of particular feature (plugin, gem, etc) in the first place. That's why

  • I try to keep up to date with the information about the edge Rails.
  • I follow many blogs and try to if nothing else then run over the titles every day, just to have it leave at least some tiny footprint in my memory.

That's for the passive part. Now for the active:

  • As I fly through the new features/plugins I try to imagine at least some use case in which it might be helpful in what am I working on right now - this exercise helps me to remember the thing, since I connect it to my actual conceptual system.
  • In my less serious projects I really try experiment with new things.
  • On SO I often answer questions I'm not sure about or I don't really know anything about but they seem interesting to me - then I do some research and extend my knowledge on that particular topic.

I don't think that "big visible charts" can help in the long run. I only use cheat sheets when learning new things and it's really only a short term thing. Exellence is a habit, as Aristotle said.

Milan Novota
+1  A: 

I surf over the rails blogs in my RSS feed reading the headlines and just enough to figure out what the article is about. This gives me a good breadth of knowledge but pretty shallow. Still it lets me know what is out there. Like yesterday when I saw a blog post about a highlight helper (I had no idea it existed. Now I do and if I ever need it I know to look for it - even without reading the post in depth). I also open the posts I want read in depth in another tab for later (I used to use ReadItLater but it got out of hand) and as i read them i write notes in a post on my own blog more for my own benefit than for others - to get into memory and to ensure I can find it later.

The other thing I do when I am entering uncharted or forgotten territory is to I ask a question here about best practices or specific details even if I think I know the answer. For example I couldn't remember the names of the popular plugins for tracking edit histories of records (acts_as_audited and acts_as_versioned). I had the answer in 15 minutes.

It turns solo programming into programming in one of those cool noisy dev shops with a foosball table and lots of other people who know stuff i don't.

srboisvert
+2  A: 

This isn't just a problem with Rails, but with any framework. Programmers I know who have worked for years with Delphi still are shocked to find simple standard functions that they'd replicated.

WRT Rails, Mike Gunderloy recently wrote about highlighting text, and ended with this wise tidbit:

It’s worth taking a dip into ActionView::Helpers occasionally to see what other bits of functionality are lurking that you’ve forgotten about.

Any time I need to do something I think should be easier than it is, I do a quick check there, as well as Google, to make sure I'm not about to waste a ton of time.

Tim Sullivan
Any framework yes. Indeed, pretty much any language or library. The Gunderloy post was actually what crystallised the question for me.
Mike Woodhouse
A: 

I write tests first. Then code. Sometimes the framework does it for me and I don't have to write code. :)

I don't think Rails is any different than other frameworks... it takes a while to know where things are. The best you can do is read the API docs and see what's there. You don't need to learn how to use it, just what is there and get an idea of how to look for it when you need it.

Also, it's not a bad thing to write code that someone else already has. You learn from it. Later you just swap in the framework mojo and see if your tests still pass. If so, you're good and you know how the internals of one part of the framework probably work.

Otto
+1  A: 

I tend to assume that most types of basic problems I'm solving have already been solved by someone else; by starting with the assumption my thoughts aren't along the lines of "how do I build this" but "where do I find it" and of course google, the wikis and the plugin and gems lists all play a part in that. I have written very little code that isn't directly related to my business domain.

Jeremy
A: 

I believe the key to eliminate the time wasted on reinventing the wheel is to have a very handful tool to search inside the Rails helpers/capabilities.

On one hand a good choice of IDE could help a lot. On the other hand - a very good online (offline) edge documentation with an ability to quick search through it. These days one of our russian Rails programmers made one: http://railsapi.com/. The search is done in a very MacOS style, making it a very good choice for a fast diggin'.

gmile