I'm a compSci major at a good compSci school, and while I've been taking classes and going through the motions of being a student, I feel like technically, I don't know very much.
I know Java from what we do in class, but that's about it. I feel like I can't really create a product or provide valuable skills/service from what I am learning in school.
How can I change this, and what tips, advice, etc would you give to someone like me? Is this normal? Can someone who has gotten a CS degree elaborate on this?
Also, why don't CS degrees teach you much technical skills? Seems more theory than anything else!
Because the theory lasts a heck of a lot longer than the technical skills. They're giving you the tools to learn anything rather than teach you something.
>How can I change this, and what tips, advice, etc would you give to someone like me?
>Is this normal? Can someone who has gotten a CS degree elaborate on this?
Build something, get an internship, or freelance. I know that a couple of people at my school would subcontract to other guys as they were trying to launch products. A couple of disclaimers on that. 1) Everyone at school thinks that ideas are worth $ and will try to steal it from you rather than work with you if you ask the wrong person. 2) If you have an idea rather than a problem you're not going to be making money off of it, but it still might be good experience if you did it as an open source program or something.
What I ended up doing was helping to build a webapp at work, and my senior design was a webapp. Senior design was much more rigid in terms of agile methodologies and spec writing. Additionally, a friend of mine had hired me to write some scripts for him to automate some of his business tasks. I earned enough money out of a couple of projects to mostly finance a Macbook. My friend worked with me and had me write a proposal for every project before I started so that was good practice as well.
It's good that you at least recognize this and are thinking about doing something. I echo the others in regards to building things in order to learn. Keep doing this. Make it a priority. Classwork will provide some educational value to a point. Do enough of it to maintain decent grades and get the educational value (the theory by design). However, make the time to work on your personal stuff every week even if just a little bit. I'd even go as far as sacrificing some school assignments if you want to do your personal stuff.
Java is used a lot out in the real world so it's not bad to know it. I work for a late-stage startup that makes money and runs on Java. Look at Android and a lot of server-side web stuff that the big players use. If you know Java, you can start building bigger things. Look at the Play! Framework (playframework.org) for building web applications. Learn some basic HTML, JS, and CSS for the client side (I recommend w3schools.com). Deploy to Heroku so you can publish it the world (http://devcenter.heroku.com/articles/play). Now you have a product.
Get internships and/or co-ops. Get exposed to the world outside of the classroom for the applied skills. Those can be effective opportunities to bridge the gap. Your personal projects will be valuable in getting these opportunities.
If you want to understand the value of the college courses to the applied world, ask your professors about how the course content solves real-world problems.
The other direction you could go is implementing algorithms in various languages as a sort of mental workout, but that's a lot less fun.
I remember my degree being quite technical really, I mean we had to program Pascal and C.
"I feel like I can't really create a product or provide valuable skills/service from what I am learning in school."
Why not ?
Good luck, I know you can do it :)
Because its a good CS school. CS is about the mathematics of computation, not about the computers. Technology is an implementation detail. ;) (It's an ivory tower academic course, not a course intended to help people start businesses).
You can find Dijkstra's notes online and they're all handwritten, for example.
How can I change this
Study and practice whatever it is you specifically want to get better at, I guess, be that database administration or dealing with small business taxes, taking payments or whatever.