From the outside looking in, it certainly doesn't seem like everyone is eager to snatch up mediocre graduates. I can't say I've done much research on the subject or crunched numbers, but I noticed two things:
1) Complaints about "talent shortages" from top companies and startups in the Valley and otherwise.
2) Companies evaluating people based on experience, GitHub profiles, open source contributions, etc.
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.
This is basically my scenario. Got the BS in CS by rushing my degree, but getting into FOSS is proving harder than I would expect, mainly because every project has "some" technology, from automake to some framework like qt or something else that I never learned and thus feel helpless trying to get into, especially on anything with more than 200k LOCs. Getting into something like that is getting through a brick wall with a twig.
The tech field is like that. Work won't be any easier. In fact, expect major libraries and build tools that are internal to a large organization to be less elegant and documented. Learning stuff like that quickly is a skill you're going to need.
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.
Actually the trick is to choose the project that uses technology you already know. If you know Java better than C++, contribute to Java projects. At least at first, do not choose FOSS projects to contribute based on how impressive it would look.
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.