A weekly series from the Ruby Masters
Welcome to the next installment of the weekly interview series on the RL blog – “Path to Ruby Mastery” – by top trainers and developers in the Ruby community, from across the globe. The interview series will provide insight and commentary from these notable Ruby trainers and developers, with the goal of facilitating and providing answers to the questions Ruby beginners face. We welcome your suggestions for interviewees and questions. Look for a new post every Tuesday!
This week, we’re proud to have Dr Nic Williams from Australia.
Satish Talim>> Welcome, Dr Nic and thanks for taking out time to share your thoughts. For the benefit of the readers, could you tell us something about your self?
My life before Ruby (2005 and before) involved C# and Java professionally, and Smalltalk and Python during my years of academia. I like using Ruby as much for the community as for the language itself. My favorite hacker activity is scraping data from websites.
I now run the premier iPhone/Rails consultancy, Mocra. I still hack open source code when no one else is watching.
My full name is Nicholas Peter Williams, and I have a PhD at the University of Queensland, so I can call myself Dr Nic with a straight face of hard-earned authority. My mother still just calls me Nicholas, and my wife calls me many things. My 2 year old eldest son calls me Daddy, and my youngest 4 mth old daughter just sucks my fingers and arms whenever she can get hold of them!
Willian Molinari, Brazil>> How should one go about learning the Ruby language? What material (books, eBooks, online tutorials etc.) would you recommend?
Dr Nic>> Find a web app or project you want to do and write it. Do it with or with out tests, with or without plugins/gems, with or without any knowledge of what you are doing. Solve each problem as you go by reading blogs, using existing plugins/gems, asking questions on mailing lists and irc. And then start another project and another project. I guess you learn something by discovering as many things that you don’t know as possible and then learning them. For software development that means just write more code.
Willian Molinari, Brazil>> What has been your biggest challenge while working with Ruby?
Dr Nic>> A lot of the libraries/gems/plugins you’d like to use are probably “beta” quality or don’t exist. To full embrace Ruby is to embrace the need to nurture and improve these 3rd party libraries and fix them as well as write your own code.
Jerry Anning, USA>> What best practices are most important for a new Ruby programmer to learn and understand?
Dr Nic>> Test Driven Development. This wonderful practise is almost forced upon by the lack of helpful tools like compilation. There is no “pre-execution” tool chain to warn you or stop you running dodgy code. Without unit tests thru to end-to-end tests you have no way to know that that last small change to your model to fix one problem also broken three other portions of your application. A life without TDD/BDD is an unhappy life. But even better, a life guided by the principles, processes and tools for TDD/BDD make for a great life for a developer.
Satish Talim>> Most beginners in Ruby, would like to contribute their time, skills and expertise to a project but invariably are unaware of where and how to do so. Could you suggest some?
Dr Nic>> Is it silly to guesstimate that the biggest hurdle to people contributing to OSS projects or creating new OSS projects is low estimation of self-worth? It’s a theory. If it’s true then I think the following is a useful metaphor for open source software projects:
Think of existing OSS projects as clubhouses: initially each project only has one lonely developer. They definitely want people to join their clubhouse. They’ll be more than helpful to show you how to join the clubhouse, and probably quickly give you the keys to the door so you can help yourself. They’ll show you how to use SVN or Git, how to make changes, how to run the tests, how to fix bugs, and how to prepare patches or push new git forks.
And because it’s a clubhouse you can do crazy things: start an IRC channel, create a wiki, organise a dedicated website, get t-shirts, design “I use XYZ” badges for blogs and write blog articles about the project, how to use it, why its cool, why you like it more than similar projects etc. Make your clubhouse bigger.
Humans like to pick teams and start fights. DHH had victory with Rails with this process, I think. (Starting a fight doesn’t mean being rude or offensive).
Victor Goff, USA>> How do you see the market for Ruby Programmers in the work place, and do you see it as primarily tied to Rails and Web related work? Do you see trends in administration or other work? Whatâ€™s the future for Ruby?
Dr Nic>> Professionally, at some point though there will be the need to use a wide variety of technologies, languages and frameworks to meet client/real-world requirements. Nonetheless, it is your responsibility as a professional software professional to recommend and ultimately demand that you use the best tools for the job. If that tool, for one or more tasks, is Ruby then so be it. If your boss, or future employers, disagree with you on your selections of technologies for specific tasks then remember one thing:
You only need one job/employer at a time. Surely you can find or train one to care like you care about appropriate tools and technologies. Teach your boss to care about you as a human and then reward them with outrageous displays of awesomeness.
We try to script every sys admin job in Ruby. We’ve started working on a “New computer (OS X) installer” script called Noober that’ll be like a capistrano/deprec set of recipes for installing our favourite apps, bookmarks, preferences, rubygems, etc on new OS X machines. Very awesome; not finished, but awesome. I use Ruby to write unit tests for Objective-C libraries and I’ve heard of Java projects using RSpec + JRuby for testing. I use Ruby to scrape the data usage from my 3G and ADSL carriers’ websites. I use Ruby to script TextMate via its bundles mechanism.
My attitude to life is “how can I make sure I want to do this job for the next 40 years?” Massaging Ruby into as many aspects of my life as possible is a part of my personal answer.
Satish Talim>> What can / should job candidates (for Ruby) do to distinguish themselves from their competition?
Note: The candidate has done his/her homework on the company that they are interviewing with. The candidate understands what they’re looking for, and the candidate is prepared to show them that he/she fits the bill, based on the candidate’s skills and experience. What else can the candidate do, to set themselves apart from other equally well-qualified and well-prepared candidates?
Dr Nic>> As an employer I have a “wow!” template I subconsciously apply to any developers I meet that includes: addicted to open source and/or personal coding projects; is already an expert at something (hopefully Ruby, but Ruby is easy to learn); isn’t in love with their current job; and would get on well with other developers and empower each other.
Assuming all these things were equal in a potential new person I’d probably pick the person based on: enthusiasm for life; enthusiasm for our craft; williness to tell me and others that we are wrong and give passionate logical reasons why; and participation at local dev groups.
If I were a candidate for a job or for a client project I would measure my progress in getting the job/project with the simple but penetrating question: I can start on the 5th of October or the 12th of October, which is best? Chops and sausages. Don’t ask kids what they want for dinner, just ask them if they want either chops or sausages.
Satish Talim>> Do you have any other suggestions for these participants (would-be Ruby developers)?
Dr Nic>> To learn and fall in love with Ruby:
- write a web scraper using Hpricot and/or Mechanize
- wrap it in a RubyGem (using newgem or hoe/sow or bones etc)
- make it a command-line executable (bin/xyz) that runs the web scraper and dumps results to STDOUT
- deploy RubyGem to RubyForge
- tell your friends to install it: gem install xyz
- write another RubyGem that uses the output of your first gem as its STDIN input
- pipe the apps together: xyz | abc | mno
Holy moly it is awesome fun.
Satish Talim>> Thanks Dr Nic for sharing your views with the RubyLearning participants.
On 14th Oct. we talk to Stuart Halloway from USA.
Update: This blog post is also being discussed on dzone.
The opinions expressed are those of Dr Nic Williams and do not necessarily reflect those of www.RubyLearning.com.
The Path to Ruby Mastery Series (So Far):
Post supported by Blue Box Group: Blue Box Group is in the business of providing affordable Ruby on Rails hosting solutions! They approach web hosting, virtual servers and dedicated servers differently, treating each client as a partner and working towards the common goal of success for their business. From shared Ruby on Rails hosting to giant production clusters, they have the experience, talent and equipment to make your site a success!