До ИИ для кодогенерации мы дойдем еще фиг знает знает когда, а упрощать работу для программиста надо. Вы, товарищ, просто тыкаете пальцем в самые неудачные примеры, выдавая это за целостную картину.Когда писали на ассемблере появлялись специальные команды процессора (или микрокод) которые помогали писать программисту проще, теперь на ассемблере писать бессмысленно, а тяжелое наследие этого времени до сих пор мешает на x86 архитектуре (большинство команд компиляторами не используются, в них просто нет смысла, они мешают и занимают место).
Пришли высокоуровневые языки, уровень абстракции постоянно повышается, помогая программисту писать быстрее(!), надежнее(!!), и давая возможность не обращать внимания на низкоуровневые трюки. В большинстве случаев можно пожертвовать небольшим падением скорости, чтобы можно было нормально сопровождать проект, а не скатываться в нечитаемые оптимизации (начинать оптимизировать надо вообще с алгоритмов, а не переписыванием кода на более, кхм, "быстрые" языки) и не стрелять себе в колени.
Совершенно другое дело представляют из себя узкие места, но их не так много, как некоторые хотят показать, оправдывая свою безграмотность.
Код на ассемблере быстрее (на самом деле не факт), чем код на высокоуровневом языке, но ты не напишешь на нем что-то по настоящему большое и сложное, по крайней мере за вменяемое количество времени. C++ медленнее, чем чистый C, потому что ООП, но это же самое ООП позволяет писать удобнее, чем просто на процедурном языке, и по этому оно захватило мир. Java позволяет легко писать мультиплатформенный код, и даже когда железо было не на столько мощным, она уже была повсюду.
Будущее за теми языками, которые будут позволять контролировать уровень абстракции, писать низкоуровнево не переходя на ассемблер. Такой язык, наверняка, будет позволять писать в любой парадигме и в нескольких одновременно, просто потому что это может оказаться удобнее. Вероятно, он будет динамически типизированным или будет иметь возможность указывать типы, когда это необходимо, а не наоборот.