Z punktu widzenia SPOJa warte uwagi są C i C++ i pod te języki pomyślane są zadania (z nielicznymi wyjątkami jak BF). Oczywiście nikt nikomu nie broni używać np. Pythona, ale w wielu przypadkach jest to bardzo trudne a nawet niewykonalne ze względu na limity czasowe. Sam próbowałem kiedyś robić zadania w Bashu - podołałem aż jednemu i zrezygnowałem z tego chorego pomysłu 
Jeżeli ktoś chce nauczyć się języka to polecam inne metody niż SPOJa. Za najlepszą uważam realizowanie własnych projektów. Najprościej jest chyba zacząć od gier komputerowych - każdy wie jak powinny wyglądać Saper albo Pacman, zaś wymyślanie użytecznych aplikacji dla księgowych, bibliotekarzy i wojska to nieco większe wyzwanie
C# również nie polecam na SPOJu, ale oczywiście co kto lubi.
PS
Właśnie dowiedziałem się, że na SPOJu można pisać w assemblerze i Octave (czyli de facto Matlab został dodany do SPOJa). Asmy wszelakie rozumiem - w sumie to nawet ciekawe doświadczenie napisać bardziej złożony program w assemblerze. Niemniej podejrzewam, że będzie sporo problemów z uzyskaniem pomocy na forum i z wczytywaniem danych...
Osobom, które na SPOJu będą uczyły się Octave szczerze współczuję. Sortowanie liczb i analiza dostaw pizzy na obszarze Bitocji wykonana w Octave jest po prostu stratą czasu bo nie do tego służy ta technologia. Osoby, które zamiast prowadzić obliczenia numeryczne i ich wizualizacje (nie wiem... metoda Rungego-Kutty czwartego rzędu, równania Lotki-Volterry, modele SIR, metoda Hartree-Focka czy kultowy MES) będą trzaskały BFSy w rzeczywistości nie nauczą się Octave. Podobnie ma się sytuacja z Bashem, Perlem, a jak sądzę, również z Pythonem, Javą i C#.
Mówię to z perspektywy osoby, która z wykształcenia jest inżynierem technologii chemicznej, a lwią część kodzenia (C++) opanowała na SPOJu. Na pierwszej rozmowie o pracę (C++) dowiedziałem się, że z algorytmami jest u mnie ok, gorzej z C++ i ogólnie programowaniem, bo i po co komuś na SPOJu konstruktory kopiujące, dziedziczenie, metody wirtualne, listy inicjalizacyjne, programowanie zwinne, wzorce projektowe, asercje, obsługa wyjątków, SOLID czy szablony? Wiele z tych rzeczy można wprowadzić do rozwiązywania zadań, ale będzie to tak sztuczne, że nic się z tego nie wyniesie. Przykładowo SPOJ przyjmuje pojedyncze pliki, co przeczy podstawowym zasadom kodzenia obiektowego.
Słowem: zalecam pamiętać o wadach i zaletach języków oraz SPOJa, a w związku z tym dobrze dobierać język do danego zadania. Jednocześnie zaznaczam, że niniejszy wpis jest wyłącznie moją opinią wyrobioną na podstawie moich doświadczeń i mojej wiedzy. Jeżeli ktoś uważa, że programowanie poza SPOJem jest beee albo widzi inne zastosowania GNU Octave, zaś Python i SPOJ tworzą dla niego doskonałe połączenie to proszę bardzo 