Or given the same codebase have them add a feature and some form of testing.
There are many ways to simulate in a highly compressed manner the typical tasks of a programmer without resorting to algorithmic puzzles.
Often, you aren't supposed to write a big thing at once, but you are given some partially working code, with some incomplete set of test cases. You then have to finish the implementation, and you are also encouraged to add more test cases.
I found it especially interesting that the test cases were incomplete on purpose - you are supposed to understand and solve the given task, not just to blindly write some code that happens to pass a given set of tests.
It doesn't mean you shouldn't assess the candidate's technical skills.
Another way of looking at it is that "finding the right word" often means find the good "fit" between abstract concepts shapes or feelings, and a construct of known language items. That's precisely what you're doing as a developer.
But it is an assumption indeed... Only it is based on my personnal experience.
As for the comment mentionning google developpers, the ones i see are good enough verbally to talk about their jobs at google i/o.
See https://news.ycombinator.com/item?id=5911235
Mathematicians perform very well on programming contests, but they are usually terrible software engineers.
Anyways, I was just kidding :)
The former (e.g. a data scientist) will be good solving a problem but bad building a big architecture. The latter, the other way around.
I guess the question is which kind of programmer you are and which skills to look for.
But when i do, it's in front of computer, and i'm sitting right next to the candidate while he taps, to see his line of reasoning. Then, if he's in trouble, we talk about it, i give him hints, and see if he understand what i'm saying and fix the code.