For the past two years, RubyLearning has been promoting the Ruby language world-wide, by conducting its Free Online Ruby Programming Course. 1000s of participants have either completed or are in the process of completing the course. Most Ruby course participants have a plethora of questions related to the language; opportunities in Ruby; Ruby’s future etc.
Satish Talim of RubyLearning talked to FiveRuns, to get their views and opinion.
FiveRuns is building an ecosystem of tools around Rails, including its flagship monitoring and management tool, FiveRuns Manage, and a free Rails stack, FiveRuns Install. Built on Rails and delivered as a hosted service, FiveRuns’ products enable organizations to save money and reduce operational complexity by managing the entire Rails application lifecycle – from installation to production. For more information or to download a trial subscription, visit FiveRuns.
We are pleased to have with us, FiveRuns’ Bruce Williams. He would give us his perspective on the various questions facing the course participants – the would-be Ruby developers.
Satish>> A warm welcome to you. For the benefit of the course participants, could you tell us something about your self?
Bruce Williams>> Thanks, Satish. My name is Bruce Williams, and I’ve been a passionate Rubyist since 2001. Since 2004 I’ve used the language professionally, and as the community has grown during the last few years I’ve become a speaker, mentor, tech editor, and general advocate for the language. I’m also a language tourist, continuing to study a number of other languages to make myself a better developer. Like many Rubyists, I’m also a designer. These days I blog at http://codefluency.com; spend days at the office (and Austin coffeeshops) with my fellow developers from FiveRuns, and fly off to conventions whenever I can.
Satish>> Most of the course participants trying to make a switch to Ruby, come form a Java background. What advice would you give them?
Bruce Williams>> If you’re coming to Ruby from Java, you’ve got a great advantage — with experience in a [fairly complete] Object Oriented language some core aspects of Ruby will be very easy to grasp. That being said, idiomatic Ruby still doesn’t look or feel much like the Java you’re used to writing, and you still have a lot of learning (and arguably unlearning) to do.
I think the most important piece of advice is to acclimate. Immerse yourself in the community, do a lot of code reading, write code, take input, and be open minded. The obvious differences in syntax, language features, and code conventions are just the beginning. Parts of Ruby, especially the dynamism, will take some getting used to — and don’t automatically assume your old best practices will translate over to Ruby. It will take time for you to weigh the risks and benefits of different approaches.
Satish>> Which Ruby books should the course participants read or always refer to?
Bruce Williams>> I’d say the core set of books on your bookshelf should include Programming Ruby by Dave Thomas and Andy Hunt (lovingly referred to as the “Pickaxe”), The Ruby Way by Hal Fulton, Best of Ruby Quiz by James Edward Gray II, and The Ruby Cookbook by Lucas Carlson and Leonard Richardson. I’d also highly recommend Ruby for Rails by David A. Black; although it’s geared towards Rails developers it has some really well-crafted material on the Ruby language underneath.
Satish>> Which sites / blogs do you recommend, so that the participants are always abreast of the latest developments in Ruby?
Bruce Williams>> Ruby Inside is the main one that comes to mind as a good news source. I’d also be watching for new developments on Rubyforge, Github, and various Ruby-related mailing lists. In terms of blogs, there are really too many to recommend these days; just look for some prominent names, add them to your aggregator, and keep crawling around looking for new voices.
Satish>> While learning Ruby, what are the kind of projects the course participants should get involved with, to enhance their Ruby skills?
Bruce Williams>> The first thing I’d say is to merely look beyond the web framework; Rails brought Ruby to the forefront as a viable language for commercial use, and since then new web frameworks have been popping up like crazy. That’s great — but if you came to Ruby to work on webapps you owe it to yourself to look beyond the web to widen your horizons and increase your understanding; work on a project completely different than what you’re comfortable with… and after that, pick another one that’s just beyond your comfort zone. Work on a utility library, work on a desktop app, work on anything that keeps you learning.
Satish>> Which tools / utilities / libraries / applications in Ruby (apart from Rails) should the course participants focus on? Why?
Bruce Williams>> I won’t give you an exhaustive list, but I’ll cherry-pick a few. Starting out, know Rubygems; first how to install and manage them and later how to build and distribute them. Understand and use Rake. If you’re doing sysadmin work, pickup Jamis Buck’s net-ssh related tools. If you’re doing web work know Hpricot and open-uri. More than anything, know your standard library inside and out; fileutils, optparse, and yaml are some basic prerequisites.
Do yourself a favor and learn how to test; use test/unit (or RSpec, if it suits your fancy) — it doesn’t matter the tool, just do it, and find out how to do it well.
Know how to [and do] use RDoc to add documentation to your code; it’s just polite.
Satish>> What do you like / love about Ruby? Why?
Bruce Williams>> I like how drastically Ruby seems to take mundane tasks and turn them into fun little challenges of elegance and simplicity. I love how, when finishing up a piece of code, I’m constantly amazed with how short and readable the code is. Every day I’m thankful I work with such an expressive, engaging language; so easy to use that I’m not too exhausted to do important things like test, write documentation, and continue to pursue new techniques.
I love how excited developers new to Ruby can get, just a few minutes after being introduced (and I remember that feeling well).
Most of all I love the community; from the beginning it’s been an incredibly supportive, inclusive group of people. I wouldn’t be half the developer I am today if it wasn’t through the example and mentorship of some much better developers that I met through Ruby.
Satish>> What are the attributes of really good Ruby programmer?
Bruce Williams>> Creativity, flexibility, attention to detail, and a near-obsession with syntax and the expressive flow of language. An understanding that the right words matter, code is a living thing, and software development is more Art than Science. Basic social skills and a fine balance of hubris and humility also helps.
Satish>>How do you keep your skills sharp and keep up-to-date with the latest developments?
Bruce Williams>> It helps, of course, to develop and maintain a large codebase of Ruby code every day at work, and to work on a number of open source and side projects whenever I have the spare time. As with most things, constant practice is vital.
I do my best to read up on new developments daily, and to checkout/clone interesting projects constantly. Code reading is a useful tool I never underestimate.
As I said before, I also dabble in a number of other programming languages, including Erlang, Io, Haskell, and Objective C. I think it’s vital to have some serious experience across paradigms; it’s amazing how useful the cross-polination can be, and the techniques you discover and perfect through experimentation really do make you a sharper (and better read) developer.
Satish>> Is it important to learn Rails for a Ruby programmer? If yes, why?
Bruce Williams>> Absolutely. First of all, in the very least, as a good member of the Ruby community, you’re going to be talking to people that work with Rails every day; it’s still the biggest show in town. Development is a social endeavor, and learning Rails will give you some common vocabulary and points of reference so that you can more easily relate to these people. It probably also makes financial sense to learn Rails too, of course.
That being said, get a good grasp on Ruby before diving too far into Rails. I think the other path is fraught with potholes and peril.
Satish>> According to you, what have been the major obstacles in the Enterprise adoption of Ruby?
Bruce Williams>> Ah, that’s a hard question, and crosses over into my uncomfortable business opinions.
Obviously I’m interested in Enterprise adoption (though I’d rather cut off an appendage before working at a large company again) — adoption means a wider market, a better range of tools, contributers, and expertise. It’s going to happen, it’s just the rate of adoption that’s in question.
There’s no doubt enterprises move slowly, especially approaching new software technologies; no matter how compelling they may be to developers it’s hard to sell them on the financial benefits, especially when the tool and services ecosystem hasn’t grown up around the language. It’s hard for me to see these obstacles as much more than par for the course; it seems more of a systemic issue with the way decisions are made (and the number of layers necessary) and a lack of agility than a judgement on Ruby or Rails specifically.
Eventually we’ll reach a tipping point and widespread adoption will happen more rapidly. It’s all about building the ecosystem of supporting companies around the language. While Rails’ irreverent following certainly didn’t invite enterprises in with a fanfare of trumpets and promises of undying love and support, I think people put a bit too much weight in the emotional environment as a source of blame. I think the reality is more about cold hard numbers, stifling suits, and dollar signs.
Satish>> JRuby, Rubinius… so many new areas to explore and know about. How important are these for beginners in Ruby?
Bruce Williams>> I think it’s very important for beginners to understand what these implementations are and how they differ in terms of supported platform and professed goals, since they are important projects to watch. JRuby might also be of specific interest to Java converts looking for a Ruby “in” at their Java-centric workplace, and Rubinius is an especially interesting approach (and fairly decent source of good code reading).
That being said, use the canonical, standard implementation as your main learning tool.
Satish>> According to you, what’s the future of Ruby?
Bruce Williams>> Hopefully world domination, but without all the oppression, corruption, and nepotism that goes along with it!
More realistically, I expect to see a continued, steady adoption of Ruby by the market, drastically increasing the size of the community. I’m hoping we can avoid skill dilution and commoditization as we get larger (PHP, anyone?), and continue to be a cohesive group of creative, caring, and [reasonably] well-behaved developers.
From a technical perspective I think the next few years will be very interesting; with the advent of Ruby 2.0 and the dynamic of multiple implementations it’s going to be quite a ride. I’ll be there all the way.
Satish>> It has been fun interacting with you Bruce and thank you for sharing your views with the RubyLearning participants.