Das wird jetzt eine lange Geschichte. ;-)
Ich komme ursprünglich aus der Visual Basic 6.0 Ecke. Aber je größer die Programme wurden, desto mehr Probleme tauchten auf (Stichwort DLL-Hell).
Dann kam noch dazu, dass Microsoft, statt Visual Basic 6 zu verbessern, Visual Basic.NET eingeführt hat. Auch das habe ich mir eine Weile angetan. Ich habe mich eingelesen und mit Visual Basic.NET ein paar Programme geschrieben. Auch in der Web-Programmierung mit .NET habe ich mich versucht. Das war ein ziemlich unproduktives Jahr. Mein Fazit: Alles wurde komplizierter -- alles wurde komplexer -- alles wurde aufwändiger. Eine andere Programmiersprache musste her.
http://www.99-bottles-of-beer.net/
Genau zu dieser Zeit befasste ich mich auch intensiv mit Linux und musste feststellen, dass es gar nicht so einfach ist, eine Programmiersprache zu finden, die unter Linux und unter Windows ausführbar ist, ohne große Unterschiede zwischen den Betriebssystemen zu machen. Es bringt nichts, wenn ich Programme nur für Linux schreibe. Diese kann ich viel zu wenigen Kunden schmackhaft machen. Es ist viel interessanter, ein Programm zu schreiben, das in beiden Welten funktioniert. Je mehr Programme in beiden Welten funktionieren, desto einfacher kann man Windows-Benutzer langsam an Linux gewöhnen. Nichts ist einfacher als einen Manager davon zu überzeugen, im Betrieb Linux zu benutzen, wenn die Programme, die er vorher von Windows gewöhnt war, unter Linux genau so gut laufen. ;-)
Ich probierte auch Mono aus, aber damit schaffte ich es nicht einmal ein Backup-Programm zu schreiben das unter Linux und Windows richtig gut läuft. Mono machte noch zu viel Unterscheidungen zwischen Windows und Linux. Man musste immer wieder im Programmcode unterscheiden, ob das Programm unter Windows oder unter Linux ausgeführt wird. -- Zu umständlich.
Ich las mich etwas in C++ ein und löcherte die C++-Newsgroups mit Fragen über die Programmierung von Programmen, die unter Linux und Windows gleichermaßen gut laufen. Was ich nicht gedacht hätte: Mit C++ ist es ziemlich aufwändig, ein Programm zu schreiben, das unter Windows und Linux läuft. Und das obwohl der Grundstock der Sprache überall funktioniert.
In Perl habe ich mich nie eingelesen. Die Perl-Programme sahen mir immer zu chaotisch aus. PHP kam gar nicht erst in Frage, da ich schon zu PHP/FI-Zeiten (also ziemlich am Anfang) davon geschädigt wurde und damit -- für PHP typische -- Schrott-Websites erstellte, die kaum wartbar waren.
Dann probierte ich Ruby aus. Nicht lange, nur ein paar Wochen. Bis ich merkte, dass Ruby Perl einfach zu nahe steht und man damit viel zu leicht viel zu kryptische Programme schreiben kann.
Auf einmal stand ein helles Licht am Horrizont! ;-) Ich entdeckte Python!
Kleine Programme lesen sich wie eine Prototyp-Sprache, sind aber schon fertige Programme. Auf die unnützen Klammerungen wird komplett verzichtet. Blöcke sind durch Einrückungen eindeutig gekennzeichnet. Also das was jeder professionelle Programmierer schon intutitiv macht (die Einrückung), dient hier automatisch zur Kennzeichnung von Blöcken. Wenn man Blöcke einrückt, dann gibt es keinen Grund mehr für die Klammern. Also wurden diese einfach weg gelassen.
Zuerst dachte ich mir, was soll denn das für eine Sprache sein? So fast ohne Klammern. Keine statischen Datentypen. Kein BEGIN und END.
Aber schon nach wenigen Stunden begann ich die Vorteile darin zu verstehen. Wenn alle Python-Programmierer gezwungen sind Einrückungen zu verwenden, dann lassen sich Programme von anderen Programmierern (fast) genau so gut lesen wie die eigenen Programme.
Zuerst wollte ich Python meinen Visual Basic Programmierstil aufzwingen. Aber das funktioniert nicht. Man muss anders programmieren und das führt automatisch zu schöneren, einfacheren Programmen.
Es gibt für ein Problem meist auch nur eine Möglichkeit dieses zu lösen. Das war ein wichtiger Punkt für Guido van Rossum als er diese Sprache entwickelte. Er wollte eine einfache Sprache schaffen, die man nicht erst monatelang erlernen muss. Alles sind Objekte! Jedes Objekt (auch Zahlen oder Strings) haben ihre eigenen Methoden. Man kann aus einem Text oder einer Liste mit Hilfe der Slice-Syntax ([]) Teile raus holen.
>>> print("Ich bin ein Text"[0:3])
Ich
Man kann über Texte, Listen, Tuppel, usw. iterieren.
>>> text = "ABC"
>>> for char in text:
... print(char)
...
A
B
C
>>>
Listen, Tuppel, usw. können jede Art von Objekten enthalten. Diese Objekte können wiederum Objekte enthalten. Usw.
>>> my_list = ["ABC", 1, 2.0, ["DEF", 1]]
>>> for item in my_list:
... print(item)
...
ABC
1
2.0
['DEF', 1]
>>>
Es gibt nur eine FOR-Syntax
for <element> in <elements>:
Wenn man for i = 0 to 9
nachbilden möchte, dann braucht man nur über eine Liste mit diesen Zahlen iterieren:
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
Zum Erstellen von solchen Listen gibt es natürlich einen Befehl den man in so einem Fall einsetzen kann:
for i in range(10):
Wie man sieht, wird sogar beim For-Befehl darauf geachtet, dass es nur eine Möglichkeit gibt, etwas zu tun. Dadurch gibt es ziemlich wenige Schlüsselwörter (ich glaube um die 20-30 herum) die man sich merken muss. Und so wird die Basis der Sprache einfach gehalten.
Trotzdem ist Python ziemlich mächtig (Batteries included). Es gibt für sehr viele Anwendungszwecke Zusatzmodule die man importieren kann. Datenbankzugriffe, Spieleprogrammierung, Mathematik, schnelle Arrays, Web-Programmierung, Grafische Oberflächen (GUI-Programmierung), usw.
Module, bei denen es auf die Geschwindigkeit ankommt, sind meist in C programmiert, so dass Python auch in wissenschaftlichen und grafischen Anwendungen sehr oft eingesetzt wird.
Viel Spaß beim Ausprobieren von Python und liebe Grüße,
Gerold :-)
Ich programmiere Progressive Web Applications, Mobile Apps, Desktop-Programme und noch vieles mehr. Falls es dich interessiert, findest du mehr Informationen darüber auf meiner Business-Website.