I arrived a few minutes before my interview and, after notifying the receptionist, took a seat in the lobby and patiently waited for 2:30 to come. When the clock struck quarter to three, I inquired with the receptionist to make sure that 2:30 was the correct meeting time. While she clicked through the company calendar to verify, an employee brisked past the desk and mentioned that he was taking a late lunch and would be back soon.
“Oh,” the receptionist said, “yes, 2:30PM. And actually, Dave, the guy you’ll be meeting with, is out to lunch. He’ll be back soon.”
I anxiously watched the clock pass 2:50. Then 3:00. And then 3:15. When 3:25 finally rolled around, the same guy who left earlier for a late lunch waltzed back in. “Hey there,” he said, “you must be my 2:30. I’m Dave. Sorry for the delay, got a bit behind today... you know how that goes!”
“Uh, yeah,” I responded, clearly annoyed, “I guess I do.”
“Okay then,” he said defensively, “give me five minutes, and we’ll get started.”
Fifteen minutes later and just as I was about to walk out, Dave came back. “Ready?” he asked, gesturing me to follow. We walked back to his office and sat down to finally start the interview.
“Brown!?,” he opened up with, looking at my resume, “what, couldn’t cut it at Harvard?”
I wasn’t quite sure how to respond.
“Kidding, kidding,” Dave cut in, “but seriously though, your degree -- I'm sorry-- your prestigious degree doesn’t mean a whole lot here.”
“Riiight,” I answered, “that’s why I have it as a small bullet point, at the bottom. I graduated over a decade ago, and think my work exper--”
Dave cut me off, “you know, it seems like you have a problem on the personal level.”
“Well,” I said, “you had me wait for over an hour while you went to lunch, and then started off by --”
“Like I said,” he interrupted, “you have a problem on the personal level, even if you might be qualified professionally.”
“Are you serious,” I rhetorically asked, getting more and more annoyed, “what does ‘personal level’ even mean? You’re completely unprofessional! Would you have tolerated a candidate that was an hour late!?”
“Oh,” he scoffed, “so, we’re equals now, is that it?”
“You know what,” I said, “good luck with filling your position. And good day.” I got up and headed towards the door.
“Yep,” he said, smugly, “like I said before, you have a problem on the personal level!”
I bit my lip to prevent a stream of cursing, and just walked out. After cooling down a bit, I realized that this was the most fun I’ve had at a job interview in quite some time.
I Guess That Would Work, Too
from Jeremy H.
I’ve found that, while a lot of software engineers are able to apply complex solutions to complex problems, not as many are able to solve simple problems simply. As such, I’ve always found it helpful to pose fairly simple technical problems to candidates and ask them for the simplest possible solution. One scenario I often use for this is the Downloader/Watcher Contention:
Every night, a Downloader program will retrieve a handful of several-gigabyte files from a remote server and save them to a certainly directory on disk. A Watcher program monitors this directory and immediately processes whichever files show up. However, because downloading takes significantly longer than processing, the Watcher program will crash if it reads a file that has not been fully downloaded. How would you prevent this from occurring?
There’s really only one correct answer, and I try my best to guide candidates to get there. Some, like a recent interviewee, never quite get there.
“Well,” the candidate said after some thought, “I’d add a feature to the Watcher that would prevent it from processing files that aren’t fully downloaded.”
“The file doesn’t contain any EOF marker,” I responded, “in other words, there’s no way to determine if a file is done downloading simply by looking at it.”
“Oh, okay,” the candidate replied. He pondered for a full minute and said “so in that case, I would hae the Watcher listen on a TCP/IP port, and have the Downloader tell it when it was done downloading.”
“That seems like a lot of work,” I said, hoping to steer him in the right direction, “so let’s just say you can’t modify the Watcher. All the Watcher does is look for files in a certain directory, and processes one as soon as it sees it.”
“Hmph,” he gruffed, “since I can’t touch the Watcher, I guess I would then move to its dynamically linked libraries. I’d modify fopen() in stdio so that it could open a TCP/IP connection to the Downloader and verify that the download has completed.”
“Uhh,” I stuttered, “I don’t know if that would work. And besides, what if it’s statically linked?”
“This is really unfair,” he scoffed, “no matter what I think of, you’ll be able to come up with a reason it won’t work.”
“I understand why you’d think that,” I explained, “but there’s really a very simple solution to this problem.”
He sighed and thought for another full minute. “Okay, I could tweak the operating system kernel and file system such that it would monitor which files were being written to, and disallow local programs from opening the same file until the program ended.”
“That’s quite a bit invasive,” I countered, “wouldn’t a kernel change affect all the other applications running on the system?”
“That’s a good point,” he lit up, “so, before disallowing the open, I would have to look at the call stack to see what application was calling fopen().”
“Okay,” I said, ready to give up, “so you’re saying, to solve the problem of the Watcher processing files that are not done downloading, you would modify the Linux kernel?”
“Yes!” he cheerfully answered.
“What about if the Downloader just wrote files to a temporary directory, and then moved the file to the appropriate directory when the download was complete.”
He thought for another full minute and said, “I guess that would work, too.”
A Diamond in the Rough
Not too long ago, a recruiter set me up with an interview for a Senior PHP Developer position. I was a bit wary at the prospect of such a role, as I had only been developing for three years. However, the recruiter reassured me that it didn’t hurt to interview and that, if nothing else, I’d get a good interview practice out of it.
In the days leading up to the interview, I boned up on the ins and outs of PHP programming. I had a feeling that it’d be a pretty grueling technical interview. And when I got there, I knew I was right. There were three people waiting to interview me: the VP of Information Technology, the Senior Systems Engineer, and another Senior PHP programmer.
“We like to start things technical,” the programmer said, “hope you don’t mind that!”
Hundreds of PHP functions, variables, and modules flashed through my mind. I was ready for their worst.
“All right,” he began, “if you want to center a page using CSS, how would you go about doing that?”
A simple CSS question! I was very pleased that he started with such a softball. “I’d just use margin: auto,” I confidently responded,” and I’d also make sure the page had the DOCTYPE defined.”
The programmer smiled. “If you want to have the same header and footer files displayed on every page, how would you do that?”
Worried that it was a trick question, I hesitantly responded, “I’d include them?”
He smiled again. The next few questions grew increasingly difficult, with the last one requiring all of two months of working knowledge of HTML, PHP, and CSS to answer.
The rest of the interview went just as well, and as the developer escorted me out he added, “you passed that interview with flying colors! You’re definitely going to be my recommendation. All the others were horrible.”
Not wanting to upset him and lose my chance at getting a good paying job, I resisted my urge to say, “Where the hell are you getting these people then? Any amateur could answer those questions.” I just thanked him and went on my way.
Two days later, I received a “congratulations, you got the job” call from the recruiter. After a bit of pushing, the recruiter revealed that all the other candidates were from him, and that he was the company’s exclusive recruiting agent. I ended up taking the job and am very fortunate that things worked out in the end. Whenever they remind me how I was “a diamond in the rough,” I just smile and nod. I’m sure one day I’ll work up the nerve to tell that the problem is with their diamond-miner.