Monday, March 28, 2005

Meeting Pure Evil -- Socially

Last Saturday night, I bumped into Pure Evil while at a party thrown by a neighbor. I didn't think I was going to meet Pure Evil, and didn't even realize who it was until we had chatted a bit. But there he was, with a wine glass in his hand. He (and I won't mention his name for reasons you'll see in just a bit) is a former executive of several software companies and has been (and is currently) a consultant. He is now engaged in 2 lines of business: the first is to act as expert witness in dubious patent lawsuits for software patents that should have never been granted. The company he works for finds outrageous patents (they have found someone who has allegedly patented ecommerce -- the whole process) and sues major software companies. While ethically a little shady, this is not illegal. And I know that some smart people agree that you can patent software and processes. The ambulance-chaser way they are doing this, however, is a little creepy.

Turns out that this was just the appetizer. His other line of business is to sell small to medium sized business on as much enterprise software as possible. Things like SharePoint, PlumTree, Biztalk, etc. He really, really likes Microsoft back-office software because, as he puts it, "it's very easy to install". I asked him if most of his clients really need that much stuff -- wouldn't a wiki or something lighter weight solve the problem more elegantly? He was dumbfounded at the question because he can't charge big money for the care and feeding of that kind of software. He also professes to like .NET a lot because it is so extremely RAD. I asked him if doing development like that didn't cause problems during the maintenance phase of the application. After all, that's where you pay for rampant RADism, trying to find all that code you've sprinkled throughout your user interface in event handlers. His response: "We're generally through with the contract at that point, or leave for other reasons, so we don't have to worry with that too much". To summarize: sell them as much software as possible (that we don't have to understand very well), slam together applications that quickly become un-maintainable, then get out of Dodge before the repercussions hit. Clearly, this person and his company are trying hard to make sure that consultants are universally loathed.

People like this have the ethics of slave traders. Back in the day, slave trading was legal, and I'm sure it was very profitable...and morally repugnant. Mr. Pure Evil was also bragging about how much money he made last year ($350K). But how does he sleep at night? It made me realize first hand that you can randomly bump into people like this, who care for profit at the expense of ethics and brag about it. Excuse me, I've got to run take a shower...

Friday, March 25, 2005

Robert Fripp's Aphorisms

Robert Fripp's Aphorisms

If you recognize the name in the title, it is unlikely for the reasons I'm going to write about today. Robert Fripp was (and is) the guitarist and de-facto leader of the only surviving original progressive rock band, King Crimson. While the others (like Yes, for example) still tour in a Dinosaurs Roam the Earth mode (still playing their music from the 70's), King Crimson still tours with new music, and it is very new music indeed. Robert Fripp also founded a school for guitarists called Guitar Craft. It is not a permanent school, but one that moves from place to place, holding week-long classes for all levels of guitarist. I haven't been to one, but I've read about them. Really, they are as much about attitude and discipline as about playing music. There have been several graduates that have gone on to careers in music, most notably The California Guitar Trio.

However, this post isn't about that either. One of the rituals of Guitar craft is the recognition of aphorisms, or quotes that have special meaning in a specific context. The dictionary definition of aphorism is "a concise statement of a principle". Like:

The attitude that life owes us something, if not everything, encourages life to thwart our endeavors.

Taken in the context of guitar craft, these aphorisms relate to (at the macro level) life in general and (at the micro level) about the craft of playing the guitar.

We begin where we are.

However, there is another context with which to read these aphorisms. Fripp is legendarily disciplined, and there are numerous published examples of this trait, perhaps best is his own on-line diary (established before the term "blog" was coined). Another is the (unfortunately) out of print biography by Eric Tamm. These aphorisms, being "concise statements of principle", apply broadly to life and particularly leading a disciplined life. And that is something to which everyone should aspire. Reading and pondering these random aphorisms over the years has helped me write (or, more precisely, finish) books. And they have helped me finish arduous endeavors like Ironman.

Process is Intelligence getting to know itself.

Until you understand Fripp's context, some of the aphorisms don't make much sense. However, over years of reading, you understand the context and draw meaning from all of them.

Relaxation is never accidental.

If you want to see some Fripp aphorisms, go to the Discipline Global Mobile web site. At the bottom of the page is a random CGI script that randomly show aphorisms while you are on the site. One of my favorites (I have part of this engraved on the back of my iPod now) is one about the relationship between music and silence (in many ways, music frames a particular kind of silence):

Music is the cup that holds the wine of silence. Sound is the cup, empty; noise is the cup, broken.

In many ways, software development relates to music: a creative endeavor facilitated by dexterity, tools, and discipline. And, correspondingly, many of the aphorisms apply eerily to software development.

Address the process rather than the outcome.
Then, the outcome becomes more likely.


Wednesday, March 23, 2005

Mourning Superior Dead Technologies

