Itse muuttuva koodi on ohjelmointifilosofia, jossa kehittäjä tekee ohjelman, joka pystyy muuttamaan omaa koodaustaan suoritettaessa. Vaikka kehittäjä voi syöttää muuttuvan koodin parametrit, se yleensä muuttaa ja optimoi itsensä ilman vuorovaikutusta. Jotkin tietokoneilmiöt aiheuttavat koodauksen muutoksen tahattomasti, mutta vain tahallista itse muokkaavaa koodia pidetään todella muuttuvana. Kehittäjät käyttävät tätä useimmiten koodauksensa parantamiseen, koska koodauksen suorittaminen monta kertaa voi parantaa huomattavasti alkuperäistä suunnittelua.
Itse muuttuvan koodin määrittelevin piirre on sen kyky muuttaa itseään parempaan suuntaan. Tämä voidaan tehdä vain, kun koodaus valmistautuu suoritettavaksi ja kun se valmistautuu suoritettavaksi. Suorituskoodin on arvioitava tietokoneen nykyinen ohjelmisto, tila ja muut tekijät, joten tämä yleensä auttaa koodia tunnistamaan käsittelyvirheet parhaiten korjaamaan oman prosessinsa.
Kehittäjät asettavat toisinaan parametreja itse muokkaavalle koodille, kuten korjaavat itseään enimmäkseen suorituskyvyn mukaan, mutta koodi yleensä korjaa itsensä ilman vuorovaikutusta tai kehotusta. Lisääntyvän käsittelyn lisäksi koodi poistaa myös tarpeettoman koodin, joka vain vetää ohjelmaa alaspäin, ja se lyhentää polun pituutta. Samaan aikaan kehittäjät voivat määrittää alueita, joita ei voi muuttaa, koska joidenkin koodin osien muuttaminen voi aiheuttaa koko ohjelman kärsimyksen tai toiminnan lakkaamisen.
Ohjelmistossa esiintyy toisinaan ilmiö, jossa koodaus muuttuu ilman, että kehittäjä on kirjoittanut siihen mitään ohjeita. Tämä tapahtuu yleensä ohjelmiston mätänemis- tai puskuriongelmien yhteydessä, ja kun koodausta muutetaan, sitä ei pidetä itse muokkautuvana koodina. Tähän on kaksi syytä, joista toinen on se, että kehittäjä ei ole tahallisesti tehnyt muutosta. Toinen syy on se, että itse muuttuvan ohjelmoinnin on tarkoitus parantaa koodausta, kun taas puskuri- ja mätäongelmat heikentävät koodausta.
Itse muuttuvalla koodilla on monia etuja, koska se pyrkii jatkuvasti parantamaan itseään tietokoneen nykyisen tilan ja muiden sisäisten tekijöiden perusteella. Kehittäjä käyttää tätä tiukimmin ennen koodin myyntiä tai jakelua. Antamalla koodin toimia jatkuvasti, se mahdollistaa ohjelmoinnin korjata itsensä ja kaikki virheet tai ongelmat, jotka kehittäjä on aiheuttanut koodauksen luomisen aikana. Toinen käyttötarkoitus on tietokoneissa, joissa on rajallinen muisti, koska tämä koodi vastaa muistin puutteeseen pienentämällä omaa kokoaan.