Nauka każdego rodzaju języka programowania

24

Słyszałem kilka razy, że każdy programista powinien nauczyć się jednego z każdego rodzaju języka. To niekoniecznie prawda, ale uważam, że to dobry pomysł.

Nauczyłem się języka proceduralnego (Perl), ale jakie inne typy?

Jakie są między nimi różnice i jakie są ich przykłady?

Dynamiczny
źródło
8
Należy pamiętać, że istnieje wiele nakładających się sposobów kategoryzacji języków. Najczęściej jest to programowanie paradygmatu, ale nawet wtedy istnieją duże i drobne rozróżnienia, wiele całkowicie oddzielnych osi, a wiele języków dzieli się na kilka paradygmatów.
1
Zapomniałbym o kategoriach - jeśli naprawdę interesujesz się nauką języka, sugerowałbym zarówno Lisp, jak i Scalę, jeśli poradzisz sobie z tymi dwiema, przeszedłeś wiele gruntów.
Bill K
3
Rada Petera Norviga : Naucz się co najmniej pół tuzina języków programowania. Dołącz jeden język, który obsługuje abstrakcje klas (jak Java lub C ++), jeden, który obsługuje abstrakcję funkcjonalną (jak Lisp lub ML), jeden, który obsługuje abstrakcję syntaktyczną (jak Lisp), jeden, który obsługuje specyfikacje deklaratywne (jak szablony Prolog lub C ++), jeden który obsługuje coroutines (jak Icon lub Scheme) i taki, który obsługuje paralelizm (jak Sisal).
legends2k

Odpowiedzi:

34

Chociaż terminologia jest daleka od ustandaryzowanej, powszechnym sposobem jest kategoryzowanie głównych paradygmatów programowania

  • Proceduralny
  • Funkcjonalny
  • Logiczny
  • Obiektowy
  • Ogólny

Wydaje się, że już wiesz, jak wygląda programowanie proceduralne.

W funkcjonalnych języków funkcje są traktowane jako obiekty najwyższej klasy. Innymi słowy, możesz przekazać funkcję jako argument do innej funkcji lub funkcja może zwrócić inną funkcję. Paradygmat funkcjonalny oparty jest na rachunku lambda, a przykładami języków funkcjonalnych są LISP, Schemat i Haskel. Co ciekawe, JavaScript obsługuje również programowanie funkcjonalne.

W programowaniu logicznym definiujesz predykaty, które opisują relacje między jednostkami, takimi jak president(Obama, USA)lub president(Medvedev, Russia). Te predykaty mogą się bardzo skomplikować i obejmować zmienne, a nie tylko wartości literalne. Po określeniu wszystkich predykatów możesz zadawać pytania i uzyskać logicznie spójne odpowiedzi.

Wielkim pomysłem w logicznym programowaniu jest to, że zamiast mówić komputerowi, jak obliczać rzeczy, mówisz im, jakie są rzeczy. Przykład: PROLOG.

Paradygmat obiektowy jest w pewnym sensie rozszerzeniem programowania proceduralnego. W programowaniu proceduralnym masz swoje dane, które mogą być typami pierwotnymi, takimi jak liczby całkowite i zmiennoprzecinkowe, typy złożone, takie jak tablice lub listy, oraz typy zdefiniowane przez użytkownika, takie jak struktury. Masz również swoje procedury, które działają na danych. Natomiast w OO masz obiekty, które obejmują zarówno dane, jak i procedury. To pozwala mieć fajne rzeczy, takie jak enkapsulacja, dziedziczenie i polimorfizm. Przykłady: Smalltalk, C ++, Java, C #.

Programowanie ogólne zostało po raz pierwszy wprowadzone w Adzie w 1983 roku i stało się powszechne po wprowadzeniu szablonów w C ++. Jest to idea, że ​​możesz pisać kod bez określania rzeczywistych typów danych, na których on działa, i kompilator musi to rozgryźć. Na przykład zamiast pisać

void swap(int, int);
void swap(float, float);
....

piszesz

void swap(T, T);

raz i Tniech kompilator wygeneruje określony kod dla tego, co może być, kiedy swap()faktycznie jest używany w kodzie.

Programowanie ogólne jest obsługiwane w różnym stopniu przez C ++, Java i C #.

Należy zauważyć, że wiele języków, takich jak C ++, obsługuje wiele paradygmatów. Prawdą jest również to, że nawet jeśli mówi się, że język obsługuje określony paradygmat, może nie obsługiwać wszystkich jego cech. Nie wspominając o tym, że istnieje wiele sporów co do tego, które funkcje są wymagane dla danego paradygmatu.

