
Acing the technical interview - alecsx6
https://aphyr.com/posts/340-acing-the-technical-interview
======
Fuzzwah
For anyone who missed this piece of gold from the comments:

> The William Gibson version would begin thusly:

> It was hot, the night I burned the Seeker. Moths batted themselves to death
> against the humming neon signs just outside the single window in the cramped
> room. There were ancient electronics piled to the ceiling in here, hot new
> chipsets from Taiwan still unwrapped distributed unevenly amongst them.

> The Seeker put his hands on his hips, brushing aside the corners of his
> Sukajan jacket bomber jacket replica. "I heard you and Bobby were hotshots,
> once. Real.. artístes", he said, the last word paired with a smug grin.
> "Heard you could do things."

> "Things like what?" It's been 20 seconds and you've already wasted too many
> cycles with this guy.

> "Things like making lists, just, fold up inside themselves. Come out the
> other way around. Crazy things."

> You grit your teeth. The dex has left your system and you're starting to
> feel a massive drug deficiency coming on. "Crazy things cost money", you
> manage. The lists already unfurling in your head, you start typing as
> quickly as you can to hide the microtremors.

~~~
nojvek
> After the candidate took his leave the interviewer being bombarded with
> questions by the holders of steak stared out from inside the bustling
> warehouse wondering if he would ever truly understand what a list really is.

I just wish someday I could write like this. Beautiful.

~~~
mekoka
Did the commenter mean "holders of stake" (stakeholder)?

------
dasil003
This is beautiful. It captures the spirit of wizardry and wonder that brought
me to programming in the first place, juxtaposed against the reality of
interviewing at "top" tech companies where the interviewers more often than
not have only a fraction of my experience, and seem to have followed the type
of curated success-seeking golden path that used to be reserved for finance.

~~~
user5994461
> and seem to have followed the type of curated success-seeking golden path
> that used to be reserved for finance.

Finance cares that you have past proven experiences in finance and they'll
hire you for it.

Breaking into finance is the hardest thing to do, once you're in, you're good
and you can have a great career.

Tech companies don't care what you've done and they rarely, if ever, ask about
it.

Breaking into tech companies is only about rehearsing Cracking the code
interviews, and once you're in, you have no guarantee to make any sort of
career. You'll probably be out soon because things move too fast and the
turnover is insane. Your next job is gonna be difficult to find because the
next tech company won't care about experience and will try to pay you with
free food.

~~~
seldo
I'm not sure where you've interviewed but everywhere I've worked we always ask
what you've done, and at my current company we have no whiteboard interviews.
Tech is learning, slowly, how to give proper interviews.

~~~
user5994461
True. Half the time there is 1 guy (out of the 3-6) who will ask about what
you've actually done.

10 minutes out of 4 hours, that's like less than 5% devoted to real world
experience.

~~~
Jagerbizzle
As someone at a major tech company that is routinely involved in interview
loops, I spend at a minimum 25-30 of the 55 minutes I have asking about
specific items on the candidate's CV. When white-boarding, I'm interested in
two things: a) can they actually write code, and b) how well do they ask
questions and collaborate with me when working through the problem.

That said, having gone through loops from the other side, I know this isn't
always the case and that your mileage may vary.

~~~
arvinsim
Well, shit. I had a whiteboard interview earlier and I was silent while
working through the problems. I had a lot things going on in my mind but
hadn't taken the time to verbalize them at all.

~~~
kronin
If the only thing the interviewer has to judge your skill on is what you wrote
on the board, that's what will be used. When I'm interviewing, I'm trying to
gauge how they approach a problem, how well they can reason through a
solution, whether they see the assumptions they're making and the impact those
have on the solution, what the limitations are of the algorithm they came up
with, etc. It's really hard to see most of this if the candidate doesn't talk
at all.

------
pkd
Thank you. I wish to someday walk into an interview and pull out Clojure as my
language of choice and write every bit of code they ask me to as a pure
function - and then look into the interviewer's eyes and try to decipher if
they had seen the eternal light of Lisp yet.

~~~
eli_gottlieb
I did an on-site this past Monday. They allowed me to code the homework in
whatever I wanted. I used Haskell. We code-reviewed it in Haskell, with a guy
there who knows Haskell.

