How to prepare for CS in college

<p>I'm a high school senior and I've decided that instead of giving into senioritis I'd rather spend some time programming. With so many resources out there to learn how to code, it's sort of overwhelming and a lot of the resources I've found aren't as rigorous (theory-wise) as I'd like them to be. I'd like to get a solid foundation in order to be ready for CS in college rather than simply learning how to code. </p>

<p>I plan to double major in Math/Econ and Computer Science. I'm good at math (I took MV calc and linear algebra my junior year), and the math part of CS isn't what intimidates me. I'm more worried that since I'm going to a competitive school, I will get crushed by classmates that have had a lot more time to practice.</p>

<p>TL;DR: How can I make the most of my free time in order to prepare for a demanding college-level CS curriculum?</p>

<p>You can preview introductory CS courses on the web.</p>

<p>[url=&lt;a href=“http://www-inst.eecs.berkeley.edu/~cs10/fa13/]CS10”&gt;CS10 : BJC (The Beauty and Joy of Computing) | UC Berkeley EECS | Fall 2013]CS10</a> : BJC (The Beauty and Joy of Computing) | UC Berkeley EECS | Fall 2013<a href=“broad%20introduction%20for%20both%20non-majors%20and%20those%20considering%20the%20CS%20major%20but%20do%20not%20have%20much%20programming%20experience”>/url</a></p>

<p>[url=&lt;a href=“http://www-inst.eecs.berkeley.edu/~cs61a/fa13/]CS”&gt;CS 61A Fall 2013: Structure and Interpretation of Computer Programs]CS</a> 61A Fall 2013: Structure and Interpretation of Computer Programs<a href=“introductory%20CS%20course%20for%20CS%20majors”>/url</a></p>

<p>[url=&lt;a href=“http://mitpress.mit.edu/sicp/]Welcome”&gt;http://mitpress.mit.edu/sicp/]Welcome</a> to the SICP Web Site<a href=“classic%20introductory%20CS%20textbook”>/url</a></p>

<p>Note: you should be able to download the computer language interpreters and install them on your computer, so you can do the examples and exercises yourself.</p>

<p>CS50x is great.
Offered by Harvard.</p>

<p>The thing is, introductory CS courses vary widely from one school to the next. You said you are going to a competitive school, if it is one of those that happen to use a functional language, it may be a bit troublesome for someone who have solely programmed in an imperative, object-oriented language in the past.</p>

<p>Take my school, for example (I am in Canada, at the University of Waterloo), it is one of the schools that uses the functional language Scheme, which means:</p>

<ol>
<li>No variables, you are only allowed to define constants.</li>
<li>No loops, if you want them, use recursion.</li>
<li>Everything else is flexible (dynamic typing in a language)</li>
<li>No one cares about I/O (let’s focus on math, and not how a BufferedReader reads input or how a BufferedWriter writes output).
<a href=“CS135”>https://www.student.cs.uwaterloo.ca/~cs135/&lt;/a&gt;&lt;/li&gt;
</ol>