Programowanie agentowe - abstrakcyjna forma programowania obiektowego. Elementem jest agent , czyli wyspecjalizowany i odporny na błędy samodzielny obiekt, który w pewnym środowisku np. w sieci komputerowej może pracować sam, a w potrzebie komunikować się z innymi agentami. Działający w sieci agenci często dublują swoje czynności, po to, by zapewnić maksymalną odporność na błędy i utratę wyników. Nie bez znaczenia jest też ewentualna możliwość samoreplikacji agentów. Języki: JADĘ (framework Javy).
Programowanie zdarzeniowe (sterowane zdarzeniami) - program składa się z wielu niezależnych podprogramów, których kolejność wykonania nie jest określona z góry przez program główny, lecz które są uruchamiane w reakcji na zaistnienie pewnych zdarzeń. Występuje w systemach operacyjnych. Obsługa wyjątków w różnych językach ma charakter programowania zdarzeniowego.
Programowanie kontraktowe (związane z paradygmatem obiektowym ale także jako rozszerzenie programowania strukturalnego) - takie tworzenie kodu, by mógł być on automatycznie sprawdzony (pod względem zgodności ze specyfikacją) i ewentualnie przetestowany. Języki: Eiffel, interfejsy w Javie.
Programowanie generyczne (inaczej: uogólnione, rodzajowe)
umożliwia tworzenie jednostek (klas, obiektów, funkcji, typów) parametrycznych, (polimorficznych, uogólnionych), które stają się pełnoprawnymi jednostkami w chwili ich dookreślenia przy skorzystaniu z ich definicji w gotowym programie. Języki: Ada, C++, Haskell.
Programowanie refleksyjne - umożliwia pisanie programów
samomodyfikujących się. Program może czytać własny kod, i go modyfikować. Języki: Python, Lisp, Scheme.
Programowanie sterowane przepływem danych - programy wykonywane nie według ustalonej kolejności czynności, lecz według dostępności danych ( wykonywanie na nich czynności, gdy dane staną się dostępne). Przykład: praca arkusza
kalkulacyjnego - przelicza dane, gdy tylko się zmienią oraz przetwarzanie potokowe w Uniksowych systemach operacyjnych. Języki: Linda.
Programowanie współbieżne, równoległe, rozproszone —
powiązane ze sobą (choć nietożsame) paradygmaty, bliskie programowaniu sterowanemu przepływem danych. Uwzględniają zagadnienia związane są z podziałem czasu procesora (lub procesorów) między procesy, synchronizacją procesów, podziałem pamięci wspólnej, przesyłaniem komunikatów pomiędzy procesami.