Warum größere Projekte in Python keinen Sinn machen


Von den Sprachstandards her ist Python ausgezeichnet um größere Projekte darin zu realisieren. Die Python Virtual Machine ist hinreichend robust, die Python-internen Möglichkeiten zur objektorientierten Programmierung sind vorbildlich und das Modulkonzept erlaubt es Klassen zu Packages zu aggregieren. Technisch gesehen kann man mit Python durchaus Projekte mit 100k LoC oder sogar noch mehr realisieren. Es gibt nur ein Problem: wer möchte diese Programme verwenden? Endanwender machen üblicherweise einen großen Bogen um GUI Applikationen die in Python erstellt wurden, und Systemprogrammierer werden garantiert keine Libraries einbinden, die in Python geschrieben wurden. Dagegen spricht schon die geringe Performance. Python erinnert an das Schicksal was Turbo Pascal ereilt hat: es ist eine Lehrsprache in der Programmierausbildung, kann aber nicht für reale Projekte eingesetzt werden.

Die Sprache als solche ist vorbildlich: Python ist sehr elegant designt. Und es lässt sich darin auch produktiver Sourcecode schreiben, in dem Sinne dass man für einfache Aufgaben wie das Sortieren eines Arrays eben nicht erst tagelang in Foren um Rat fragen muss, sondern einfach den pythonic way of life verwendet. Nur, stellen wir uns mal vor wie das in der Realität konkret aussieht. Man schreibt sein elegantes Python Programm runter, es besteht aus 12000 Lines of Code, nutzt dafür selbstverständlich mehrere Klassen und dann? Rein theoretisch ist das Script jetzt überall ausführbar, aber wer will das auf seiner Maschine tatsächlich verwenden? Das Problem mit Python ist, dass es nur eine weitere Programmiersprache ist in einer ganz speziellen Nische (anfängerfreundlich und interpretiert) und das der damit erstellte Code garantiert nicht in größere Projekte wird einfließen. Genau genommen kann man Python Programmierer nur bemitleiden, weil ihre schönen Programme sonst keiner haben will. Java Programmierer werden ganz sicher keine Python Bibliothek in ihr Projekt einbinden, C Programmierer auch nicht. Mit etwas Glück kann man die Library im Pypi Repository unterbringen, aber das wars dann auch schon. Es ist keineswegs Zufall dass es keine großen namenhafte Python Projekte gibt, mit mehr als 10k LoC. Wie gesagt, rein technisch geht das ausgezeichnet, nur leider ist die Welt außerhalb von Python sehr viel kritischer in solchen Dingen.

Ich bin mir nicht sicher, ob Guido van Rossum der Welt einen Gefallen getan hat, als er die Sprache erfunden hat. Auf den ersten Blick hat Python viele Vorteile. So richtet es sich nicht explizit an Informatiker sondern an Wissenschaftler aus den Bereichen Physik, Linguistik und Geschichtswissenschaften. Ferner ist als interpretierte Sprache mit kurzen Edit-Compile-Run Zyklen konzipiert wodurch man in kurzer Zeit viel Code schreiben kann. Genau genommen ist Python also in eine Lücke vorgestoßen wofür es davor noch keine Sprache gab. Aber kann es wirklich das Ziel sein, zu den gefühlten 500 Programmiersprachen immer weitere hinzuzufügen um darüber die Spaltung der Entwickler voranzutreiben? Reicht es noch nicht, wenn Java und C# Programmierer gegeneinander arbeiten? Braucht man neben PHP, go und Perl noch weitere Sprachen? Python hat sogar das seltene Kunststück fertiggebracht zu sich selber inkompitbel zu sein. Bekanntlich laufen Python3 Programme nicht mehr auf einem Python2 Interpreter. Und das Pypy Projekt ist zwar ein JIT Compiler kann aber nicht alle Bibliotheken aus cpython verarbeiten. Irgendwie ist Python eine ganz eigene Welt die im universitären Umfeld prächtig gedeiht und die dazu führt, dass Leute ihre Zeit verschwenden. Anders kann man es nicht ausdrücken, wenn man Ressourcen in den Aufbau von Python Sourcecode investiert.

