Monday, September 14, 2009

Scala at DJUG

Last week, I attended Denver Java User's Group (DJUG), and listened to Venkat Subramaniam give two talks dealing with Scala. I've been very interested in Lisp and/or functional programming since reading Paul Graham's piece on beating the averages, and then later, reading his book.

Shortly after that salvo of Graham's, it seemed like lots of languages cropped up (or at least started gaining attention - the list of languages that run on the JVM is HUGE) that also run on the JVM and provide at least some of the features that languages like Java does not, but that Lisp does (you'll have to read Paul Graham's essays and/or book to see what I mean). These are commonly called Java.next languages. Scala is one of those.

I've seen Venkat speak before, and it's always worth it, IMHO. He was sponsored by No Fluff Just Stuff, as is commonly done to help promote the conference and to help give to the community as well. I've been to at least three NFJS conferences now, and hope to go to this fall's (I was turned down by management last spring in my request to go then - in retrospect, that should have been a clue it may be time to move on).


Anyway, very good talks by Venkat. Side note: I don't want to neglect the fact that Tom Flaherty has given a few talks on Scala as well, but because of the power and the rather alien syntax and an entire new set of concepts, I find it useful to have it explained by different people and in different ways. And, since both talks were about Scala, it gave Venkat a chance to do a basic talk, then dive into how Scala's notion of actors (for multi-threading) works for the second talk - a feature that really makes Scala shine in today's multi-core world.

It will be very interesting to see what language becomes dominant on the JVM, if not Java itself. Scala, Groovy, Clojure, Ruby, etc...have really upped the bar, and I wonder how Sun, er, Oracle, will respond. Maybe they just keep very conservative with the language, and work on making really good JVMs? Maybe the language gets forked and the community takes it in a different direction?

Oh, and hey, I didn't win the drawing for a pass to NFJS, darn it, but I DID win a book. :) So many good ones to pick from, because my name was drawn early, but I ended up choosing the book on Lift (Scala framework).

Sunday, September 13, 2009

The notion of the 10x developer

I've been doing some reflecting on things work-related during my time between jobs here, and something I heard the Java Posse guys talking about in a podcast of theirs. Someone was talking about the 10x developer - which comes from the notion that some developers are found to be 10 times more productive than the average developer. Maybe as far back as Mythical Man Month? I cannot remember...

Anyway, like all such things, people tend to wonder where they fall on that spectrum. I'd like to think I'm better than average, but I think it'd be incredibly arrogant to think I'm 10x better.

They were also talking about the differences between prima donna developers and 10x and the "no asshole" rule that some of them have during the hiring process. Now that I'm sitting on the other side of the table of the hiring process, I have no idea how you convey that you are definitely NOT an asshole/prima donna, but that you are also better than average, and definitely not a dud. :) Tough line to walk.

How to define asshole/prima donna? Who knows, but we've all worked with them, and know that working with one, even if they are, actually, better than average (and that's not often the case, I think), it can still be a very un-fun experience. And despite what might seem most natural, these are not always the first people fired/laid off.

And that comes around to my reflection on whether 10x developers - or even 2x developers - are ones to keep their jobs over others during layoffs - or even firings. My thinking is that they are not.

Why do I think that? Well, if the relationship between 2x-10x (let's call them Nx) developers vs. prima donnas doesn't really have any correlation, and maybe even possibly a negative correlation, the problem may be that the people making the decisions about hiring/firing/layoffs may not be AWARE of the accomplishments of the Nx developers, and instead, knows about the latest shiny object type of "accomplishment" from very bad to just so-so prima donnas - because they are always bragging so much.

Let me give some examples of where people were agog at what I view as just doing my job, maybe because I didn't go constantly running to management like some of the more needy prima donnas tend to do, they might not have been fully aware of things I may have done better than other programmers.

During an exit interview when I put in my two week notice, and was asked by a team lead on the way out - "how is it that you and that other developer seem to crank out projects so fast, and are able to add new enhancements/fix bugs so quickly?" I didn't really know how to answer that then, and I don't now. The short answer is that the team lead was maybe an average programmer - at best.

The longer answer is the stuff that keeps project management up at night, tends to generate lots of ink, as well as stumps people trying to hire good people for their team. If this stuff was something to be done by the numbers, well, we'd certainly have a different hiring process.

The other time was when I was at a company doing some EJB in the very early days. I mean, very early. If you don't remember that time, let's just say Eclipse didn't exist, and the tooling for things such as EJB was TERRIBLE. As in non-existent. Anyway, we figure we needed X amount of entity objects, and IIRC, there were 4 files you had to make for each one, combining the classes and interfaces. Well, we split up the work among about 4 developers. The team lead was off doing something else, or it would have been 5 of us. We gave an estimate (I know, bear with me - this is work that wouldn't even register on radar now, most likely) of at least a week. I started creating the first set that afternoon, then the second....then, said, heywaitaminute, doing this by hand is stupid. Sort of a Neal Ford sort of moment, if you will, long before I've heard of Neal Ford - and he probably wasn't writing/speaking back then, AFAIK.

Anyway, I created a Perl script and debugged it for 2 hours, put the table names in a file and had it crank out ALL of the classes/interfaces in about 2 hours. What we estimated as maybe 4 man-weeks took two hours, and we could move on.

Well, shortly after that, I was made principal, since the team lead DID recognize what a boost that was, and passed that on up. I won't flatter myself and think it was JUST because of that, it was also most likely because of my physical proximity to management at the time, but I don't think this particular achievement hurt, either.

My point being, if I didn't have a team lead that put in the good word, virtually no one would know about this achievement, least of all management. Now, I just consider what I did the "right thing" to do - if you find yourself doing something repetitive and boring - automate it if you can. But I've met programmers that are honestly baffled by an attitude such as that. That might be where the divide between the terrible-to-average programmers and the Nx programmers. The people I've worked with that I've looked up to/would work to emulate would have viewed the automation as the natural route, too.

On the other end of the spectrum, I've had a manager that liked to "manage by walking around". He stopped by my desk, asking what I was working on, and I was right smack dab in the middle of something very much like the automation story above. This was the sort of guy that really didn't get it, even though he did have enough tech experience to know what I was talking about, and it really wasn't one of those typical gaps in communications between techies and biz folks.

He's like "here, I've got something more important to work on for you...." in a very condescending way, and the message was very much one of, "hey, do your job". I humored him until he left, but later, that night (I was a contractor) I went back to the automation step, anyway. All I know is that this particular thing probably saved WEEKS worth of work, but I didn't really communicate that to this guy as he was the type that would punish people if they didn't do things in the way he thought they should be done, even if they ended up, ultimately, making him look good for coming in under budget and on time.

What's the moral of these stories? I'm not really sure. No one really likes a braggart, so it's hard to walk that line between: tooting your own horn about what you've done, and making sure management knows - and more importantly, UNDERSTANDS why it's important to the bottom line.....or just being a horse's ass.