This post originated from an RSS feed registered with Agile Buzz
by Glenn Vanderburg.
Original Post: Try It
Feed Title: Glenn Vanderburg's Software Blog
Feed URL: http://www.vanderburg.org/cgi-bin/glv/blosxom/Software?flav=rss
Feed Description: Glenn Vanderburg's blog about software development
Two of my best friends in the Ruby community have suddenly gone all
nyah nyah on us, and it’s time for a bit of reality. Neal
Ford says static typing is communistbureaucracy,
and Stuart Halloway (presumably trying to tone things down a bit) says
it’s more like training
wheels.
Being intentionally provocative to knock people out of old assumptions is
all well and good … but even though I love Ruby, and am so
glad to be working in it now after 11 years of Java, my perspective is more
pragmatic.
There is no perfect world. You gain a lot by giving up static typing for
dynamic typing, but you also give up some things. It’s six of
one, a half-dozen of the other. Or maybe 9 and 3. Whatever. Whether the
tradeoff works in your favor depends on a lot of things — the kinds
of systems you’re building, the process and practices you use, how
well you understand your domain, and other things. And folks like Tom Ball
make great
points when they point out some of those tradeoffs.
(Furthermore, "static typing" doesn’t necessarily mean
"Java-style static typing." It’s just that the industry
right now is all wrapped up in static typing done the wrong way, while
ignoring static typing donetherightway.)
In spite of all that, though, I do agree (mostly) with Neal and Stu. I,
too, would rather write Ruby in vi (er … that is, emacs) than Java in
IDEA.
If you’re still on the fence about this, or even downright skeptical,
here’s my advice. Having been a static typing bigot for a very long
time, I know all of the arguments from that side. I used them myself. And
what I’ve learned is that you can’t figure this out by thinking
about it. There are things about dynamic programming languages — and
about how programmers work in those languages, and how systems are designed
in those languages — that you don’t really understand until
you’ve gained some real experience. It’s the Blub paradox at work. Knowing
about the flaws in the language isn’t enough either. What’s
important is knowing when they bite you, and how badly, and what you have
to do to stay clear of them. Primitive types in Java represent one of that
language’s worst flaws, but in my many years of Java programming I
was impressed by how rarely they really got in my way. (They did get
in my way, but not as much as I expected them to when I first learned
Java.)
So just give Ruby (or Groovy, or Python) a try. Find a way to build a
system of some reasonable size (a few thousand lines or so) in it. Give
yourself time to get over the learning curve of syntax and names, and learn
to think in the language. Decide based on experience, not fear or doubt.
Our field is at its worst when we act (when we teach, design, manage, plan,
argue) as if we’ve got it all figured out, as if we’ve got it
down to a science.
Nothing could be further from the truth. Our field is one of creativity,
experimentation, guesswork, hunches, and feedback. Above all, feedback.
Nothing blinds us and deafens us to feedback like being convinced
we’ve found the one true way.