ON THIS PAGE
    ARCHIVES
    CATEGORIES
    BLOGROLL
    LINKS
    SEARCH
    MY BOOKS
    DISCLAIMER
 
 Monday, October 16, 2006
There, but for the grace of God (and the experiences of Java) go I

At the patterns&practices Summit in Redmond, I was on a webcasted panel, "Open Source in the Enterprise", moderated by Scott Hanselman and included myself, Rocky Lhotka, and Chris Sells as panelists. Part of the discussion came around to building abstraction layers, though, and one thing that deeply worried and disappointed me was the reaction of the other panelists when I tried to warn them of the dangers of over-abstracting APIs.

You see, we got onto this subject because Scott had mentioned that Corillian (his company) had built an abstraction layer on top of the open-source logging package, log4net. This reminded me so strongly of Commons Logging that I made a comment to that effect, warning that the Java community got itself into trouble (and continues to do so to this day, IMHO) by building abstraction layers on top of abstraction layers on top of abstraction layers, all in the name of "we might want or need to change something... someday". It was this very tendency that drove many developers to embrace YAGNI (You Ain't Gonna Need It) from the agile/XP space, and remains a fiercely-debated subject. But what concerned me was the reactions of the other panelists, whose reaction, paraphrased, came off to me as, "We won't make that mistake--we're smarter than those Java guys."

Sorry, folks. That doesn't cut it.

Certainly, .NET has learned from the five years' lead time the Java community has had: the power of a runtime and bytecode, the usefulness of a large and well-built library upon which to build further, the power of compiled-on-demand Web pages, the usefulness of an openly-extensible build tool, even the "one language" vs. "many languages" debate, all could be said to have been influenced strongly by decisions and experience in the Java community. But Java still has much more it can teach the .NET community: mocking, unit-testing, lightweight containers, dependency-injection, and the perils of O/R-M are just part of the list of things that the Java community has close to a half-decade's experience in, compared to .NET's none.

To stand there and suggest that .NET will somehow avoid the mistakes of the Java community just because "we're smarter than them" is more than sheerest folly; it's a blatant ignorance of the well-known and famous quote:

"Those who do not remember the past are condemned to repeat it." --George Santayana


.NET | Java/J2EE | Ruby

Monday, October 16, 2006 6:58:46 PM (Pacific Daylight Time, UTC-07:00)
Comments [6]  |  Related posts:
Polyglot Plurality
The power of Office as a front-end
Let the Great Language Wars commence....
Best Java Resources: A Call
Guide you, the Force should
Clearly Thinking... whether in Language, or otherwise
Tracked by:
"Abstracting Abstractness into Abstract Abstractness of Abstracted Abstratness" ... [Trackback]
http://www.ayende.com/Blog/AbstractingAbstractnessIntoAbstractAbstractnessOfAbst... [Pingback]
"New and Notable 115" (Sam Gentile) [Trackback]
"What Do Java Developers Have On Us?" (Travis.Net.Blog) [Trackback]
".NET, Java, Patterns, Abstraction, YAGNI" (Mike Diehl's WebLog) [Trackback]
"Too much abstraction??" (Notes from a Tool User) [Trackback]
"Drawing the line" (Nick Parker) [Trackback]
http://developernotes.com/archive/2006/10/18/Drawing-the-line.aspx [Pingback]
"http://9np-information.info/23294301/business-gifts-ireland.html" (http://9np-i... [Pingback]
"http://9ng-information.info/66214223/index.html" (http://9ng-information.info/6... [Pingback]
"http://9nc-information.info/28424883/yahoo-groups-directory-business-amp-financ... [Pingback]
"http://9ns-information.info/74922565/index.html" (http://9ns-information.info/7... [Pingback]
"http://9na-information.info/80923023/index.html" (http://9na-information.info/8... [Pingback]
"http://9ns-information.info/46280319/index.html" (http://9ns-information.info/4... [Pingback]
"http://9nc-information.info/19620636/index.html" (http://9nc-information.info/1... [Pingback]
"http://9nw-information.info/47358525/sonny-james-song-writer.html" (http://9nw-... [Pingback]
"http://9na-information.info/90472870/index.html" (http://9na-information.info/9... [Pingback]
"http://9nd-information.info/73883598/index.html" (http://9nd-information.info/7... [Pingback]
"http://9nv-information.info/16375186/index.html" (http://9nv-information.info/1... [Pingback]
Tuesday, October 17, 2006 1:30:47 AM (Pacific Daylight Time, UTC-07:00)
Overabstraction is a killer in many ways. Not only because the interfaces or APIs become hard to understand and use, but also because the documentation becomes so large that few people endure the pain of reading through it.
Quote Gregory Hohpe on Javazone 2006:
"Has any of you ever tried to read through the BPEL specification?" "You poor brave guys"
DeadOnArriaval
Tuesday, October 17, 2006 5:02:11 AM (Pacific Daylight Time, UTC-07:00)
Amen.
Jason
Tuesday, October 17, 2006 9:34:56 AM (Pacific Daylight Time, UTC-07:00)
I'll be the first to admit I have a ton of bad habits in my programming, being completely self taught free lancer I never had some of the standards enforced on me that come from working for/with other developers. but one of the practices that I have come to embrace (like a crack fiend looking for a fix) is O/R mapping, I thought that was what all the big dogs espoused as the future? It certainly has sped my development up while giving it a consistency it may have lacked from project to project. Why do you say it is perilous to be using O/R mapping? Thanks.
Justin
Tuesday, October 17, 2006 9:53:17 AM (Pacific Daylight Time, UTC-07:00)
I have to agree. .NET developers need to get a little humility and see they can see further by standing on the shoulders of giants.
Tuesday, October 17, 2006 2:35:30 PM (Pacific Daylight Time, UTC-07:00)
Though there is truth in the perils of over-abstraction, to postulate that because of this .NET developers don't learn from their Java kin is just not true.

Unit testing is a great example of the .NET community "standing on the shoulders of giants" as a previous commenter put it. NUnit's been around almost as long as JUnit has, and its usage (along with NAnt, CruiseControl.NET for continuous integration, etc) is widespread in .NET development. It's been around so long that even Microsoft has it in their latest release of Visual Studio. I haven't seen any smug attitudes or superiority complexes from .NET developers over it (at least not any more than the ordinary developer superiority complex :)

There are years of experience on the .NET side with unit testing, mocking, dependency injection, etc. and in each case similar examples can be made of the .NET community learning wise lessons from the Java folk who first bushwhacked through that particular programming problem.

In short, this isn't a .NET versus Java thing... doesn't everyone think they can do a better job with an API than the other bozo who built it first? :)
Tuesday, October 17, 2006 10:07:21 PM (Pacific Daylight Time, UTC-07:00)
hmmm.. Your comments say a lot of truth. Hope Microsoft dont make these big mistake.
Comments are closed.