Samospremenljiva koda je filozofija programiranja, v kateri razvijalec naredi program, ki je sposoben spremeniti lastno kodiranje, ko se izvede. Medtem ko lahko razvijalec vnese parametre za samospreminjajočo se kodo, se ta običajno spremeni in optimizira brez interakcije. Obstaja nekaj računalniških pojavov, ki povzročijo, da se kodiranje nenamerno spremeni, vendar se za samospreminjajočo se resnično šteje samo namerno samospreminjajočo se kodo. To najpogosteje uporabljajo razvijalci za izboljšanje svojega kodiranja, saj lahko večkratno izvajanje kodiranja močno izboljša izvirno zasnovo.
Najbolj definiran vidik samospreminjajoče se kode je njena sposobnost, da se spremeni na bolje. To je mogoče storiti le, ko se kodiranje pripravlja na izvedbo in ko se pripravlja na zagon. Izvedbena koda bo morala pregledati trenutno programsko opremo računalnika, stanje in druge dejavnike, tako da to običajno pomaga kodi prepoznati napake pri obdelavi, da najbolje popravi lastno obdelavo.
Razvijalci včasih nastavijo parametre za samospreminjajočo se kodo, kot je popravljanje večinoma zaradi zmogljivosti, vendar se koda običajno popravi sama brez interakcije ali poziva. Poleg povečane obdelave bo koda izbrisala tudi nepotrebno kodo, ki samo vleče program navzdol, in zmanjšala dolžine poti. Hkrati lahko razvijalci določijo področja, ki jih ni mogoče spremeniti, saj lahko sprememba nekaterih delov kode povzroči, da celoten program trpi ali preneha delovati.
V programski opremi se občasno pojavi pojav, pri katerem se kodiranje spremeni, ne da bi razvijalec napisal kakršna koli navodila za to. To se običajno zgodi pri težavah z gnilobo programske opreme ali medpomnilniku in se med spreminjanjem kodiranja ne šteje za samospreminjajočo se kodo. Za to sta dva razloga, eden je, da spremembe ni namerno naredil razvijalec. Drugi razlog je, da je samo-spreminjajoče se programiranje namenjeno izboljšanju kodiranja, medtem ko težave z medpomnilnikom in gnilobo poslabšajo kodiranje.
Samospreminjajočo se kodo prinaša številne prednosti, saj se bo nenehno izboljševala glede na trenutno stanje računalnika in druge notranje dejavnike. To razvijalec najbolj strogo uporablja, preden se koda proda ali distribuira. S tem, ko omogoča, da se koda nenehno izvaja, omogoča programiranju, da popravi samo sebe in vse napake ali težave, ki jih povzroči razvijalec med ustvarjanjem kodiranja. Druga uporaba za to je v računalnikih z omejenim pomnilnikom, ker se bo ta koda na pomanjkanje pomnilnika odzvala z zmanjšanjem lastne velikosti.