<p>Hey, I’m a CS major finishing up my freshman year. It’s an awesome major and I hope you’ll enjoy it. =)</p>
<p>As far as preparation is concerned, it may make your intro courses a bit smoother if you learn Scheme and develop a good understanding of how different sorting & other common algorithms / data structures work (including how to implement them—you could try implementing stacks, queues, and so on using lists in Scheme, just for fun).</p>
<p>But really, the best advice is to really learn any language (find one that has really aesthetically nice syntax from your point of view, or seems useful for a project you want to do) and just make something. Doing any independent programming project will make you a more mature programmer earlier on, and you’ll understand how to reason through and organize code quite effectively this way. Formalized knowledge (like what I suggested above) you can pick up in class and it won’t be too hard for you to grasp. </p>
<p>Also: learning different languages isn’t strictly all that useful in and of itself. It’s useful when different languages do different tasks and so you get a sense of the different paradigms and use cases for which different languages are best for, but I feel going deeply into a few languages is more enriching earlier on, because you get exposure to deeper CS concepts instead of messing around with more surface-layer things about the language, not about core programming logic.</p>
<p>It’s not really that “knowing many programming languages is ideal”, but having a level of expertise that transcends any particular language and being able to adapt to many. And whatever language you do investigate, it’s much more interesting to learn it by doing projects than just grinding through tutorials. If you want a project idea, here are a few: [Nifty</a> Assignments](<a href=“http://nifty.stanford.edu/]Nifty”>http://nifty.stanford.edu/) They’re projects different CS professors have assigned, and some of the handout material is language-specific, but most projects should be adaptable to any language.</p>
<p>Oh! You could also investigate any particular areas of CS (cryptography, natural language processing, robotics) that are interesting, so when you hit campus in the fall you can target professors who are doing cool work or more specialized classes you want to take in the future. If you get seriously interested in a particular field it shouldn’t be too hard to find a mentor to talk to, do research with, and learn from.</p>
<p>By the way, Scheme is one of my favourite languages. It’s what I learned to program with in high school and I feel a good amount of nostalgia thinking about it. =)</p>