Other ways to prepare

Depending on your preferences and personality, there are other ways to prepare besides building side projects. We're listing them here to help you find your niche. But as always, keep in mind that you definitely do not need to do everything in the Preparing section. Doing whatever you find most appealing, even if it's only one thing, is better than trying to do everything.

Competitive programming

Competitive programming will push your algorithms skills way past what you need to pass the algorithmic portion of most interviews, or what's likely to come up in jobs. In a sense, that's a good thing, as you'll have that solid foundation on computation and won't need to worry about it for a long time.

You don't need to actually compete. If you find it fun, go ahead, but trying to win competitions requires other skills beyond algorithms (like writing dirty code fast) that aren't very applicable for internships.

A good way to practice competitive programming while learning algorithms at the same time is through the USACO training pages. Note that the problems start quite hard so this is meant more for people that already have programming experience (even if it's informal). The past contests of the Canadian Computing Competition are pretty good practice, especially the junior division which is accessible with minimal programming experience. Other popular websites include HackerRank, Codeforces, TopCoder, etc.

Are programming competitions a good use of time?

AI Games

More open-ended than programming competitions, these are websites that offer "games" that you "play" by writing a program that plays it for you. Usually these take a few days to do, though you can get into it and spend arbitrarily large amounts of time trying to make the best bot. There's a lot of ad-hoc algorithms you can come up with while writing these bots so it's pretty good programming practice.

The AI Games