I was thinking this morning about buying a Macintosh, which lead me to ruminate on the fate of sometimes superior technologies that nevertheless fade away (not that I think that's happening to the Mac -- honest!). I can think of a bunch of examples off the top of my head: NextStep (I only heard about it, never got to use it), Magellan (the greatest navigation aid for a file system ever, never made it to Windows), Sprint (the best Word processor, never made it to Windows), and the list goes on and on. Even something like IntelliJ, which is creepy smart (side note: today, I realized that it will generate default variable names for you, based on the class type, even make good guesses -- for JButton, it offers both jButton and just button) -- I wonder if it can withstand the onslaught of Eclipse?

So, I reached a conclusion: don't mourn dead technologies. Use the best while it's available, but don't lament what could have been. I'll support Apple, IDEA, and the other technology stuff that I think exemplify good design. But, if market forces deign that they not survive, I won't fret -- just move on the find the next best thing. Besides, the really great ones sometimes live again, in different guise: OS X is really just NextStep reborn, Ruby is SmallTalk with some differences. Now, excuse me while I go shopping at the Apple site, with my iPod firmly implanted in my ears...

Tuesday, March 22, 2005

Software "Engineering"

It seems like every time someone talks about the job/craft/calling of writing software, they tend to end up with a bunch of tortured metaphors (engineering, woodworking, rock climbing, gardening, etc.). None of these analogies hold up past just superficial scrutiny. I think that it's a reflection on how different it ultimately is.

But to use one of these tortured metaphors for a moment, think about bridge building. I had someone at No Fluff, Just Stuff Philly say that her company had starting outsourcing much of their coding to India. I asked her how they judge the quality of the software. She said that she looks over it, and they have a software architect that comes to look at it periodically. Unit tests? None.

What if you decided to build a bridge? You outsourced all the design to guys who say they can build bridges, and you have someone who has built a few bridges look over the design when it comes in. Would you drive over that bridge? What makes bridges safe? It's the engineering science behind the bridge -- the mathematics of structures, derived over a great many years. So, why don't we apply the same rigor to software? We can't. We don't understand enough about it to quantify it in that way (and may never -- that's where the engineering metaphor breaks down again).

So, what's a poor developer to do? Actually, we do have a great option -- testing! It's extraordinarily difficult to build all the parts of the bridge and test them individually, then test it as a whole. However, because software is so soft, you can test everything. And you should. That's as close as we can get now to the rigors of a "real" engineering discipline. So we'd better damn well start doing it!

Sunday, March 20, 2005


I read about (and tried) an interesting new site today, Toogle. It performs a search for whatever you type in and returns it as an image generated from the words of the search, using different colors to mimic the colors (and therefor reproduce) the item you searched for. Trying to explain it is fruitless -- just go try it. I still haven't figured out how it decides what to return (a search for my name returns the JBuilder 3 Unleashed book, which is ancient history, not my most recent book), but it's still a fun idea.

Thursday, March 17, 2005

Slowly Turning XMLese

Quote of the week, appearing on several other blogs (and in the March 14 issue of eWeek), attributed to Chris Maden:

"XML is like violence: if it doesn't solve your problem, you aren't using enough of it"

Nuff said.

Wednesday, March 16, 2005

Favorite New Eclipse Plug-in

Generally, I'm at the mercy of the client as to which IDE I use for Java development. Consequently, I try to find tools in each IDE that replicate favorite features in my favorite IDE (currently IntelliJ). Right now, I'm working on a project in Eclipse (the 3.1 M5a version, which has pretty good Java 5 support and isn't too buggy). One of the features I miss the most is the "Go incrementally find this thing", where "this thing" is a class name, part of a class name, or even some special versions of a class name (for example, to find TuPopupMenuManager, you can search for TPMM and it will find it). IntelliJ has this, and, no matter how many times you whack the side of the monitor, Eclipse does not...

...Unless you install my favorite new plug-in, GotoFile. It does just what I want it to, just like IntelliJ. And it even has preferences. Works with any version of Eclipse back into the dim and distant past. And, it's the Eclipse feature I use most during the day.

Tuesday, March 15, 2005

Aspects and Undoing

I was talking to Ramnivas Laddad (the person who knows the most about Aspects than anyone I know) at the Philly No Fluff, Just Stuff conference, hoping to dazzle him with an idea I had recently about a cool use for Aspects. My idea: using aspects to implement the Memento pattern for undo. The plan: use attributes in Java 5 to flag which fields are undoable, then write an aspect that injects the appropriate code into an inner class of the undoable class (side note: I prefer to use inner classes when implementing Memento, because they meet all the requirements of the Memento but don't break encapsulation because the inner class has a reference to the outer one's private fields).

Of course, someone has already had this idea, which Ramnivas kindly pointed out (check out Jon Tirsen's blog entries here and here). My only contribution to this discussion is the use of attributes in Java 5 to flag the undoable fields -- the rest had already been figured out. Just when you think you have a clever idea, inevitably, someone else has beat you to the punch. I do think this is a great use for Aspects, though.

Monday, March 14, 2005

No Fluff, Just Stuff Philly

Just got back from No Fluff, Just Stuff in Philly (my first NFJS of the year). I had a lot of talks this time (4 in Java, 4 in .NET), spread over 2 days. That was too bad because, as usual, there were a bunch of talks from other speakers that I really wanted to see. That's almost always the case.

No Fluff, Just Stuff attendees continue to surprise me with the level of discourse that occurs, both in the sessions and out. You are hard pressed to find someone to talk to that doesn't have something interesting to say. The expert panel was interesting (if for no other reason than to hear Ted Neward bicker with everyone). And the Birds of a Feather that I did with Scott Davis and Eitan Suez was also very interesting (we were supposed to just talk about Web Frameworks and User Interface stuff, but we ended up in a fascinating, wide ranging discussion covering outsourcing, certification, dynamic languages, and, oh yeah, web frameworks).

Fun stuff.