Так и писали в двоичном коде системы команд конкретной машины, т. е. с помощью машинных кодов. У каждой операции в компьютере (сложение, умножение, какие-то более сложные операции) есть код. Люди (программисты) сами по табличке выбирали этот код, всякие адреса в памяти, всё это набивали руками на перфокартах, засовывали в считыватель, запускали программу и она выполняла вычисления. Чтобы облегчить себе жизнь, умные головы придумали языки символического кодирования и написали программы перевода (трансляции) сначала только вычислительных программ в машинные коды (мнемокоды, ассемблеры, макроассемблеры). А затем с их помощью придумали и написали более сложные трансляторы с языков высокого уровня (Фортран, Бейсик, С и т. д.)