Programos supratimas – tai programuotojo gebėjimas suprasti, ką daro kompiuterio programos šaltinio kodas. Informatikos dėstymo metu programos supratimas dažnai nepaisomas, nes mokomasi dėstomos kompiuterių kalbos mechanikos ir sintaksės. Tačiau suprantamo kodo rašymas yra universalus poreikis, nepaisant kompiuterio kalbos, kuria jis parašytas. Jei programuotojas parašo biblioteką ar kodo dalį, bet niekas negali nustatyti, ką jis daro vėliau, to kodo algoritmas ir logika gali būti lengvai prarasti. Vis dažniau programuotojai negali iššifruoti savo kodo, nes dažnai jis nėra parašytas aiškiai ir intuityviai.
Yra dvi pagrindinės strategijos, kurias programuotojai gali naudoti norėdami pagerinti programos supratimą, ir kiekviena turi savo privalumų ir trūkumų. Pirmasis būdas yra pridėti dokumentaciją prie kodo kodo kūrimo metu arba po jo, o antrasis – parašyti kodą, pabrėžiant jo struktūrą. Abiejų metodų derinys yra naudingas daugumai programuotojų, nors kai kurie kodų kūrėjai teikia pirmenybę vienai strategijai, o ne kitai. Kurį metodą naudoti, priklauso nuo asmeninio programuotojo pasirinkimo, o bet koks bandymas paaiškinti kodą yra daug geresnis nei jokio.
Dokumentacijos pridėjimas prie kodo yra paprastesnis iš dviejų būdų, o gerai atlikus tai gali būti labai naudingas ramentas programuotojui, nepažįstančiam kalbos, kuria parašytas kodas. Dauguma kompiuterių kalbų turi specifinį dokumentacijos stilių, padedantį suprasti programą. Jei kodo dokumentacija parašyta kruopščiai, pirmasis naujo programuotojo žingsnis gali būti perskaityti visą dokumentaciją ir komentarus, kad suprastų, kaip programa veikia, neskaitant kodo. Užuot priklausęs nuo kodo sintaksės ir mechanikos, programuotojas gali matyti, kas vyksta paprastu tekstu, tada susieti tekstą su tiksliai tuo, kas vyksta bet kurioje vietoje. Tačiau programuotojai turi būti atsargūs, įtraukdami dokumentaciją prie kodo, nes per daug dokumentų gali būti klaidinantys ir įkyrūs, o ne padėti.
Rašydamas kodą, pabrėždamas struktūrą, programuotojas daro prielaidą, kad bet kuris kitas prižiūrėtojas, žiūrintis į jo kodą, turės lygiaverčių kalbos sintaksės ir mechanikos žinių. Kartais tai yra teisinga prielaida, tačiau ne visada galima ja pasikliauti. Programos supratimas, daugiausia pagrįstas struktūra, yra įmanomas, tačiau norint palengvinti pradinį programuotoją, reikia daug daugiau darbo. Turi būti tiksliai laikomasi kalbos mechanikos ir sintaksės, taip pat visų stilistinių susitarimų ir viskas turi būti nuosekli. Rašydamas kodą tokiu būdu, programuotojas visada turi suvokti, kad tai, kas jam aišku, kitam žmogui gali būti neaišku.
Netgi rašant kodą, kad vėliau būtų galima suprasti programą, vėliau gali prireikti papildomos dokumentacijos arba struktūrinių pakeitimų. Tai yra natūrali kodo priežiūros dalis, o ne programuotojo gedimas. Programuotojo darbas – numatyti kuo daugiau supratimo problemų, tačiau ne visada jos pagaunamos.