Standing on the Shoulders of Giants
Despite having so much information accessible, we often fail to take full advantage of available resources and benefit from the work of others. When it comes to trying to grow as a developer, this is an excellent way to stunt your growth.
Since it is not easy to sift through and distill the knowledge of a community, I wanted to share some of the work I’ve already done in this regard with ruby software development.
Each time I’ve tackled something (eating healthier, being more organized, exercising smarter), I’ve always known that is wildly unlikely that I’m the only person to do so and it would be wise to consider how others have approached what I am now approaching myself. I believe this is especially true when it comes to effectively becoming a skilled developer.
For example, when I chose to learn Ruby I could have easily just googled “Ruby tutorial” and worked on the first tutorial I found. Instead I spent a little time comparing community opinions and recommendations of various tutorials, deciding that they may know which resources are best better than a general search engine. After some initial research I decided that spending some time at Code School was the best way to start. They have some great courses on Ruby, along with a course that was my first taste of Ruby on Rails called “Rails for Zombies.” While I haven’t taken all the courses that Code School has to offer, every one I have taken has been informative and of high quality so I have no problem recommending the site as a whole.
Next, when I embarked on learning Ruby on Rails (after getting my feet wet with Rails for Zombies from Code School and doing similar “best-ways-to-learn” research as I did with Ruby), the starting tutorial of choice was the Ruby on Rails Tutorial by Michael Hartl. It takes you from having a basic understanding of development, all the way through to having a fully functioning Ruby on Rails app, complete with introductions to test-driven-development, platform-as-a-service Heroku, version control with git, and other such best practices.
Hartl’s tutorial covers you end-to-end on all the introductory parts of Ruby on Rails, and it took me a few weeks of various nights and weekends to complete (including the bonus exercises at the end of each chapter). While going through the tutorial it is important to remember that the goal is to understand Ruby on Rails, not just complete the tutorial. If there is a part you don’t understand, the worst thing you can do to yourself is to just go through the motions so you can say you “completed it” without actually learning anything. Each time you encounter something that isn’t quite clicking or you don’t understand, dig into it. Google around, mine StackOverflow, etc. until you are confident you get what is going on and why. In practicing this I would often find myself off on a tangent spending hours diving into new concepts, sometimes even on things that weren’t a part of the tutorial. This meant it took me longer to actually get through the tutorial, but by the end of it I was confident I didn’t misplace my effort and I had a good introductory handle on Ruby on Rails.
It’s important to remember that while reading code, reading material, and going through exercises are a great way to learn, you will only become proficient by actually following through and building apps, and for that I don’t believe there is a substitute.
To then improve my skills with Ruby on Rails, I focused on the concept of Breakable Toys as discussed in the book Apprenticeship Patterns by Dave Hoover (a great book I recommend on the journey of starting as an apprentice and working to eventually become a master software developer). In short, I would build something that I thought would be interesting or useful, with each app I built more challenging than the last. Personally, I believe a good way to think about it is to “bite off more than you can chew, and learn how to chew it.” When you set out to build your Breakable Toy, if you already know how to build it, it’s too easy and therefor not a challenge, and you won’t grow. When you want to build muscle you don’t go to the gym and lift the same amount you did last time, you already did that. You need to push yourself, set the bar higher, and figure out how to meet your new, higher goal. To help find inspiration in what to build next I would often wander around and look at other people’s code, projects, and problems. Sometimes I would add on features that I liked elsewhere to up the difficultly a bit. Two great resources that have helped me with this are Github for finding and reading other people’s code, and StackOverflow for questions and answers.
While I was making progress with Ruby and Ruby on Rails, I knew it was important to stay in touch with the community at large and stay informed of new developments and best practices. For that I curated a list of sites and newsletters to follow, which are below in no particular order;
- ruby weekly
- thoughtbot’s blog
- hashrockets’s blog
- 37signals’ blog
- rails best practices
- ruby 5
- ruby flow
I also work to adhere to and understand the reasoning behind the styles outlined in the github style guide and the thoughtbot style guide. It is important to have a consistent and modern style to your application code as it keeps your code easier to work with, and these guides definitely point you in the right direction.
Finally when it came to my personal development environment, I began looking through how other people work and various dotfile repos. For example I spent a lot of time looking into what were the popular editors, plugins, shells, tools, etc., and why. I recommend taking a look at dotfiles.github.com to get a gist of some of the more popular approaches. Personally I use a fork of YADR, with some slight tweaks.
Soon I will update this with a list of books as well, but in the meantime I hope these resources help you as they’ve helped me!