Storytime: some of my worst interviews

I start my new job tomorrow, so I thought I’d write a little about some of the worst interviews I’ve gone through.

The worst of the worst (my fault edition):

I was interviewing as a junior sysadmin at a company located in Arlington. For some reason that utterly escapes me, I decided NOT to take the Metro from Vienna, but drive. This was not too long after I’d moved up to NoVA and well before there was such a thing as Waze or Google Maps. We had MapQuest but that still involved printing or writing down turn-by-turn, and had no notion of traffic or road construction.

As I said, at the time I’d basically never even been out of Fairfax “farther in” than the Vienna Metro stop (at the time, the most distant station for the entire suburbs and exurbs of NoVA). I had no idea about any landmarks anyone tried to give me.

I ended up in DC somewhere.

I was now doubly lost, because I needed to get out of DC and figure out how to get back to where I needed to be. I had no interactive maps or GPS and only a pre-Razr-era cell phone.

Also, related, it was summer and my car didn’t have AC and I was of course dressed up in a full interview outfit.

I managed to call them and tell them I got lost, which was sort of a bad way to start the interview but it did happen back in those days, so they were miffed but a little understanding.

Then, once I got near where I needed to be, I had to park. The closest parking I could find was over half a mile away or something. I was already incredibly late. I ran as hard and fast as I could in my stupid, uncomfortable interview shoes, and got there, something like 2+ hours past my appointed time. I was drenched in sweat, my feet where blistered from just a short jog, and I looked like a crazy person. The people who needed to talk to me had just bailed; clearly I was a fuck-up and not worth bothering with.

They gave me a glass of water and asked me some half-hearted question about Linux, and then thanked me for my time and escorted me out.

I didn’t get the job.

The worst of the worst (their fault edition):

I went through the interview process at a small web site that sells books and other merchandise. It consisted of a phone screen, a second phone screen with coding test, and then a final on-site coding test/culture fit/torture session.

In the first coding test, they FizzBuzzed me. Like literally gave me a test to do Fizz/Buzz/FizzBuzz. Opinions vary – some people claim it’s still a valid test – but I’ve done hiring of engineers and the only people who fail FizzBuzz are 1)morons or 2)people too lazy to do 5 minutes of searching for common programmer interview questions (which, if you think about it, are morons).

I guess I’m not a moron because I passed it and several other coding questions and got an on-site. Yay!

The instructions were simple: Arrive at 10, and you may dress casually (clean jeans and a decent shirt). I arrived early, as usual, and talked to the security guards to announce myself and tell them who my contact was. They called for them and I was told to sit down.

By 11 – after asking numerous times what the FUCK was going on – I was still just sitting in the reception area as numerous employees came and went. At around 11:30, someone came and fetched me, and escorted me to a huge conference room and told me to wait.

After another 30 minutes or so, a TV on the wall came on and someone started talking to me. It went very badly because whatever they were supposed to talk about, was based at least in part on some conversation I was already supposed to have had! So they tried their best and ended their portion of the interview, and said they would signal the next person to come and get me.

Still more time passes; it’s some time after noon and I was getting thirsty and hungry. Lunch was in theory on the schedule, but when?

Someone came to fetch me and was clearly, obviously, profoundly annoyed at having to do so. They then wordlessly carted me around several floors looking for someone to interview me. Everyone was incensed at the suggestion they stop their important day to talk to some asshole. Some of them had copies of my schedule for the day and were angry that it had been violated, and clearly were looking at me as the source of the problem.

I got bounced around a few tech interviews, and eventually managed to get a quick bite at their cafeteria. The tech interviews were, in my opinion, the worst type: they weren’t interested in how you thought, they just wanted to see how long it took you to get to the answer: “Given a string, find the longest palindrome, you have 30 seconds”. Several of the questions were so jive, I actually asked them, “is this a problem you’ve had to deal with in code before?” which further angered them.

I was already WELL over schedule and over, like, an hour and a half later than I was supposed to be there. I was a little tired, and a lot bewildered at the entire experience, and I had one more 45-minute whiteboard coding session to go. “Since you’re over, you could leave now, but it probably would make you score lower” was the official line. OK, fine.

Another angry asshole, another giant conference room with a whiteboard. He handed me a circuit diagram and wanted me to use OO to model the circuit and then implement it to produce the same, pictured answer.

I just stared at him. “This is a graph. It’s a directed, acyclic graph. You want me to model a DAG.”

“Yes, uh, I mean, model and implement whatever you think it is.”

I was furious. I was on time and had been treated like shit all day, and now this. “OK, answer me this. Is this a DAG? I think this is a DAG.” and I drew a quick sketch indicating the differences between cyclic and acyclic. “Am I even remotely right, here?”

He nodded and sorta grunted that I was. “Fine”, I said. “The next thing I’d do is hit Google to remind myself what the class model for a DAG looks like, because I’m tired and grouchy, every programmer I’ve ever met uses Google or Stack Overflow or even a file full of notes to do a lot of their work, and frankly my dude I have better things to do than this. I have correctly identified the problem which is, like, 90% of professional programming. I’m done. Thank you for your time.”

He looked like he wanted to hit me. He ran out and got someone. I was quickly escorted out without a word from anyone.

I didn’t get the job.

Is my Dropbox going to sell me out?

Let us assume for a moment that I have NSFW content on my personal (paid for by me) Dropbox, which I connect to my work computer. 

Am I then “storing” NSFW content on my work computer? After all Dropbox locally caches pretty much everything. If I’m using Dropbox at work for things like 1Password or syncing application config, am I obligated to ensure that no NSFW content is part of the bargain?

