On Fri, Dec 01, 2006 at 10:25:30PM +0100, Thomas Guettler wrote:
Hallo,
... und dachte, es könnte vielleicht jemanden interessieren:
dann mach ich gleich mal mit ;)
Also ich selbst benutzte Perl nun schon eine ganze Weile (ich glaube, als ich angefangen habe Perl zu lernen, konnte man noch legal Perl4 Bücher im Buchladen kaufen), dennoch habe ich mir in der letzten Woche nun doch mal Python angeschaut... (keine Ahnung warum ich es noch nicht eher gemacht habe, vielleicht Angst vor Veränderung?)
Wenn ich mir Thomas' Vergelich zwischen Perl und Python in Ruhe bis zu Ende durchlese (auch wenn es als Perl-Fan an manchen Stellen schwer fällt ;) muss ich sagen, dass er im Großen und Ganzen Recht hat.
Es fühlt sich für mich so an, als würde man bei Python Klarheit und Eindeutigkeit auf Kosten von Kompaktheit und Vielfälltigkeit bekommen.
Das man auch in Perl übersichtliche und gutwartbare Programme schreiben kann, davon bin ich überzeugt (siehe auch [1]). Allerdings glaube ich, dass man dazu auch eine Menge Erfahrung braucht. Hier macht es sich Python leichter, es beschneidet den Programmierer in seiner Freiheit und hilft so Fehler und Uneindeutigkeiten von vornherein zu vermeiden.
Meiner Meinung nach ist Perl wesentlich individueller. Quellcode von unterschiedlichen Menschen sieht sehr oft auch unterschiedlich aus. Ich merke manchmal sogar an mir selbst, dass ich gleiche Probleme an verschiedenen Tagen der Woche auf ganz unteschiedliche Art und Weise in Perl löse (Vielleicht bin ich ja ein bissschen schizophren?). Soetwas kann einen manchmal auch verunsichern!
Weiterhin würde ich unterstellen, dass Perl auch nicht so einfach projektkombatibel ist. Damit meine ich die Arbeit von mehreren Entwicklern am gleichen Quellcode. Aus eigener Erfahrung kann ich sagen, dass man in so einem Szenario viel Zeit damit verbringt, sich über den Quellcode der anderen zu ,,ärgern'', weil er z.B. zwei Zeilen länger als die eigene Version ist, oder ein Zwischenvariable zu viel nutzt. Anschließend fängt man dann an, den Quellecode zu verändern... kurzum, man hätte auch gleich alles selbst machen können.
Damit Projekte mit Perl funktionieren, sind klare Regeln und ein einheitliches (hohes) Sprachniveau notwendig! Das ist in der Praxis leider oft nicht gegeben. :(
Insofern halte ich Python auch für pädagogisch sinnvoller. Der Programmierneuling wird am Anfang vom Interpreter gezwungen, sich an bestimmte Regeln zu halten (z.B. Einrückung). Die Beschränktheit der möglichen Lösungen eines Problems in Python schafft Sicherheit.
Sicherlich ist das für uns ,,Perlprofis'' kein Argument, schließlich kennen wir unsere Sprache sehr gut und wissen auch nachts im Schlaf, was der Unterschied zwischen ,,eq'' und ,,=='' ist. Allerdings nützt das in der Realität leider wenig, da man oft mit Menschen zusammenarbeitet, die nicht ganz so versiert sind.
Ein Beispiel aus dem Leben: Mein Mitbewohner (angehender Informatiker) musste im 3. Semster eine Projekt beackern, bei dem es um Messdatenauswertung und schliessende Visualisierung mit gnuplot ging. Das ganze sollte in Python realisiert werden. Dieses Projekt war auch gleichzeitig sein erster Berührungspunkt mit Python. (Interesanterweise scheinen Uni-Informatiker sowieso standardmäßig ziemlich wenig mit praktischer Kodierung zu tun zu haben ;) Der Quellcode der entstand, war für das erste mal durchaus okay, vertändlich und wiederverwendbar.
Meine These: Hätte er es in Perl kodiert, hätte man es ungesehen wegschmeissen können.
Hier noch ein paar Gedanken zum Punkt: Wie ich Python in Zukunft einsetzen werde.
Für größere Projekte, die perspektivisch vielleicht in C/C++ kodiert werden sollen, ist es zum Prototyping meiner Meinung nach besser geeignet als Perl. Wenn es am Ende nicht unbedingt um Performance geht, ist eine Überführung in eine kompilierte Sprache wahrscheinlich meistens sogar unnötig. Pythons standardmäßig stärkere OOP punktet hier im Vergleich zu Perl. Gestern habe ich z.B. ein bisschen mit QT für Python herumgespielt. Wenn man in QT/C++ fit ist, weiss man spätestens nach dem zweiten QT/Python Beispiel, wie der Hase läuft und kann intuitiv und schnell loslegen. Python scheint mir momentan auch mehr Bindings zu C/C++-Biliotheken zu haben. Somit kann man also auch in Python durchaus schnellen Code generieren.
Auf der anderen Seite habe ich wahrscheinlich auch nicht immer Lust, in jedem kleinen Script mit Regulären Ausdrücken, erst ein Compile/Match druchzuführen. Das geht in Perl dann doch wesentlich einfacher.
Desweiteren werden ja einige der Kritikpunkte mit Perl6 wirklich behoben werden (siehe auch [2]).
Allseits noch ein schönes Wochenende! Marcus
-- [1] http://www.oreilly.de/catalog/perlbp/ [2] http://www-user.tu-chemnitz.de/~maob/lectures/perl6-essentials.html