Samomodyfikujący się kod to filozofia programowania, w której programista tworzy program, który jest w stanie zmienić własne kodowanie podczas wykonywania. Podczas gdy programista może wprowadzić parametry dla samomodyfikującego się kodu, zwykle zmienia się on i optymalizuje bez interakcji. Istnieją pewne zjawiska komputerowe, które powodują niezamierzoną zmianę kodu, ale tylko celowo samomodyfikujący się kod jest naprawdę uważany za samomodyfikujący się. Jest to najczęściej używane przez programistów w celu poprawy kodowania, ponieważ wielokrotne uruchamianie kodu może znacznie poprawić oryginalny projekt.
Najbardziej definiującym aspektem samomodyfikującego się kodu jest jego zdolność do zmiany na lepsze. Można to zrobić tylko wtedy, gdy kodowanie jest przygotowywane do wykonania i gdy przygotowuje się do uruchomienia. Kod wykonujący będzie musiał uwzględnić bieżące oprogramowanie komputera, stan i inne czynniki, więc zwykle pomaga to kodowi rozpoznać błędy przetwarzania, aby jak najlepiej poprawić własne przetwarzanie.
Deweloperzy czasami ustawiają parametry dla samomodyfikującego się kodu, na przykład poprawianie się głównie pod kątem wydajności, ale kod zwykle poprawia się sam bez interakcji lub monitowania. Oprócz zwiększonego przetwarzania, kod usunie również niepotrzebny kod, który jest tylko przeciągany w dół programu i zmniejszy długość ścieżek. Jednocześnie programiści mogą określić obszary, których nie można zmienić, ponieważ zmiana niektórych części kodu może spowodować uszkodzenie lub zaprzestanie działania całego programu.
Zjawisko czasami pojawia się w oprogramowaniu, w którym kodowanie zmienia się bez pisania przez programistę żadnych instrukcji, aby to zrobić. Zwykle dzieje się tak w przypadku problemów z gniciem oprogramowania lub buforowaniem, a podczas zmiany kodu nie jest to uważane za samomodyfikujący się kod. Są ku temu dwa powody, jednym z nich jest to, że zmiana nie została celowo wprowadzona przez dewelopera. Drugim powodem jest to, że samomodyfikujące się programowanie ma na celu poprawę kodowania, podczas gdy problemy z buforowaniem i gniciem pogarszają kodowanie.
Posiadanie samomodyfikującego się kodu niesie ze sobą wiele korzyści, ponieważ będzie on stale poprawiał się w oparciu o bieżący stan komputera i inne czynniki wewnętrzne. Jest to najbardziej rygorystycznie używane przez programistę przed sprzedażą lub dystrybucją kodu. Pozwalając na ciągłe działanie kodu, umożliwia programiście naprawienie się i wszelkich błędów lub problemów, które są powodowane przez programistę podczas tworzenia kodu. Innym zastosowaniem tego są komputery z ograniczoną pamięcią, ponieważ ten kod zareaguje na brak pamięci poprzez zmniejszenie własnego rozmiaru.