Изучение основ программирования (алгоритмы, структуры данных...)
www.williamspublishing.com/Books/5-8459-0857-4.html вот эта книжечка мне пригодилась.

а в общем — рекоемндую решать микрозадачи. Например, чувствуешь, что с деревьями проблемы. Пишешь приложение, которое реализует какую-нибудь сортировку, замеряешь время выполнения, исследуешь алгоритм, ищешь пути совершенствования.

Так же есть ресурс acm.timus.ru где собран мильён олимпиадных задач. Когда их решаешь, получаешь эмоциональный кайф и хотя порой кажется, что ничего не узнал и не постиг, на самом деле набиваешь руку в «сложных» задачах.

А какие конкретно тебе алгоритмы, например, не понятны? Динамическое программирование? Сортировки?
Из какой области? Задачи оптимизации (типа поиска оптимального маршрута) или, например, криптографические алгоритмы?
www.ozon.ru/context/detail/id/128304/
www.ozon.ru/context/detail/id/1317133/
Я на втором курсе такие себе брал, пригодились более чем.