Metamorphing Machine I rather be this walking metamorphosis
than having that old formed opinion about everything!

Technical interview: A view from the other side

When I was at my previous job, I was tasked from time to time to interview programmers.
The spec was always the same: English speaker, knowledge in Java or C#, database, and notions of security.
Someone from HR would start digging resumés, and I would start filtering them.

I always found it funny some people putting "XML" as one of the programming languages they knew.
Another thing I would certainly notice was misspellings. We're talking about programmers, and they didn't even think of using a spell-checker?
(I was guilty of the same sin, though.)

If the person's last place was programmer, this was a no-brainer. I wanted to talk to them.
If their last or current place was manager, then I would take into account how long they were AFK, so to speak.
I would then ask that person from HR to schedule interviews with the selected ones. Two hours interview, and, please, let them know, they would need to code.

I divided my time like this: 15 minutes introducing me and the company.
"My name is Andrej, I am a manager, although I did not manage any team.
The Company is the second biggest one in our field in its country and has over 200,000 employees around the world.
It started with eight software engineers, who borrowed money from their wives to start a company."
Things like that.

Then, I would ask if they were comfortable with me switching languages to interview them in English.
Sometimes, that's when things went South.
Some people who would put "fluent English" on their resumé, but when asked the above would say they were "a little rusty", or "it's been a long time since I spoke English", and so on.

If they said they preferred to go on in our native language, that'd be good for me. I would take note of it and move on.
If they had a hard time expressing themselves in English, I would take a note, too.

The next 45 minutes would be spent asking a few basic questions:

Personal
"Why are you leaving your current company?"
"What were your duties there?"
"How it was like to work in your team?"
This was the most easy-going talk we would have. As easy-going as a candidate seeking a job can be, that is.

Programming concepts
"Do you know what a class is?"
"And what about an object?"
"Why do we have this thing called 'constructor'? Why is it needed?"

Sometimes, I could see the interviewed knew the answers, but could barely explain them, be it in English or our native language.
As long as they did not say anything blatantly wrong, I was OK with that.

SQL
"What does it mean CRUD?"
"What's the difference between left join and right join?"
"In a database context, what is a transaction?"

Pretty much everyone went well on these questions. What impressed me was that no one knew about CROSS JOIN or natural joins.

Security
"Suppose we are building a login page. It has a username control and a password one.
Is it OK to have a query like that to validate the user's credentials?
"SELECT * FROM Users WHERE username = '" + username.Text + "' AND Password = '" + password.Text + "';"

I was testing if the candidate has heard at least about SQL injection, one of the low-hanging fruits in securing an app.
From there, we could discuss passwords being stored in clear text, parameterized queries, and so on.

Then I would say I would give them a programming task. They would have one hour to code it.
The twist? No IDE and no Internet connection.

Now you must be thinking I am the worst person in the world.
I reasoned that my tasks were so basic programming skills that the answer would be one F1 keypress or one Stack Overflow query away.
Also, it was not uncommon to be in a situation where one needed to figure out why things were going wrong in production, without an IDE,
without an Internet connection, and sometimes, without even having access to the frakking production server!

One of the first persons I interviewed was a girl. I made an honest mistake with her.
I really did want to see how she would solve the task, so I kinda shoulder surfed her.
She went well, I recommended her being hired, and she was. When we had a chance to talk some months after that, she told me how she felt pressed by me watching over her shoulder. I changed my ways after that.
She left the company because of an unrelated issue.
(One thing that I did not assess was the candidate's traits.
I'm not a psychologist. So it happened I recommended hiring very good programmers that were a PITA to work with.
Not that girl, though. She was OK.)

None of the programming tasks were created by me. I took them from the Internet.
One of them was this one.
I would offer the app skeleton, and the candidate would fill in the blank. This is the C# template version:

using System;
using System.Collections;
using System.Collections.Specialized;

public static class Penalties {
public static void Main() {
while(true) {
string s = Console.ReadLine();
if(s == "") break;
Console.WriteLine(penalty(s));
}
}

private static string penalty(string scores) {
//Your logic goes here
}
}


Another one boiled down to, having a list of numbers, display the pair that had the smallest difference between them.
We're not talking about reversing a tree, implementing a linked list, or how would you move Mount Fuji questions.
I only had tasks that I was able to code in the allotted time.
Even so, most candidates would do poorly.

There was this Indian guy that came to be interviewed one day. He answered all my technical questions with the very same answer, "I don't know."
I didn't bother to waste one hour with him doing the code exercise.

There were those that the code won't compile. It didn't matter to me, as long as I could see it would be easy to fix the issues had them the chance to check a help file or giving a little more time.

There were even ones that, after one hour, would hand me back the C# template untouched. Why wait one hour to do nothing? Go figure.

Closing the interview, I would tell the candidate we would get in touch to let him know how it went and asked if there was anything else he would like to let me know. That was their last chance to "sell" themselves to me.

I would make sure every one of them got my decision about their interview on time.
I think it would be disrespectful to let them hang there indefinitely, without an answer.

Not many candidates asked me there, on the spot, how they went.
To those who did, I would answer frankly, highlighting where they went well, and where they needed improvement.
I would not offer the answers to the tech questions either unless asked.
A few of them even told me it was a good interview format. I'm sure even the ones that weren't approved left with a good impression from the company.
Of course, some people left pissed off with me, with themselves, or both.

The most spectacular fail I had in interviewing anyone was when my co-worker and I were having a whole team at once.
They were from a small town, came on a Saturday morning along with their manager, and were Java developers. I suppose there were around 15 of them.

They were mad at us because of the non-IDE rule. And none of them knew how to compile a Java program using the command-line compiler.
One of them even said he would like me to clear some "doubt" he had.
Me: "OK, what do you want to know?"
Him: "How do I declare an array in Java?"
Me: ...

We did not recommend hiring any of them.
All of them were hired.
I didn't know at the time - but had strong suspicions - that our interview did not matter at all.
It was just a formality. They were always going to be hired.
Oh, well... Like I said, epic fail. To me, at least. It made me re-think a little about what I was doing.

The last time I interviewed someone, something strange happened. I was feeling a little impatient.
It bugged me when the candidate had a little more to share about them with me.
Unfortunately, that was my last interview. After a while COVID-19 happened, I was quarantined, and finally fired made redundant.
I could never understand what happened. Was the candidate annoying? Was it that I was not in a mood to do interviews anymore?
I'm not sure.

Do I think it was a valid way to assess someone's skills? Yes, I do.
Did it work? Yes, it did.
Would I do it again? Hmm... Maybe?
There's so much backlash these days against these code interviews that we would risk starting with the wrong foot.

Next week I'll share a change of heart I may have.

Andrej Biasic
2021-11-27