Компиляторы большинства языков программирования пишутся на си. А компилятор си может быть написан на ассемблере. Ассемблер может быть написан в машинных кодах
Первые - вручную на машинном языке. В роли программ для программирования выступали люди. А потом уже новые программы для программирования создавали с помощью старых программ для программирования.