(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Friday, August 11, 2006
  Dear Agile Metaprogrammer

I read and enjoy your weblog. You are fairly witty and your stories about attending Woodstock-like love-ins are always amusing. And although I have no intention of even trying Ruby on Rails, Lisp, Python, Haskell, Lua, or whatever else you are fawning over at the moment, there are some snippets of interesting technical knowledge to be gleaned from your experiences.

(c) 2005 Darrin Weissinger

For example, just the other week I realized that with fewer than 500 lines of intricate code and a few pages of boilerplate interfaces (I was going to have to define all those Java types and methods anyway, so it's free, right?), I could use an InvocationHandler to remove some duplication from my code. I would never have thought of that if I hadn't read about how Ruby lets you make delegates with one line of code.

Philip would be proud of me. But let's get to why I'm writing, ok?

Your posts are getting tiresome.

Blah, blah, blah the indexing takes about 20 lines of code and took less than 10 minutes to get working. Blah, blah, blah magic models. Blah, blah, blah rewrite reddit in Lisp in one hundred lines and twenty minutes. Worst of all, blah, blah, blah $800,000 contract. That's real money!

I don't mind fanboys, lusers that brag about these 'metaprogramming' languages but never actually do any work with them.

But how irritating to hear yet another Rubyist, Pythonista, or Lisper brag about getting actual work done in half the time, with half the effort, then taking the rest of the day off to enjoy the Real World.

Some of us are busy doing Enterprise work, you know, and we're man enough to put in seventy hour weeks debugging our XML parsers, Front Controllers, and verbosely typed languages (VTLs). We don't want to hear about your Euro-style three hour lunch breaks and incremental delivery schedules.

We do the heavy lifting and we have the GANTT charts to prove it.

So just cut it out, ok?

p.s. I'm sorry I'm so testy, but I've been up all night trying to talk to our QA team located in Bangalore. It's bad enough that I don't speak any of their five mother tongues, but it looks like their QA plan is based on a different version of the specs than we got in our supposedly locked down briefing package from the consultants that were hired to gather requirements.

p.p.s. And another thing, you Software As A Service gadfly...

Labels: ,


Comments on “Dear Agile Metaprogrammer:
Hey, my code has frontcontrollers! (it's in .NET, but not really very microsoftie in approach)

RoR has front controllers too! :-)
Hey, my code has frontcontrollers!

Don't bring your troubles to me :-)
All a FC is, really, is just a thing that takes URLs and translates them into function calls or object creations, y'know.
I'm very sorry, but technical discussions are off topic on this post.

If I were to explain why I held up a front controller as an example of an-agile programming, I would point out that sure, Rails implements a front controller. The whole point is that building a site on top of Rails doesn't require implementing your own front controller.

Once again the Rubyist is sipping a Blue Martini while the real programmers are not only implementing their FC, but building an infrastructure to handle inferring routes from classes and methods (the link_to and url_for functionality).
Wouldn't you want to do it the easy way instead of the hard way? If you found an easy way to do something, wouldn't you want to let your fellow programmers know about it?

I can understand that you don't want to read another post about how Lisp/Ruby/Python/Haskell is making things easier, when your work environment is more of a Java type situation. I program C# for my day job, so I know where you are coming from in terms of frustration with limitations of the language, especially when compared to dynamic metaprogramming languages.

Sometimes, to frustrate myself, I rewrite a method in Ruby that I already wrote in C# -- it is always 50% shorter, and in some cases dramatically shorter.

I can understand that you don't want to read another post about how Lisp/Ruby/Python/Haskell is making things easier, when your work environment is more of a Java type situation.

Ummm... how can I put this?

Like this?
"The whole point is that building a site on top of Rails doesn't require implementing your own front controller."

Then compare Rails to a framework in that currently fashionable language to bash that has them.

Some of you RoR fanboys seem to have an inferiority complex or something.
Dear anonymous:

Obviously my skill as a humourist is pathetic. if you can't laugh at my jokes, please try to laugh at my feeble attempts to make them.

As for comparing RoR to other frameworks, that is for others to do. This post and any comments thereunder cannot and should not be held up as an example of anything other than something funny to laugh about.

Now as for your suggestion, I'm guessing you're trying to say that there are Enterprisey frameworks available that do not require programmers to write their own front controllers.

To that, I say that if you use such a beast to avoid the work that real programmers do, I will simply lump you in with the Rubyists.

I didn't mention them, but trust me the spirit of the post applies to Hibernate/Spring users and anyone who owns a kayak.

The post was not language-specific. It was a polemic against everone who was reading the post on their wireless device in the coffee shop lounge while the real programmers reconfigured WebSphere and DB2.
I myself own a kayak and I feel very bad now, because I really don't get your point. What do you have against me ?

Should I buy a boat ?
so? java is verbose. it's a pain in the ass that it is verbose. heh. bfd. a little history, a little extrapolation, and it's easy to come to the conclusion that a couple of the key players in java's early formation, strategy, and biases is what makes it this way.

so. i'm just waiting for them to get over themselves. no big deal. i haven't been suffering for a decade due to their biases. i got into java deep in 1997, but i didn't stick around for the garbage that is struts. i just programmed in perl, using fun little libs like mason. (of course, perl has lost a lot of mojo, at least until perl 6 comes out.)

a bunch of designer types figured they could handle a little programming if it was in the perl begat, ruby. bfd again. those are the dudes who've have been slaving away under apple's poor performance (that magic land where PPC sh*t == sunshine). yeah yeah, now they've got their intel's so commander steve must have been right all along, but i don't really believe that haphazzard development techniques and focus on code conciseness is gonna be running banks, insurance, and travel any time soon.

but back to my point. at some point the java owners are gonna get over themselves, simply cause they have to (competition does that to you, you know). and they are going to (a) release java as open source and (b) deal with letting it be just that one little smidge of

they are already essentially dealing with it, what with all this focus on supporting dynamic languages in the VM. but yeah, there's another few steps to go, and then who really cares about the relatively uninteresting world of ruby. it doesn't really take much more than a few cultural shifts to give all that good stuff to the java world.

annotations was one of those good steps forward, regardless what those old-school java culture-hounds. don't worry, they will realize they'd better wake up and dink a little dynamic koolaid when faced with colbolity.

and anyway, ruby schmuby. if anything, people should be looking at parrot. ruby is just so freaking uninteresting. of course its concise and easy to get in to. its freaking young!!! haha. and don't kid urselves. the biases of DHH and clan aren't any less pronounced. and those guys just don't have the depth of knowledge and experience in the long run.

oh well, nothing like a rant on an early sunday morning to have a little fun ;-D (proof read? hell no! i'd try a compile to catch my bugs haha)
*sigh* oh well, a proofread, and i have to finish a paragraph :(... that one little smidge of dynamic-language support that's left to give.

(damn u, 5th bottle o' beer!)
if anything, people should be looking at parrot

People like Kevin Tew? Excellent thought!
Does the language really matter? What % does the language contribute to success? Product design is 99.9% of any successful product.
Reg! I am so disappointed with your Java book list. You missed one very important book, and it would have easily added 2 full inches to the size of the stack! You owe me a drink.
The books in question belong to one specific programmer. I do not endorse them as an effective way to learn or maintain a Java programming career.

Had this programmer purchased and read Junit Recipes, by J. B. Rainsberger, there would have been much rejoicing.
I'd take the big-process (opposite of Agile) guys more seriously if my airplanes weren't late half the time, losing luggage, etc. If my credit report were flawless, I might agree that the banking industry was impeccable. If airliners never dropped out of the sky for stupid software oopses, I'd believe avionics coders who insist their work is the real bullet-proof stuff.

The over-verbosity of Java is just like COBOL "ADD 1 TO COUNTER GIVING COUNTER". The statement is more likely to be wrong than counter++, not less.

It's testing and validation, and proper encapsulation, that make software reliable. If you have 100K programming symbols it's going to be too big to fit into your head, regardless of language. If it's got a billion code paths a developer isn't going to properly regression test just through the act of development.

But develop strong procedures and your Ruby meta-programming is as likely to produce the right answer as your Java.

If everything else was equal, it'd be a toss up. But in the time it takes to declare a function in Java you could have written an RSpec test and contributed towards specs, QA, and docs.

However, we're unlikely to get this sort of widespread discipline in an industry where the government doesn't mandate it, so in some ways the bank programmers are right...

<< Home
Reg Braithwaite

Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /