Most of the technical interviews were benign but unremarkable, unfocused, and vague, and the interviewers ill-prepared. most of them caught flat-footed when asked if they could go interview this guy sitting in conference room "Thailand". It seemed that most wanted to know whether I could reverse a singly-linked-list from memory (mine, not the computer's), via iteration and via recursion (That just tests for how well I remember the work from my CS classes, but that's a topic for another time). Anyway, most were just fine, pleasant and uninteresting experiences. Some, however, were hair-raisingly bad. Terrifically bad.
Over a couple of months I spoke with 17 software engineers, managers, and CTOs. Five of them were either openly hostile or terrible. That's 29.5% of the interviewers. To be fair 4 of them were from the same company, so if we reduce to the number of companies (excluding the one I'm at now), one of four provided horrifically bad culture.
The bad ones went something like this:
The interviewer entered the conference room at 10:20 for our 10:00am interview. He closed the door, sat down, and placed a paper copy of my LinkedIn profile on the table. I watched as he read the first page.
"So", he said, "It looks like...", he paused, "...you're not a software developer. Is that why you want to be a manager? Because you don't write code?"
My profile is clear that I do write code, and have for many years. I asked, "Sorry? Are you sure that's my info you're reading? And, also, I love writing code."
"Hmmm", he said, flipping through the three pages, "I think so. This is the resume you sent?"
"Well", I said, leaning forward to see that it was actually my information he was looking at, "It's my LinkedIn profile. That's what I use for work history."
He nodded. "Well. Ok, So it looks like you are a musician. Are you looking for a day-job or something? How do I know you won't just leave when you start making money in music, or leave to go on tour or something?"
(I immediately forgave him his massive ignorance of the music business, and for overestimating my desire to 'go on tour')
"It's a language worthy of ridicule, therefore it is a ridiculous language. And did you learn Python in a code school or something?"
He nodded, "And you did that because your music career wasn't taking off? Is that when you decided to change careers and become a programmer, in 2007?"
(My profile clearly lists my first programmer job, and it's wellllll before 2007).
"No, it's because I love building things on computers and getting them to market. And I've been a professional programmer, since, a long time, look here, this line, my first programming job. So no, I didn't just change careers, as you put it. I did move to consumer web and away from enterprise software. So that was a change. "
He asked, "The enterprise software work is pointless. So. What's an example of something that I'd recognize that is in the market right now?"
I said, "Pono Music. The rest of the stuff I've worked on or published are all dead, or sunsetted."
"OK", he nodded, "Music doesn't count. And if I can't see and touch what you've actually created, then they also do not count. So in other words, you have actually done nothing. Let us move on to the next question. Do you contribute to any open-source that I can look at? Your github page was fairly non-existent."
"Very little", I said, "I'm not a recreational coder. I do have some private repos I can show you, with recent code."
"What language is it in?", he asked with a tone of extreme caution. (He just as well have asked "Does that cake have a bomb in it?")
"Python", I replied.
"No thanks", he said, "If it is all Python then it is insignificant. It does not count.", he said while looking at his phone, and scrolling through what I imagine was his email. Or his Twitter account.
"What do you do that is recreational?"
"I read", I said, "I create music, or cook, or write. Other things that don't involve coding."
He looked up from his phone, "You should just write code. Serious professional developers write code and contribute to projects on their own time. No one will take you seriously otherwise."
"I can't believe that the well-respected devs out there who spend weekends riding bicycles, or climbing, or spending time with their families, or doing other non-coding things aren't respected."
"Bah. Those people are douche-bags, not generally-respected-developers."
He put down his phone. "When is the last time you wrote code?", he asked.
"This morning.", I said.
"What was it?", he asked.
"Some software to control a synthesizer module via MIDI messages."
"Why would you want to do that?"
"It's a vintage piece of hardware, and it's FM synthesis. It's easier for me to program the synth from a CLI than it is from the little LCD screen on the front panel."
"That sounds stupid. Actually, what you should do is, there is this thing called Logic, it's recording software, and you should use some what-are-called virtual instruments. It's like a real piece of hardware, but virtual. But you need to be on Apple hardware, which you are probably not."
"Yes, I know what Logic is, thanks, I have it. And a Mac."
He feigned surprise, "You have a Mac? Quite Impressive! I had you figured for a Windows person. I am surprised and a little impressed."
"I use Ubuntu for work, actually. Windows for games."
"I didn't figure you for a gamer either."
"So when did you learn to code?"
"I started when I was ten years old. And I took CS in college.", I replied.
"Everyone codes when they're ten, that's not very impressive. Why didn't you finish your degree? Music again?'
"I finished my degree. See?", I said, pointing toward the paper in front of him, "CS degree."
"Oh. Yes. I see. That was a long time ago, so it kinda doesn't count.... So. How old are you?"
(By this time, my face was a glowing, red-hot coal, and my answers curt.)
"Uh, that's probably an HR violation, but I think you can do the math..."
"We don't have HR here. But you're like my Dad's age. I guess that's OK. I'm pretty shocked that you even know Python, if indeed you actually do know it...", he looked at me the way Sherlock Holmes looked at one-twentieth of a piece of cigar ash found on a recently dead body, "...but it makes sense that you've never heard of Ruby. No one can stay on top of new technology after the age of thirty-five. So what's your super power?"
I let the age thing go as generational-conceit and not ageism. "I have heard of Ruby, I just have not made the opportunity to work with it much. My super power.. getting things done. Creating and delivering product from idea to consumer."
He waved his hands, "Examples?"
"Several CDs of music, for example, and an app I sold to a company. Also some web apps I put out there to test the market, and for work: several products. Listed there, on the LinkedIn page..."
"CDs do not count. No one cares about that. And music is easy. Everyone does music. I do music at home. Being a DJ is common. Everyone is a DJ now. It's a thing."
"Uh, not a DJ", I said, "I compose, play and record the piano and keyboard parts, hire musicians, designers, mixing and mastering engineers, manufacturing, the works, the whole process to final product."
He shrugged and continued, "And no one cares about apps that sucked or got bought or from dead companies. That is not a super power."
"Well, that doesn't detract from the fact that I produced and developed and coded and delivered these things. I get stuff done."
He waved me off and shrugged, "No not really. No one cares."
He handed me a whiteboard marker. "Ok, now we need to do the dreaded white board test. Almost everyone fails this. I think it is elementary. Go up and reverse a linked-list for me. If you don't know what a linked-list is just say so."
I pointed at the whiteboard, on which were pseudo-coded two routines: one to iteratively reverse a singly-linked-list and another to do so recursively. "Your predecessor already asked me that question."
He read the code on the board while slowly stroking his beard, and said, "Wrong.. I would not do it that way, no, that's wrong. Well, points for trying, I guess?"
I asked, "What's wrong with the code? Your predecessor said it was correct. We walked through it, by hand, and it does what it's supposed to do. I'm pretty sure that'll work. Lets look it up and compare my answer-"
He interrupted, "If you have to ask that question then you would not understand the answer. And I do not need to Google it, I know how to linked-list. The only good thing I can say about that code is that it is not in Python. I do not allow Python in my office. It would be better if that wasn't pseudo-code, but given your limitations it is acceptable." He shrugged.
"Are you sure you wouldn't like to see some examples of my professional work? I have a repo we can walk through.", I asked, but really knowing it was futile. There was no way on this good green Earth I was going to take a job at this place, even if they offered.
He shook his head. "Python?"
I said, "Yep?"
He made a face, "Ew. Disgusting."
He stood up. "Well, to be completely honest I do not think you are a good fit for us. We can't spend the time retraining someone your age and I don't think you would like the culture here anyway."
"You know, you really shouldn't say things about age, right?"
"It's fine, I'm just being honest, and we don't have HR here. You have to have a thick skin to work here."
He stood, and left the room.
0. I hate the white-board singly-linked-list-from-memory question with a passion normally reserved for lima beans and pickled beef tongue. The question tests for proximity to graduation-date of a CS degree, and for personal memory. It does not test for whether the candidate will be good for your company. And, the algorithm is not commonly implemented in apps, consumer web, etc, and so easily forgotten over time for most professional, experienced developers. It's a practically useless question as delivered.
If I want to know whether a candidate really knows data-structures, I might ask them to reverse a singly-linked list and provide for them access to the web. I want to see whether the candidate has the drive and wherewithal to search thoroughly, find the correct answer, and understand what's asked of them and what they're reading. If they grab the first available answer from some q&a site, it's a bad sign. If they look at a few sites, whether to refresh their memory or to acquire to an understanding of the problem & answer, and intelligently select some guidance, that's a great sign. Ask them to explain what they're doing and why. And, if someone really doesn't understand data-structures, no collection of answers from the web will help them.
Better yet - ask the candidate to implement the basics of a kd-tree, or to write a function to find next-nearest-neighbor. Let them use the web and whatever other resources are available, including asking you questions. The best candidates will use a combination of their drive, intelligence, and rational/research skills to find appropriate guidance, and won't rely on asking you for every answer. The great ones will be excited at coding a solution to the question (kd-trees are cool!), especially if you can provide as intimidation-free an interviewing-environment as possible.
In other words, I want to test for how they'd function in a real-world situation in a startup where they will need to find the right answers (or right-enough answers), sometimes alongside their team-mates, and implement them quickly so we can get product shipped and continue to find, or develop, the company's product/market fit.
1. Do not check your phone when you're interviewing someone.
2. Show up on time.
3. Know what you're interviewing for. I personally look for drive, intelligence, intellectual curiosity, social skills. It's a tight race for importance among those top four attributes.
4. Don't be a jerk.
5. That dialogue was taken from a few different interviews, but most came from one interviewer who was taking out his company-related frustrations on interview candidates.
6. (Update) The conversation is fictionalized although many, but not all, of the statements are vebatim. Some lines I paraphrased and stuck close to the original statement. It is also condensed from three or four interviews into one.
7. (Update) Did the most egregiously-bad interviewer really talk, as I've written him, like he was an extra in "Stargate"? Why, yes. Yes he did.