Seite 1 von 1

Warum so viele Sprachen?

Verfasst: Mittwoch 27. Februar 2008, 15:46
von maxfoxim
Hi, ich wundere mich warum es so viele Programmiersprachen gibt.
Perl, java, Python, C, und so weiter...
Warum gibts nicht eine Sprache, mit der man ALLES machen kann, die einfach zu schreiben ist, aber für alle Anwendungen gedacht ist, Internetprogrammierung, Datenbanken.
Klar, der eine braucht nen Compiler, der andere den Vorzug der andern Sprache. Nur warum nicht mal eine Sprache, wo man einfach sein Programm schreibt, und je nachdem wie man es gerne hätte, die speziellen Optionen dazuklickt. Quasi schreibt man in Pyhton, aber wenn man ne Webpage haben will, klickt man auch Page-basiertes Programmiern, und falls man ne Datenbank haben will, ne Datenbank optimierte Ausgabe. Müsste doch eigentlich kein zu großes Problem darstellen oder??

Verfasst: Mittwoch 27. Februar 2008, 16:15
von BlackJack
Diese eine Sprache gibt es, und die heisst (Common) Lisp. Das führt letztendlich dazu, dass die Sprache einfach *zu* flexibel ist, weil jeder seine Optionen wählen kann, und letztendlich Programmierer A den Quelltext von Programmierer B nicht mehr versteht, weil jeder seine eigene Sprache zusammen gestöpselt hat, die unter Umständen nicht mehr so recht zusammen arbeiten.

So eine universelle *einfache* Sprache kann es nicht geben, weil die Leute verschieden denken und weil sich verschiedene Probleme mit verschiedenen Paradigmen eleganter ausdrücken lassen als mit anderen. Dem einen fällt das funktionale Paradigma leichter, der andere denkt eher prozedural. Einiges lässt sich funktional elegant ausdrücken, anderes prozedural und für wieder anderes eignet sich ein deklarativer Ausdruck am besten. Eine umfassende Sprache bietet also alles, was sich dann aber wieder mit den verschiedenen "denken" der Programmierer beisst. Wenn die Sprache alles bietet, muss man ja auch mit allem umgehen können.

Also bedienen Sprachen in der Regel gewisse gedankliche Konzepte und eignen sich für bestimmte Aufgaben besser als für andere. So kann man die Sprache wählen, die zu einem selbst und dem Problem am besten passt.

Das Sprachen nicht alles können, ist ja oft ein Argument was *für* die Sprachen sprechen soll. Zum Beispiel, dass es in Python keine Makros gibt, und man damit eine relativ einfache und feste Syntax hat.

Man kann nicht einfach alle Spracheigenschaften von vorhandenen Sprachen zusammen rühren und erwarten, dass da eine gute, benutzbare Sprache bei heraus kommt.

Verfasst: Mittwoch 27. Februar 2008, 16:52
von Leonidas
Ja, die Komplexität von Common Lisp wird klar, wenn man sieht dass dessen Spezifikation um die tausend Seiten hat, die von Scheme hingegen nicht einmal so lang ist wie der Index der CL-Spezifikation. Es sind aber beides Lisp-Dialekte.

Und warum es verschiedene Sprachen gibt liegt auch nur teilweise daran, dass es verschiedene Anwendungsgebiete gibt. Natürlich, ich möchte nicht Assembler zur Logik-Programmierung nutzen oder Java2K zur Steuerung von Reaktoren. Aber viele Dinge lassen sich ganz unterschiedlich lösen und manche Leute Lösen ein Problem so, andere anders.

Das ist so als würde man fragen: Warum gibt es so viele Musikstile? Warum hört man nicht Klassik? Du wirst einwenden dass es in der Disco obschon möglich, es schlecht geht und damit hast du deine ursprüngliche Frage auch gleich beantwortet.

Verfasst: Mittwoch 27. Februar 2008, 16:55
von burli
Hm, warum gibt es millionen von Liedern, tausende unterschiedliche Autos, Kleiderschränke voll unterschiedlicher Klamotten? Ein Lied, ein Auto und Einheiskleidung würden reichen.

Kurz gesagt, jeder hat andere Vorlieben und Anvorderungen.

