Różnice są bardzo duże. Nauczyć się warto każdego, ale z różnych powodów:
C. Język bardzo niskopoziomowy - tzn. pozwala na pisanie "blisko" sprzętu. Do programisty należy alokacja pamięci i jej zwalnianie, mamy dostęp do wskaźników (ich zrozumienie to IMHO jedna z fundamentalnych umiejętności) i to o nie opiera się większość mechanizmów C. Kolejki, tablice wielowymiarowe - w C można zrozumieć, jak te struktury naprawdę działają i jakie są ich wady i zalety. Programy wynikowe są małe i szybkie, a w C można pisać właściwie na każdy komputer (nawet 8-bitowe Atari ;). Co nie znaczy, że program napisany w C na jednym systemie bez problemów uruchomi się na drugim - jest to wada wynikająca z owej niskopoziomowości.
C++. Wiele osób traktuje go jako obiektowe C, ale C++ to coś więcej. Szablony, wyjątki, przestrzenie nazwa, przeciążanie operatorów i funkcji - C++ jest naprawdę rozbudowanym no i trudnym językiem. Jeśli potrzeba szybkości C przy napisaniu czegoś rozbudowanego, wybiera się wówczas C++. Nie wiem jednak, czy to dobry język na początek - początkujący może się zniechęcić jego skomplikowaniem, którego w dodatku nie wykorzysta. Mimo owego skomplikowania, C++ pozostaje dalej "blisko sprzętu", a więc można w nim pisać naprawdę szybkie rzeczy (co przydaje się na przykład przy silnikach gier 3D).
C#. Różni się od swoich poprzedników - nie jest już niskopoziomy, a wręcz przeciwnie, programy w C# uruchamiane są przez .Net Framework. Nie musimy się tu już troszczyć o zarządzanie pamięcią, nie trzeba zagłębiać się w tajniki wskaźników, istnieje za to łatwy dostęp np. do GUI Windowsa. W połączeniu z Visual Studio, C# jest świetnym narzędziem do tworzenia aplikacji okienkowych - można to robić łatwo, szybko i intuicyjnie. Z tego też powodu rynek pracy obfituje w oferty dla programistów .Net (co zwykle oznacza właśnie programistę C#). Niestety, język w naturalny sposób związany jest z Windowsami i jeśli ktoś chce napisać np. demona usługi na Linuksa, wybierze raczej jeden z dwóch poprzednich języków.