Основываясь на личном опыте выскажу немного парадоксальную идею: начинать лучше всего с ассемблера. Когда-то я учил Бейсик и Паскаль, и у меня всегда возникало недопонимание, мешающее кодингу: что такое переменная? Куда она уходит? Почему один кусок кода может быть быстрее другого, и как я могу знать об этом?
Появившаяся значительно позднее возможность выучить ассемблер, можно сказать "открыла глаза"; причем стиль ассемблера после "обычных" языков вызывал недоумение -- если бы я начинал обучение с него, а потом перешел на более сложные, мне было бы значительно проще.
UPD: Добавлю: если вы сейчас начнете учить Python, а потом перейдете на С++ или Paskal -- все-таки они ощутимо отличаются, и у вас тоже возникнут подобные вопросы.
Рекомендую по ассемблеру уроки битфрая
http://bitfry.narod.ru/ По его урокам я ассемблер и начинал учить.