Posted by: danielharan | July 7, 2007

The right salary for the right programmer

A CEO and HR manager were shocked when a friend of mine asked for $20-30,000 more than he’s currently making.

His current employer has basically indicated that he’s too young to be considered a “senior”. That is perhaps socially acceptable, although it is certainly not legal. They can get away with it because younger programmers have smaller networks and fewer options.

This got me thinking about salaries, and tickled the memory of an article by Malcolm Gladwell, Basketball By The Numbers. In short, we’re terrible at judging how much players contribute to the success of a team.

[The authors of “The Wages of Wins”] argue that traditional talent evaluation over-rates the importance of points scored, and under-rates the importance of turnovers, rebounds and scoring percentage

If we applied similar metrics to a development team, could our win scores go down every time a colleague had to fix bugs caused by your commits, and go up for every useful feature we put in and every test we write? I’m sure you can think of more, but we’ll never have a perfect metric.

Steve Nash has a lower Win Score than Shawn Marion. Gladwell doesn’t think the statistics can tell the whole story:

Nash’s particular, largely unquantifiable; genius is that he manages to make everyone around him much better.

All this should sound very familiar to software developers. We all know the good and bad players on our team. You almost certainly have people you go to for advice, to brainstorm ideas for tough problems. Then again, maybe you spend half your time fixing another colleague’s code.

Salary can be a touchy issue, and it’s all the more controversial in professional sports. The correlation between salary and performance can be very weak in programming as well, especially because there is such a high variance in performance. A coding monkey can be twice as fast and efficient as another. But how do we measure the variance between your average junior and someone like Linus Torvalds? Or between a PHP beginner and David Heinemeier Hansson (creator of rails)?

A framework programmer that can supervise 3 people to do the work of 20 others is someone a manager should be happy to pay 50% more than those with a comparable education.

Since in most large companies managers don’t way to pay their underlings more than other people with the same age and experience or more than they are making the only way for good talent to get what they deserve is join or create a startup.

Posted by: danielharan | July 5, 2007

Drivers of the next 20 years

Someone on LinkedIn asked what the most disruptive or influential factors would be for the next 5, 10 and 20 years. I spend a lot of time thinking about this, and am starting to form more coherent answers. Here’s what I wrote on LinkedIn:

-Construction cost and time to market as well as uranium prices and the ‘energy internet’ will together make nuclear absolutely impractical.
-Peak oil is a certainty. Its effect on prices isn’t so certain, especially given energy efficiency measures people will take, and policies that will be put in place to promote it.
-Solar and Wind will keep growing at very high rates, doubling every 2 – 2.5 years. (Each doubling lowers prices; it may take until 2010-2015 for them to be cost-competitive with the cheapest fossil fuels. Building-integrated photo-voltaics and thin-panels, maybe nano, are the main things I’d watch).

Some things I’m not so sure about but that I’m watching:

2015 could mark the end of relatively low interest as more people retire.

The rise of militant atheism could marginalize religious extremists, including in the US, leading to a new political landscape.

We may push deserts back on a massive scale. has published some interesting stories:

After micro-credit, the next thing to watch may be social enterprise, with groups like Acumen Fund doing some of the most interesting work. This can be highly disruptive in many economic sectors.

Finally, health. The soft always overcomes the hard. Public health has saved more lives than surgical interventions. I think sensors will save more lives than genetic advances, even if they never get as much publicity or funding.

Posted by: danielharan | July 4, 2007

Apartment hunting

One apartment I visited had me sea sick just walking from the living room to the kitchen. The floors were so crooked, I saw a one-inch drop under a single door-frame.

Looking for an apartment at the last minute means all the places are either dumps or posh, with no middle-ground. The posh places are roughly twice the price of the dumps. Since living in a dump is not part of my plan for the next year, I doubled my housing budget. I am now considering an all inclusive bachelor that is usually rented by the members of the Alouettes, or a one bedroom also overlooking Park Lafontaine.

Posted by: danielharan | July 3, 2007

Stolen credit card fun

The card was first mailed to my parents, who forwarded it to me.

