My name's David P. Caldwell. I'm a software developer, among other things. I've been actively involved in developing software for a really long time -- since I was a pre-teen, in fact. I use the middle initial in my name professionally because my name is not uncommon.
I don't enjoy self-credentialing, but I've learned in my professional career that it's a necessary evil. So: I'm probably best known in the software world as the author of the
E4X support in
Mozilla Rhino. I also gave
a talk at JavaOne last year on various approaches for integrating dynamic languages with Java.
I've resisted actually publishing a technical blog. There have been a number of stages of resistance.
At first, it seemed to me that blogs were multi-topic personal soapboxes on which people could read all kinds of interesting, unrelated, eclectic things about the author's life. But history hasn't been kind to this view -- it turns out this concept is no longer called "blog." It's called "Facebook."
The problem is, one would have to be pretty fascinated by me to adopt all of my interests. And I have a lot of interests. Some of my interests are quite narrow, and have few people who share them -- even fewer of whom (none?) would share my other narrow interests.
Time has passed. It seems like people have figured out what blogs are. Effective, valuable ones cover some sort of topic other than the author's life.
There's another reason I resist writing. Writing is permanent. Sometimes I'm wrong. I don't like to be wrong -- at least not in an unchangeable way. I try not to commit to a view unless I'm really confident. When I'm not confident, I'm indecisive. If forced to adopt or express a view before I'm ready, I couch it with layer upon layer of hedging to make it clear that my advice shouldn't be relied upon.
This approach probably isn't the best approach for writing any kind of commentary.
But I've been doing a lot of thinking about software development lately. Judging by what I've found in my Internet research, some of it is related to topics that are actively under discussion. Besides, while researching and learning about various topics I've run across
opinionated people. Not everything they say is appealing. Sometimes I think they're wrong. Sometimes they take a position and later decide they're wrong. But I know I benefit from reading their thoughts; I've benefited recently as I've tried to sort out my own.
One other part of my background encourages me to opine. I know I sometimes get big things right. A lot of times the problems I'm working on are being actively pursued by other people, and my solutions resemble theirs. In 1997, when I first started as a professional software developer ... well, without telling my life story, let's just say I wasn't ideally positioned to break into the field. But I was smart enough to see Java coming, and invested heavily in learning it. It's hard to remember just how newfangled Java was seen to be at the time.
That bet paid off. I ended up being on the leading edge of a wave that swept over the industry. Of course, I wasn't some sort of psychic. Java had captured a good deal of mindshare already. Part of the reason I did well here was that people don't really like change. Even if everyone sees innovation coming, many will try to deny it and resist the innovation. They'll say that the new change isn't really a change at all. Or that the old ways will win out after the fad passes. They'll seize on any perceived weakness of the innovation as evidence it won't work, or won't be a big deal. Inevitably someone will overhype the innovation, and they'll argue that the innovation won't justify the hype -- which is sort of beside the point, but makes them feel better about their resistance to change.
One of the things I've realized about myself is that even though I'm slow to change -- I think of myself as a
late adopter (at least as technologists go) -- I benefit professionally from the fact that most IT professionals fiercely resist change. Specifically, they resist the depreciation of their body of knowledge brought on by technical innovation. My self-critical personality helps me here: I, in contrast, am always wondering whether there isn't some better way to do what I'm trying to do -- or a better way to do what I just did. This characteristic has always made me enthusiastic about
refactoring. But it also helps me stay current as I age, in a field dominated by the young (who have the further advantage of being inexpensive).
Back to the main point. In my career, I've had a pretty decent ability to see into the future. Some of this might be wisdom or intelligence. Some of it may be dumb luck. But I think a good part of it is willingness -- keeping my eyes open for what's happening, even if it will mean I'll have to change. Even if it means I'll have to stop doing things I really enjoy doing (e.g., bit twiddling).
I guess I feel good enough about my sense of direction about the road ahead that I'm willing to rely on it as I think about my own life and career. So why not write about what I see? Even if I'm wrong sometimes (and have to deal with the shame), the worst that can happen is that someone reading will help me see things I don't see. I'd rather be publicly wrong today and learn enough to be right tomorrow than be wrong today and tomorrow.
That seems like a perfect note on which to close this self-introduction. Hello, World!