They use Scala and Clojure on a regular basis.

God I hope they offer me that job.

~~~
sharpy
I had that happen to me once. A candidate (college hire) chose to code in
Haskell, which I had a passing familiarity with. We offered him the job, and
he was definitely a strong hire, and we used Java mostly.

~~~
eli_gottlieb
In my defense, they said beforehand that they use Scala, including the
functional parts.

------
cocktailpeanuts
In most cases when a company rejects you because of "culture fit", chances are
there's something wrong with yourself. Not the other way around.

Companies are NOT out there to bring you in, waste several collective hours of
their employees time who could be working otherwise, just to reject you. They
WANT You to pass the interview.

If you don't pass the interview because they think you are not qualified, then
that's something that can be fixed. You just need to study more and get more
experience.

But if you don't pass because you're not a "culture fit", it means you
probably came off as a difficult person to work with. And this article shows
why.

~~~
brooms
I've noticed a lot of tech companies now starting to adopt psychometric
testing. So you might be bloody good at balancing an AVL tree on a whiteboard
but a pretty difficult person to work with so they won't hire you. We place a
lot of emphasis on psychometric testing in combination with how good a
candidate is technically. If you fall into the wrong quadrant (generally
indicating you are difficult to work with) we won't hire you.

~~~
thesmallestcat
You also won't hire me and many others because we run as fast as we can from
the rare companies that give personality tests. The moment that gets mentioned
in a job description, I laugh and close the tab. My view is that if somebody
thinks a bullshit personality test is a good way to assess a candidate,
they're the crazy ones, and they may as well propose a polygraph too.

~~~
flukus
Typical EDC type.

------
kwillets
This reminds me of my evil plan to ask a whiteboard question when they ask if
I have any questions for them.

~~~
paulie_a
I say go for it, you are interviewing them just as much as they are
interviewing you. In the same context on a simple application form I was asked
what my previous compensation was, and what I would expect. I ended up
cancelling the submission due to many other questions. But in regards to
compensation my answer was "That is a second date sort of question"

~~~
canttestthis
As an interviewer if I was ever asked a whiteboarding question it would be an
instant rejection, regardless of your performance in the interview. It shows a
lack of social awareness and I wouldn't be comfortable working with you on my
team.

~~~
lorenzorhoades
Can you explain more why it would indicate a lack of social awareness? If I am
interviewing at a company, I want to know the kind of people I'm going to be
working with/for. If the person who does all of the technical interviews lacks
technical ability, then what does that say about the people he/she hired? If
they think a solution to a whiteboard problem is essential, how can they judge
a particularly creative solution if they don't have intense technical
experience above an beyond the people they are interviewing?

------
kelvin0
I want this to be funny, but even the simplest of LISP is foreign to me. So
I'm kinda like an English only speaking expat at a Hong-Kong Bar, where a
local guy tells me a (dirty?) joke and I laugh, even though I didn't quite get
all the details.

Well done?

~~~
davidnc
I thought I'd try writing a translation into Python. Not sure if it makes it
any easier to follow, though...

