Samo-modificirajući kod je filozofija programiranja u kojoj programer izrađuje program koji može mijenjati vlastito kodiranje kada se izvrši. Iako programer može unijeti parametre za samo-modificirajući kod, on se obično mijenja i optimizira bez interakcije. Postoje neki računalni fenomeni koji uzrokuju nenamjernu promjenu kodiranja, ali samo se namjerni samo-modificirajući kod uistinu smatra samo-modificirajućim. Programeri to najčešće koriste kako bi poboljšali svoje kodiranje, jer mnogo puta izvršavanje kodiranja može uvelike poboljšati izvorni dizajn.
Najdefinirajući aspekt samo-modificirajućeg koda je njegova sposobnost da se promijeni na bolje. To se može učiniti samo kada se kodiranje sprema za izvršenje i kada se priprema za izvođenje. Izvršni kod morat će uzeti u obzir trenutni softver računala, stanje i druge čimbenike, tako da to obično pomaže kodu da prepozna greške obrade kako bi najbolje ispravio vlastitu obradu.
Programeri ponekad postavljaju parametre za samo-modificirajući kod, kao što je ispravljanje uglavnom radi izvedbe, ali će se kod obično ispraviti sam bez interakcije ili upita. Osim povećane obrade, kod će također izbrisati nepotreban kod koji samo vuče program prema dolje i smanjit će duljinu puta. Istodobno, programeri mogu odrediti područja koja se ne mogu mijenjati, jer izmjena nekih dijelova koda može uzrokovati oštećenje cijelog programa ili prestanak rada.
Fenomen se povremeno događa u softveru u kojem se kodiranje mijenja, a da razvojni programer nije napisao ikakve upute za to. To se obično događa s problemima truljenja softvera ili međuspremnika i, dok se kodiranje mijenja, ne smatra se samo-modificirajućim kodom. Dva su razloga za to, a jedan je taj što programer nije namjerno napravio promjenu. Drugi razlog je taj što je samo-modificirajuće programiranje namijenjeno poboljšanju kodiranja, dok problemi međuspremnika i truljenja degradiraju kodiranje.
Postoje mnoge prednosti koda koji se sam mijenja, jer će on stalno raditi na poboljšanju na temelju trenutnog stanja računala i drugih unutarnjih čimbenika. To se najrigoroznije koristi od strane programera prije nego što se kod proda ili distribuira. Dopuštajući kodu da se neprestano izvodi, omogućuje programiranju da popravi sebe i sve pogreške ili probleme koje je prouzročio programer tijekom kreiranja kodiranja. Druga upotreba za to je u računalima s ograničenom memorijom, jer će ovaj kod odgovoriti na nedostatak memorije smanjenjem vlastite veličine.