It's extremely competitive so you have to know your shit. First, get a standard calculus text and dive in. You should also get linear algebra and discrete math books as well; make sure the discrete text is proof based.
Once you're a couple chapters in to your discrete book (you will want to have covered basic proposition and higher order logic, and basic proofs), you may begin learning programming and computer architecture. As a litmus test, if you don't know what this statement is
∀P((0∈P∧∀i(i∈P-->i+1∈P))-->∀n(n∈P))
you aren't ready to take the reins of a computer.
Now, forget what you do know about computer programming:
First, you learn boolean logic operations
then, you learn transistor logic
then, you learn how to build functional units from logic gates
then, you learn CPU design
then, and only then, you learn assembly language
then, after you have mastered assembly language (not dabbled, but mastered it), you learn C
then, after you have mastered C, you may learn the higher-level languages of your choice, but you will always use C and assembly as your primary languages because everything else is unnecessary bloat.
By this time you should be finished with your first wave of math and ready for the next: abstract algebra, analysis, multivariate and vector calculus, and, after you have progressed a way in those, topology.
Finally, you become familiar with topoi, and study the internal logic of categories
then familiarize yourself with (general) type theory, and its applications to programming. I also recommend studying how to reformulate mathematics in terms of globular categories for use in automatic theorem proving, because there is an inherent programming-like 'feel' to it.