Jeremy D. Miller -- The Shade Tree Developer

Sponsors

The Lounge

News

Advertisement

Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
One Weekend at "No Fluff," So Many Thoughts...

I just spent a great, great weekend at the No Fluff, Just Stuff conference in Austin.  I would more or less characterize the conference as Drinking Ruby Koolaid from a Firehose.  Besides Ruby on Rails I sat in on talks about TDD, AJAX, SOA, building better teams, and coding in general.  Scott Bellware has his own, accurately named, write-up about the conference here:  A Long Weekend in Ruby Land.  Scott was uncharacteristically tame and non-controversial, so I'll take up the slack.  I walked away with a long laundry list of topics that struck a nerve with me during the weekend, most of which are going to be controversial and rightly so.  If I don't get flamed for something here, you're not paying attention.  Regardless, it's an interesting time to be a developer.  I think we're in the middle of one of those "uproot everything" phases like a couple of years ago when .Net was all shiny and new.

Cool Quotes

I'm going to butcher some of these, but these were the best lines I remember from the weekend.

"When you pull a class off the shelf, what else is coming with it?" -- Stuart Holloway talking about using Dependency Injection.  I'm stealing that metaphor for my StructureMap talk tonight.

"The Neck Bearded Unix Guy" -- The guy who completely dismisses any technique or technology you're enthusiastic about with the offhand dismissal "we already did that better in the 70's."  Neck Bearded Unix Guy is very likely to be an old Smalltalker.  Which is frankly fine with me, I can take that much better from a Smalltalker or LISP aficionado than I can from the COBOL troglodytes that dismiss any concept developed after the "IF/THEN" and "WHILE/LOOP" constructs.

"Architecture is pretty well a content-free word in software development"

"Architecture is the decisions that are hard to unmake" -- Attributed to Martin Fowler.  I know I've read this article before, but I couldn't find it to put a link in.  As I recall, Martin borrowed a definition of architecture from one of the GoF guys that goes something like - "Architecture is the technical decisions you consider to be the most important"

"AJAX makes the web suck less"

"[The Document Object Model] is an API designed by a committee to appeal to nobody" -- the speakers as a whole were not kind to the W3C and OASIS

"If you don't know if it runs, why bother compiling it?" -- one of many verbal digs at people being afraid of dynamic languages

"Code that's difficult to test is difficult to use" -- Pay attention to your API when you're testing. Use TDD as a tool to sand off the rough edges on your public API

