Anecdote: I like to think I can write fizzbuzz in a couple languages.
I have actually avoided HR. I've been too lazy to send out resumes, and I only really want to work at small startups (at least for now). All of the interesting offers I got had some concrete spark independent of my education: for example, I got one after doing well at a hackathon and another from an HN post (but largely thanks to my knowing Haskell and having some interesting projects on GitHub).
I think that if you don't mind not working for an established company, you will have to worry much less about your education (but, probably, more about your actual skills). Of course there are good startups and bad startups, but I've found the good ones to be very good not just from a technical standpoint but also from an employment standpoint.
Not that it's wrong to evaluate based on that criteria. However, for people like the hypothetical John it's quite hard to keep up with a good CS program and manage to do impressive things on the side. So you end up with people with strong potential, much of it not yet actualized, who spend the first years of their careers in a job of questionable usefulness (excel macros?). I think there are more of those people than commonly assumed, and I do think they can contribute well in much better places. They may be slow at first, but give them 6 months and they will be strong members of the team. Granted, a startup may not have 6 months to give, but once you've got some resources under your belt a green-but-talented engineer can be a great investment.
I don't have a lot of advice besides "practice".
Well, I do have some. Don't be afraid to open up the tool's source and read it. Try to design the tool yourself and you'll get a better sense of how it's likely to do things.
But mostly, practice.
However I ran into a bunch companies that did not know how to hire and I also found that the more successful the company was the better they were at the process, defiantly a correlation there.
I think our industry sets a high bar for "minimal competence". It isn't fizzbuzz. I went to an interview where I was asked to write, on the whiteboard, a recursive solution to the problem of printing all possible permutations of a string. I blew it, and of course I went home and worked on it a bit and solved it (the way I usually program, try it a bit, run it, modify, test, iterate), and I emailed them my solution, but that's how it goes: no offer. I want to be very clear about this, I am not complaining. This company has every right to decide what their interview process will be. But of course it irritates me to no end to hear about how there's a shortage of programmers beyond "minimal competence", especially when the people doing the hiring what to hire whip-smart engineers at roughly half the rate a top MBA or law grad would command.
I've had such discussions on this board with people about the the concept of a "shortage" at the "market rate" when everyone is experiencing hiring troubles at this rate. I think it's an absurd notion - if demand clearly exceeds supply, this is not evidence of a shortage, it is evidence that salaries need to rise to reach an equilibrium. All I can say is that some very intelligent and rational people simply disagree with me on this.
As a personal anecdote - I was in grad school at Berkeley during the first dot com boom, when industries were claiming a severe shortate of engineering graduates. I saw reports of average starting salaries out of the MBA program, the JD program, and the various MS/PhD engineering grads... not a single engineering degree program, even PhDs in CS, were at the MBA or JD level. Why is there so much resistance to paying engineers what it will actually take to get more top people into the field?
But Biglaw/MBA Consulting pay so much because the firms are oligopolies with gentlemen's agreements not to compete on price.
That's not going to happen in a field with mesurable results.
While there does seem to be some basis for questioning the data, I do think that the employment reports support the notion that the average starting salary for someone out of a "Top 5" law school greatly exceeds the pay for an MS or PhD grad of a top engineering school.
Is this something you'd disagree with? - ie., do you think that the job placement reports from the various grad schools at UC Berkeley and other top institutions are so unreliable that we can't draw general conclusions from the numbers?
I also completely agree with you about biglaw and consulting. Law actually does resemble a cartel in many ways, and oligopolies certainly exist in consulting and drive up pay. But to me, that's beside the point. If smart people can make gobs of money in other fields (never mind why, the important thing is that they can), why should we be surprised that they won't become programmers for 80K a year?
As far as I can tell, pretty much everybody graduating that wants a job gets a job. Naturally, not everybody goes to work for Google or Facebook, but this includes people even worse than the presumably hypothetical "John".
Also, people like "Norman" are just as likely to get snapped up by Google and then still work in relative obscurity. Well-paid, enjoyable relative obscurity with great benefits and a great culture, but relative obscurity nonetheless.
Really, the talent shortage works like this: you, as a company, would love a "Norman". You'd be happy with a "John". You'd probably be content with anybody who can program. Instead you get "Barry" who can't write a FizzBuzz program in any language. All this puts upward pressure on programmer salaries and benefits (good) and motivates recruiters to spam me about openings for senior Java developers (bad).
Also, a lot of companies do claim to want very good engineers. But I've found this to be empty rhetoric as often as not: for every company claiming that and actually having a stringent interview process and difficult technical problems there's a company willing to accept anybody to work on their CRUD app but wants their ad to sound cool.
Anyhow: there is some shortage of programmers of any but minimal competence. That is what "talent shortage" actually means, and, as far as I can tell, it's actually accurate.