[http://pastebin.com/yK1HrZJQ](http://pastebin.com/yK1HrZJQ)

~~~
RodgerTheGreat
Since K was specifically invoked in the article,

    
    
        c: {[h;t]{(h;t)x}}                  / cons
        h: {x 0}                            / head
        t: {x 1}                            / tail
        n: {h y t/x}                        / nth
        p: h'-1_(~^:)t\                     / print
        r: {{$[^y;x;c[h y;x]o t y]}[0N;x]}  / reverse

~~~
titanomachy
And it was not, by the way, invented by Ursula K Leguin. I checked.

------
urs2102
This was incredible. You should actually write posts like this constantly; it
made me burst out laughing at work.

------
jbgreer
I should have been a pair of ragged claws Scuttling across the floors of
silent seas.

~~~
qntty
Too sentimental

------
CoolGuySteve
Meta: I've noticed over the past few weeks that any post that is critical of
whiteboard interviewing has the highest points/hour of anything on the front
page but is almost never at the top and usually slips away quickly.

This post included, it's currently at #11 but is clearly more popular than the
10 above it.

What's up with that? Why is this obviously popular subject on hiring practices
(which I would think is prime HN material) being effectively censored?

~~~
sbierwagen
Stories with lots of comments are rank-penalized. "Whiteboard coding is bad"
submissions attract a lot of "me too" comments and quickly fall off the first
page.

~~~
krapp
It seems counterintuitive for a forum to want to penalize threads that
actually get traction.

~~~
chis
I think part of the problem is that everyone that comments then upvotes. Same
as askreddit, for instance. Plus I wouldn't be surprised if these are manually
pushed out of the top, there's like one a week and the mods must be getting
sick of it

~~~
krapp
It seems to me that they may be trying too hard to intuit the quality of a
thread based on behaviors which don't explicitly indicate it. I think that the
only behaviors that should push a thread down are downvotes and flags, not
upvoting and/or commenting in the wrong order, or only doing one but not the
other.

~~~
sbierwagen
You can't downvote a submission.

Moderately sure that comment threads on a submission are strictly ordered by
score.

~~~
krapp
You can indirectly downvote a submission by downvoting the comments, or
(apparently) by not upvoting them.

------
startupdiscuss
I like the style, but I felt as though I only caught a third of the references
(technical and literary).

Was the naming thing a reference to William Gibson, or Rumpelstilskin? Is
there really a language named after Le Guin? What other references did I miss?

~~~
100k
In Le Guin's Earthsea series, magic is based on knowing the "true name" of a
thing (this gives the wizard/witch power over it). The K language
([https://en.wikipedia.org/wiki/K_(programming_language)](https://en.wikipedia.org/wiki/K_\(programming_language\)))
is famously impenetrable to read but is not named after Le Guin as far as I
know.

~~~
spoiler
> In Le Guin's Earthsea series, magic is based on knowing the "true name" of a
> thing

This is a common thing among many fantasy fiction works, so it's hard to tell
what inspired it; might not be Eartsea.

~~~
100k
It comes from ancient folklore (see
[https://en.wikipedia.org/wiki/True_name](https://en.wikipedia.org/wiki/True_name)).
I mention Earthsea here because Aphyr is referencing Ursula K. Le Guin
specifically.

------
thearn4
This reminds me of a 4chan greentext story, but I can't seem to put my finger
on which one.

------
__debugger__
I find this style of writing quite playfully elegant. Anyone knows where I can
read similar stuff (books, blogs, etc.)?

~~~
vaibhavsagar
This reminded me of Hao Lian's writing, e.g.
[http://blog.fogcreek.com/fparsec/](http://blog.fogcreek.com/fparsec/). He
blogs at [http://hao.codes/](http://hao.codes/)

~~~
krallja
H.A.P.'s F# code is still parsing Kiln searches to this day.

------
ryandvm
That was the best thing I've read in a week.

------
cgag
"“To know a thing is to name it,” you advise. True names have power. The K
language was invented by Ursula K. Le Guin, and is among the oldest and
tersest forms of magic."

Beautiful.

I think the first time I learned the value of knowing the true names of things
was here:

[https://www.youtube.com/watch?v=dlbMuv-
jix8#t=12m54s](https://www.youtube.com/watch?v=dlbMuv-jix8#t=12m54s)

before I studied it in depth reading Rothfuss.

------
gravypod
This was so amazing I actually had to start up an interpreter and write my own
implementation. This was extremely fun and it blew my mind. It's one of those
obvious things that's only obvious after you see it. Others are calling for
you to write more of these and I definetly feel the same.

If I could se a new one of these every week and play along in the terminal I'd
have a a lot of fun (all in the name of learning to!).

~~~
abecedarius
For extra fun, now do it without if! Just functions and calling them.

------
SubuSS
Some background: I have had 3 jobs (not including assistantships) till now -
two were at the big companies mentioned below (MS/Amzn) and currently am at
Snap for the past year or so. Before joining Snap I did interview around and
had offers from the likes of FB/Twitter/Oracle as well - So I guess I have
relevant and recent points here.

\- Almost all the interviews followed the same pattern maligned a lot in HN.

\- Almost in every one of those loops, I felt like my current experience
building storage systems and replication wasn't examined very well.

\- I had many other informationals where the company felt completely borgish
(no one knew what the other parts were doing), where the recruiters were
clueless, where they were trying to undercut me by 50% or so(We have the
smartest!), under level me (We always under level outside hires!), where they
had no real reason to hire me (We are always looking for smart people!), where
they were just trying to prove that they are smarter and so on. All this when
I had 5 odd offers in hand and actually told them that to see if they would
have a productive conversation rather than wasting everyone's time.

But I do have different takeaways from these though:

\- For every guy like me, there are a lot of other folk who can probably spend
the whole hour with you and make you leave ambivalent. You will never know
whether you hired him because you liked him or because of his skills.

\- An actual (even a flawed one) datapoint is better than nothing.

\- If the guys interviewing me are anything like me, They probably spend 5-10
hours a week on interviews already. This means custom tuning a process for
each candidate is exorbitantly hard. I mean we do look at resumes and try to
calibrate what we expect from a given candidate and we do assign certain folk
to get information about their current positions - but a completely
personalized loop is still in the zone of people who have been the top 1% of
any company. If you aren't there, you gotta expect the rote process.

\- I don't have a week to fully dedicate to each company. I currently have a
hard job - and I prefer to prepare for a generic process rather than custom
one.

\- It isn't really hard to prepare for this anyway: In fact the rote process
makes it so much easier. There are set concepts and websites. I built my own
list, filled them in with actual notes, practiced a 100 problems to get into
the mode and was in.

\- At the end of the day, all these companies have great people in great teams
solving great problems. It is very very hard to distinguish one from the
other, There is a very high chance you will end up doing very similar work for
one or other. So now the distinguishing factors become something else.

\- The recruiters in general are just trying to meet a quota.

------
alanfranzoni
Interviewing may be broken... but this is pure trolling, after all :-)

------
YZF
Wow! Is this a reply to yesterday's discussion about white boarding?

The Python list should have printed out [0, 1, 2] ... so (print "[") and
(print ", ") ... Maybe that's why we didn't get invited to the next interview
:)

For a moment there I thought some Python in Lisp thing was going to get pulled
out of the hat.

------
doc_gunthrop
Since some people have been bringing it up in this discussion, the K language
was developed by Arthur Whitney[1], not Ursula Le Guin.

1:
[https://en.wikipedia.org/wiki/K_(programming_language)](https://en.wikipedia.org/wiki/K_\(programming_language\))

------
devnonymous
Umm forget about the content, I got hooked in the first paragraph itself on
the style! Not many put effort into writing these days. The flavour of that
phrasing was pleasing enough for me to come back and write this.

/me heads back to read the rest.

------
ggggtez
Doesn't look like a linked list to me... Looks like an array.

~~~
decebalus1
What about an array of tuples where each tuple stores something and a
reference to an index in the array? How about a dictionary? Can you implement
a linked list using a dictionary? Everything can be a linked list if you try
hard enough.

~~~
gpderetta
>an array of tuples where each tuple stores something and a reference to an
index in the array?

That's not​ trying hard enough. That's litterally the definition of a cons
cell. (The array is simply raw memory and the index is a pointer)

------
mring33621
I read it and didn't get it, initially. What was the point?

Then I read it a couple more times, while googling for what I didn't
understand. After, I agreed with the praise.

I learned something.

------
Jemmeh
So many references. I'm sure I'm missing some, but that was great. I'm most
happy about the cloud-pine at the end. :D

------
skMed
Someone has been reading Rothfuss.

------
lorenzop
i don't know who you are but it feels like i've known you forever

------
blub
Interviewing is not exactly top priority in a company. Sure, management will
say that it is, but projects will in fact have priority, so it tends to be
neglected and just grows into a series of decisions based on personal
experience, internet stories and "best practices".

It really takes a lot of effort to be a competent interviewer. One needs
engineering skills, but also soft skills, empathy, teaching skills. Doing
interviews doesn't count in one's performance evaluation, especially given
that it's almost impossible to figure out whether an interview was performed
in a good or just average way, so for the typical engineer it's a PITA with no
upsides. Candidates will be treated respectfully, but the process is what it
is. There are no incentives to improve it, especially for companies that are
in demand.

Just so you get an idea how hard it is to manage hiring, when we came up with
our interview process we more or less had to do the following:

1\. Selected a group of competent developers with interviewing experience.
They were then responsible for the whole technical side of interviewing.

2\. Convinced management to offer support for the initiative.

3\. Evaluated multiple options on how to structure the interview and chose one
(e.g. phone + several face to face).

4\. Prepared guidelines on how to behave, overcome typical biases, evaluate
candidates.

5\. Prepared a pool of exercises.

6\. Added verification steps to make sure that nothing went wrong in the phone
interviews.

7\. Ensured that there was always a mix of experienced vs. unexperienced
interviewers in face to face interviews.

8\. Set out some rules for offering feedback to interviewers after face to
face interviews. I have to confess that this never really worked properly.
Offering negative feedback is particularly difficult.

9\. Checked all of the above with management and implemented.

Then we had to adjust based on practice:

* added guidelines on special situations such as timezone differences, interviewer mistakes, insufficient information gathered during the interview, replacements, interview preparation, offering feedback, offensive remarks, etc.

* scheduled weekly review rounds for all phone interviews _and_ made sure that people took part and took things seriously

* tinkered a lot with the candidate funnel to ensure that interviewers aren't swamped by inadequate candidates but also that we don't miss competent candidates with unusual applications

* balanced between growth goals visible as management pressure to hire and ensuring that the process stayed true to its goal to demand certain technical standards from the candidates

* experimented with various ideas such as homework, different interview structures, laptop vs whiteboard vs paper, access vs no access to docs, etc

* made sure that office management personnel understood the above and was able to work with the process.

When you think about it, this was "just" a typical phone + face to face
interview, not rocket science. And the description covered only the technical
part, there was also HR, sponsoring conferences and job postings, managing
invitations and organizing the appointments, expenses reimbursement, preparing
reports for management, etc.

Such an interview method is not typically designed to find what's unique about
each candidate and allow them to best express their individuality. It's a
machine designed to answer to answer the question of whether someone is
(probably) able to work productively in the organization.

The process starts decaying the moment it's not supervised. People come up
with brilliant ideas about what could be improved (let's ask candidates to
solve problems from programming competitions!), don't stick to the reviews,
reuse leaked exercises, become too lenient or too harsh, don't prepare, etc.

------
venantius
Absolutely delightful.

------
djhworld
Bravo, great read!

------
hellomellow
This was awesome!

------
nice_byte
Wow so all the stereotypes about lisp programmers are true after all

~~~
nolemurs
Every few months I think to myself "maybe I should learn Lisp," but then I see
things like this, and my suspicion that Lisp has been fetishized beyond all
reason starts seeming more likely, and I decide to put that exercise off a
while more.

At this point, I suspect I'm never going to choose to learn Lisp.

~~~
draw_down
I think it's worth learning. But the idea that it's some glorious font of
enlightenment? To paraphrase Frank Zappa, _pheeeeeeuw_.

~~~
nolemurs
One of the things that slows me down is that whenever I see Lisp code, my mind
goes to the equivalent Haskell code, and the comparison is basically never
favorable.

I'm a firm believer in the value of learning a functional language, and I
totally understand that from a historical perspective Lisp is important, but
does it really have much to recommend it over modern functional langauges?

~~~
AnimalMuppet
You can write functional code in Lisp. But Lisp isn't really a functional
language. That is, you have to kind of fight the language to write non-
functional code in Haskell. In Lisp, you don't.

So if you learn Lisp, you learn a language that transcends programming style.
It's much more universal than Haskell.

~~~
platz
if you learn Lisp, you very quickly learn to lean heavily on macros, which is
very much a programming style.

------
draw_down
More "Python dummies can't understand lisp". Harrumph.

~~~
omginternets
I'm (still) one of them :'(

Any recommendations for getting starting?

~~~
vitohuang
Read this and you will understand more

[http://www.braveclojure.com/clojure-for-the-brave-and-
true/](http://www.braveclojure.com/clojure-for-the-brave-and-true/)

------
nolepointer
Interesting, um, LinkedIn profile this guy has:
[https://www.linkedin.com/in/aphyr](https://www.linkedin.com/in/aphyr)

------
aanm1988
> cite a lack of culture fit

Yeah, because you come off as completely nuts. Oh, and an asshole since you
chose a language the interviewer didn't know then refused to answer basic
questions.

