Учить надо то, что преподают в универах.
А именно: начинать с паскаля, с самых простых алгоритмов, потом начинать читать Вирта "Структуры данных" и практиковаться на delphi.
И только потом браться за Страуструппа и C++
От C# если честно, в учебном плане толку мало. Язык прост тем, что многие алгоритмы уже реализованы в .Net и ученик, пользуясь этим фреймворком упустит важную часть обучения, но зато будет считать себя крутым кодером.