W kontekście komputerów i programowania komputerowego „kolizja nazw” to termin techniczny określający przypadek, w którym dwa elementy mają tę samą nazwę w jakiejś logicznej obudowie. Kolizja nazw może wystąpić w wielu przypadkach, na przykład w przypadku nazw plików w katalogu lub w programie, w którym zmienne lokalne w funkcji mają taką samą nazwę jak niektóre zmienne globalne. W większości przypadków kolizje nazw muszą być w jakiś sposób rozwiązane natychmiast, automatycznie przez system operacyjny lub kompilator, albo ręcznie poprzez dane wejściowe i decyzje użytkownika. Koncepcja przestrzeni nazw czasami rozwiązuje problemy z kolizją, tworząc różne regiony logiczne, w których elementy o podobnych nazwach mogą współistnieć bez niejasności. W niektórych instancjach programowania kolizja nazw może nie być od razu widoczna, co czasami prowadzi do trudnych do znalezienia błędów programu, które mogą wynikać z przyjęcia przez kompilator pewnych założeń dotyczących nazw używanych elementów.
Przykładem, jak może wystąpić kolizja nazw, są dwa katalogi pełne plików. Jeśli każdy katalog zawiera plik o nazwie „DATA”, a zawartość jednego katalogu jest kopiowana do drugiego, to komputerowe próby skopiowania pliku o nazwie DATA wykażą, że plik o tej samej nazwie już istnieje w katalogu docelowym. Powoduje to kolizję nazw. W takim przypadku użytkownik zazwyczaj zostanie poproszony i będzie mógł wybrać z listy rozwiązań, w tym zmienić nazwę jednego z plików, nie kopiować pliku lub nadpisywać jeden z plików.
Jednym z powszechnie stosowanych rozwiązań kolizji nazw jest implementacja przestrzeni nazw. Przestrzeń nazw to po prostu sposób na zdefiniowanie obszaru, w którym zawarte są nazwy obiektów. W powyższym przykładzie katalog jest technicznie przestrzenią nazw, co oznacza, że wiele plików może mieć tę samą nazwę, o ile każdy z nich znajduje się w różnych katalogach.
Z perspektywy programowania kolizja nazw może wystąpić w sytuacjach, takich jak wielokrotne dziedziczenie, nakładające się zakresy zmiennych, a nawet importowane biblioteki w niektórych językach. Ogólnie rzecz biorąc, kompilator zauważy konflikt i wygeneruje ostrzeżenie lub błąd, chociaż nie zawsze tak jest. Oprócz używania przestrzeni nazw, kolizji w wielu językach programowania można uniknąć, używając kwalifikatorów. Kwalifikator jest zwykle prefiksem, który można umieścić przed nazwą zmiennej lub klasy, aby odróżnić ją od innej zmiennej o tej samej nazwie.