C, а потом можно и C++. Для современной разработки второй практически заменяет первый (я не говорю о низкоуровневых разработках). Почему именно эти 2 языка? C — фундаментальная основа, низкий уровень абстракции, но который понятен программисту — «ассемблер с человеческим лицом». С++ — введение в ООП, причем не обязательно использовать WinAPI, ведь есть Qt, Visual C++, а для GUI — wxWidgets. После такого курса будет несложно им самим перейти на C#, Java, PHP (благо синтаксис похож), или изучить что-то типа Python, Ruby (по мере увеличения абстракции), или даже изучить ассемблер (навыки низкоуровневости C не дадут подумать, что «реальное программирование» — это PHP, Java, C#).
Что насчет теории — алгоритмы и структуры данных (можно даже по одноименной книге АХУ).