I'm graduating with a CS degree but I don't feel like I know how to program
I believe that there are two ways to get good at anything, "push" and "pull".Push: You learn from books, classes, mentors, and studying examples, then apply what you have learned.Pull: You have a problem that you must solve, then you learn what you need, any way you can, to build the solution.I suppose there are pros and cons of each method, and I imagine that many people here have used some of both.For the record, I am 100% Pull.  I have absolutely no formal training.  It took me 2 years to find my first job and then I was thrown into the deep end.  It was simultaneously frustrating and exhilarating.  There were so many times I didn't know what to do or didn't have enough "tools" in my box.  So I had to figure it out and find sources of learning.  But I always did.  Any when I got that first thing working and then saw my customer's eyes light up, I was hooked.Your CS degree may make you think that you're a "push" learner, but may I suggest that you adopt a "pull" approach.  Forget what you think you know and find a job or a project or someone who has a real need.  Then build what you need.  You a several advantages over me:  (a) It shouldn't take you long to find that job/demand/customer.  Just keep looking.  (b) You already have tools in your tool box, maybe not the right ones for the job, but you have something.  And (c) It's easier than ever to adopt a "pull" approach.  Help is everywhere.You may feel frustrated, but I don't think you have a problem at all.  You're in a great (and very normal) situation.  Just adjust you attitude, find something to build, and do it.