I wish I could have just gotten 4 years of that newbie experience under my belt instead of spending it on a degree who's only real worth today is to get you that newbie job to begin with.
Sorry to hear that, but we get what we put in. The only way to get some expertise under the belt before graduation is by doing internships if possible, or work in computer labs as a second option. And by working in computer labs I don't mean showing students how to eject the CD drive but doing actual administration and setup (and luckily sysadmin programming/scripting.) The other option is to get an AA/AS degree, then get a job (even if only a data entry/report generating one) while doing the remaining junior and senior year at a 4-year college. With that path, it is almost certain to accumulate 1-2 years of programming experience...
... but most importantly, it allows to create professional networks.
Some anecdotal stories for shits and giggles... When I was in community college, I did everything I could to get a "computer" job. I was working at Home Depot at the time (selling floor/tile stuff and driving forklifts). I pestered management to gave me a job at the store data center (where they ran these old mini-computers and stuff.) Management tried, but there was never an opening. Later I got a part-time job at the comm.college computer lab, setting up software while tutoring and assisting teaching intro-to-micro courses, Pascal, Assembly, C and DBase. First connection was my Pascal professor with whom I got another part-time job doing Visual Basic programming... now I'm programming while getting paid!!!!
Next connection came from another professor with whom I was taking Delphi and Expert Systems programming. Through his class I get to meet a senior developer at one large insurance firm in my city (one of the largest in the country at the time). When I got my AA, he took me under his wing and got a job developing applications with FoxPro (we were doing the transition from procedural to object-oriented programming back then.) I did that while doing my junior and senior year in CS. On my last year, through another connection, I got a part-time job at the computer science department, doing Unix administration. I left my full-time FoxPro job to concentrate on the last 6 months of my senior year while working on that Unix admin job.
I graduated with my BS degree (and 3 years of programming experience already). Through another connection I made with school and work, I got a research job at a research center (distributed systems, formal methods and security were the focus of research). So as I'm plowing my way through the MS program and doing a lot of really good shit in C and C++, network protocol programming, distributed systems and the like, we started working with Java and CORBA...
and alas, through yet, another connection with the research center, I met a group of developers funding a start-up company that was heavy on Java and CORBA. Off I went to my full-time Java development job. 3 years of programming experience and 2 years of research with immediate industrial application sponsored by people doing that for a living. Just a year and a half after graduating with a BS degree and right in the middle of my masters.
After that job, I've had many others, many of them thank exactly for the type of research I did (performance evaluation of distributed authentication systems to be precise.) From SQL and relational database theory to software engineering to network programing to algorithm/complexity theory, each had helped me in a real way in the real world.
My advice to people studying CS - work on your connections and pursue internships/college lab jobs. Many of my friends from college got really sweet jobs right off the bat because they did internships. We get from college what we put in.
Sure I learned some things doing my CS degree, but most of it could have been learned just as well through on the job experience in less than half the time.
Only if you are that naturally talented. I know I wasn't when I started. I don't even think I am. I simply plow my way. Any schmuck can learn how to put pieces together in a programming language and call it a delivered program just by putting the time with programming books (or cruising the CS curriculum.) It takes serious work and effort (or a rare natural talent) to put all the pieces together to program in a manner and style that doesn't suck, that it's maintainable and that it is efficient. Don't fool yourself into thinking that there is just coding in it. There is a lot more into this job, starting with a throughout understanding of modularity, Bohm/Jacobini's structured program theory and Jackson's Structured Programming, top-down decomposition, bottoms-up synthesis, object-orientation and composition, procedural programming (you can't truly get OO right off the bat without understanding procedural programming.)
I guess mileage might vary from one person to the next, but I cannot think of one single undergrad or grad course that hasn't helped me substantially and practically *in the real world*. Actually, I take that back. The only course I can think of that hasn't had a direct impact was a graduate course in semantics of programming languages. After that, all others, even the theoretical courses have helped me. And it is not as if I do rocket science crap. A substantial amount of my work has been plain ol' enterprisey stuff.
Formal education is not supposed to turn you into a rock start. But it should provide you with the mental tools to start from zero, and help you evolve from code monkey to developer to engineer to architect or team lead. 4 years of code monkey experience is simply 1 year of code monkeyism * 4. It's not 4 years of experience. A formal education helps you, if you put your mind to it, turn each year into a year that you can truly count as cumulative experience.
There are people out there that are awesome at software w/o a formal education. But they are far and few between. Unless your education really sucked, believe me, you are better off starting as a newbie with a degree than doing code monkey crap for 4 years thinking your code is actually good. We got too many of those leaving turds in legacy systems.
A lot of it was completely useless to my chosen career. But hey, that's the way the world works I guess. Shame I didn't know anyone who could score me a job in the field back then.
Mileage might vary from one person to another I guess.