"Rails makes it easy to do the right thing!" -- I'm going to talk about this more below, but it's one of the underlying principles of RoR (and I think they're largely succeeding)

"In five years, compiling will be considered to be just a weak form of testing"

"The peripherally technical management crowd grabbed SOA like a chew toy" -- I actually do believe there is some actual value in SOA, but I've always suspected, and observed, that some of the popularity is due to non-coding architects pushing SOA as a chance to feel important again

"SOA as an acronym no longer holds any value" -- Just complaining about the sloppy abuse of the term to mean anything the speaker or writer wants it to.  I know, you could easily slip "Agile" in for "SOA" in that sentence (MSF for Agile?, agile my @!*)

"Low Truck Number" -- A statistic measuring the healthy duplication of knowledge and understanding within a project team. If your Truck Number == 1, a single person getting hit by a bus, or offered more money across the street, effectively ends your project. I've been the "what if you were hit by bus" guy in the past. It wasn't fun, and I learned to hate that phrase.

"I think the popularity of SOA can probably be traced to an article in an on-flight magazine"

"Writing a lot of noisy code just to make the compiler shut up" -- Again, moving to dynamic languages.  The speakers were, almost to a man, in favor of dynamic languages.  More on that below.

"Code is the most important artifact you create" -- Amen.  This was from a talk on improving code in general.

"Am I going to choose a tool that protects me from myself, or pick the sharpest possible tool?  Even if it means I might cut myself?"  -- Austinite Bruce Tate launching into a talk about the Metaprogramming approach used by ActiveRecord (RoR's O/R mapping tool)

"Seaside is the coolest thing you'll never use"

It's the Community: .Net vs. Java vs. Ruby

In my opinion, one of the coolest things about Ruby in general and Ruby on Rails in specific is the energy and can-do spirit of the Ruby community.  If Ruby/Rails succeeds in taking away market and mind share from J2EE or .Net it will be directly attributed to the strength of its community.  I'm very impressed with the amount of energy and community-driven innovation that's going on in the Ruby world.  What's cool to me is that the innovation is coming from a community of practitioners instead of being solely reserved for the one big company working in a relative vacuum.  Check out Streamlined (new open source tool to accelerate building Rails screens), I was absolutely floored by the five minute demo.  I'm unapologetically a believer and an enthusiast for open source tools and frameworks.  We've got some good ones in .Net, but nothing like Rails is cooking up (I don't mean to discount MonoRail, I just think it's ramming a square peg through a round hole).

.Net doesn't have anything that remotely compares.  Andres Heilsberg and co in Redmond are doing some truly innovative things, but where's the community driven innovation?  When I read Ruby blogs I see a lot of "look at this new, cool plugin I made for Rails."  In .Net blogs I see a much, much higher percentage of "look at the new thing from MS that'll be available someday."  Make me feel better and tell me I'm wrong about .Net.

Some people in the .Net world have openly criticized Microsoft for working simultaneously on 3(?) different O/R-ish persistence frameworks based on LINQ (none of which may be any better than NHibernate).  I say, bring it on and let the best tool win!  We (.Net) don't have much in the way of diversity in terms of our tooling.  Some of the J2EE guys were complaining about the variety of choices they have to make to do an enterprise system -- WebWork, Tapestry, Spring, Struts, and who knows what else for web development.  All I've got is ASP.Net and some ports.  I understand their pain, but I think we (.Net) would be better off if there was more choices.  Look at Internet Explorer, it was essentially dead until Firefox came along to push it.

Collectively, our little cadre of .Net folks agreed that we like our .Net tooling for TDD (NUnit + TestDriven.Net) much better than the tools we saw the Java guys using.  Just for an example, the poor Java guys don't have [ExpectedException(typeof(SomeCustomException))] yet.  Ha, ha.

Of course it's not really fair to compare the two communities.  Ruby is largely a collection of early adopters and .Net is a mainstream language.  The community makup is obviously going to be very different.

Maybe You Should Have the Smart Guys Writing Code

Sitting in Neal Ford's session on improving the quality of code.  It was just a nice session going over basic principles of good coding -- naming, Composed Method, etc.  In other words, nothing revolutionary.  What was striking was that this talk about low level coding was being given by an acclaimed Application Architect.  A really smart guy was spending time talking about coding.  For that matter, almost every single talk I attended talked about coding.  In other words, coding is important.  Coding requires skill and judgment.  Coding isn't something you just throw over the wall to a bunch of monkeys with keyboards.  It's possible that the best book about coding I've ever read is Refactoring by Martin Fowler.  Martin Fowler apparently thinks that low level, hands on coding is important.  So why do we still have so many shops trying to write software by surrounding one or two competent people with an army of poor coders, then disallow the competent fellows from coding?  The non-coding architect/spec coder combination has to be one of the worst possible team models, yet it's so common.  Removing your best people from hands on coding has never seemed very intelligent to me.  I thank God every day that I jumped to an XP shop 3+ years ago when I was getting rammed into the powerpointing, non-coding architect peg.  It makes me shudder in horror to think what would have happened to me if I hadn't gotten out of there.  I bet I'd be blogging about SOA a lot more;)

It's Firefox for Me

I'm often slow to jump on some things just because I don't pay enough attention.  I've largely ignored Firefox because I really don't have any major hangup with IE.  After seeing the plethora of web development tools in Firefox that were used in some of the Ajax and Selenium talks, Firefox is now my browser of choice.  There you go, I have to be nearly the last developer converted.

Selenium IDE

I'm going to do a short post later this week on integrating the Selenium web testing engine inside of FitNesse.  I still like that approach for acceptance tests, but I think we'll supplement that with the Selenium IDE tool.  Selenium IDE is a nifty Firefox plugin that allows you to record and/or edit Selenium tests inside the running browser.  My initial thought is to get our tester to use this as the mechanism to communicate defect reproduction steps.  It might be asking too much, but it would be nice if they would also use the tool to create a test for the correct fix, but let's not get too far in front of ourselves.  One of the problems you face with defect reports is vagueness and ambiguity in the description of a defect and the expected results.  Human-readable, automated tests are my favorite mechanism to eliminate that ambiguity.

What's Still Stopping me from using Ruby

Inertia.  Legacy code.  "Enterprisey" stuff like support for x509 certificates.  The tooling needs to catch up.  I'm not very wild about any of the Ruby tools I've tried so far (I can't even get RadRails up yet).  I'm going to give Sapphire in Steel a try pretty soon.  I really, really don't like programming without automatic refactoring.  I'm not too keen on coding without being able to quickly go "SHIFT-F6" to rename anything.  Ruby is going to have to have a strong refactoring tool at some point to win a lot of people over.  As often as I've heard "Neck Bearded Unix Guy" gush on about the old Smalltalk Refactoring Browser it's a safe bet that it's technically feasible.  I really want to hear JetBrains announce a Ruby IDE.

Oh yeah, there's that little "we're a .Net shop" political issue.  In all seriousness, we have some internal facing administrative tool work coming up that might have skunkworks "Ruby on Rails" trial project written all over it.

More Later

There will be more.  After I get a chance to digest a little bit, and let some of the Koolaid out of my system, I'm going to weigh in on the Static vs. Dynamic language debate.  I'm definitely going to collect some thoughts about Rails.  There's also a host of technical things about the way Rails works that I like much better than ASP.Net.  If nothing else, I want to talk about how Rails blows ASP.Net out of the water in terms of testability, and maybe getting some of that goodness into .Net. 


Posted 07-10-2006 12:11 PM by Jeremy D. Miller

[Advertisement]

Comments

Nick Parker wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 2:34 PM
With annotations in Java 5, there's no reason JUnit could support some type of ExpectedException.
Ben Hale wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 2:55 PM
6 months ago you would have been dead on about the expected exception attribute.  With the release of JUnit 4 in early March, dJava developers got an annotation that is now equivalent.

That being said, your argument rings sound.  As I was finishing at University I really started to get into .NET and C# in particular and couldn't understand why NUnit could do expected exceptions so much easier than JUnit (turns out the problem was in the language not having annotations).  Heck, from day one, dozens of languages could run on the CLR and Java is just getting around to languages 3 and 4 on teh VM.

The thing that eventually turned me back to Java was the community.  Not that there were a lot of developers doing cute little plugins and tools but that there was no one doing really big-think kinds of things in the .Net community.  Since I'm too young to really remember Smalltalk, it seemed that the real adoption of IOC, AOP, TDD, CI and their ilk were driven by Java developers, not .Net developers.  It just seemed that the people I wanted to be like, developed in Java.

Now the shoe is on the other foot though.  With RoR, it seems like the people who are doing the big-think kinds of work have moved on.  Or maybe it's just that the Java thought leaders have gotten lazy.  Either way I'm looking forward to seeing if Java (and/or .Net) developers stand up and embrace the RoR concepts and extend them.  The community that stands on the shoulders of giants; that's the kind of community I want to be in.
pvanooijen wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 3:08 PM
"The neck bearded Unix guy"
In the erly 90-ies Dutch journalist Jan Jacobs, at that time focused on network OS'es, used to say about Unix as a network OS:
"You need a beard with a pair of sandels to keep that in the air". Which always was a good laugh.
Nice to hear it's international :)
Jeremy D. Miller wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 3:40 PM
Ben -- Ditto.  I've always thought we (.Net) are always chasing the Java guys in practices and patterns.  I was lucky enough to spend my formative .Net projects in a shop with a deep Agile Java background.

They did say that the annotations were on the way for JUnit in a newer version.  I just liked the idea that we had *anything* that was better than theirs.  I still think it's quicker to run the tests with TestDriven.Net though.
Nick Parker wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 4:24 PM
Whoops, my comment above should say "there's no reason JUnit couldn't support some type of ExpectedException".
Sam Smoot wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 5:45 PM
Nice post.

You're dead-on about the tool support for Ruby. Right now I'm using SCiTE. Theming it the way I wanted (colorful on a dark background) was the easiest I've tried so far, but it doesn't detect file changes on disk for open files, and that's bitten me a few times. Not that anyone needs to hear it again, but TextMate is perfect. :-) On Linux, Kate is surprisingly good. I just didn't expect much from a "lightweight", built-in editor (for most KDE based distros I guess), but next to TextMate, it's just about the perfect editor. On Windows... well, I haven't found anything that could give me a decent light on dark tabbed editor, with changed-file-reloading, great syntax highlighting and an integrated file system browser that felt "native" (JEdit is just too funky and slow for me, though some co-workers seem to make it work for them).

I think the refactoring thing is pretty low on the list though once you start slinging some decent amounts of Ruby code. Ruby is much more about symbols, method_missing, Arrays, and Hashes than .NET, and frankly, after developing quite a lot of Ruby, I really don't see a need for refactoring tools in it. You just don't do things the same way in Ruby. Even "large" projects that I've created great big beautiful edifices out of in .NET are relatively small in Ruby when you look at the underlying clockworks because you tend to write DSLs instead of frameworks, or extensions to the Core Lib instead of wrappers. So, at least for me, my time shifts from writing complex things to do things, to writing rather straight-forward things to enable me to do things.

If that makes any sense at all. My RExchange library is a perfect example of that. It's stupidly simple, and on it's own doesn't do anything useful, but it allows you to scrape Exchange mailboxes so very simply with small one-off scripts that it just really doesn't matter if you end up writing 20 of 'em in the next year when they're only 20 lines long each.
Jeremy D. Miller wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 5:51 PM
Sam,

Thanks for the comment.  I'm pretty close to stealing my wife's Mac just to play with TextMate.

Since you're out there, what's your experience with unit test times?  We .Net-ters were a little geeked out about the model classes being tested against the database.  Are you happy with the rake build times?

Jeremy
Sam Smoot wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-10-2006 6:30 PM
I can't really speak credibly on the subject. My Rails experience has mostly been a few demos for sales pitches (for our business app) so I'm ashamed to say that actually making use of the integration testing built into Rails has been spotty at best for me. Plus SqlLite3 tests have been broken ever since I can remember (though I think they might be fixed by now), so that pretty much ruled them out for my hobby projects.

Rake itself is pretty snappy. db:dump, db:import, db:bootstrap, :rdoc, :gem, etc all zip by in a few seconds for me generally so I can't complain. If you avoid the integration tests, I doubt performance will be a concern. If I'm running tests these days it's usually with RSpec though since I spend most of my time coding in Ruby, and working with ActiveRecord (when I'm not doing maintenance anyways), but very little with Rails itself.

Just in case anyone's interested though, using ActiveRecord outside of Rails is a breeze and definitely preferable to suffering with DBI (Ruby's equiv of ADO, in fact, the DBI database driver for SqlServer _is_ ADO). Just a simple:

ActiveRecord::Base.establish_connection :adapter => 'sqlserver', :host => '127.0.0.1', :database => 'moocows'

...and you're pretty much rollin'. Anyways, back on topic, I've heard the integration tests are slow. John Lam was talking about writing a RubyClr+ADO.NET ActiveRecord Adapter I think though and said there are some pretty big gains to be had, so if I were doing Rails+SqlServer I'd probably give that a serious look. The database adapters are a bit tedious, but fairly straight-forward so if you've got a decent handle on Ruby writing one probably wouldn't take more than a day or two to get something serviceable. Sorry I couldn't be more help.
Carl Camera wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-11-2006 1:23 PM
You wanted more of this so here you go: Hey look at this great new .NET app that I created!  Vine Type is a lightweight .NET internet CMS and blog engine that serves up W3C-valid XHTML.  It requires NO database or scripting language installation yet supports unlimited articles, sections, subsections, and cross-postings.  Natively supports blog features such as writeback, captcha, rss, search.  All in about an 80k zip file. That's about twice the size of the "test driven" gif file on this page.  http://vinetype.com

The problem is: Where do I publicize this?  Microsoft doesn't want to feature something that doesn't require VisualStudio to develop on and SQL Server on the backend.  No TechNet birds-of-a-feather session is forthcoming on "eliminating SQL Server from your website." The "community" is focused on enterprise development; no one (besides Milan Negovan) blogs about how I was able to create valid XHTML websites with .NET Framework 1.1.  As you said, it's a culture issue.
Wes Maldonado wrote re: One Weekend at "No Fluff," So Many Thoughts...
on 07-14-2006 4:23 PM
<blockquote>I'm going to do a short post later this week on integrating the Selenium web testing engine inside of FitNesse.</blockquote>

It's later in the week... I'm waiting!  Mind sharing your fixtures?
Dev::Blog » Blog Archive » More metrics! wrote Dev::Blog &raquo; Blog Archive &raquo; More metrics!
on 07-14-2006 5:46 PM
Jeremy D. Miller wrote re: One Weekend at &quot;No Fluff,&quot; So Many Thoughts...
on 07-14-2006 6:13 PM
Wes,

Tomorrow (Saturday) morning.  One way or the other.

Jeremy

Add a Comment

(required)  
(optional)
(required)  
Remember Me?