Technical interviews in the US compared to the UK
Firstly, all the interviews have consisted of at least one highly technical phone screen - this is following a more relaxed (but still technical focused) interview with HR & management. If you get past those stages, you then have an entire days worth of technical interviews involving a lot of whiteboard coding. Most of the questions are completely irrelevant to real-world programming (reverse a linked list etc.) yet a lot of weight is put on the answers.
In the UK, this level of testing is rare in my experience. Instead more focus is put on your resume and achievements plus if your personality fits during the 1-2 hour in-person interview. You will get a technical test in most places but it is usually an hour or so and very job focussed.
My second problem is to do with attitude. We brits tend to remain rather modest of our achievements because boasting is considered in poor taste. I'm finding that attitude is really affecting the way American interviewers are judging me. It seems they expect interviewees to scream out loud that they are the greatest programmer the world has ever seen! Of course I'm not, but I am bloody good at what I do.
The strangest thing is, I get calls almost every day wanting to talk about interviews based upon my resume yet so far, no luck in breaking that cultural barrier that seems to exist.
I'm starting to adapt though and understanding the American way of doing things. I want to fit in here and have a successful career. If anyone wants to share some insights I'd be most grateful.
39 comments
[ 3.2 ms ] story [ 74.7 ms ] threadThe purpose of questions such as reversing a linked list is to test your understanding of fairly fundamental computer science, to see if you're someone who understands the technology you're using or if you treat it as a black box. For more technical companies they need people who fall into the first category hence ask that type of question.
As for interviewing in the UK, I've interviewed at many large and small companies and yes, they do have technical tests but I have come across none so in depth as the ones I'm encountering over here.
The strangest thing though, all these places have loads of spaces open for programmers yet such a rigid system that seems to require 100% scoring that most programmers, regardless of how valuable they might be, end up being ignored. The worst is for someone like myself who has been out of university for so long I don't remember how to answer some of the very exam-like questions yet you give me a coding problem and I can solve it.
My biggest piece of advice is to remember the technical interview isn't just (or even mostly) about the technical aspect. Communicate constantly, verbalize your thoughts, ask questions, show passion. I've hired plenty of people who have done not-so-well at the technical portion, and I've given a 'no hire' to plenty who have aced the technical portion.
I've got another day long interview in a couple of days and to get there I had to do 2 phone screens and a 3-day long skills test at home. I get it, you have to get the right people but in a country where you can just sack someone at the drop of a hat it seems so over the top. Even more so in comparison to the UK where firing someone is extremely difficult.
In your experience then, is it something that can be done (I guess so given that you had 3 interviews already).? Or do companies gives you a hard time if you don´t have a work permit to start with ?
Thanks.
Thanks for the answer anyway...
The trick is to know all the ins and outs of the process (or get an experienced immigration attorney to advise you), so that if any issues come up you (preferably your attorney) can walk them through the process. It really isn't that hard, but not a lot of people bother to sit down and learn how to do it correctly.
The other thing is that if you can pay the associated costs on your own, then you can insulate the company from the process to a large degree ... I'm not sure that option is still available though, as I think it has been changed to require the company to pay all the fees on their own.
Candidate A had a long track record of success, at least on paper. He was obviously motivated, responsible, and likable. He had done a lot of hardware work, and claimed to be a decent (but not top-notch) C programmer.
Candidate B was straight out of college, and he had a weak résumé. We suspected that he had some coding talent, but he didn't have much experience, and we had no idea whether or not he was reliable.
We were leaning heavily towards candidate A. He interviewed brilliantly and seemed like a good fit. Then I asked him to reverse a linked list, and he responded, "Do you have a copy of K&R? I don't remember what kind of braces C uses for functions." After about 30 minutes, he was still trying and failing to find a solution.
When I asked the same question to candidate B, he shrugged, and wrote out a correct solution without stopping to think. So we hired candidate B, and he did excellent work for us for years.
And this is not a one-time incident. It's amazing how many people can bluff their way through an interview without knowing how to sum the numbers in an array. Résumés are full of lies, phone screens are hard to do well, and references are hand-picked by the candidate. So I'm a big believer in coding questions.
Why? Well of course the kid straight out of university would answer a question on data structures correctly, he probably did the class for that only a few months prior.
In your example, Candidate A was obviously a no-hire after not even knowing what braces a C function uses but a lot of people similar to Candidate A who can actually code are being presented with questions about linked lists and similar structures no-one who has written code for years would remember, let alone use in their daily work lives.
I want to say again, I'm 100% for coding questions but I think they should reflect more on the type of work you need the candidate to do in the job rather than some academic examples you feel you must ask just because Microsoft/Amazon do.
For instance, in a singly linked list you only have the function "getNext()" and "getHead()"; in a doubly linked list, you have additionally have the function "getPrev()" and "getTail()". If parent asked me this question in an interview I'd probably jokingly say "well, you didn't specify doubly or singly, so I'd just call getTail and then getPrev until I was done!" And then I'd write a recursive function for a singly linked list because everyone likes recursion.
How could you possibly answer this question if you didn't know what a linked list was? If you never took a data structures class, you probably used "lists" but you have no idea what the bare bones construction is. Just using lists doesn't mean you know how to write one from scratch.
I think it's about admitting when you don't know something just as much as it's about being able to reason through the problem and give a correct answer.
All else equal, I'd much rather hire someone who didn't know what a linked list was, but asked and answered correctly, than someone who pretended to know and limped their way through the problem, even if they did eventually give a correct answer.
Your reference to "remembering" is entirely irrelevant. What is relevant here is whether the candidate can reason through the problem - and more power to the candidate if s/he's been out of school for N years. What I strive for with technical questions is not to find out how well the candidate remembers their Knuth( although finding someone who actually read Knuth is nice ) - it is to determine how well they think through problems. And with no offense intended, if you can't at the very least come up with some ~3N complexity stupid-but-it-works stack-based solution to the problem of reversing a linked list, you probably shouldn't be a professional developer.
I guess the main argument I have is that I don't believe these are the best way to find out if a developer will be good at the position being offered. But I can't think of a better solution (other than getting them to work a trial period) and others seem to like this way of doing things. Therefore I will learn and adapt, which is the way of programming anyway :)
This should be the sort of thing anyone looking for a programming job should be able to do as the programming equivalent of muscle memory.
I guess I just don't like questions where you are required to remember facts you no longer use rather than reason your way through problems you might encounter in a real job.
If you aren't able to do such basic things correctly on the spot, I simply can't trust you to check in complex/highly concurrent/etc code that works. As an IC developer I don't want to deal with your code or clean up your mistakes. As a manager, I can't trust you to write code unsupervised.
This quote in particular would be a massive red flag and probably the end of an interview: "it is more appropriate that I understand how it should be used, it's pro's and con's and all it's supporting functions". In most companies, what's being sought is not someone who can just use the tools as appropriate. It's someone who can develop new tools and solve problems for which there isn't a pre-canned answer available. If you don't know how to solve the problems for which trivial answers exist, how can anyone expect you to be able to reason through truly novel and difficult problems.
The sort of attitude you're espousing is perfectly fine for large ERP/custom corporate app/corporate website/etc programming work. It's just not what people in the valley are doing.
I get you though; you want someone who can solve many new problems but it highly unreasonable to put a programmer in an unrealistic situation like an interview and expect them to perform just as well as they would on the job. Unfortunately I have no answer on how to improve the interview process but it still bothers me that a better way hasn't been found.
Reversing a linked list is not about how linked lists work. It is a very simple question which verifies that a person knows what the pointers are and how to use them, can write simple loops which manipulate pointers and can handle simple things such as 1 element lists, 0 element lists etc.
Without such basic competence, it is probably not possible get "the job done" well.
Having been in a big company, the primary reason we did lots of coding is to ensure that we have enough signal that you can code. One bombed interview may not mean much, but any more may be an indication that you cannot get the job done without some amount of babysitting.
To say that not passing two interviews means he can't get the job done without babysitting is ignorant. Looking at most of the hiring posts on hn, it becomes very obvious that they want to do a cultural fit. Defining a cultural fit is going to differ depending on who you ask.
> It seems they expect interviewees to scream out loud that they are the greatest programmer the world has ever seen!
It is the American way to tell everyone how great you are and then once you have kids, you have to tell everyone how great they are. I suppose it is to be expected in what was/is a competitive capitalist market. If I interviewed in the UK and told everyone how great I am, it would be a sure fire way to not get the job.
Some US companies have a tendency to ask questions that are tricky or are obscure. Even worse is the interview that is completely overloaded with buzzwords and jargon.
I think a part of it is ego, especially nowadays - some really good engineers are doing their own startups now, and when these companies start hiring they're looking for people just as good as they are, which means taking a page out of the Google/Facebook style interview process. I've met and worked with people who, while with great intentions, think great software engineering comes from graduate-level CS studies.
That said, resumes and achievements aren't great indicators of success because so many people have good-looking job histories and many can also sound good just talking about their experience. For me, front-end web eng. has become a pain to hire for; too many candidates put down things they don't know enough about, and unless they have fully-viewable source online it's hard to tell whether they accomplished much of anything in their past projects.
I do think our current standard of heavy whiteboard interviews is misleading, though, which is why I prefer pairing interviews when given a choice. Working with an engineer is a great way to measure cultural fit.
And finally, companies are super careful with filling a position because while firing someone is at-will, the cost in bringing that person up-to-speed, dealing with the bad player's code and work, the messiness in letting that person go (in planning, morale, etc.), not to mention salary and severance make everybody err on the side of caution.