Некоторые противники строго структурного программирования представляют себе его неправильно. Они полагают, что структурный код создаётся в два шага:
Разумеется, устранение нарушений
Не удивительно, что такое соломенное чучело структурного программирования может вызывать «справедливое» негодование, только к настоящей дисциплине структурности это не имеет никакого отношения.
Обучение структурному программированию с самого начала состоит не в подобных упражнениях, а в выработке способности создания алгоритмов сразу в структурном виде. Именно такой подход даёт преимущества строго структурного кода. Он требует дополнительных усилий лишь в самом начале, а в дальнейшем воспроизводится естественным образом без требования постоянной борьбы с самим собой.
Это можно сравнить с культурной речью. Если она лежит в основе общения человека, то её поддержание, когда она необходима, будет являться не подвигом, а рутиной. Если же человек привык через слово вставлять слова-паразиты, то культурная речь будет для него крайне затратной, и представляться чем-то противоестественным, а в крайних случаях оказаться и невозможной.
И это одна из причин, почему совмещать оба подхода нормально не получается. Если разработчик постоянно выбирает, что применить в каждом случае, то он лишается возможности выработки безусловной привычки, и невольно сам же будет создавать предпосылки к выбору нарушения структурности. Заодно теряется возможность опираться на гарантии структурности даже в строгом коде, ведь нужно постоянно подозревать, что либо структурность уже нарушена, либо будет нарушена после одной из доработок.
Чем же хорошо правильное следование строгой дисциплине? Структурность, фактически, предоставляет модульность на уровне операторов. При разработке сверху вниз, то есть через уточнение кода, в принципе не возникает потребности во взламывании потока управления адекватной схемы. При разработке снизу вверх любая последовательность операторов сразу готова для выделения в подпрограмму. Всё это даёт бо́льшую предсказуемость и плавность развития — код не противоречит собственной схеме и не препятствует её выделению.