Verfasst: Donnerstag 28. Februar 2008, 23:01
von maxfoxim
danke für die ausführliche Antworten.
Mir war klar, dass jede Sprache ihre Anwendung hat, man schreibt keine Spiele in MySQL, so weit war ich auch schon. Nur vielleicht ist meine Frage nicht ganz klar geworden: Mir ging es darum, ob es nicht möglich wäre eine Sprache mit EINER syntax zu schreiben, mit der dann, je nach Anwendungsbereich, am Ende man "anklicken" kann, wofür es optimiert werden soll. Datenbank, Spiele, Web etc.
dem einen fällt das funktionale Paradigma leichter, der andere denkt eher prozedural.
Warum ginge z.B. nicht beides in der gleichen Sprache, man kann entscheiden ob man mit der Sprache es so oder so macht...
Um in dem Musikbeispiel zu bleiben. Man kann mit einer E-Gitarre auch Klassikstücke spielen oder Metal. Klar gibts bessere Instrumente für Beethoven und Mozart, aber die Noten lassen sich auch darauf abspielen.
mmh, vielleicht fehlt mir auch die Erfahrung mit Programmiersprachen, um das komplett zu verstehen.

Verfasst: Donnerstag 28. Februar 2008, 23:38
von Oscar
Hi,
Warum ginge z.B. nicht beides in der gleichen Sprache, man kann entscheiden ob man mit der Sprache es so oder so macht...
Um in dem Musikbeispiel zu bleiben. Man kann mit einer E-Gitarre auch Klassikstücke spielen oder Metal. Klar gibts bessere Instrumente für Beethoven und Mozart, aber die Noten lassen sich auch darauf abspielen.
Naja, es gibt Noten und Noten...Als Hobbypianist (und Ex-Gitarrist) sage ich mal,
das es von Beethoven/Mozart Kompositionen gibt, mit denen ein
E-Gitarrist schwer überfordert wäre, weil eine E-Gitarre das gar nicht leisten kann - die
falsche Sprache im übertragenen Sinn.
Aber -um bei Programmierung zu bleiben- ich habe hier mal ein Thema gestartet mit der Frage,
ob mein Problem auch mit Python lösbar sei. Die Antwort war, das ginge wohl und ich müsse dann
dieses und jenes machen und dann würde das schon gehen. Ich habe mir das dann angeschaut
und das ging dann auch. Letztlich war es dann aber doch einfacher und angemessener ein
kleines Shell-Skript zu schreiben. Vielfalt hat schon wirklich Sinn. :wink:
Gruß Oscar

Verfasst: Donnerstag 28. Februar 2008, 23:44
von nemomuk
Warum ginge z.B. nicht beides in der gleichen Sprache, man kann entscheiden ob man mit der Sprache es so oder so macht...
Um in dem Musikbeispiel zu bleiben. Man kann mit einer E-Gitarre auch Klassikstücke spielen oder Metal. Klar gibts bessere Instrumente für Beethoven und Mozart, aber die Noten lassen sich auch darauf abspielen.
mmh, vielleicht fehlt mir auch die Erfahrung mit Programmiersprachen, um das komplett zu verstehen.
naja, du kannst doch mit JavaScript oder Python auch mehrere Programmierstile verwenden?

Verfasst: Donnerstag 28. Februar 2008, 23:58
von nkoehring
Ja sicherlich. Man kann (quasi-)prozedural, ein bisschen funktional und vorallem objektorientiert mit Python programmieren. Aber im großen und ganzen kann man nur letzteres richtig...

Verfasst: Freitag 29. Februar 2008, 08:56
von nemomuk
Python versucht ja auch in vielen Bereichen zu glänzen und nicht nur in einem "Spezial"-Gebiet. Du kannst ja mit Python Spiele, Webapps etc. machen. Python ist sehr vielseitig einsetzbar.

Verfasst: Freitag 29. Februar 2008, 09:48
von Leonidas
nkoehring hat geschrieben:Ja sicherlich. Man kann (quasi-)prozedural, ein bisschen funktional und vorallem objektorientiert mit Python programmieren. Aber im großen und ganzen kann man nur letzteres richtig...
Hu, was fehlt dir für funktionale Programmierung? Closures sind da, First Class Methods sind da, map() ist da, filter() existiert, reduce() (foldl + foldr) ist da, partielle Methoden gibts, die itertools bieten viele Funktionen zur Listenbearbeitung. In Python gibt es nur zusätzlich Statements statt nur Expressions, aber das ist eigentlich zu verschmerzen.

Und wie du nicht richtig prozedural in Python programmieren kannst, wird mir auch nicht ganz klar...

maxfoxim: das mit der einen Sprache ist immer noch ein Problem. Klar, du kannst eine Sprache mit einer Syntax schreiben, aber eine Sprache wird in der Regel erst dadurch angenehm zu nutzen, wenn es syntaktischen Zucker gibt. Und zwar welchen, der dem Aufgabengebiet angemessen ist. Ansonsten schreibst du bis zum erschöpfen um es danach sowieso optimieren zu lassen, während andere mit der entsprechenden Sprache schon längst am Ziel sind.

