If Kobe Bryant Was On Your Basketball Team, Would You Make Him Coach?

Or for my non-sports-enlightened readers, if Tom Cruise was in your movie, would you make him director? Now, don’t get me wrong, Kobe might be a great coach and Tom Cruise might make a great director, but it’s not what they currently do best. Making the greatest current basketball player into a coach would be an awfully strange move if you really wanted your team to have success. So why is it then that so many companies make managers out of their best developers?

The best developers have pride in their work as well as that innate desire to create mentioned in the link above. They don’t work at companies where “coders seem to be considered commodities and low level craftsman”. I really don’t understand how companies run by smart people can think that promoting the very best employees into a job they aren’t specifically suited for would be a great idea but it seems to happen quite a bit, including where I currently work.

Joel recently wrote about why he started his own company, specifically so he could have fun at work. I don’t remember the last time I had a single day where I could actually say I had fun at work, though last Friday I had a pretty darn good 4 hours in the afternoon. I’m leaning more and more towards doing something almost all my coworkers and acquaintances would find dumbfounding but I’m having zero luck finding jobs in Dallas where the guys and gals who write the software are on the same standing as the suits that sell it. It’s ridiculous going through life being proud of something everyone else looks down on.

Creating a Perforce ClientSpec with P4Python

We’re beginning our migration to Perforce at work and I’ve been doing most of the scripting work since. . .well, since I’m apparently the expert. I’m using Python and the P4Python API to Perforce and I ran into a little issue that isn’t documented in the P4Python documentation. It makes sense after the fact but it took me a while to figure it out. I thought it might be useful to someone if I wrote it up here.

When you’re dealing with the client specification’s details in P4Python, you reference them as a dictionary. Pretty much all the values in the dictionary are strings (Root, User, etc) and I kept trying to make the View a string that I built up from scratch. I just assumed that the multiple lines in the view should be manually created using a new line character. However, as in everything else Python, it’s easier than that. The View should be a list of the mappings you want to include in the client spec. The example below shows how to use P4Python to create a new workspace in Perforce.


import p4

p4c = p4.P4()
p4c.parse_forms()

try:
  p4c.connect()
  spec = p4c.fetch_client("bbim-MySampleClient")
  spec["Root"] = "C:/Workspace/MySample"
  view = []
  view.append("//main/Workspace/BrettBim/MySample/...  //bbim-MySampleClient/...")
  view.append("//main/NUnit/nunit.framework.dll  //bbim-MySampleClient/tools/nunit/nunit.framework.dll")
  spec["View"] = view
  p4c.save_client(spec)
  p4c.run_sync()

except p4.P4Error:
  # If any errors occur, we'll jump in here. Just log them
  # and raise the exception up to the higher level
  for e in p4.errors:
    print e


It makes sense that the view is a list since you can have multiple lines to map several regions of the depot to your workspace but it would be a nice addition to the documentation to detail that.

Random

We’ve added Kat’s new website to the Google overlords but they haven’t shown up at the party yet. I thought having another web site that Google is known to crawl point to her site might help. So here it is.

If you’re friendly, you might click on one of those links above. Or if you want a really awesome massage. Or both.