Comment Unorthodox approach... (Score 1) 297
Just my 2 cents....
1. Enter to a top college in either Electrical Engineering or Physics... or some other technical major
2. Do as many as possible CS courses while there
3. Do few internships in CS related field
4. Self-learn whenever you can, whatever you can find in CS field
I did Electrical Engineering in college. But half way through I realized that only thing I liked about that major was, digital logic and programming. So I enrolled into as many as possible CS related courses; did my senior year thesis something close to CS (communication protocol simulation using distributed network); and read/learned as many as possible CS related topics (mainly programming theory and parallel computing). Then I did my PhD in Electrical Engineering too. I managed to make my thesis much more CS related (machine learning + pattern recognition) and used much of my knowledge in algorithm, optimizations and distributed computing.
Just 2 weeks ago, I secured a web developer position at a software firm (somewhere in far east). Still I had to go through a written + oral technical examinations on programming, algorithm and puzzle solving. But the knowledge and experience came in handy. One added advantage I have, coming from Engineering background, is knowing everything from how the microprocessor, cache, memory works up to the level of how protocols at WWW level works. And when you start programming with "so-called ancient" multi-paradigm languages like C++ and some assembly in college (most microcontrollers still use C/C++ and/or ASM), it gives you a good foundation on whatever language you need to learn later on. Over the years, I've learned MATLAB, Python, JavaScript, SQL, C#... and now Ruby... but still, fundamentals concepts I understood while learning C/C++ was critical in most cases.