Verfasst: Freitag 29. Februar 2008, 10:39
von nkoehring
naja... klar kann man rein prozedural in Python programmieren, aber am Ende macht man ja doch alles mit objekten - ob man will oder nicht. Das meinte ich damit :roll:

Verfasst: Freitag 29. Februar 2008, 17:57
von nemomuk
naja, aber nur weil man mit was mit Objekten macht, finde ich, ist das noch lange nicht Objektorientiert... oder?

Edit (Leonidas): Rest nach "Programm neu starten" abgesplittet.

Verfasst: Dienstag 25. März 2008, 15:39
von mutanab
Philosophie beim Programmieren kann nie schaden.

Zum einen gibt es so was wie "Allgemeingültigkeit", die nennt sich Algorithmik. Wenn man sich einen guten Algorithmus überlegt hat (ich bin da noch sehr altmodisch und kann auf Papier und Stift nicht verzichten), dann kann man diesen Algorithmus theoretisch in so gut wie allen Programmiersprachen realisieren. Aber: wie elegant, wie einfach oder schwer das geht, das hängt davon ab, wie sehr die Sprache zum Problem passt. Es gibt Algorithmen die lassen sich in einer Sprache absolut elegant und Codesparend implementieren, wobei sie in einer anderen Sprache hunderte von Zeilen hätten. Beispiel? Implementiere mal einen endlichen Automaten in einer imperativen Programiersprache, von mir aus Modula und dann einmal in Perl. Resultat: Das Modula-Programm wird pro Automaten-Zustand mindestens drei Code-Zeilen verschlingen, was bei einiger Maßen brauchbaren Automaten leicht in mehreren 100 Codezeilen ausartet. Oder aber du bastelst die einen regulären Ausdruck für den Automaten und schreibst in deinem Perl-Programm eine Zeile. Fertig.

Es gibt also Gründe sich für bestimmte Probleme bestimmten Programmierkonzepten: imperativ - objektorientiert - funktional etc. zuzuwenden, ebenso wie es dann im Detail von Vorteil sein kann, sich für die eine anstatt für die andere Programmiersprache innerhalb des Programierparadigmas zu entscheiden.

Das ist nur ein simples Beispiel. Es gibt zig mehr. Mal abgesehen von einer gewissen Vorliebe die man im Laufe der Zeit für die ein oder andere Sprache entwickelt, hängt es tatsächlich auch von der Aufgabenstellung ab, welche Sprache sich für welches Problem am besten eignet. Bei schwerwiegenderen Fällen sollte man, auch wenn man zum Beispiel Python noch so liebt, hin und wieder über den Tellerrand schauen um die Lösung zu optimieren.

Wenn man sich mal anschaut, wie es zu dieser Vielfalt an Programmiersprachen kommt, dann stellt man nicht selten fest, dass dahinter die Motivation stand für einen bestimmten Problemkreis eine handhabbare, zugeschnittene Softwarelösung zu entwickeln.

Und, nun ja, dann ist da ja auch noch der kreative Impuls der uns alle umtreibt und der uns den Floh ins Ohr setzt: "hach, dat könnt isch ma probieren!" Compilerbau ist auch einfach eine Spannende angelegenheit.

erheiterte Grüße
mutanab

PS: "Hu, was fehlt dir für funktionale Programmierung?"
Hm, also schwierig würde es werden, wenn du mit python versuchst referentielle Transparenz in einem Programm nachzuweisen. Dinge die spezielle Beweistechniken von puren funktionalen Programmiersprachen brauchen. Sicherlich ist das ein Spezialgebiet, das die wenigsten Menschen benötigen, aber dennoch gibt es einen kleineren Kreis von Leuten, für die das sehr wichtig ist und auf echte funktionale Programmiersprachen nicht verzichten können.

Verfasst: Dienstag 25. März 2008, 15:55
von BlackJack
Mit "echte funktionale Sprache" meinst Du wohl "rein funktionale Sprache", denn als "unechte funktionale Sprachen" würde ich Klassiker Lisp und Scheme nicht bezeichnen.

Verfasst: Dienstag 25. März 2008, 15:57
von mutanab
Ich meinte pure funktionale Programiersprachen wie ein paar eigentümliche Abkömmlinge von Haskell etc.

Re: Warum so viele Sprachen?

Verfasst: Dienstag 25. März 2008, 16:06
von mkesper
maxfoxim hat geschrieben:Warum gibts nicht eine Sprache, mit der man ALLES machen kann, die einfach zu schreiben ist, aber für alle Anwendungen gedacht ist, Internetprogrammierung, Datenbanken.
Die gibt's doch: Python!

;)

Verfasst: Dienstag 25. März 2008, 16:09
von mutanab
*programmiertauchamliebsteninpython* Bild