Hacker News new | ask | show | jobs
by amitutk 3284 days ago
YES! for the first 2 questions. My go to question is reverse an array (without using any library functions).

Instead of asking a quirky question, it is better to have them solve a simple problem and judge on logic and structure.

2 comments

> My go to question is reverse an array (without using any library functions).

If you mean “functions provided by a library outside of the core” there are languages where this restriction doesn't prevent the kind of trivial solution you are trying to prevent.

If you mean “any predefined functions/methods” there are languages where this is impossible (e.g., since even literal array syntax is just syntactic sugar for the Array constructor method.)

Note that there are several languages that fall into both categories (e.g., Ruby.)

There are probably a very narrow slice of languages where this restriction, however you define it, really does what you intend.

Why can't you use libraries? You're rewarding people for reinventing the wheel.
At some point, you need to decide what you're going to ask something to build in an interview. It's probably been implemented before.

Yes, reversing an array is arguably lower level than an application engineer needs to go - but not by much (in some languages you will be doing this yourself). And if they can do that, they can do something comparably difficult.

Why not choose a problem more representative of the job and business domain?

One that demonstrates their ability to write clean, testable, readable OO code, with appropriate abstractions, and not overengineered.

I find most candidates, struggle to do this, including algo wizards. Most software engineers aren't good at this either.

Because reversing an array is super easy and using a library is one function call
> Because reversing an array is super easy and using a library is one function call

It's not super easy without using library functions when all the operations that work on arrays (including the constructor that makes them) are as much “library functions” as the one that reverses an array. (Conversely, if the mechanism that reverses an array is part of the language core and not a library, the restriction fails to have the expected effect from the other side.)

The restrictions seem to assume that every language has the same division of distinct core “language” features as distinct from what is provided by libraries.

Writing the following does not use any libraries

a = [0, 1, 2]

print a[1]

That's just how arrays work. If your elements are 32 bit integers then you are establishing a pointer to the first element. Accessing an element is multiplying the index by the element size and jumping from the first element pointer to a memory address offset.

> The restrictions seem to assume that every language has the same division of distinct core “language”

Fine, if your language has a library for arrays, then reimplement it on the whiteboard. Everyone is able to do that if they know what arrays are. They are just contiguous memory

Because in many languages, this is trivial to the level of calling .reverse() on the array.
In which case, the question isn't really relevant to the job. Same goes for stuff like sorting algos. Why not pose problems more representative of the job and business domain?
Sure, but in some of the popular languages where that is the case, .reverse() is no more (and no less) a “library feature” than creating or indexing an Array.