Självmodifierande kod är en programmeringsfilosofi där utvecklaren gör ett program som kan ändra sin egen kodning när det körs. Medan utvecklaren kan ange parametrar för den självmodifierande koden, ändras och optimerar den vanligtvis sig själv utan interaktion. Det finns vissa datorfenomen som gör att kodning ändras oavsiktligt, men endast avsiktlig självmodifierande kod anses verkligen vara självmodifierande. Detta används oftast av utvecklare för att förbättra sin kodning, eftersom att köra kodningen många gånger kan förbättra den ursprungliga designen avsevärt.
Den mest definierande aspekten av självmodifierande kod är dess förmåga att förändra sig själv till det bättre. Detta kan endast göras när kodningen förbereds för att köras och när den förbereds för att köras. Den exekverande koden måste göra en inventering av datorns nuvarande programvara, tillstånd och andra faktorer, så detta hjälper normalt koden att känna igen bearbetningsfel för att på bästa sätt korrigera sin egen bearbetning.
Utvecklare ställer ibland in parametrar för självmodifierande kod, som att korrigera sig själv mest för prestanda, men koden kommer normalt att korrigera sig själv utan interaktion eller uppmaning. Bortsett från ökad bearbetning, kommer koden också att radera onödig kod som bara drar ner programmet och det kommer att minska sökvägslängder. Samtidigt kan utvecklare specificera områden som inte kan ändras, eftersom ändringar av vissa delar av koden kan göra att hela programmet lider eller slutar fungera.
Ett fenomen uppstår ibland i programvara där kodningen ändras utan att utvecklaren skriver in några instruktioner för att göra det. Detta inträffar normalt med mjukvaruröta eller buffertproblem och medan kodningen ändras anses det inte vara självmodifierande kod. Det finns två skäl till detta, en är att ändringen inte är avsiktligt gjord av utvecklaren. Det andra skälet är att självmodifierande programmering är tänkt att förbättra kodningen, medan buffert- och rötproblem försämrar kodningen.
Det finns många fördelar med att ha självmodifierande kod, eftersom den ständigt kommer att arbeta för att förbättra sig själv baserat på datorns nuvarande tillstånd och andra interna faktorer. Detta används mest rigoröst av utvecklaren innan koden säljs eller distribueras. Genom att tillåta koden att köras konstant gör den det möjligt för programmeringen att fixa sig själv och eventuella fel eller problem som orsakas av utvecklaren under kodningens skapande. En annan användning för detta är i datorer med begränsat minne, eftersom denna kod kommer att svara på en minnesbrist genom att minska sin egen storlek.