Making it work

http://edweissman.com/dear-boss-for-a-programmer-10-minutes-3-hours

Ed Weissman posted a retelling of a scenario where his boss asked him for “10 minutes” to solve a problems. He reluctantly agrees but ultimately spends 3 hours working on this fix, and for most of the time he’s browsing Hacker News while his boss and a coworker named Sue repeatedly fumble with software while trying to convey the bug to him.

Of course everybody has opinions on the internet, but what struck me was when one commentor by the id Michael suggests that our protagonist Ed could have tried to be more helpful there was roughly a 10-1 disproportionate rebuke of Michael’s thought, mostly along the lines of: It’s not the narrator’s fault or job description to help others who are incompetent with software.

I want to look at the larger theme here. Off the top of my head, I can come up with several ways to handle that situation better (e.g. mulitask with something work-related, help out your co-workers, have bug reports get CC’d directly to you, come up with a better meeting strategy) but the root problem here is either attitude or a naive idealism that business should function mechanically..

The attitude portrayed is: I want to do my piece, and only my piece, and if you aren’t able to interface with me in a rigid predefined way, then I’ll silently resent you / the system. To look at it as a naive contractual system (programmer only does programming, manager only does meta-optimization, etc) is to miss the chance to improve things.

How would you feel if you got bounced around accounting over an issue with your check because several people said “It’s not my job” ?  This is the same situation with the roles reversed.

And moreover, how can you expect to go anywhere if you take no ownership of outcomes and can’t be liked by coworkers?

Give it a ReST.

One term that comes up significantly too much in interviews is the highly applauded and highly misunderstood [1] [2] [3] ReST.

I’m not sure why it comes up in interviews, but here are a few guesses:

  1.  As an indirect measure of how one stays up-to-date with the developer community.
  2. The interviewer is actually caught up in the trend himself, and that this “paradigm shift” is a crucial practice that can’t be learned in a matter of hours.
  3. They don’t know what else to ask, or they were asked it when they interviewed.

I think this particular question, and this type of question (even though I now know ReST so well I nail it every time) are a bad idea.

  1. By sheer virtue of the fact that it comes up so much, it can simply indicate the candidate has done so many interviews that they just happened to look it up the particular idea after stumbling when hit by it before.
  2. It’s not a direct measure of a candidate’s skill. Just as using browser version to infer a browser’s capabilities is inferior to simply directly testing the browser’s capabilities, such indirect measures of people are more error-prone.
  3. Staying absolutely up to the minute with the developer community isn’t important. In fact, by lagging behind a little (not too much) you miss out on a lot of flash-trends. Even if these trends do stick around (RoR, node.js) early adoption comes at a steep price.
  4. Knowing acronyms isn’t necessarily the best measure of being up-to-date. I think a question I hear too little, which is more important, is What’s your process for debugging an application?

So I recommend ditching the ReST question, and really any question on specific acronyms or designs that could be learned in a matter of hours.

Returning random ordered results in MS access

You may be shocked to hear, but back when I was young I used the now-hated Visual Basic and Access. In fact, moving these applications to PHP on the job is how I first learned PHP.

Anyways, once I was trying to return random results in an sql query to an Access MDB from VB / vba and I scoured the internet and found nothing. Then I devised this little number, which probably for all practical purposes does the trick:

ORDER BY right(right(now*10000000000, 4) ^ (1/ID),4)

where ID is the unique id for the given table. Right(now*100000000000,4) basically gets you a pseudo-random 4-digit value, the current milliseconds. We combine this with the row ID to give a different but constantly changing number for each row.