BEISPIEL
An einem kleinen Beispiel möchte ich das Thema vertiefen. Früher habe ich schön mit pygame Spiele programmiert. Das geht wunderbar einfach, und mit erstaunlich wenig Sourcecode. Man fängt einfach oben an mit “import pygame”, aktiviert das Fenster, und schon kann man seine erste Box auf den Bildschirm zaubern. Jetzt wo ich nicht pygame nutze, sondern in C++ mit SFML das Spiel realisiere ist es deutlich aufwendiger. Man muss sich durch Manuals auf English wühlen, es gibt für alles mindestens 4 Möglichkeiten und mehr Sourcecode benötigt man auch. Für den Computer macht es keinen Unterschied. In beiden Fällen sieht man eine GUI in der etwas angezeigt wird, und beidesmal mit ruckelfreien 60fps. Der Unterschied liegt in der Community die hinter der Sprache steht. Projekt-1 wendet sich an die Python Community, also an Nicht-Informatiker, während Projekt-2 sich an C++ Programmierer richtet. Die Community unterscheiden sich im Anspruch an sich selbst. C++ Programmieren tönen lautstark dass sie die besten Programmierer der Welt seien und demzufolge haben sie auch den Ehrgeiz die besten Programme des Universums zu schreiben, während es in der Python Community sehr viel entspannter zugeht, in dem Sinne dass man sich gegenseitig versichert Anfänger zu sein und überhaupt sich eher mit mit inhaltlichen Dingen und weniger mit Programmieren beschäftigt. Damals in Python war meine Produktivität immerhin bei stolzen 10 Zeilen Code am Tag, jetzt mit C++ in SFML ist sie abgesunken auf 5 Zeilen täglich. Dadurch verdoppelt sich natürlich die Zeitdauer bis das Projekt fertig ist.

Update 2018-10-15
During playing around with the WordPress backend, the voting for this blogpost was accidentally deleted. Before the mishap happend, the post was rated as “very poor” by 5 people.

Advertisements

5 thoughts on “Warum größere Projekte in Python keinen Sinn machen

  1. Interessante Analyse.

    Warum wird Python an Universitäten verwendet?

    Ein Anfängerbeispiel: zwei Zahlen werden addiert, die Summe wird ausgegeben:

    In Java:

    import java.util.*;
    public class einausgabe {
    public static void main(String[] args) {
    Scanner ScIn= new Scanner(System.in);
    System.out.print(“1. Zahl: “);
    int i=ScIn.nextInt();
    System.out.print(“2. Zahl: “);
    int j=ScIn.nextInt();
    int s=i+j;
    System.out.println(
    “Die Summe von “+i+” und “+j+” ist “+s);
    }
    }

    In Python:

    i = int(input(“1. Zahl: “))
    j = int(input(“2. Zahl: “))
    print(f”Die Summe von {i} und {j} ist {i+j}”)

    Dazu kommt, dass in der Java-Version etwa 80% des Programms zu Beginn noch nicht erklärt werden kann (import, public, class, static, void, main, String, args. Scanner, System…) und im Unterricht dann mit den Worten “Schreibt es einmal hin, später wird erklärt, was das ist” eingeführt – eine pädagogisch hochgradige Fehlleistung.

    Wer verwendet Python für große Projekte?

    Nun, Goggle ist sicher nicht irgendwer. Bitte gelegentlich ansehen:

    Google: http://quintagroup.com/cms/python/google
    Google API: https://cloud.google.com/ml-engine/docs/tutorials/python-guide?hl=de

    Zitat: “Aber kann es wirklich das Ziel sein, zu den gefühlten 500 Programmiersprachen immer weitere hinzuzufügen um darüber die Spaltung der Entwickler voranzutreiben?”

    Meine Meinung dazu: wenn das Paradigma lautet, den status quo einzufrieren, bedeutet ein Negieren jeder Weiterentwicklung. Aber gerade davon lebt die Wissenschaft und die Wirtschaft.

    Zitat: “Braucht man neben PHP, go und Perl noch weitere Sprachen?”

    Meine Meinung: Ja. Schon einmal probiert, in PHP ein Programm zu schreiben, das eine SQL-Datenbank abfragt, daraus eine Webseite baut, die Java-Script-Formulare enthält, die dann wieder von dem PHP-Programm eingelesen werden und in verarbeiteter zurück in die Datenbank wandern? Dieses PHP-Programm enthält dann eine tolle Mischung von PHP, HTML, Jascript, SQL.Ich habe PHP verwendet – jetzt nicht mehr, nie wieder! In Python gibt es wunderschöne Frameworks, wie Django oder Web2py. Ich habe mich für Web2py entschieden. Das geschilderte Programmstück ist dort nur ein paar Zeilen lang und sehr übersichtlich.

    Like

    • Universitäten und große Firmen wie Google sind am besten in der Lage einzuschätzen welche Programmiersprachen benötigt werden um echte Programmierprojekte voranzubringen. Sie haben jahrzehntelange Erfahrung in der Lehre und sind untereinander gut vernetzt. Was man in einem Java Kurs an Universität 1 lernt kann man an jeder anderen Universität weltweit anwenden und wird auch in einem Firmenprojekt exakt in dieser Sprache programmieren. Die Java Virtual Machine ist nicht nur ein betriebsssstemunabhängiges Framework sondern ist auch in der Lage Python Code auszuführen. Dies ist insbesondere für Webanwendungen interessant. Anders als in früheren Publikationen befürchtet, sind Just-in-time Compiler sehr performant und skalieren über mehrere CPU Kerne hinweg in Cloudumgebungen. C++ hat im Gegensatz dazu den Nachteil, dass die Programmierung systemnah ist und der Sourcecode unnötig lang ist, was in modernen Szenarien dazu führt, dass Projekte oft scheitern.

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.