I am of totally mixed feelings regarding this entire subject. I realized just the other day that I am coming up on my tenth year as a programmer, having started at 18.
I have conducted only a handful of interviews myself and I usually try and find out if the candidate actually likes programming. So I ask questions about what cool new things they learned recently, stuff they never used before, how it was used. What the last interesting chunk of code they wrote was, why it was cool, how it helped in their job. Stuff like that.
The thing that bothers me and has bothered me for a while, is that I probably couldn't answer any of the questions posted here. I don't remember how most internal compiler stuff works anymore. I don't ever have to do any complicated math so I wouldn't remember any of that. And I worked with 3-4 different languages on any given quarter.. so I usually need to refresh my memory on the exact syntax of certain things every time I started a new project.
Does this make me a non programming programmer?
By the definitions above it might.
I would say that finding out if someone has the mind for problem solving is definitely important.
Knowledge of concepts is also pretty key (control statements, loops, recursion, inheritance, things like that). (I've talked to someone that couldn't understand why having 2 else statements in 1 if statement was a problem before...)
In addition to that I definitely think you need people that actually like programming, people that write a function or solve a problem and fire off an email asking for a code review. People that actually brag to their peers about the sweet design they came up with to solve integration problems.
Lastly, people that know how to develop maintainable code. You can write all the super complex math functions you want, or you can tell me exactly what the compiler is doing with memory. But if you produce code / design that causes a cascade of bugs every time a revision is made or code that requires changes in 300 projects across 5 applications for the same revision, then no one is going to want to work on your code.
Things like that.
A bunch of the posters have hit the nail on the head. Like, when was the last time you connected to an SQL server database in C??? Have you ever tried without using a wrapped library? I would describe it as horrible and... gross feeling.
Alex at the daily wtf had some things to say about that a while back but I cant find the post. The point was that most of us write boring code, most of the IT world is employed to do boring things for banks and insurance companies.
So if you have heard the words "Oh, and we need it to have reporting!!" as many times as I have you really wont care too much about how all the lower level calls work, you will care more about how long its going to take you to write the code, how hard it will be to maintain for 10 years to come and how hard it will be to integrate with your other systems.