Компилятор и библиотеки должны отрезать подавляющее большинство недостатков архитектуры, чтобы архитектор сосредоточился на главном. Компилятор должен не позволять программисту сделать 99% известных багов, чтобы он мог сосредоточиться на алгоритме.
В качестве примера могу предложить переход от goto к циклам. Вот был goto, который со всем справляется, но только программа превращается в блюдо с макаронами. Ввели циклы + break + continue, которые могут сделать то же, зачастую сложнее синтаксически, но программа при этом становилась понятней и сложнее стало сделать ошибки.
Правда, все-равно часто писали i++ вместо j++. Поэтому появился цикл foreach.