Dima
źródło
2
Do jakiej kategorii należałby SQL?
Kirk Kuykendall
@KirkKuykendall SQL byłby specjalistycznym lub „małym” językiem.
Kevin Lacquement
17
SQL jest językiem deklaratywnym. Mówisz, co chcesz, i zastanawia się, jak go zdobyć. (Języki „logiczne”, takie jak Prolog, to inny podzbiór języków deklaratywnych)
Izkata,
3
Czy moglibyśmy przedstawić opis procedur, aby uzupełnić odpowiedź?
deworde
3
@Dima Nicea streszczenie. Jednak stosunkowo niewielki nitpick: „programowanie ogólne” nie powstał z użycia szablonów w C ++ i jest również bardzo często używany w językach funkcjonalnych, takich jak Haskell.
Andres F.,
11

Języki programowania mają wiele cech głównie ortogonalnych; najważniejszy z nich polega na paradygmacie lub paradygmatach, które wspierają. Artykuł w Wikipedii wyczerpująco omawia paradygmaty; najważniejsze paradygmaty to prawdopodobnie:

  • Proceduralne / zorganizowane
  • Funkcjonalny
  • Obiektowy
  • Zorientowane na zdarzenia i zorientowane na aspekt
  • Ogólny
  • Logika

Ale języki różnią się także pod innymi względami:

  • System pisania (pisanie dynamiczne vs. statyczne oraz typy mocne i słabe)
  • Zbuduj środowisko procesów i środowiska wykonawczego (interpretowane, skompilowane według kodu bajtowego, w pełni skompilowane)
  • Zarządzanie pamięcią (ręczne jak C / C ++, obowiązkowe automatyczne usuwanie śmieci jak Java, opcjonalnie GC jak D, ...)
  • Dyscyplina oceniania (chętna kontra leniwa; większość języków jest chętna domyślnie, ale wiele dostarcza leniwych konstrukcji)
  • Reguły określania zakresu (porównaj działanie zakresu w PHP, JavaScript i C, trzech językach, które poza tym są dość podobne pod względem składni)
tdammers
źródło
2

Obecnie istnieje kilka różnych paradygmatów programowania:

  • Object Oriented - VB.NET, C #, Java należą do tej kategorii. Kod jest rozmieszczony wokół obiektów, które mają zachowanie i powiązane dane oraz komunikują się ze sobą poprzez przekazywanie wiadomości.
  • Funkcjonalne - do tej kategorii należą Haskel, Scheme, Lisp i F #. Czyste funkcje, które nie mają skutków ubocznych. Myśl funkcjonalnie jak w matematyce. Często sam język można rozszerzyć poprzez jego konstrukcje.
Oded
źródło
Czy to jedyne inne typy?
Dynamiczny
@ perl.j - Nie, ale są to główne, które obecnie korzystają z szerokiego zasięgu. Zobacz wikipedia - Paradygmat programowania .
Oded
@ perl.j istnieje również oparte na stosie: takie jak Forth i Postscript. Logika: taka jak Prolog.
Jetti
2
A typ zerowy to C;)
yati sagade
Prawdziwe pytanie brzmi: ile z nich potrzebuje programista, aby skutecznie kodować większość problemów programistycznych.
JeffO
0

Prolog jest logicznym językiem programowania i jest stosunkowo łatwy do rozpoczęcia. Wymaga zupełnie innego myślenia niż programowanie proceduralne, dlatego dobrze jest odkrywać, gdy próbujesz rozciągnąć swój mózg.

Jeśli pójdziesz na studia, powinieneś wziąć udział w kursie programowania języków, ponieważ ma on na celu wprowadzenie różnych rodzajów języków programowania i ich najlepszego wykorzystania.

c_maker
źródło
0

Większość języków głównego nurtu łączy aspekty programowania imperatywnego, funkcjonalnego i deklaratywnego. Języki niszowe wydają się być bardziej egzotyczne lub wprowadzają ciekawe nowe pomysły, które z tego czy innego powodu nie nadają się do programowania ogólnego. Niektóre, bynajmniej nie wyczerpujące, przykłady:

  • Języki arkuszy kalkulacyjnych (Excel, Formularze Google): Zaprojektowane do obsługi danych tabelarycznych.
  • Języki macierzy (APL, J): Zaprojektowane do szybkiego przetwarzania tablic wielowymiarowych. W J (+/ % #)&.:*:oblicza RMS tablicy. Słynie z tego, że jest zwięzły, znany z tego, że jest nieczytelny.
  • Języki automatyzacji (AutoHotkey, Bash): zaprojektowane w celu usprawnienia typowych zadań, takich jak wypełnianie formularzy, przesyłanie plików itp.
Hovercouch
źródło