Lernen jeder Art von Programmiersprache

24

Ich habe mehrmals gehört, dass jeder Programmierer eine von jeder Art von Sprache lernen sollte. Nun, das ist nicht unbedingt wahr, aber ich halte es für eine gute Idee.

Ich habe eine prozedurale Sprache (Perl) gelernt, aber was sind die anderen Arten?

Was sind die Unterschiede zwischen ihnen und was sind einige Beispiele von jedem?

Dynamisch
quelle
8
Sie sollten sich bewusst sein, dass es unzählige überlappende Möglichkeiten gibt, Sprachen zu kategorisieren. Das gebräuchlichste ist das Programmierparadigma, aber selbst dann gibt es große und kleine Unterschiede, viele völlig getrennte Achsen und viele Sprachen fallen in mehrere Paradigmen.
1
Ich würde die Kategorien vergessen - wenn Sie wirklich daran interessiert sind, aus einer Sprache zu lernen, würde ich sowohl Lisp als auch Scala vorschlagen, wenn Sie mit den beiden fertig werden, mit denen Sie viel zu tun haben.
Bill K
3
Peter Norvigs Ratschlag : Lernen Sie mindestens ein halbes Dutzend Programmiersprachen. Schließen Sie eine Sprache ein, die Klassenabstraktionen unterstützt (wie Java oder C ++), eine, die funktionale Abstraktionen unterstützt (wie Lisp oder ML), eine, die syntaktische Abstraktionen unterstützt (wie Lisp), eine, die deklarative Spezifikationen unterstützt (wie Prolog oder C ++ - Vorlagen) das unterstützt Coroutinen (wie Icon oder Scheme) und eine, die Parallelität unterstützt (wie Sisal).
legends2k

Antworten:

34

Auch wenn die Terminologie alles andere als standardisiert ist, besteht eine gängige Methode darin, die wichtigsten Programmierparadigmen in Kategorien einzuteilen

  • Verfahrens
  • Funktional
  • Logisch
  • Objektorientierter
  • Generisch

Sie scheinen bereits zu wissen, wie prozedurale Programmierung ist.

In funktionalen Sprachen werden Funktionen als erstklassige Objekte behandelt. Mit anderen Worten, Sie können eine Funktion als Argument an eine andere Funktion übergeben, oder eine Funktion kann eine andere Funktion zurückgeben. Das Funktionsparadigma basiert auf der Lambda-Rechnung, und Beispiele für Funktionssprachen sind LISP, Scheme und Haskel. Interessanterweise unterstützt JavaScript auch die funktionale Programmierung.

In der logischen Programmierung definieren Sie Prädikate, die Beziehungen zwischen Entitäten beschreiben, z. B. president(Obama, USA)oder president(Medvedev, Russia). Diese Prädikate können sehr kompliziert werden und Variablen enthalten, nicht nur wörtliche Werte. Nachdem Sie alle Prädikate angegeben haben, können Sie Fragen an Ihr System stellen und logisch konsistente Antworten erhalten.

Die große Idee bei der logischen Programmierung besteht darin, dem Computer nicht zu sagen, wie er die Dinge berechnen soll, sondern zu sagen, was die Dinge sind. Beispiel: PROLOG.

Das objektorientierte Paradigma ist in gewisser Weise eine Erweiterung der prozeduralen Programmierung. In der prozeduralen Programmierung haben Sie Ihre Daten, die primitive Typen wie Ganzzahlen und Gleitkommazahlen, zusammengesetzte Typen wie Arrays oder Listen und benutzerdefinierte Typen wie Strukturen sein können. Sie haben auch Ihre Prozeduren, die mit den Daten arbeiten. Im Gegensatz dazu haben Sie in OO Objekte, die sowohl Daten als auch Prozeduren enthalten. Auf diese Weise können Sie schöne Dinge wie Verkapselung, Vererbung und Polymorphismus haben. Beispiele: Smalltalk, C ++, Java, C #.

Die generische Programmierung wurde erstmals 1983 in Ada eingeführt und verbreitete sich nach der Einführung von Vorlagen in C ++. Dies ist die Idee, dass Sie Code schreiben können, ohne die tatsächlichen Datentypen anzugeben, mit denen er arbeitet, und dass der Compiler dies herausfindet. Zum Beispiel statt zu schreiben

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

du würdest schreiben

void swap(T, T);

einmal und lassen Sie den Compiler spezifischen Code generieren, für was Tauch immer sein mag, wann er swap()tatsächlich im Code verwendet wird.

Die generische Programmierung wird in unterschiedlichem Maße von C ++, Java und C # unterstützt.

Es ist wichtig zu beachten, dass viele Sprachen, wie z. B. C ++, mehrere Paradigmen unterstützen. Es ist auch richtig, dass eine Sprache, von der gesagt wird, dass sie ein bestimmtes Paradigma unterstützt, möglicherweise nicht alle Merkmale des Paradigmas unterstützt. Ganz zu schweigen davon, dass es viele Meinungsverschiedenheiten darüber gibt, welche Funktionen für ein bestimmtes Paradigma erforderlich sind.

