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".<p>Push: You learn from books, classes, mentors, and studying examples, then apply what you have learned.<p>Pull: You have a problem that you must solve, then you learn what you need, any way you can, to build the solution.<p>I suppose there are pros and cons of each method, and I imagine that many people here have used some of both.<p>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.<p>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 <i>something</i>.  And (c) It's easier than ever to adopt a "pull" approach.  Help is everywhere.<p>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.