Posted by kathysierra
on June 24, 2005 at 4:20 PM PDT
Are you secure enough in your geekhood to admit that you haven't always kept up with every new spec and JSR? Is Java still a welcoming place for newcomers? These are the burning questions explored on this week's Dr. Kathy show.
As I'm sitting here packing for JavaOne 2005, I'm remembering an event from last year that was... scary. It was one of Gilad Bracha's sessions on generics. (Gilad Bracha, remember, is Sun's "Computational Theologist" -- which means, among other things, that he interprets Java's "holy books" [his term] or, the specs.)
The room was packed. A guy got up to ask a question at the microphone about generics, and Gilad's reply was something like, "We've been talking about that here for the past 8 years... let's move on." Gilad assumed that we'd all been not just coming to JavaOne for the last 8 years, but that we'd all been participating actively in the discussion and progress on adding generics to Java.
The next guy at the mic carefully prefaced his question with, "I'm sure everyone else here has been keeping up on this for years, but this is my first JavaOne and I haven't been following it..."
Gilad's response was enough to guarantee that only the brilliant--and more importantly--long-time Java developers asked a question. Oh, and you had to be 100% current, too.
It wasn't just Gilad making the assumption that virtually everyone at JavaOne had been writing Java code, like, forever and had long sense grown bored by the older JSRs they'd obviously memorized.
I believe there's a disconnect summed up in two big myths:
Java is a mature language now, therefore most Java developers have been developing in Java for a long time.
FACT A: In the last two years, the number of programmers using Java grew by 50%. At JavaOne in 2003, Scott McNealy announced there were 3 million Java developers, and today he's claiming 4.5 million. So a huge chunk of Java programmers have been at it for less than two years!
FACT B: Tim O'Reilly and co. have been analyzing book sales data (not just O'Reilly books, but all technical books) to use book sales as a technology trend indicator , and one of the things they've comfirmed in the data is that as a programming language matures, the book sales for that language shift from advanced to beginning books. Today, most of the top-selling Java books are targeted at beginners, while five years ago that wasn't the case. The number one selling Java book since 2003 is for brand spankin' new first-time Java programmers.
I reckon this is somewhat intuitive--when a programming language is new, you get the "alpha coders", but as the language matures, most of the people coming in are those trying to learn it for the first time, and tend to be mere mortal geeks--regular folks--who might need more help. People like me, for example, who don't dream in binary and usually prefer a little more handholding when transitioning to a new language (or for some, into programming for the first time).
And don't forget that when the alpha geeks were there in 1997, remember, Java had fewer than 300 classes in the standard API! There was a whole lot less to learn then, so the barrier to entry seemed lower.
(Although there were far fewer resources with which to learn, not to mention that large parts of the API didn't actually work, so perhaps that balances it out. Less to learn, but more to work-around. I can remember having to roll my own scrolling text box in Java 1.02.)
Anyway, this latecomers-are-regular-folks thing maps well to the Technology Adoption Life Cycle fleshed out in Geoffrey Moore's book, Crossing the Chasm .
My conclusion? Within another 18 months or so, half of all Java programmers will be relatively new to the language.
Most Java programmers spend a significant amount of time keeping up on the discussions of where the language is headed, studying JSRs, attending JavaOnes, and keeping current on beta versions of most of the key specs.
FACT: I don't actually have a fact, but I'll bet you a microbrew that even here--on java.net where we come specifically because we do want to keep up--many of you harbor the dirty little secret that you're not as current as you could be. That you know more about Mustang the car, then the next version of Java. That there are still a few things about generics you don't actually know. Or worse--that you're still on Java 1.4!
Worse still, that you don't even understand the new naming/numbering/version scheme and whether it's Java 1.5, Java 5.0, or why there's still a Java 2 in there somewhere. (Just kidding, it's obvious that even Sun doesn't fully understand it, so I reckon we're all off the hook for that one, and Sun has promised to announce some new naming/versioning plans at JavaOne).
I started this post by speculating whether Java is still friendly for newcomers, but perhaps the bigger question might be... is it still friendly enough for those of us who aren't?
Personally, I was burned on that whole beta EJB 2.0 spec fiasco, where it changed quite dramatically at the very end. Many of us spent months trying to come up to speed on an approach that was eventually (and thankfully) scrapped, but it was changed only after the point at which we thought it was safe to start learning the spec. Yes, it was beta... but when it gets close to final, usually you feel pretty safe. I learned my lesson, though, and now I rarely bother to spend my precious brain bandwidth (in my case, an extremely limited resource) on anything that I might have to unlearn when it shifts.
No, I'm happy to stay blissfully in the dark on most things, until the time is right and the resources are stable enough to jump in and learn it cleanly and efficiently. And although I might be wrong (and you'll tell me if I am), I don't think I'm alone on this it's-not-like-I-don't-have-too-much-to-do-as-it-is thing.
Perhaps we need a self-help group:
"Hi, I'm Kathy, and I don't keep up on all the beta specs."
There, I feel better already.
Yes I do understand and appreciate that there should be plenty of advanced sessions for those of you who have (and it's often the BOFs that fill that role best), but I hope that the average session (not explicitly marked "advanced") does not come loaded with the unspoken prereq that I've memorized every relevant JSR.
By the way, for those of you secure enough in your geekhood to admit that you, too, don't always keep up, I'll be blogging some Cliff's Notes-esque highlights of JavaOne. : )