It had to be activated by the phone listed on the account. So I called my dad on skype, and had him activate the card with the landline. He asked the rep if s/he spoke French, and was promptly transferred to the Spanish rep. They ended up working it out in English.

Maybe one day I’ll be able to call from any VoIP phone, and caller ID won’t matter much as a security feature. In the meantime, there’s plenty to be amused about.

Posted by: danielharan | June 25, 2007

200,000 revelers: the photos

Here are the photos mentioned in my previous post on the St-Jean Baptiste national holiday.

Posted by: danielharan | June 24, 2007

200,000 drunks: St-Jean Baptiste in Quebec city

200,000 revelers, many of them drunk, stoned or high. Most of them happy. A sea of white and blue flags, many worn as capes.

What an insane party. We started the party at Isabelle’s with a BBQ, drinking and some swing and jazz dancing before heading over to the plains. Pictures will follow shortly (update: flickr photos), once I find a way to get pics out the camera and onto the new computer.

Posted by: danielharan | June 21, 2007

Microformats turn 2

The microformats blog is celebrating with an entry that points to resources and interesting news. The hCard profile import is particularly interesting and should be of note to all those studying social networks like Facebook and Myspace.

By opening its platform, Facebook commoditizes the social map. Microformats makes it completely free.

For those thinking of building a site with a social network component, there is a strategic risk to building under Facebook. A lot of people could end up supporting microformats to avoid platform lock-in. Riskier still would be building a financially successful application, only to have Facebook create its own in-house version.

Microformats are only 2 and still growing in influence. It’s a trend worth watching, as is Facebook’s opening of its API.

Posted by: danielharan | June 15, 2007

Jesus tongue twister

Kim: “Someone found a face of Jesus on a fish stick. I think they sold it on eBay.”

Danette: “frozen? A frozen fish.. stick?”

“That could make a good tongue-twister. Try saying it 10 times fast: Frozen Jesus Fish Stick

Part of a half-hour breakfast discussion at Paillard in old Quebec; likely the last one the three of us will ever share. Silly, at times inane, deep and hilarious. I’ll miss them. Danette is off to Nova Scotia; I’m off to Montreal. Kim, if all goes well for her, moves to France by the end of the year.

Posted by: danielharan | June 12, 2007

Ruby / ActiveRecord is too slow

I just got my hands on a postal code file. First, we cut out other provinces we don’t need:

grep '^"[GHJ]' POSTALCODEWORLD-CA-GOLD.CSV >> quebec.csv

My first strategy was to use ActiveRecord to create the records. The console code looked like this:

>> post_codes.each_line do |line|
?> fields = line.split(",")
>> PostCode.create(:postal_code => fields[0],...,
:street_to_suffix => fields[21])
>> end

I was too lazy to write all that myself, the create was generated. However, the performance was an issue. There are 300k lines in that file, and less than 4k were being entered per minute in the database. From MySQL’s command line, this is what my solution looked like:

LOAD DATA LOCAL INFILE '/Users/daniel/projects/[top_secret]/quebec.csv'
-> into table post_codes
-> (postal_code,...,
Query OK, 301571 rows affected, 7866 warnings (10.70 sec)
Records: 301571 Deleted: 0 Skipped: 0 Warnings: 0

From > 4500 seconds to 10.70 seconds. Ruby and ActiveRecord can be incredibly slow. And I don’t care, because it’s pretty and easy to use. When I do need execution speed, I’ll use a shortcut; otherwise, my happiness and code writing speed are more important.

Posted by: danielharan | June 11, 2007

Wallet stolen

I could have misplaced it, or the old man that tripped into me at the Lionel-Groulx metro station exit was a pickpocket. If it was him, he got $20 for his handiwork, while I deal with the major pain of having to get all my cards redone.

Without so much as a metro ticket, I went to my brother’s. He wasn’t there, nor was the neighbour that has a key, so I kept walking to Jonathan’s, who was kind enough to feed me. Almost any other city in the world, and I would have been in trouble.

« Newer Posts - Older Posts »