Going to eXtremes
I became a geek because:
- I'm good at it;
- it pays well; and
- I'm antisocial, and geeking is mostly done huddled in a corner by yourself.
For most of my career, I was a geek snob -- I figured if you didn't know at least one form of assembler to fall back on, you're not a real geek. For me, being an ubergeek meant (among other things):
- using vi as your IDE of choice;
- never, ever, ever needing a debugger; and
- making code sing.
Four years ago, I went to work for an insurance company. It was the first time I didn't work among other ubergeeks. I remember my boss made a point of telling me that the company was very clear about not wanting to hire "propeller heads" -- they didn't want the kind of geek that I aspired to being. It was a real paradigm shift for me (apologies to Thomas Kuhn).
While I worked there, I learned a heck of a lot about what it means to develop applications in a way that was simpler to understand for people who aren't ubergeeks.
There's a coupl'a quotations that I'm fond of. At JavaOne in 2000, Tim O'Reilly said:
"The Web took off because it was fundamentally simple. You know, it really allowed, if you like, a lower class of individual to participate. You know, there were all these people who were not professional programmers who could still [...] build what you could call an application on the Web."[...]
"So my point here is that the Web is evolving. The future is going to belong to the people who make it easiest to evolve, who make it easiest for people that you don't know to participate and help you join in making the future."
Now, O'Reilly was being rushed off stage when he referred to a "lower class of developer", and so I try to pardon the pejorativeness of his words, but basically, I think that he was talking about the type of people that I mostly worked with at the insurance company.
Suddenly, I started to grok IDEs and WYSIWYG HTML editors and a whole host of other developer tools that I had just never had any use for previously.
The place where I work now is teaching me even more cool stuff about People Who Are Not Me. We're pretty intense about eXtreme Programming -- the Senior Partners in the company have known Kent Beck for years. And that's been another mind shift. Suddenly, I'm not writing code that sings; I'm doing the simplest thing that could possibly work. Instead of anti-socially huddling in my cubicle, I'm pair programming -- two programmers, one keyboard. When I first heard about this idea during my interview, I thought, I don't think I can do that! But what a learning experience it's been.
Recently, I was working with another ubergeek -- it was his first exposure to eXtreme programming, and he said, "Don't you find that some of the practices slow you down?"
"Yeah," I replied.
"Don't you see that as a problem?" he asked.
"No. I don't think that the objective is to maximize my personal productivity -- the objective is to maximize the team's productivity. I may be going slower than I would have if I was working alone, but the eXtreme programming practices help me get much better productivity out of the junior members of the team. Good design practices propagate better, team members are better mentored, and overall, the code is higher quality."
Fredrick Brooks, author of The Mythical Man-Month claimed that the productivity ratio of really good programmers and average programmers was 10:1. And I believe that. So a team of one ubergeek and five average programmers can produce 15 widgets in a certain interval. I've come to believe that the eXtreme programming practices slow down the ubergeek to 7, but they also speed up the average programmers to 4. The same group now has a productivity of 27 widgets per interval.
A while ago, I was reading about Enneagram personality types. I identified a lot with the "Observer" category, and I remember one thing in particular that was said: "Observers work hard to achieve independence in the same way that other people work hard to achieve wealth or power." That's so me. Or it was. Now, I'm intensely involved in team dynamics and tinkering with the way a group works together.
The key "passion" of the Observer type is greed or avarice. There's a big part of me that wants to hoard my own personal productivity, and it's taken a lot of intense thought to change my priorities.
It's been an interesting shift.
Addendum
I once heard about a psych experiment that involved two people playing a simplistic card game. The rules went something like this:
The obvious result in this game is that the players will end up with a tie in all rounds, and that each person will go home with a hundred dollars. But that's clearly not the best result. The best result is that each player wins half the games and loses half the games, and they each earn two hundred and fifty dollars.
And that's something I find fascinating -- that if I play my best game possible, the end result is less than ideal.
As I recall it, the fact that the players couldn't talk to each other was crucial, and what the experiment was studying was the ways in which people would try to communicate their willingness to lose half the games. For my part, I would have great difficulty trusting that the other player has even noticed that there's an advantage to losing some of the games.
Not enough words
Is there a word that describes the state of being optimized in one context and not optimized in other contexts?
Re: Addendum
In one version of the game, it was stated ahead of time that the goal was for "everyone" to get as many points as possible. A big chart was used to keep score of individual teams' scores for each round, with totals for each team. But waaaaay down at the bottom of the chart in the corner, there was a spot for a total for "everyone", and *that* was the total that counted. But even with communication, it was very hard to convince *everyone* to stop playing competitively, and as long as there was even one holdout who insisted on competing, it ruined it.
This models a lot of real-life situations where "playing nice" has potentially huge rewards if *everybody else* plays nice too, but only gets you taken advantage of if anybody else doesn't.
Non ubergeek
I'm often made to feel 'non geek' by network and hardware folks. I can usually follow along when things go according to the manual but beyond that I'm lost - I just don't grok it. But when I'm with 'standard programmers' I'm often seen as an ubergeek since I tend to know more hardware, networking stuff and I tend to think in programming languages instead of having to translate from "English"
Wow that pair programming seems very strange, but could be usefull. I have instituted team debugging here - if you are 'stuck' for more then 1/2 a day then you need to have a fresh set of eyes look over your code - often in explaining it to them you realize what your problem is.
But I have found that simple straigh forward programming makes things much easier to maintain especially in a team environment when someone else will probally be mainting the code.
Enneagram
Re: Enneagram
I relate to the Observer type too.
<nod> I think I can see that in you.
Re: Enneagram