Speaking on behalf of software engineers who have to interview prospective new hires, I can safely say that we're tired of talking to candidates who can't program their way out of a paper bag. If you can successfully write a loop that goes from 1 to 10 in every language on your resume, can do simple arithmetic without a calculator, and can use recursion to solve a real problem, you're already ahead of the pack!
1. Employers look for people who are Smart and Get Things DoneHow can employers tell who gets things done? They go on your past record. Hence:
2. Employers look for people who Have Already Done ThingsOr, as I was told once when I failed an interview:
3. You can't get a job doing something you haven't done before(I was interviewing at HAL Computers for a hardware design job, and they asked me to implement a four-bit adder. I'd designed lots of things using discrete logic, but I'd always let the CPU do the math, so I didn't know offhand. Then they asked me how to simulate a digital circuit quickly. I'd been using Verilog, so I talked about event simulation. The interviewer reminded me about RTL simulation, and then gently said the line I quoted above. I'll never forget it.)
Finally, you may even find that
4. Employers Google your name to see what you've said and done
Malcolm Gladwell wrote in Outliers,
... Ten thousand hours of practice is required to achieve the level of mastery associated with being a world-class expert -- in anything.Seems about right to me. I don't know how many hours it takes to achieve the level of mastery required to program well enough to do a good job, but I bet it's something like 500. (I think I had been programming or doing digital logic in one way or another for about 500 hours before my Dad started giving me little programming jobs in high school. During my five years of college, I racked up something like several hundred hours programming for fun, several hundred more in CS/EE lab courses, and about two thousand on paid summer jobs.)
Whether or not you're in college, nothing is stopping you from contributing to an existing Open Source project. One good way to start is to add unit or regression tests; nearly all projects need them, but few projects have a good set of them, so your efforts will be greatly appreciated.
I suggest starting by adding a conformance test to the Wine project. That's great because it gives you exposure to programming both in Linux and in Windows. Also, it's something that can be done without a huge investment of time; roughly 40 work hours should be enough for you to come up to speed, write a simple test, post it, address the feedback from the Wine developers, and repeat the last two steps until your code is accepted.
One nice benefit of getting code into an Open Source project is that when prospective employers Google you, they'll see your code, and they'll see that it is in use by thousands of people, which is always good for your reputation.
Here's another good quick reality check, one closer to my heart.