The first thing to do is to make sure the person can write "Hello, world" (or something slightly different but equally trivial, like reading a line of input and reversing it) in the language of their choice. You'd be surprised at the number of people this filters out.
Then, ask them to do something slightly more difficult, like traversing a tree data structure or reversing a linked list. Again, you'd be surprised at how many cannot manage this.
If they don't automatically write a unit test when writing the code to solve these problems (which is OK, since I don't expect everyone to think of that while in an interview setting), then I would ask them to write some unit tests for these. If they don't know what a unit test is or don't know how to use any unit test framework in the given language, I presume they have not done much in the way of serious software engineering in that language.
Conceptual questions are some of the worst kind. Someone can have some vague concept of object orientation or UML and be able to answer your conceptual questions, and not know anything about actual programming.