Resume screening is very effective when done by someone who is intelligent. The tech industry refuses to take hiring seriously and apply such people to the problem.
I second that. It's not necessary about "lying", many candidates may drop a keyword as something they know, when really they have only heard about it instead of mastering it.
Some people also under-rate their skills, because they are very demanding to themselves (the bad ones don't know "sort" and want to re-implement their own sorting method in Python).
I pre-screen using practical problems that I have to solve every day, and when candidates know their UNIX shell commands that's usually a really good sign.
I think the point of GP comment to yours is that by reading resumes skillfully -- that is, between the lines -- and comparing with other factors (e.g. their portfolio) it's pretty easy to tell the "probably solid" from the keyword-stuffers and buzzword droppers.
By "probably solid" I don't mean "immediate hire" but rather "It's a safe bet this person isn't utterly incompetent and I won't be wasting 10 minutes of my time talking to them."
I do not think it is possible to weed out all or even most of the completely incompetent programmers on the basis of resume screening. My reasoning is, I frequently conduct technical interviews, and a good percentage of those are with candidates lacking basic coding skills, and many of those candidates have impressively written resumes.
I would reckon (based on my own observation, combined with some research that has come out recently -- see below) that "a good percentage of this good percentage" probably failed due to nervousness, rather than than truly lacking basic coding skills.
If they failed your test -- you just know they failed your test. That doesn't mean you now that they're incompetent.
It is absolutely true that a good percentage of my candidates fail due to stress. As an interviewer do everything you can to decrease the level of stress, but there's no way to eliminate it. I often note, in interview feedback, my subjective belief that the candidate's poor performance is likely to have been a fluke due to the particularities of interview conditions. But in addition to candidates who make errors under pressure, there are many candidates who are unable to perform very, very basic tasks. There are many candidates, for example, who mess up basic syntax; who adopt bizarre naming conventions which suggest a complete unfamiliarity with functioning codebases; who confidently propose solutions which make zero sense, and are unable to answer basic questions about those solutions, but simultaneously are unaware that they are not answering the questions you pose. Many of these candidates have sterling resumes. At a certain point, you realize that resumes are not a good predictor of performance.
What is your bar for “terrible”? Resumes are a demonstration of written communication skill — they should at least be competent at expressing certain basic things about the candidate. An underwhelming list of accomplishments or lack of significant prior experience need not be showstoppers, of course.
I frequently administer technical interviews. For candidates who have passed an initial recruiter screen, I have ascertained no correlation between resume quality and code production. Many, many candidates with extremely impressive resumes are unable to produce basic, working code.
I've also talked to people with terrible resumes who turn out to be great. They are just bad at resumes.