Follow Slashdot blog updates by subscribing to our blog RSS feed


Forgot your password?
Java Programming IT Technology

Ask Jazz Technical Lead Dr. Erich Gamma 83

As IBM continues to build out Jazz, their community-oriented development site, technical lead Dr. Erich Gamma has offered to answer questions about Jazz or anything else in his realm of expertise. Among his many accomplishments, Erich worked with Kent Beck on the Java unit testing framework, JUnit, and was actively involved until JUnit 4. Dr. Gamma was also one of the fathers of Eclipse and the original lead on the Eclipse Java development tools. Feel free to fire away on Eclipse, Java, JUnit, the Rational suite, the Jazz site, or anything else you think Erich might be able to answer. Usual Slashdot interview rules apply. Update 19:05 GMT by SM: As pointed out by user Hop-Frog, Dr. Gamma is also co-author of the influential computer science textbook Design Patterns: Elements of Reusable Object-Oriented Software.
This discussion has been archived. No new comments can be posted.

Ask Jazz Technical Lead Dr. Erich Gamma

Comments Filter:
  • Dr Gamma was also one of the fathers of Eclipse and the original lead on the Eclipse Java development tools.

    Eclipse has been going on since the early 2000s and six days ago enjoyed the release of Galileo (v3.5). If you've had time to look at recent release, what are your opinions on what Eclipse has become? Has it made any wrong turns? How do you respond to criticisms of "bloat" or "too resource intensive"? Do you see it becoming more than what it is or transforming?

    • by Anonymous Coward on Tuesday June 30, 2009 @03:11PM (#28533155)


      Eclipse is an awesome platform for Java. As good as Netbeans. Over the years I've checked it out and I've never felt the desire to stay with it like I do with Netbeans.

      But when it comes to developing in other languages, Eclipse just doesn't cut and Netbeans blows the doors off of it.

      Some examples:

      When I downloaded the previous version of Galileo, from the menu I installed the plugins for C++. I couldn't get the C++ compiling and linking to work.

      BPEL?!?! They wanted me to GO BACK a couple of versions of Eclipse. I couldn't even find it on the net.

      Anyway, that's not the Eclipse foundations problem. What is their problem is the dependencies installation of the plugins. There's been times where I try to install a plugin and after a while it says I need another, the that dependency says I need a couple of more, and then those dependencies say I need more, and eventually, one dependency fails. Spent a couple of hours over that. What can't Eclipse do all that horseshit for me?

      There's other things that I don't like about the UI and the way Eclipse handles projects and their dependencies in Java. I went to Netbeans six months ago and never looked back. I am very happy with Netbeans and I don't see any reason to try to go back to Eclipse.

  • by Anonymous Coward on Tuesday June 30, 2009 @02:59PM (#28533007)

    Reading the About page is useless. The impression I get is that this is a fancy marketing scheme for Rational products. Which, is business as usual for Rational...they market well to managers and are more trouble than they're worth to the people that have to actually use them.

    • Re: (Score:2, Insightful)

      Reading the About page is useless. The impression I get is that this is a fancy marketing scheme for Rational products. Which, is business as usual for Rational...they market well to managers and are more trouble than they're worth to the people that have to actually use them.

      You describe the very experience I had. Our manager decided we were going to do Rational. We spent lots of time and money on training, hardware, installation services, etc. Everybody hated it. The developers would deal with the ClearQuest windows interface okay, but when we tried to get the users to report issues using the web interface, they revolted, and so we developed our own solution with integration to the CQ back-end.

      When ClearCase worked and everybody followed the plan, it was okay (but a HUGE r

    • Re: (Score:3, Informative)

      by BillHiggins ( 921577 )
      Disclosure: I am a developer on Jazz and Rational Team Concert.

      I can't speak for all of Rational or all of our users, but I can speak as a member of a development team that uses Rational Team Concert. When we were building what became Rational Team Concert (the first Jazz-based product), we made it an early priority (like 2 years before we shipped 1.0) that we would use Team Concert for our day to day development of Team Concert. Since we build Jazz and Team Concert from the ground up (read: from scra
      • Re: (Score:1, Insightful)

        by Anonymous Coward

        Is Jazz a technology, an initiative, a website, a community, or a platform? If it's not too late, you should push to have the ambiguity of the name eliminated. Slapping a "Jazz" label on everything is not going to serve you any better than when Microsoft tried to slap the label of .NET on everything. If it is ultimately a technology, clearly state that, and clearly state what it does. And get that information on the front page! Don't burry it under the layers of marketing speak.

        Let's try this. .NET really w

        • Re: (Score:3, Informative)

          by BillHiggins ( 921577 )
          Thanks for the feedback. Your admonition about not slapping the Jazz label on everything is something we have to be careful about and don't always succeed on. I guess I don't see the contradiction that you do - why can't Jazz be a technology platform and an initiative? Jazz is not a web site, though we obviously have a web site (with a nice short URL). I looked at the About page you referenced ( and it's basically accurate, though in sort of IBM Professional English.

          Here's how I w
          • Re: (Score:1, Interesting)

            by Anonymous Coward

            The description on is much clearer. So if I have this right, Jazz is basically about standardizing protocols and formats so that process tools created by different people can interop. So, for example, a Bugzilla defect could become a ClearQuest CR, which could become a Team Foundation task. Or ReqPro requirements could trace to Testopia test cases. Assuming all the tools mentioned implemented the standard. Is that correct?

            • Re: (Score:2, Interesting)

              by BillHiggins ( 921577 )
              Sorry, Open Services for Lifecycle Collaboration (OSLC) is an effort that IBM started to produce the standard protocols and formats that are intended to allow integration via data-level and UI-level artifact linking. OSLC would not allow a Bugzilla defect to "become" a ClearQuest CR, but it would allow someone to link a ReqPro or DOORS (or whatever) requirement to anyone who implements the OSLC change management protcols and formats. An analogy is that a feed reader can do useful things with most any Atom/R
              • Re: (Score:1, Interesting)

                by Anonymous Coward

                Would Jazz let me effectively replace anything in the Rational "stack" with another equivalent tool? Is it possible to add tools that are not in the stack as envisioned by Rational? Would the system work if I decide not to use some of the tools?

                • Here's how I would describe it. Let's imagine you use Rational Team Concert for change management. You have a bunch of other tools and they integrate with your change management tool (Rational Team Concert) using the Open Services for Lifecycle Collaboration (OSLC) protocol and formats.

                  You decide that you no longer want Rational Team Concert. You replace it with some other tool that implements the OSLC change management spec. All of your tools that were integrated with Team Concert continue to work with
    • He's a robot who turns into a Porsche 935. He's voiced by Scatman Crothers.

  • by eldavojohn ( 898314 ) * <> on Tuesday June 30, 2009 @03:01PM (#28533023) Journal
    Jazz seems to rely heavily on developer community and their collaboration--and the influence for Jazz is said to be the World Wide Web.

    The Jazz portfolio consists of a common platform and a set of tools that enable all of the members of the extended development team to collaborate more easily.

    The biggest problem I have with collaboration tools is the metadata. No one does it right. Someone writes a blog or uploads a document but doesn't tag it. Enterprise search is broken. Management hands us wikis yet no one has the time or patience to maintain them. The protective blanket of "it's agile, baby" shields us from any beat downs. And with every new tool I realize that it's not the tool that improves collaboration, it's the team. Look at Slashdot's tagging system. Does it help me that one hundred stories are tagged with "no" []? Collaboration seems to spontaneously work but is often out of your control when it does and doesn't. How does Jazz fix these problems? How does Jazz improve collaboration when it seems to me that tools are such a small part of collaboration? Will a small development team be able to use such a large set of tools?

    • Disclaimer: IBMer here.

      You don't need to use the whole set of tools. If you're working in a small team and an Agile process, Rational Team Concert may be the only tool you want. If you're working in a more ceremonial organization you might benefit from other tools in the Rational portfolio, or from integrating whatever external tools you might want. The original internal users of Rational Team Concert were/are themselves small, Agile teams.

      I know it goes against a lot of people here's expectations of
    • Does it help me that one hundred stories are tagged with "no" []?

      It should. Those are stories with a questionmark, and since they're tagged "no" the collective wisdom of Slashdot would say that, well, the answer to the question posed by the story is a "no". Saves you the time of checking whether there Are aliens living among us [], for instance :)

  • Patterns (Score:2, Interesting)

    by Hop-Frog ( 28712 )

    His patterns work doesn't rate a mention?

    • I asked for a quick writeup and just kept it to what the communications person chose to include. Feel free to fire away on whatever topics you know him to be knowledgeable on.
      • Re: (Score:2, Insightful)

        by Hop-Frog ( 28712 )

        Just thinking if I was to write up a quick bio ... man, I'd start with patterns ... Surprised me that wasn't even in there.

        • Re: (Score:3, Insightful)

          by H0p313ss ( 811249 )
          The patterns book significantly predates JUnit and Eclipse, the communications person clearly focused on his work for IBM.
    • Re: (Score:3, Funny)

      by Suiggy ( 1544213 )
      Design patterns? The open source community doesn't need no stinkin' design patterns. We just code by the seat of our pants into oblivion!
      • by Hop-Frog ( 28712 )


      • Design patterns? The open source community doesn't need no stinkin' design patterns. We just code by the seat of our pants into oblivion!

        Yessir, a cowboy ain't need but three things in life: his hat, a good pair o' boots, and his Linux machine... Fancy city folk can have their newfangled patterns and such...

  • by Anonymous Coward

    Hi, I work in the storage management world, and noted the unlamented passing of Aperi, which had been put into Eclipse.

    My company looked at Aperi, and would have liked to do something with it, but the first line of every file seemed to read

    #install <universe.h>

    This doesn't work for us. Like most companies, we've already invested in one or more frameworks and don't want to change just to get the three or four interesting capabilities that we see in some large piece

  • by Anonymous Coward
    I'm a big fan of jazz, but I've never heard of this JUnit character, nor the Rationale Suite. Anyone have some links to some mp3s?
  • by eldavojohn ( 898314 ) * <> on Tuesday June 30, 2009 @03:17PM (#28533243) Journal
    On your influential book regarding design patterns [], you listed 23 design patterns that would become the foundation for the concept of design patterns in computer science. Since then, many more types and subtypes have arisen [] but a lot of them seem to be derivatives or a combination of others. What new design patterns if any do you wish you had included in your book or that you feel are necessary for competent developers to learn?
  • by Anonymous Coward

    Gang off our what?

  • From a very old article I found on Jazz & Eclipse []:

    According to the NRC's Singer, the chief constraint that Jazz faces is that it works only on the Eclipse platform. Says Singer, "The only people who can adopt it are those who are using Eclipse."
    Singer also feels that some processes might not accommodate Jazz's idea of collaboration. "People use all sorts of tools and ways of communication to coordinate their work, to be able to collaborate, to be able to put together big pieces of software," she says. "Some of this has to do with following a particular process. Where Jazz might be constraining is when the model behind it does not jive with these preexisting processes."
    Meanwhile, Mike Milinkovich, the Eclipse Foundation's executive director, told last March that IBM developers account for as much as 80 percent of Eclipse's development team. He questioned whether that kind of environment is good for Eclipse or Jazz. He also noted that some have charged IBM with killing off the Jazz developer tool competition with Eclipse. Finally, he wondered whether having two open source communities--one for Jazz and one for Eclipse--will ultimately weaken Eclipse.

    I'm not sure but I would wager that's as true today as it was in 2007. How do you address those concerns?

    I've also noticed--through use of the Rational Suite--that you can't just use one tool in the suite. You need them all. And, you know I understand it's IBM's business model, but it kind of rubs me the wrong way that I was using all these great Maven2 tools to do releases and automagically test and build inside subversion. But when we went to

    • Lot's of good questions here ... I'll try to respond to a few ... Jazz is a server-platform for team tools. It provides a variety of services, including some WebUI services for writing Web clients for your tools. So if anything, a WebUI is the primary interface for the Jazz tools. Some tools, especially SCM tools, live best in an IDE because that's where most developers live these days (usually not just on the Web, because the tools they use expect to find their data in the file system, and put their res
  • A number of weak typing language zealots like to point out that Design patterns is simply a way to make strongly typed languages "suck less".
    This can be a compelling argument in terms of simplicity and syntax in examples when you take a look at books like "Design Patterns in Ruby" compared with "Design Patterns: Elements of Reusable Object-Oriented Software". There's also an argument that strong typing is a form of tight coupling and antithetical to half of the Object Oriented axiom, "loose coupling, stron
    • A number of weak typing language zealots like to point out that Design patterns is simply a way to make strongly typed languages "suck less".

      That's a common claim from such people, true, but its not entirely true; descriptions design patterns in terms of substantial code structures that must be implemented for each use of the pattern are ways of working around language limitations, the patterns themselves are not. In languages with better metaprogramming support and/or more permissive typing, many common "d

    • I assume you don't mean strong typing versus weak typing but dynamic versus static typing.

      Design Patterns have nothing to do with the typing system. Design Patterns are on the level of the software architecture. There is no noticeable difference wether you implement a certain pattern in Java(strong and static typed), Groovy, Ruby or Python (all 3 strong and dynamic typed), only the syntax of the concrete lines of code is different.

      Your point about "suck less" makes no sense either, as most design patterns w

  • Can you tell us of your ideas for new robot masters? What is your plan to get rid of Mega Man? Are you really Dr. Wily in disguise?

  • by eldavojohn ( 898314 ) * <> on Tuesday June 30, 2009 @04:17PM (#28534079) Journal
    I know a lot of people that are very vocal about what is right and wrong with education today. Especially college institutions: "No one teaches C, everyone teaches four years of Java, no one understands the theory, a CS grad doesn't even know what a model-view-controller pattern is." The list goes on. Since you have your doctorate and have probably spent a lot of time in research and academia, what's wrong with most computer science or engineering programs in general today? What would you like to see more or less of? Are there any subject directions recently taken (EJB, garbage collectors, interpreted languages) you'd like to comment on?

    You seem to be non-opposed to Java which, I'll admit, is rare to me for someone with a doctorate. I would like to hear your views since so often all I hear about Java is that it is slow and only good for people that want cheap software developed quick by beginner developers.
  • by Fuzuli ( 135489 ) on Tuesday June 30, 2009 @05:00PM (#28534733)

    I have to build quite complex tools using GEF and GMF, and there are many cases where I'd like to have the power of Java2D, and reuse some of the great frameworks out there built on Swing.
    More and more people are using AWT/SWT bridge, since SWT does not provide an underlying drawing framework as rich as Java2D.
    Eclipse has great things like EMF, and the platform is number one choice for tooling, but when it comes to things like Bezier curves etc, Swing is much easier to use. So are we going to see more developer friendly versions of Eclipse where Swing is more available to us?

  • Rational? (Score:3, Insightful)

    by Anonymous Coward on Tuesday June 30, 2009 @05:04PM (#28534765)

    I work in a small shop that makes some use of Websphere Application Server and the Rational development tools. I basically find the entire structure of the IBM software offerings relating to the above technologies incomprehensible. Products are constantly being renamed, discontunued, bundled, unbundled and rebranded. Names are long, generic, and practically interchangeable, and so are the feature lists.

    How do you plan to run a community support site based around this hodge-podge? I would assume the volatile nature of IBM's software marketing makes your task something approaching impossible. How do you expect to build a strong developer community based around products that are in a constant flux? I don't see any way around ending up with a large number of granular, isolated communities that spring up around specific products and thrive for a year or two. In short, how do you plan to unify a developer community without IBM first unifying the software development platform that this community is to be built around?

    Thank you.

    • I think you'll find that the communities around the Rational "team tools" (like ClearCase and ClearQuest, and now Rational Team Concert) are somewhat different. In particular, half (or more) of the value around the team tools is their consistency and longevity (so for example, the ClearCase user community has been going strong for a decade or two). So I completely agree with your comments on the importance of consistency and community. That is why when we started the Jazz project to provide a common team
  • Like movies, it seems like "new" patterns are just rehashes of existing ones with different names or meaningless semantic differences. At some point it seems like it becomes a counterproductive activity that burns energy that could be better applied to other activities. What are your feelings about where the most meaningful contributions to patterns can be achieved?
  • First of all let me congratulate you on the successful launch of version 2.0 of RTC and 1.0 JF. It is realy great work, thank you and all the Jazz Team. The functionality of Rational Team Concert greatly overlaps with the ClearQuest and ClearCase. Why is it necessary to create a new product? Why not just release it as new versions of old? For customers, it could be easier to adapt. What is the future of CQ|CC, how you see it? Thank you.
    • As background, I work for IBM/Rational, participated in the design and construction of RTC from its inception, and among other activities, have been leading the teams building the "Connectors" between RTC and ClearCase/ClearQuest. Back in 1995, I joined Atria to work on ClearCase. So why did we created a new product?. Over the years we've observed that for large software projects, what mattered even more than point tool functionality was how well the different tools were integrated. More recently, as co
      • As background, I work for IBM/Rational, participated in the design and construction of RTC from its inception, and among other activities, have been leading the teams building the "Connectors" between RTC and ClearCase/ClearQuest. Back in 1995, I joined Atria to work on ClearCase.

        So why did we created a new product?.

        Over the years we've observed that for large software projects, what mattered even more than point tool functionality was how well the different tools were integrated. More recently, as companies started focusing on agile development where single individuals perform multiple roles concurrently, the same became true for smaller software projects. So we put increasing amounts of efforts into integrating our tools.

        But we concluded that without a tool integration platform, there's only so far we could go (and in particular, the integrations were tool version sensitive, requiring upgrading the tools together, which is not something users wanted to do). And even with a tool integration platform which improved the level of integration of all the tools, we also concluded that the only way to get optimal integration is to also build the products specifically for that tool integration platform.

        In addition, a requirement for ClearCase and ClearQuest has always been that they handle all SCM (software configuration management) and CM (change management) problems that our customers have encountered over the years, work on all hardware and OS platforms, and remain compatible with all previous versions we've released. But that breadth of coverage comes at a cost ... both in performance and in ability to do all the new cool things that we and others have thought of.

        So a few years ago, we started Team Concert, both to build the platform that we were going to use to improve the integration between all of our tools, as well as to build new instances of those tools that were designed to take optimal advantage of that new platform.

        And while we were building those new integrated tools, we were also free to focus those new tools on the most common problems and the most common platforms, since we had ClearCase and ClearQuest to back the new tools up with breadth of problem and platform coverage. The "Connectors" then plug ClearCase and ClearQuest into that platform, and into those new tools, so that a customer can use the new tools when appropriate, and use ClearCase and ClearQuest whenever they weren't.

        And the integration between all these tools were enhanced by the Jazz integration architecture (i.e. it was no longer an either/or ... a customer uses whatever tools best solve their problems). And while all this is going on, we continue to invest heavily in enhancing ClearCase and ClearQuest (we have significantly more people working on ClearCase and ClearQuest than we do on Team Concert).

        At any rate, that was the idea (:-). For some more perspectives on this question from some other folks, you can also listen to the webcast: [].

        Much more readable that way.

  • It's a nice read on the various things to think about in the design of software. But we still seem huge amounts of production code that is in error or even insecure. These are abstract concepts about design, but the problems in production are real and concrete. There is a failed connection between them. For example, how is it that the computer system for Frontier Airlines has only a place for ONE person to be designated [] to pick up an unaccompanied minor?

  • Silly Stuff (Score:1, Funny)

    by Anonymous Coward
    Would you consider naming your son Ray?
    • Re: (Score:3, Insightful)

      by wcbarksdale ( 621327 )
      The real question is, what happened to Erich Alpha and Erich Beta?
      • Erich Alpha was completely unstable.

        Erich Beta was functionally complete, but bugged the hell out of everybody. As of this week, he also shuts down every two hours, which is pretty annoying.
  • (1) Do you think Jazz could gain from a distributed model, like git does for source control management, where the repositories can be forked and kept synchronized upstream/downstream (a bit like a "progressive fork" where fixes can be shared but the project can be forked for various reasons)? I heard there is a git connector in incubation but it seems to me more than just code artifacts should be distributed. After enjoying the many benefits of distributed SCMs, it's hard to go back, and I think at least is
  • by zuperduperman ( 1206922 ) on Tuesday June 30, 2009 @07:47PM (#28536615)

    I came into professional software development just as patterns were emerging as the "next big thing".

    It seems to me looking back that at best we would have to rate the success of design patterns as mixed. One the one hand they've formed a useful vocabulary for discussing software designs and a useful tool for thinking about software in general. However on the other hand it seems like in a huge number of cases they have inspired large amounts of complexity and over-engineering and get misused more often than not. By and large the software world seems to have moved on.

    So, I'm curious what you make of them now, looking back? Do you think design patterns as a concept has been a success or not? Do you yourself still use them in daily work?

    • Your final sentence is a funny question, or an interesting question, so you deserve be modded up.

      However: why should one not use Design Patterns anymore. You saw overengineered software? So likely the software suffered from some anti patterns? So you stop using Design Patterns? I can't believe that, this makes no sense. With what and why would you replace a model/view/controller pattern, or why a factory?

      Many old school programmers demand youngsters learn C ... with the same demanding voice I want that old

      • by zuperduperman ( 1206922 ) on Tuesday June 30, 2009 @09:24PM (#28537351)

        You're right, I probably could have phrased the last question better.

        When I say "use design patterns", what I really mean is put them front and center in the design process, using them as building blocks when designing software. This was definitely the vision people had at one point. My experience however has been that they are rarely successful when used that way. I'd say everyone does in fact use design patterns by definition - design patterns are after all just descriptions of common designs, so you'd have to be going out of your way and doing very unusual things to avoid them. But my experience is that in successful designs the patterns tend to emerge *after* you've built the software and become useful as way to discuss it and communicate about it, and possibly to critique it, but not really to build it in the first place. Somehow, conceptualizing designs as made out of pattern building blocks always seems to lead to over-engineering. My theory is that, with software, anything that distracts from the principle of "the simplest thing that could possibly work" ends up being a negative. We are enchanted by the idea of software being like buildings - let's put an arch over there, a staircase here, split level room here ... in architecture that makes buildings beautiful, but in software it just makes it unnecessarily complex.

        So - hopefully that clarifies what I mean. I'm curious if this is also his experience, or not.

        • Re: (Score:3, Interesting)

          by wrook ( 134116 )

          Please re-read the book. I wish I had it here (my copy is about 5000 miles away at the moment), but I think what you just wrote is already there. A design pattern, by definition, is something that is intuitively used by many people, whether they know what it's called or not. IIRC you can't call it a pattern unless there are 3 independent implementations of it. So one of the biggest pluses for design patterns is in being able to recognize them in existing code and thereby understand it more easily.

          The ne

  • Awesome. The new 3.5.0 release is excellent. Fast, full featured, excellent. If I had a question, it'd be: What are the most important practices used in the Eclipse project which make it such a success?
  • You made programming more than typing for the rest of us. That is probably the single most important professional programming contribution there is. Thank you very much for your efforts.

    Would you care to share your thoughts on the current developments concerning the structuring of professional programming knowledge?
  • Uhhh, does this mean the Unified Process is dead?

    I haven't worked with Websphere and Rational products since 2005. Back then the Rational Unified Process with use cases, etc. was suppose to be the next big thing. Rational had some tools called the Rational Unified Process which allowed you to create sequence diagrams, etc.

    When you click on the Jazz products link\ it takes you to the projects page where all of them start with "Rational" by name. Is IBM going to Open Source ClearCase now? Most attempts at try

    • Uhhh, does this mean the Unified Process is dead?

      Well it's been brain dead for ever... pulling the plug would be merciful.

    • In my view (I primarily do ClearCase, ClearQuest, and Rational Team Concert, but I have contributed to the SCM section of RUP), the "Unified Process" was more an attempt to provide unified terminology and remove gratuitous differences, than it was to define a "one size fits all" process (which is clearly impossible). The experience of evolving RUP resulted in tools that let you define your own process (using whatever bits of the Unified Process that you thought appropriate). In particular, IBM Rational se
      • by Mybrid ( 410232 )

        Thanks! This was extremely helpful.

        In my line of work I sometimes get asked these things myself and now I have an answer!

        Cheers! mate!

  • Why Jazz? (Score:4, Interesting)

    by autophile ( 640621 ) on Wednesday July 01, 2009 @12:35PM (#28544291)
    Could you explain, minus the marketing speak that seems to pervade the IBM site, what is Jazz, what makes it a community-oriented developer's site, why is it different from, say,, and if Jazz is so community-oriented and yet apparently tied in to Rational, where are the community versions (not trials, not demos, not limited to the point of uselessness functionality) of Rational products?
    • WRT the marketing-speak on the web site, well, we turned it over the top couple of layers to the marketing group a year or so ago so we could focus on writing code (:-). But if you want to see the real stuff just drill down a couple of layers into any of the pages, and you'll find that it's still where the development work is going on ... that would include the work items, the plans, the forums, the mailing lists, the wiki, the white papers, the blogs (well, most of the blogs :-). If I were you,
  • The Visitor pattern isn't OO, and in fact violates OO principles in every way, but I've seen it used for far beyond what I think you guys had in mind when you included it in your book. If you were to write a second version, would you include the Visitor pattern? If so, would you at least consider emphasizing its limited use?

    Friends don't let friends use Visitor.

Research is what I'm doing when I don't know what I'm doing. -- Wernher von Braun