Программа начинается с ясного вопроса. Нужно определить, какие данные она получает, какие результаты должна выдавать и какие ограничения действуют. Только после этого выбирают алгоритм и записывают его на языке программирования. Быстро набранный код не заменяет точной постановки: он может без ошибок вычислять не то, что требовалось.
Структурное программирование
Большую задачу удобно разделять на логически завершённые части. Структурное программирование строит программу как иерархию таких блоков, используя последовательность, ветвление и цикл. Блоки можно вкладывать друг в друга: внутри цикла выполнять проверку, внутри ветви — последовательность вычислений.
Развитие этого подхода связано с нидерландским учёным Эдсгером Дейкстрой (1930–2002) и работами конца 1960-х — начала 1970-х годов. Его «Заметки по структурному программированию» относятся к 1969 году. Идея важна не только исторически: понятная структура упрощает проверку, исправление и развитие программы.
В классическом изложении структурный блок имеет один вход и один выход. Выполнение входит в него определённым способом и после завершения возвращается в понятную точку. Это позволяет рассуждать о блоке как о целом, не прослеживая произвольные переходы по всему коду. Современные языки допускают дополнительные управляющие средства, но ясность путей выполнения остаётся основной целью.
Логически завершённую часть можно оформить как подпрограмму. Вспомогательный алгоритм решает отдельную подзадачу и вызывается из другого алгоритма. Функция обычно возвращает значение, а процедура прежде всего выполняет действие; конкретные средства зависят от языка. В Python обе роли оформляют через def, а результат можно вернуть командой return.
Подпрограмма полезна не только для повторяющегося кода. Даже однократно выполняемый сложный шаг стоит выделить, если это делает его назначение яснее. Важно указать, какие аргументы он получает и какой результат обязан вернуть: это его интерфейс.