My experience is the complete opposite of the other answers given here.
I am also self taught since 14 years old. By the time I graduated from school I was 17 and knew x86 assembly, C & C++. I had fully read the Intel architecture manuals, and I had completed small projects, one of which I posted on Sourceforge and I learnt the fundamentals that would help me years later with vertex shaders (it was a library that did vertex TnL transforms in assembly); and other small apps, from a simple program that enumerated all processes and allowed you to change its window position and size (even if the original program didn't allow you to), to a full blown image viewer (which sadly I never released) that dealt with a lot of image formats (BMP, JPG, PNG, TGA, GIF, TIFF, DDS) back in a time where image viewer struggled to support them all, and this program in particular gave me a lot of useful tools that would later help me with pixel shaders because I had developer lots of screen space filters back then in C.
But I didn't pursue a CS course. Programming to me was a hobby. I did it for fun, and I felt doing it professionally would end up like those NBA players that started out having fun playing basket and ended up with stressful professional careers where money was everything.
I ended up studying accountancy. Luckily, here accountancy is a very thorough career. There was a lot of math & statistics mandatory courses that helped me with programming. I learnt:
- Limits
- Derivatives
- Integration
- Definite Integration
- Cauchi theorem
- Taylor series, Maclaurin series
- Matrices
- Probability theory
- Combinatorics
- Bayes Theorem
- Binomial, Gauss, Poisson curves
- Chi Squared test
(note that in school I had already seen stuff like conics & solving polynomials via Ruffini rule)
So... I was really lucky. A lot of stuff needed in CS I learnt at Uni by studying something completely different (note that I never gave up being self-taught! btw I read every GDC and SIGGRAPH that came out for free every single year!). At some point while studying I got approached by a small startup (due to my increasing notoriety in open source communities and gamedev forums... that's how I built my portfolio) to work with them. Working alongside with very talented people allowed me to hone further my skills. I learnt a lot from them. And that's how I slowly started working professionally, getting more and more gigs; eventually getting NDAs with big companies and doing lots of contacts and getting good references. Turns out I was wrong, doing what you love and getting paid is great.
When I graduated I hung the degree on the wall, but I don't practice. Note however that this degree wasn't useless:
- As a freelancer, becoming an accountant helped me a lot with my own finances, as well as dealing with foreign commerce, banks, taxes, Law, and protecting my rights (and knowing my obligations!).
- Things like governments care a lot whether you have a degree.
- In the end I had the rare trait of both knowing finances and accountancy in depth, and programming in depth. I prefer working on multimedia stuff (3D, graphics, audio... games), but I have to admit the finance programming world is very profitable.
So what would you recommend? Doing the programming degree, that probably won't teach me much, or doing something else while building my portfolio? Or maybe I should get an internship somewhere? (if you happen to offer one, I'd happily agree to join). Look, guys, this post is not so that I can boast about how awesome my skills are. I just spent all these years on hard work and would really like to hear your opinions so that I don't have to go back in time and start all over again at uni, because that would really hurt.
That will happen whatever field you study. Back when I started accountancy everything was new to me and it was awesome. But by the time I was in my last years we tend to clash a lot of with the professors.
Some professors are awesome and know a lot, some may not know the answer to everything but accept student input.
But you know when you see a charlatan who somehow got his/her degree yet can't do anything better than teaching. And everything he/she says will always be always right (don't you dare prove them wrong!). You suffer a lot and can be very frustrating.
The only difference knowing programming beforehand is that this frustration will come in sooner. That's all. I had a friend who was studying CS at the same time I was doing accountancy, and we had this conversation:
- Hey man... in this question here the teacher corrected this last year's exam about the behavior of a C++ constructor. What do you think?
- Let me... <analyzes the question and the student's answer>. Nope, your teacher is wrong, the student was right.
- How's so... ?
- <I proceed to show him proof the teacher was wrong with code that denies her assertion using printf() inside constructors and custom operators in Clang, GCC, MSVC in both Release & Debug builds>
- No... it can't be... Are you... sure? but... but.... she corrected the student...
- <I look up the C++ standard, after a several minutes I find what I was looking for and point him the clause that proved the teacher wrong definitely>
- Oh man.... this sucks! You're right! But... well what should I do... mmm.... if the teacher corrected him, I guess I should write down what the teacher says it should happen.
- Yep, that's what we do when the teacher is a @!!###!@.
- Yeah, tell me about it
Same thing happened when a teacher told a friend OOP was perfect, it made everything better, should be obsessively aggressively applied everywhere, and would get angry if someone hinted otherwise. This friend contacted me because he really felt OOP couldn't be that good, and I had to show my friend talks from Mike Acton and the PS3's OOP pitfalls presentations which made him feel a lot better and less crazy.
But the thing is... I've had the same problems studying accountancy with specific issues to that field I won't share.
Something you need to learn this problem doesn't go away when you finish university. This same problem will come back as the form of employers telling you to do something that you know there is a better way or you disagree strongly. If you are your own employer, you will have clients that will try to impose you which language should you use and how to do your job (even if they don't know nothing about programming!!!). You learn to either walk away or smartly deal with them (i.e. find a way to show them you did things the way they want it, while behind the scenes it isn't really so. Keeping them happy). But remember that a client that is a problem isn't a client, it's a problem.
There's also awesome employers and awesome clients. Not everyone is bad. It just happens that one awful guy makes a bigger imprint on your memory than 4 great employers/clients in a row.
So... in the end, if you're going to study a different field, like frob said make sure the basics are still covered (algebra, calculus, combinatorics, statistics, algorithms) and look into something that would complement what you know. In my case I got Law & Business. But it could be as well medicine if you're into bioengineering (or... you know... the bioengineering career).