InfoQ

Interview

Ryan "zenspider" Davis, Hardcore Ruby Hacker

Interview with Ryan Davis on Dec 27, 2006 05:27 AM

Community
Ruby
Topics
Programming ,
Dynamic Languages
Tags
Interviews ,
TDD ,
Languages ,
Metaprogramming
Summary
Ryan Davis, known as "zenspider", is one of the highest-profile Rubyists in the world, and arguably one of the most influential ones. He is the author of a number of valuable Ruby open-source tools, including RubyInline and ZenTest. In this exclusive InfoQ interview, Ryan gives us a glimpse into how he has been pushing the envelope of what's possible with the Ruby language and runtime since 2000.

Bio
Ryan Davis is an object-oriented languages bigot. He cut his teeth on Smalltalk, which made him a really bad C programmer. He got into Ruby when it came around in 2000 because "it just felt right." Ryan is a hacker in the true, positive sense: He spends a lot of time writing code and the Ruby community is all the better for that fact.
Ryan is, behind the scenes, pretty influential in the growth of Ruby. I want to talk to you about your current projects and what you're up to. First of all, a little bit of the background of where you came from, how did you get to do that cool stuff that you do now in Ruby...
What is the type of work that you were doing in those other languages that you felt you could do better in Ruby?
You mentioned that in 2000 you got started with Ruby. What was the community like, if any?
Do you speak Japanese?
How did that go?
From those early beginnings you started getting involved in some pretty hardcore stuff. You mentioned you did dome DSL stuff. How did you transition over to doing more kind of framework development and then more pure computer science type of stuff in Ruby?
You got to the point where you started seeing the need for this kind of tools to get you further into the guts of Ruby and to be able to do more with it. What did that lead to?
For instance "Ruby Inline": describe a little bit what that does and in what ways you put it to use?
Would you do that for performance reasons, because you have some stuff that you want to execute really quickly?
There are languages that take a fairly closed approach and don't let you do much manipulation at runtime, and then there's Ruby which is typically thought of as a very open language, in the sense that you can do tons of stuff at runtime. But part of what I'm getting from you is that it wasn't enough.
Wouldn't it be easier for you to do the stuff that you do in LISP or Smalltalk? In other words why aren't you working in LISP or Smalltalk instead of Ruby?
You have a pretty amazing lineup of products, but your marketing leaves a lot to be desired in terms of understanding what they actually do.
Let's go through them a little bit. One that has particularly interested me as an Agile - TDD advocate is ZenTest.
Does it really facilitate TDD? Couldn't it have the opposite effect?
You're saying it is bidirectional in the sense that you can write your test and invoke a method that doesn't exist and it will put the stub for the method for you?
How mature and useable is ZenTest?
You say that ZenTest is useable for everyone and for every context, but how does it fit for a Rails developer?
And you don't have the cost of starting the Ruby executable in the Rails environment every time you want to run a test?
You mentioned Ruby Inline and ZenTest and collectively you named these into a certain kind of package, like ZenHacks?
Why does an AST or the ability to generate one, matter to the application developer in Ruby?
Do you have any plans to add to the absence available for debugging in Ruby?
In the course of your Ruby development how much do you find yourself having to rely on the debugger?
What is this thing Rubyholic?
What is special about Rubyholic? Why should the average Rails developer care about the way that you wrote it?
How many bugs did you end up having in Rubyholic?
But is not as much a bug as much as a missing functionality.
What is your perspective on static versus dynamic or non-static typing?
Are Rails developers that don't do unit testing playing into the hands of Ruby's critics, that's unit static typing?
My code compiles. That must mean it is correct right?
I'm a Ruby programmer, I do some stuff which I would call meta-programming, but sometimes it's difficult to explain it to someone who hasn't done it. You must get the questions sometimes or be in the situation to explain to someone what is meta-programming and what we mean by it.
What are the benefits of meta-programming?
You mentioned that you found Ruby appealing when you first got started in it because it was a good way to write DSLs, these Domain Specific little Languages where you can express the intention of the code and what it is doing in a way that you can show to a business analyst. What are the strengths and weaknesses of Ruby for writing DSLs? Why is everyone excited about DSLs and Ruby?
Are the benefits of using Ruby to implement your DSLs limited to Ruby's syntax?
When you're implementing a DSL in Ruby there are a couple of ways you can go about interpreting the DSL code itself. By that the DSL code can cause direct actions to happen in whatever you are controlling or it can create an abstract syntax, basically just an object graph representing what you're trying to represent in the background. You must have experience in terms of doing both of those approaches.
I've been going out and talked to people about writing DSLs and showing off some of the DSLs that we've written. One of the common questions is how do I get my mind in terms of approaching a problem as a DSL? My answer is to express it in code, to read like the problem you're trying to solve, but that's kind of subjective advice. Have encountered any better ways of describing that to people?
There's a lot of interesting stuff that you're working on. You have momentum on these projects?
Where do you see the Ruby community going in light of these kind of developments, innovations that we are putting out there? Do you think it is going to be accepted or are we another LISP or Smalltalk in the making?
What's different in Ruby from LISP or Smalltalk. What are some of the critical factors in your opinion that are going to make us "cross the chasm"?
You have a fair amount of personal experience working with "mainstream" programmers. Where do you see Ruby fitting into the mainstream world?
Ryan, you're definitely one of the cooler hackers in Ruby-land. Any parting thoughts on what we're going to see in the future?
Are a believer in PragDave's "learn a language each year"? If so what language are you learning this year?
Are we going to see Scheme on Rails or LISP on Rails at some point in the future?
show all  show all
Erlang is /not/ statically type checked by Isaac Gouy Posted Jan 7, 2007 12:14 PM
Re: Erlang is /not/ statically type checked by Ryan Davis Posted Apr 5, 2007 5:55 AM
  1. Back to top

    Erlang is /not/ statically type checked

    Jan 7, 2007 12:14 PM by Isaac Gouy

    "What is your perspective on static versus dynamic or non-static typing?" I am a dynamic languages proponent, thus far with languages I do have experience with. I have yet to go with languages like Haskell or Erlange, where there is static tying that they tend to get in the developers way with how they think. ... Erlang is /not/ statically type checked.

  2. Back to top

    Re: Erlang is /not/ statically type checked

    Apr 5, 2007 5:55 AM by Ryan Davis

    Isaac, brainfart on my part. I think I just crossed wires and was thinking about ML. -- ryan

Educational Content

Bindings, Platforms, and Innovation

This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.

Orchestrating Long Running Activities with JBoss / JBPM

This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.

Neo4j - The Benefits of Graph Databases

This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.

Realistic about Risk: Software development with Real Options

This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.

Communication Flexibility Using Bindings

This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.

Writing DSLs in Groovy

After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.

Scaling Agile with C/ALM (Collaborative Application Lifecycle Management)

IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.

Concurrent Programming with Microsoft F#

Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.