Ravi Mohan's Blog

Saturday, December 10, 2005

What Mr Fowler Really Said

Martin Fowler's post on "Humane Interfaces" has set off a maelstrom in the 'blogosphere'. (He has referred to some of the more interesting posts in his updates to his entry).

As is typical in the world of software, the original points were soon lost in a cacophony of arbitrarily drawn battle lines (java vs ruby, open vs closed class systems, Java's List interfaces vs LinkedList class etc).

This is what I understood from Martin's post. (Heavily paraphrased. Don't blame Martin for any butchery I commit on his prose)

...There are two approaches to designing interfaces. One I (Martin) label the "Humane" approach. Another is the "minimal" approach. Here is an example..{ } .. The distinctions between these approaches are worth thinking about. I (Martin) lean toward the humane approach...

As readers of this blog know, I am all in favor of subjecting opinions to logical scrutiny. But I fail to see how this can be any clearer. It seems fairly obvious that (a) the example used is just that - one example and (b) either approach can be used in any language. Where did "Java vs Ruby" come from? What am I missing?

[rant] I am getting fairly irritated at the lack of clear thinking prevalent in the software world. Aaargh! [end rant]


Joe Williams said...

Well said.

jqb said...

I've concluded that everyone who was involved in this discussion was clueless, since none of them seem to have grasped that, for instance, the Array#pack method exists because pack() exists in Perl. None of them seem to have grasped that, when you write x = [] in Ruby, it has no idea whether you're going to use it as a stack or queue or random access array or whatever. None of them seem to have grasped that the Array class implements a scripting language feature, a container type that has the same semantics as Perl arrays. It has nothing to do with class design, and everything to do with the requirements of the application, which happens to be a scripting language meant to replace Perl.


Ravi said...


Good Point!