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

Tuesday, July 01, 2008
  A blatant exercise in pimping an affiliate link to Art of the Metaobject Protocol

The Art of the Metaobject Protocol is the best book written in computing in ten years.
—Alan Kay, as quoted in Report on OOPSLA97

The bottom line: Languages like Java give you an object protocol: There is one way to do things with objects and classes and interfaces, period. Anything else, like adding generics or annotations, must be done outside of the language, it must be done by the creators of the language.

Languages like Common Lisp and Smalltalk give you a meta object protocol: You can decide for yourself how to do things with objects, classes, interfaces, generic functions, whatever you want. You don’t need to wait for a committee to try something different.

People who believe that software is best created in a Soviet-era Bureaucracy celebrating process and mediocrity—all the while spouting propaganda about celebrating the common worker and the primacy of the proletariat, of course—fear and loathe this idea. They will tell you that standardization trumps innovation, and that the only thing worse than metaprogramming within a standard object system is metaprogramming the system itself.

But we saw how valuing process over people played out, and our minds are actually open to new ideas, even when those ideas are forty years old.


Comments on “A blatant exercise in pimping an affiliate link to Art of the Metaobject Protocol:
Yes, amen to this. In order to create innovation (something that's painfully missing from Java, and perhaps the main reason people try to bring outside help to the JVM) you cannot impose draconian rules and steering committees. You need people to play around and discover new ways of doing things better.

The second half of this is of course that dreck will be invented. There will me bucketloads of crazy models, bizarre thinking and shitty code, but that is a wonderful prize to pay for the freedom of finding better ways forward. And perhaps it will help us understand the human aspect of programming more, where the focus is returned to solving problems instead of fighting with the core idea of whatever platform you're working with.

Lisp sounds like it would be the best language in the world, if it wasn't so painful to watch ...
That Report link is dead...
Ah! I've always meant to pick up a copy of that, but kept forgetting. Thanks for the (accidental) reminder. 'Fraid you won't be getting any kickback from the affiliate link as amazon.com and amazon.co.uk (which I have to order from) are practically different companies.
Kay also said--I'm paraphrasing--that the book is practically unreadable for somebody who doesn't know Lisp, and the best thing anybody could do for promoting the state of the art would be to make it readable for non-Lispers. I wonder if anybody will ever take up the challenge. AOP was a reasonable attempt by Kiczales to get at least some of the ideas in AotMP out there, but we all know how that ended up.
Java == communism

A couple of examples:


If Sun can't think of a reason why you'd want to be able to do something, you're simply not allowed to do it.

It's for our own good, comrades!

<< 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 /