(Note that I am not looking at the NSFW content at work. It is just passively there. Obviously if I use Dropbox to sync NSFW content so I can look at it at work, I’m in the wrong.)

Hit points are broken

I really, really dislike hit points.

Here’s an example. According to the official rules (paraphrased), at or above half is “no signs of injury”, half to 0 is “a few cuts and bruises”, and a hit that takes you to 0 or below is a serious injury.

Even as an abstraction, it’s sort of broken, and especially when combined with Armor Class. We’d probably call it a leaky abstraction in software, although it’s slightly different.

The intent is to model abstract survivability in combat. Your stereotypical orc and human fighter, armed with medium hand weapons (swords, axes, etc) and a shield, wearing decent armor, set to murdering each other. Since each is pretty equally matched, the fight goes on for a bit. They swing and score the occasional hit, but not one that is especially damaging. Eventually, one of them will have their “luck run out”: perhaps literal bad luck, or the exhaustion of hand-to-hand combat combined with numerous small wounds, but in any case, one of the combatants will score a serious hit and put the other out of the fight – if not 6 feet under.

This is perfectly good abstraction for our 2 perfectly average combatants. There’s problems, though:

  • Critical hits are boring. A critical hit with a dagger does max damage: all of 4 points. You have a 1 in 4 chance of having that happen anyway. A critical hit should actually do some damage. Having a game where certain weapons are simply useless is bad.
  • Armor “makes you harder to hit”, which is another annoying abstraction. It’s assumed that you’re actually being hit, but the blow is “turned”. But now, when a hit is scored, the armor – no matter how good – does nothing. So armor is a binary prospect: it either protects you utterly or fails completely. In our perfectly average example, the abstraction is fine, but in larger combats (as one example) suddenly my plate mail is less strong.
  • Healing is perfect. Get to -1 HP, but luckily survive the fight? No problem, you’re fine! I understand that D&D is not intended to replicate the very real effects of actual wounds, but it’s a little annoying that you’re just a lump of magic putty that mends perfectly by resting.

I don’t know that there’s an easy, backwards-compatible way to fix this. In my head, I’d do something like allow the advantage dice to determine the effects of a critical; so if you have a 20 and an advantage dice score that would also be a hit, then the target loses half their HP total (or is at 0 if already at or under half); otherwise it’s double damage, or something.

You get into problems with a dragon being able to kill a dragon, but hey, why not? The dragon exists, the fact that the players are fighting it int he first place requires a bit of suspension of disbelief; why can’t a lucky halfling stab in just the right place? Why can’t a stout dwarf swing his mighty axe with such ferocity that the fearsome wyrm is struck down? Is it better to play a long-game of numbers and averages?

Going

Tomorrow is my last day at the ol’ salt mine, where I’ve been for the past 8 years. It’s a hell of a thing, leaving; I have more than a few complex emotions about the whole deal.

I feel like I’m leaving behind code and systems that were in better shape than when I arrived. Hard not to when you arrive to a giant pile of Sun hardware, running ancient versions of Solaris. I leave behind 100% Linux, running on commodity hardware, a change I brought to the company.

Our primary application, a horrible mess of PHP4 spaghetti when I started hacking on it, is a slightly less horrible lasagna of PHP 5.3+, and there’s a good first pass at a modern PHP app in the repo as well.

There’s more than a few things I didn’t accomplish that I set out to do. Some of them, we were simply “overtaken by events”. The business has a way of turning underneath you – it’s part of the fun. In other cases, the current business climate simply isn’t right. Austerity is the order of the day, and fewer and fewer customers were willing to spend money to make money (to name but one example).

I’m proud of some of the work I’ve done, but I won’t be sad to see PHP go (the new job is a Python shop). A couple years ago I went all-in on PHP; I even obtained a Zend certification. PHP often deserves much of the hate people throw at it, but there’s also a lot of smart, innovative people who are really trying to push the language/platform in the right direction.

I’m super-excited about the opportunities at the new place. I’m really looking forward to kicking a lot of ass for them. All the skills I bring, I honed in the salt mine.

Remote Work FAIL

So yesterday I had some family event to attend, and I decided rather than drag my ass into work (~1 hour driving in, 3 hours at work, ~1 hour driving back home) I’d work from home.

Suffice it to say it was such a fail I’m going to charge it against vacation time. What happened?

  1. Stayed in my underwear
  2. Didn’t start 9am sharp
  3. Didn’t have a goal

My simple solution for effective work-from-home has always been get up, get dressed, start working, as if you were at the office. Sure, not driving in gives you an hour (or two) to burn on “me time” but never, ever must that time be spent on sleeping (which is what I did) or otherwise not doing things that move you towards getting to work.

So for me, working out is a positive way to spend that extra time, because at the end of a workout I shower and get dressed and “go to work”. Sleeping or watching TV doesn’t move me towards getting into the mode to work.

The “9am sharp” rule isn’t hard and fast – in fairness sometimes it’s 9:30, or maybe even 10 – but the basic idea is “at some point you stop being at home and start being at work”. If you kinda just sit down when you sit down and think “well, I’ll check Reddit again” you’re not at work, you’re still dicking around.

Lastly, have a goal. You’re at home and comfy and it’s easy to have a wandering mind. Even more than at work, you need to have a plan, a goal, some thing you specifically intend to do. At work there’s all the stuff that we go into work for: phones, coworkers, post-it notes. At home your desk might be full of office toys and personal stuff. I didn’t really plan on doing a specific thing yesterday, and it showed; I eventually got around to cranking out a bugfix at maybe noon.

So there’s my simple (?) guide to working from home. Get up, get showered and dressed, start working like you are at work, and have a plan.