С Ассемблера. Вместе с этим, также изучите схемотехнику процессора, и контроллеров ввода/вывода.
Далее, переходя на языки высокого уровня, лучше начать с Паскаля и Фортрана. Обязательно разберитесь в принципах компилирования, чтобы понимать, как это работает.
ИМХО: С/C++ абсолютно глупый и дурацкий язык, придуманный человеком с искажённым мышлением. Но вам всё равно придётся иметь с ним дело.
Но самое главное: научиться мыслить алгоритмически. Т.е. уметь находить эффективные алгоритмы для любых задач. А это уже математика. Изучайте олимпиадные задачи по программированию и соответствующие разделы математики.
С понимания зачем вообще это нужно. Если есть конкретная цель - будет и понимание в какую сторону двигаться: какие есть языки, технологии, ну а там уже простой поиск по учебным материалам поможет.
Да, в интернете и правда можно найти много полезной информации по программированию и не только. Главное вникать во все нюансы и максимально точно понимать, для чего нам это нужно
а еще грамматика грамматика грамматика..........