No, this is not a post about illiteracy.
OK, now that I got that off my shoulders…
I’ve been learning Ruby on Rails for the past few weeks, and I’ve encountered an interesting question that I’ve faced a few times before and never really found a good answer to.
How do you read code?
And I don’t mean that in a metaphysical sense. I mean when you’re learning a new framework, language or technology you usually look at some code written in it to try and see how real world applications use it. These days you can pretty easily find Open Source code written in almost anything. What I find difficult is figuring how to read the code of these applications.
I’ve read a book about Ruby on Rails, so I understand the basics decently well. I’ve created a toy application just to see how to do it. But the jump from that to digging through source code for a full fledged real application is pretty huge. Where do you start? Initally I started looking at the models to try and understand the objects that the application dealt with. But I found that to be a bit confusing. Then I looked at some of the key controllers (like user authentication and those that handle the main pages) and also found that a bit confusing.
Finally I sort of settled on looking at a specific page in the app, looking through the view that generated it, then going to the controller that was invoked, and maybe looking at some helper methods and model code that I found there. I found that to be a reasonably understandable strategy. But I’m not really sure if it would have worked as well if I didn’t already have looked at some model/controller code before hand.
This is not specific to RoR. If you learn a new development environment, how do you figure out where to learn the code?
Tags: code, rails, reading, ruby, ruby on rails, software engineering

As I mentioned before, my experience with reading other people’s Ruby code was quite similar to what yours sounds like.
But when it comes from Python, I tend to work bottom-up. I get a general feel for the model and the helpers, then I look at the controllers and how they use it, then if I care, I look at the templates.
But usually there’s more specific things I care about — the login system, the data domain, the permission system, etc.
I like to look for the most complex part of the code and try to understand why it’s there.
One trick I sometimes do is to put a breakpoint pretty deep in the code and then look at the stack and see how the thread got there.
With RoR, you can set a breakpoint, enter a console by typing ‘irb’, and then play around with the variable and such. I find this helps a lot too.