How seriously should I interpret requirements for programming jobs?
But I don't consider myself a strong programmer. As a young soon-to-be graduate, I have big gaps in my software know-how. I've never worked on large-scale projects. I've never programmed on a team. I've never done unit testing. I've never used version control except a tiny bit of GitHub. I'm not experienced in a UNIX shell. I can't explain how TCP/IP works. And I'm not an expert in any language.
All I have going for me is that I'm smart, I've done well in my programming classes (algorithms, assembly, C, machine learning), I've placed highly in a couple of programming competitions, and I've built a few small projects for fun.
I guess I'm wondering:
(1) If companies like Facebook only want strong programmers with years of problem solving experience, should I just admit they're out of my reach for now and shoot lower?
(2) Or am I taking their job requirements too seriously and disqualifying myself unnecessarily? I've heard the possibly untrue claim that men tend to apply when they meet just 60% of the requirements.
(3) Also, how can I get a better sense of whether I'm a 'strong programmer' or not? I'm surrounded by a non-representative community of programmers, so I'm aware my self-evaluation may be way off.
(4) I thought that starting a software internship might teach me some of the skills I lack, but from looking at Google and other companies, they only accept students who are returning to school in the fall. Are there other opportunities where I could get exposure to working on large projects with large teams? I feel this is my biggest weakness as a candidate.
Thanks for listening to the ignorance and insecurities of a fledgling programmer. I will appreciate any advice you can spare.