Сначала программы записывали в память компьютера в виде последовательности машинных кодов (чисел). С помощью специальной панели, перфокарт, перфоленты и т. п. И в таком виде программы для всех компьютеров писали несколько лет с момента появления компьютеров. Потом для записи машинных кодов придумали использовать не числа, а человекопонятные мнемоники и начали писать программы для автоматического преобразования этих мнемоник в машинные коды - ассемблеры. Жить стало проще. Потом на ассемблерах начали писать трансляторы с языков высокого уровня, независимых от конкретных компьютеров. Стало ещё проще. Потом трансляторы языков высокого уровня начали писать на языках высокого уровня... Ad infinitum.
У них изначально уже были языки программирования - машинные языки первых компьютеров. Потом они с их помощью писали компиляторы более удобных для программирования языков.
Вот компилятор (с нуля, на машинном языке) я не писал. Только прикладные программы. В восьмеричном коде. Требование по скорости обработки! А вот компилятор с Си на самом Си - дорабатывал (руссифицировал). Первые компиляторы писались на машинных языках. Началось с ассемблеров. И пошло-покатилось...