Ohjelman ymmärtäminen on ohjelmoijan kyky ymmärtää, mitä tietokoneohjelman lähdekoodi tekee. Tietotekniikan opetuksessa ohjelman ymmärtäminen jätetään usein huomiotta opetettavan tietokielen mekaniikan ja syntaksin oppimisen hyväksi. Ymmärrettävän koodin kirjoittaminen on kuitenkin universaali tarve riippumatta tietokoneen kielestä, jolla se on kirjoitettu. Jos ohjelmoija kirjoittaa kirjaston tai koodin, mutta kukaan ei voi määrittää, mitä se tekee jälkikäteen, koodin takana oleva algoritmi ja logiikka voivat helposti kadota. On yleistä, että ohjelmoijat eivät voi tulkita omaa koodiaan, koska sitä ei usein kirjoiteta selkeästi ja intuitiivisesti.
Ohjelmoijat voivat käyttää kahta päästrategiaa ohjelman ymmärtämisen parantamiseen, ja jokaisella on omat etunsa ja haittansa. Ensimmäinen tapa on lisätä dokumentaatioita koodiin koodin luomisen aikana tai sen jälkeen, ja toinen on kirjoittaa koodi painottaen sen rakennetta. Molempien lähestymistapojen yhdistelmä on hyödyllinen useimmille ohjelmoijille, vaikka jotkut koodinrakentajat pitävät parempana yhtä strategiaa kuin toista. Se, mitä menetelmää käyttää, on ohjelmoijan henkilökohtaisten mieltymysten asia, ja kaikki yritykset selventää koodia ovat paljon parempia kuin ei lainkaan.
Dokumentaation lisääminen koodiin on yksinkertaisempi kahdesta menetelmästä, ja kun se on tehty hyvin, se voi olla erittäin hyödyllinen kainalosaita ohjelmoijalle, joka ei tunne koodia, jolla koodi on kirjoitettu. Useimmilla tietokoneen kielillä on erityinen dokumentointityyli, joka auttaa ymmärtämään ohjelmaa. Jos koodidokumentaatio on kirjoitettu perusteellisesti, uuden ohjelmoijan ensimmäinen askel voi olla kaikkien asiakirjojen ja kommenttien lukeminen, jotta saat käsityksen ohjelman toiminnasta lukematta koodia ollenkaan. Sen sijaan, että olisi riippuvainen koodisyntaksista ja mekaniikasta, ohjelmoija voi nähdä, mitä tapahtuu pelkkänä tekstinä, ja yhdistää sitten tekstin juuri siihen, mitä missä tahansa paikassa tapahtuu. Ohjelmoijien on kuitenkin oltava varovaisia lisääessään koodiin dokumentaatiota, koska liiallinen dokumentointi voi olla hämmentävää ja häiritsevää eikä hyödyllistä.
Kun kirjoitat koodia painottaen rakennetta, ohjelmoija olettaa, että muut ylläpitäjät, jotka katsovat hänen koodiaan, tuntevat vastaavasti kielen syntaksin ja mekaniikan. Joskus tämä on pätevä olettamus, mutta siihen ei voi aina luottaa. Ohjelman ymmärtäminen, joka perustuu suurelta osin rakenteeseen, on mahdollista, mutta se vaatii huomattavasti enemmän työtä alkuperäiseltä ohjelmoijalta sen helpottamiseksi. Kielen mekaniikkaa ja syntaksia on noudatettava tarkasti, samoin kuin kaikkia tyylikäytäntöjä, ja kaiken on oltava johdonmukaista. Kun kirjoitat koodia tällä tavalla, ohjelmoijan on aina oltava tietoinen siitä, että se, mikä on hänelle selvää, ei välttämättä ole selvää toiselle henkilölle.
Jopa silloin, kun kirjoitat koodia silmällä myöhempää ohjelman ymmärtämistä, lisäasiakirjoja tai rakenteellisia muutoksia saatetaan tarvita myöhemmin. Tämä on luonnollinen osa koodin ylläpitoa, eikä ohjelmoijan vika. Ohjelmoijan tehtävä on ennakoida mahdollisimman monta ymmärtämisongelmaa, mutta kaikki eivät aina jää kiinni.