There's nothing intrinsically meaningful about your CS grades, so let's not interrogate those.
You're too young to have anything "completely destroyed" by a GPA and a couple bad interviews.
Also, you should definitely know what a semaphore is. Write some threaded Python code to get a feel for concurrency.
And don't think of the future too much! Opportunities are always everywhere, guaranteed :) (now need to repeat all this to myself)
Careful, HN is drug to many of us coders, proof is in the account settings with the maxvistis and mintimeaway settings.
edit: also there's always QA
Usually marketing/advertising oriented. Make promo sites, web games, iOS apps, facebook campaigns, etc.
There is a huge difference between classroom learning and independent learning. You absorb the information at a lot higher rate when you are passionate about what you are learning about.
Next, take a look at today's Zen Habits -- http://zenhabits.net/failed/. It can help you set perspective regarding what you've gone through. Money quote: "Someone once said there isn’t failure, only feedback. That means the failure is just a point of information, a part of the learning process. I like to say, it’s not a failure of me as a person, just a failure of my method. Which means I need to change my method."
Take some time (minutes, hours, or days) to identify the intersection of what you like and what you've excelled at. I find I like what I'm good at, so beware that bias.
Are you good at translating tech -> normal people speak? Possibly look to work in consulting.
Were you good at making sales, but bad at the paperwork? Try to develop your own system to get better at the paperwork.
Try to look objectively (meaning without judgement) at your past. What have you learned from your experience? I can promise you, you're not the first person to barely pass a tough CS program, nor will you be the last to get fired for sloppy paperwork. You'll be OK -- in fact, now is the perfect time for you to take your first step in your new direction.
If you need a job right away, I would suggest trying to get a position in any industry that will pay you. Learn the ropes in that industry for a little time while you get stability. You will be a technical wizard in whatever you do, if it involves technology. Once you learn an industry, and gain a little confidence in your capabilities, take a shot at combining your technical abilities with the industry.
Manufacturing, as a for example, relies entirely on technology that is run by people who have very little idea about how to use technology.
And relax. You have a world of options in front of you; they're hard to see because of all the pressure, but they exist.
Be well, monkeyspaw
If you can find things that need implementing them and do it and they're useful, work will come.
When interviewing for a job, showing that you can:
- identify problem spaces - review the tools - find a need for a better tool - spec - and implement it
Is what I look for when hiring geeks.
So my recommendation...
Find problems, build solutions (even if small and tool-like), get out and socialize at meetups and geek fora in your city and confidence should come.
Realize one thing, you are your biggest investor, if you don't invest in your self (the time in your own passion), then no one else will.
Not to appear overly optimistic, but there is alot of money and opportunity out there...put your name on it.
If this ^ link works, I excluded the sales portion. My cv is a bit embellished, the courses I barely passed were algorithms, real analysis, graph theory, number theory, and a statistics class. I couldn't follow the teacher's talking and reading was difficult. I have talked with several hedge funds in my area who shot me down, a couple startups who shot me down, and microsoft. The gpa was looked at, algorithms was the most crucial thing I missed.