При поставување на проблемот потребно е истиот да се разбере, анализира и, по можност, да се разбие на потпроблеми. Потоа секој потпроблем може да се разгледува како посебна целина, за чие решавање може да се применуваат различни алгоритми и да се пишуваат посебни програми. Ваквите програми се викаат потпрограми.
Со логичко поврзување на сите потпрограми се формира програма за решавање на поставениот проблем.
На пример, проблемот "Пресметување просечен успех на едно училиште" може да се разбие на следните потпроблеми: пресметување просечен успех на еден ученик, на едно одделение, на една година, на сите години. Ако за секој од овие потпроблеми напишеме посебни програми - потпрограми и сите нив ги поврземе во една програма, така добиената програма ќе биде многу појасна, попрегледна и поразбирлива.
За секој подалгоритам може да се напише посебна програма која се нарекува потпрограма (анг. subprogram).
Програмата напишана за некој алгоритам се нарекува главна програма (анг. main program). Во главната програма може да се повикуваат повеќе потпрограми. Потпрограмите претставуваат независни програмски целини, кои имаат свои влезни податоци и даваат излезни резултати. Секоја потпрограма може да биде напишана од друг човек. Корисникот на потпрограмата треба да знае само да ја користи: да знае кои и какви влезни податоци се дозволени и кои резултати се добиваат. Потпрограмите кои се користат за решавање на стандардни проблеми, се напишани најчесто од група програмери и усовршени се чуваат во посебни програмски библиотеки.
Потпрограмите од библиотеките можат да се користат од секоја корисничка програма со повикување преку името на потпрограмата. Претходно, програмата треба да биде поврзана со програмската библиотека. Со постоењето на програмските библиотеки се ослободуваат програмерите од пишување на исти програми за проблеми со кои често се среќаваат. На пример, во секоја програмска библиотека постојат потпрограми за: наоѓање корени на квадратна равенка, собирање на два полиноми, решавање систем линерни равенки итн. Потпрограмите што најчесто се користат при програмирањето, наречени стандардни потпрограми, се ставени во посебни програмски модули кои се составен дел на преведувачот на соодветниот програмски јазик. Постојат два вида потпрограми:
- функциски пoтпрпграми или функции (анг. function), и
- прoцедурални пoтпрпграми или прoцедури (анг. procedure)
Подзадачите се користат за добивање еден или повеќе меѓурезултати, од кои во понатамошните чекори, се добиваат резултатите на задачата. За добивање на меѓурезултатите не мора да се користат сите влезни податоци, туку само некои од нив или некои претходно добиени меѓурезултати.
За секоја подзадача може да се напише посебен алгоритам, кој ќе го наречеме подалгоритам. Подалгоритмите, исто како и алгоритмите, се именуваат. Влезните податоци во подзадачата и меѓурезултатите што се добиваат, се нарекуваат аргументи. Влезните податоци се нарекуваат влезни аргументи, а меѓурезултатите се нарекуваат излезни аргументи. Аргументите се наведуваат во заграда по името на подалгоритмот. На пример, во подалгоритмот Поголем, влезните аргументи можеме да ги запишеме со broj1 и broj2, а излезниот аргумент со pogolem. Тогаш насловот на подалгоритмот Поголем може да се запише со Поголем(broj1, broj2, pogolem; На крајот од насловот на подалгоритмите се става знакот ; (точка и запирка). Алгоритмите за посложени задачи можат да бидат многу долги и непрегледни. Затоа и програмите што ќе се напишат според тие алгоритми можат да бидат тешко разбирливи. Тоа е посебно важно кога ќе се јави потреба од некоја промена или надополнување во нив. За полесно снаоѓање во големите програми, денес тие се пишуваат со техника на програмирање позната како структурно програмирање. При структурното програмирање се користат две техники на програмирање, и тоа:
- прoграмирање одгоре надолу (анг. top-down programming) и
- модуларно програмирање (анг. modular programming).