Author Interview: Dave Klein on Grails: A Quick Start Guide

DZone 's Guide to

Author Interview: Dave Klein on Grails: A Quick Start Guide

· Java Zone ·
Free Resource
Dave Klein

I recently had the opportunity to interview Dave Klein, the author of DZone's Getting Started with Grails Refcard and Grails: A Quick-Start Guide for the Pragmatic Programmers, affectionately known in Twitter circles as "GQuick." You may have noticed, if you've checked out the back cover, that I think this book is "Quite possibly the best introductory book I've ever read about any framework, not just Grails." That opinion still holds true today. So without further delay, let's get to the interview:

Matt: So Dave, why don't you introduce yourself briefly to our readers?

Dave: OK. My name’s Dave Klein and I’m a homeschooling father of 13, married to a beautiful DOS power-user. (Anybody need any batch files written?)  I’ve been developing software in one form or another for 16 or 17 years, and have played almost every role in the development process.  I founded the Capital Java User Group in Madison, Wisconsin and the Gateway Groovy Users in St. Louis, MO.  I’ve presented -- on Grails -- at SD West, JavaOne, and most recently at SpringOne2GX (along with you, Matt).  I write a monthly news column and a plugin tutorial for GroovyMag, and recently wrote the book Grails: A Quick-Start Guide for the Pragmatic Programmers.

Matt: Great! For the uninitiated, how about giving us a quick overview of Grails and what it offers for today's developer?

Dave: Grails is a full-stack web development system for the JVM.  Grails includes best-of-breed frameworks like Spring, Hibernate, Sitemesh, Ant, Ivy and others, and uses the Groovy language to make them all easier to work with than ever.  Grails also takes advantage of design principles such as DRY (Don’t Repeat Yourself) and Convention over Configuration to provide an environment that is more productive and enjoyable than anything seen before in Java development.

Matt: At the time GQuick was being written, there were already several Grails books on the market. What are you offering that was missing?

Dave: The books that were available were great for those already working with Grails, or at least committed to working with it.  What was missing was something that provided an easier entry point for those just getting started or just looking into Grails.  My goal was to help ease the transition into Grails, and provide a gateway to the other more in-depth resources.  In fact, I include a list of the other available books in the Appendix of GQuick.

Matt: Who were you trying to reach with this book?

Dave: The book is aimed at web developers in general, with a slight emphasis on Java web developers since they are the ones with the most pain – though I’ve heard from PHP and Rails developers that have read the book and found it helpful.  I don’t assume a great deal of expertise, but some basic understanding of web application concepts is assumed.

Matt: Why should I choose Grails over many of the other alternatives in this space (Rails, Play, etc.)?

Dave: The easy answer is that Grails is better than all of them, although I admit I am biased.  But seriously, the main reason one might choose Grails over Rails is the JVM and the vast array of tools and libraries available in that environment.  Even with JRuby on Rails, you will not have the easy and seamless integration with those resources that Groovy provides to Grails developers.  

Since Grails came out, other frameworks for the JVM have appeared that address some of the problems solved by Grails, but I don’t think any of them have gone as far as or are as mature as Grails.

Matt: What's the one Grails feature that you absolutely can't live without?  

Dave: This might be cheating, but I’d say GORM.  The reason I say that might be cheating is that GORM (Grails Object Relation Mapping) is really a bundle of features.  GORM dynamically adds full persistence capabilities to our domain classes, simply because they reside in a certain directory.  We don’t need to implement any interface or extend any class.  And the way that persistence is provided is so simple and unsurprising.  Sometimes, while learning Grails, a person will ask how to do a certain thing, and I’ll ask them “How would you do it?”   Quite often that’s the way you do it.  You save an instance with instance.save(). You delete an instance with instance.delete().  You get an instance with DomainClass.get().  You find an instance based on properties with DomainClass.findByProperty() or find more than one with findAllByProperty().  What if we wanted to find all objects with a color of blue and a size that is greater than 10?  Hmm… how about findAllByColorAndSizeGreaterThan(‘blue’, 10) ?  I love this stuff!  

GORM also provides features like schema generation, a powerful mapping DSL to work with legacy databases, Criteria support, and more.  All of that easily makes it the most powerful feature in Grails.

Matt: In Appendix A, you offer the most comprehensive overview of the G3 (Groovy, Grails, Griffon) community that I've seen. How did you ever assemble it?

Dave: Well, the G3 community is my second favorite feature of Grails.  The people involved in this community are some of the smartest and most helpful people I’ve worked with in my career.  I’ve been involved with other technologies before, but none like this.  So I figured that anyone getting into Grails should be introduced to the community too.  

I didn’t have to do very much research to come up with the list of blogs and other resources, since most of them were already in my RSS reader or bookmarks.  You can find these people wherever you look.  Take a look at the up votes on a Groovy-related DZone article, or do a search for #grails in Twitter, and you will see many of the names in the appendix.  If you go to a conference like JavaOne or Devoxx, keep an eye out for the Groovy table in the dining hall.  It’ll be there.  

This community of developers obviously provides a wealth of resources when you need help, but it’s more than that.  They challenge and inspire you, and generally make your job much more enjoyable. Even if you never get the chance to work with one of them directly, they are your colleagues.

Matt: Where do you see Grails and the Grails community headed over the next few years?

Dave: I predict that over the next few years Groovy, Grails, and Griffon adoption will continue to climb as tool support gets better and better and more people see just how much more productive they can be.  I think that the growth in the community will present both challenges and opportunities.  I’m looking forward to both!   

Matt: You were recently named the sponsorship coordinator for the Gr8 in the US conference. Any chance you'll be using TekDays to get things done?

Dave: I have to say the thought did cross my mind.  I’m not organizing the Gr8 Conference though, so that will be up to the organizers, Shaun Jurgemeyer and Bill Turner.  My sons, Zak and Ben, are working on getting tekdays.com ready for beta, and the Gr8 conference would be a great way to test it out.

Speaking of the Gr8 Conference, it is coming up on April 16th in Minnesota.  Keep an eye on the blog for more information. 

Matt: Is there anything else you'd like to share with our readers?

Dave: If you are doing web development and haven’t taken a look at Grails yet, please do.  You’ll likely be hooked, and even if you’re not, you will at least get some ideas of things you can do better in your framework of choice.  

If you are using Grails but are not actively involved in the community, get involved.  Check out the mailing list.  If you have a question, chances are someone else has had that same question or will.  Check out sites like groovyblogs.org or the GroovyZone or GroovyTweets.  Find a user group in your area or start one.  I was serious when I said that the community is one of the best parts of working with Grails, and the community gets stronger when people get involved.  Thanks!

Free Download: Dave's Getting Started with Grails Refcard.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}