Dima
quelle
2
In welche Kategorie würde SQL fallen?
Kirk Kuykendall
@ KirkKuykendall SQL wäre eine spezialisierte oder "kleine" Sprache.
Kevin Lacquement
17
SQL ist eine deklarative Sprache. Sagen Sie ihm, was Sie wollen, und finden Sie heraus, wie Sie es bekommen. ("Logische" Sprachen wie Prolog sind eine andere Untergruppe der deklarativen Sprachen)
Izkata
3
Könnten wir eine Beschreibung des Verfahrens haben, um die Antwort vollständiger zu machen?
2.
3
@Dima Schöne Zusammenfassung. Ein relativ kleiner Trottel: "Generic Programming" ist nicht durch die Verwendung von Templates in C ++ entstanden und wird auch sehr häufig in funktionalen Sprachen wie Haskell verwendet.
Andres F.
11

Programmiersprachen weisen eine Reihe von meist orthogonalen Merkmalen auf. Das prominenteste liegt in dem Paradigma oder den Paradigmen, die sie unterstützen. Der Wikipedia-Artikel befasst sich ausführlich mit Paradigmen. Die wichtigsten Paradigmen sind wahrscheinlich folgende:

  • Prozedural / Strukturiert
  • Funktional
  • Objektorientierter
  • Ereignisgesteuert und aspektorientiert
  • Generisch
  • Logik

Aber Sprachen unterscheiden sich auch in anderer Hinsicht:

  • Typisierungssystem (dynamische oder statische Typisierung und starke oder schwache Typen)
  • Buildprozess und Laufzeitumgebung (interpretiert, Bytecode-kompiliert, vollständig kompiliert)
  • Speicherverwaltung (manuell wie C / C ++, obligatorische automatische Garbage Collection wie Java, optional GC wie D, ...)
  • Bewertungsdisziplin (eifrig gegen faul; die meisten Sprachen sind standardmäßig eifrig, aber viele bieten faule Konstrukte an)
  • Scoping-Regeln (vergleiche die Funktionsweise von scope in PHP, Javascript und C, drei Sprachen, die sich sonst in der Syntax ziemlich ähneln)
tdammers
quelle
2

Es gibt verschiedene Programmierparadigmen, die derzeit in Mode sind:

  • Objektorientiert - VB.NET, C #, Java fallen in diese Kategorie. Code wird um Objekte angeordnet, die Verhalten und verwandte Daten aufweisen und durch Weiterleiten von Nachrichten miteinander kommunizieren.
  • Funktional - Haskel, Scheme, Lisp und F # fallen in diese Kategorie. Reine Funktionen, die keine Nebenwirkungen haben. Denken funktioniert wie in Mathematik. Oft kann man die Sprache selbst durch ihre Konstrukte erweitern.
Oded
quelle
Sind das die einzigen anderen Typen?
Dynamische
@ perl.j - Nein, aber dies sind die wichtigsten, die heutzutage weit verbreitet sind. Siehe Wikipedia - Programmierparadigma .
Oded
@ perl.j gibt es auch stapelbasiert: wie Forth und Postscript. Logik: wie Prolog.
Jetti
2
Und der nullte Typ ist C;)
Yati Sagade
Die eigentliche Frage ist, wie viele davon ein Entwickler benötigt, um die meisten Programmierprobleme effektiv zu codieren.
JeffO
0

Prolog ist eine logische Programmiersprache und ist relativ einfach zu erlernen . Es erfordert ein völlig anderes Denken als die prozedurale Programmierung, daher ist es gut zu erforschen, wenn Sie versuchen, Ihr Gehirn zu dehnen.

Wenn Sie ein College besuchen, sollten Sie einen Kurs über Programmiersprachen belegen, der darauf abzielt, die verschiedenen Arten von Programmiersprachen vorzustellen und zu erklären, wofür sie am besten geeignet sind.

c_maker
quelle
0

Die meisten gängigen Sprachen mischen Aspekte der imperativen, funktionalen und deklarativen Programmierung. Nischensprachen neigen dazu, exotischer zu sein oder interessante neue Ideen einzuführen, die aus dem einen oder anderen Grund nicht für die allgemeine Programmierung geeignet sind. Einige, keineswegs vollständige Beispiele:

  • Tabellenkalkulationssprachen (Excel, Google Forms): Entwickelt für die Verarbeitung tabellarischer Daten.
  • Array-Sprachen (APL, J): Entwickelt für die schnelle Verarbeitung mehrdimensionaler Arrays. (+/ % #)&.:*:Berechnet in J den Effektivwert eines Arrays. Bekannt für seine Prägnanz, berüchtigt dafür, unleserlich zu sein.
  • Automatisierungssprachen (AutoHotkey, Bash): Optimiert allgemeine Aufgaben wie das Ausfüllen von Formularen, das Hochladen von Dateien usw.
Hovercouch
quelle