Frage

Edit: Da diese Frage eine Menge Verbesserungen gefragt wurde, in den Standard-Python wissenschaftlichen Bibliotheken geschehen ist (das der Zielbereich war). Zum Beispiel hat das numpy Projekt große Anstrengungen gemacht, um die Docstrings zu verbessern. Man kann immer noch argumentieren, wenn es möglich gewesen wäre, diese Fragen kontinuierlich von Anfang an zu adressieren.


Ich habe diese etwas ketzerische Frage: Warum unordentlich Code haben so viele Python-Bibliotheken haben und folgen nicht Standard Best Practices? Oder denken Sie, dass diese Beobachtung ist absolut nicht wahr? Wie vergleicht die Situation in anderen Sprachen? Ich interessiere mich für Ihre Meinung dazu.

Einige Gründe, warum ich den Eindruck habe, dass die Qualität fehlt:

  • Die Docstrings sind oft völlig fehlen oder unvollständig sind, auch für die öffentliche API. Es ist schmerzhaft, wenn eine Methode *args und **kwargs nimmt aber nicht dokumentiert, welche Werte gegeben werden können.

  • Bad Python Programmierpraktiken, wie das Hinzufügen neuer Attribute außerhalb von __init__. Dinge wie diese der Code schwer zu lesen ist (oder zu halten).

  • Kaum Bibliotheken der PEP8 Codierungskonventionen folgen. Manchmal sind die Konventionen nicht einmal konsistent in einer einzigen Datei.

  • Das gesamte Design ist etwas chaotisch, ohne klare API. Es scheint, dass bei weitem nicht genug Refactoring durchgeführt wird.

  • Schlechte Unittest Abdeckung.

Sie mich nicht falsch, Ich liebe absolut Python und sein Ökosystem . Und auch wenn ich mit diesen Bibliotheken zu kämpfen sie erhalten im Allgemeinen die Arbeit erledigt und ich bin dankbar für die . Aber ich denke auch, dass in dem Ende Tonne Entwickler Zeit, weil diese Probleme verschwendet. Vielleicht, weil Python gibt Ihnen so viel Freiheit, dass es sehr einfach ist, schlechten Code zu schreiben .

War es hilfreich?

Lösung

In Bezug auf Dokumentation, ist es nicht nur Python. Wenn es einen einzigen Faktor, der die weitere Verbreitung von OSS verhindert ist, meiner Meinung nach, die wirklich schreckliche Niveau der Dokumentation der meisten OSS-Projekten. Dies beginnt bei der Code-Ebene und erstreckt sich auf die Benutzerdokumentation. Kann ich jedem arbeiten an OSS nur sagen:

a) Kommentieren Sie den Code! Es gibt nicht so etwas wie Selbst Dokumentieren Code!

b) Verbringen Sie mindestens 25% des Projektzeitbudgets auf Endbenutzer-Dokumentation.

Und ich weiß vage, was ich rede - ich habe ein paar OSS-Projekte meiner eigenen, ich zu mehreren anderen beigetragen haben und ich OSS verwenden fast ausschließlich. Und gestern verbrachte ich über 4 Stunden versucht, ein großes OSS-Projekt erstellen (keine Namen, keine Packung Bohrer), und andernfalls wegen der crappy, widerspruch Dokumentation.

Andere Tipps

  

Statt die Autoren jeweils scheinen ihre eigene glorreiche Konvention zu folgen. Und manchmal sind die Konventionen nicht einmal im Einklang mit der gleichen Datei einer Bibliothek

Willkommen in der wunderbaren Code der realen Welt!

FWIW Python Code, den ich getroffen habe, ist nicht besser oder schlechter als die in einer anderen Sprache.

(Na ja, besser als der Durchschnitt PHP-Projekt, natürlich, aber das ist nicht wirklich fair.)

Das erste, was Sie erkennen müssen, ist, dass Python nicht Frühling, voll ausgebildet ist, vom Kopf von Guido irgendwann um Version 2.x. Es ist im Laufe der letzten zwanzig Jahren stark gewachsen.

In der Tat, eine Reihe von Dingen, die Sie erwähnen (Unittest, zum Beispiel, und PEP-8), gab es nicht, auch wenn einige der Standard-Bibliotheken wurden zuerst geschrieben.

Sie werden wahrscheinlich feststellen, dass je älter die Bibliothek, die Sie betrachten, desto eher werden sie Abweichungen haben aus den aktuellen „Best Practices“ - häufig, weil sie weit verbreitete Annahme dieser Praktiken predate. Neuere Bibliotheken sind eher derzeitigen Praktiken entsprechen.

Darüber hinaus manchmal gibt es oft einen guten Grund für nicht bringt sie auf dem neuesten Stand. Stellen Sie sich gegen die aktuellen Python-Bibliotheken geschrieben mehrere Zehntausende von Zeilen Code haben. Nun entscheidet der Betreuer einer dieser Bibliotheken die Bibliotheken ändern sich die Klassen- und Funktionsnamen zu PEP-8 entsprechen zu machen. Jetzt jeder, den Code funktioniert hat große Mengen davon zu überdenken, damit die Umbenennung Pause Dinge.

Das ist nicht zu sagen, es gibt keine Dinge, die in Python-Bibliotheken verbessern - es gibt! Aber es gibt immer ein Kompromiss zwischen Perfektion und immer Dinge zu erledigen. Das ist ein Grund, warum sie sagen, „Praktikabilität schlägt Reinheit.“

Das ist, weil Python ist nicht von der Unternehmenswelt wie Java oder .Net gesichert.

Wenn ich meine Java-Bibliothek möchte von Sun gefördert werden will ich ihre Richtlinien folgen. Dies ist nicht der Fall mit Python. Ich schreibe meinen Code, Leute es besser finden, und es hat auf seinem eigenen zu entwickeln.

Auch die meisten Python-Entwickler sind von C ++, C, Java, .Net etc. Und sie beginnen Produktion Code zu schreiben ab dem ersten Tag. Dank der Leichtigkeit der Python. Und der Teufelskreis geht weiter.

Auch dauerte es einen Monat, um PEP8 zu kommen und meinen Code Refactoring.

PEP 8 hat sich im Laufe der Zeit verändert. Einige Module folgen ältere Empfehlungen. Sie können mit PIL sehen, dass die Module wie „Bild“ verwendet, wo das Modul eine einzelne Hauptklasse enthält, statt dem empfohlenen Klein für Modulnamen, und in C-Erweiterungen, die den „c“ Präfix verwenden, anstatt die modernere " _“erfolgen.

Einige der Bibliotheken werden von Menschen entwickelt, die durch Traditionen in anderen Bereichen stark beeinflusst werden, wie Java und C ++. Diese Menschen häufiger verwenden Camelcase statt des PEP 8 empfohlen lowercase_with_underscores.

Die Antworten hier wäre nicht vollständig ohne Bezug auf Sturgeon Gesetz : " neunzig Prozent von allem ist Mist. "

  

Neunzig Prozent der [Python-Bibliotheken] sind crud, aber neunzig Prozent von allem ist crud

- Störe Gesetz (paraphrasiert)

Es klingt wie Sie, dass die Code-Qualität zu finden sind gekommen, um nicht den Erwartungen gerecht werden Sie bis erwarten eingestellt wurden. Vielleicht aus der Schule oder Best Practices Büchern oder Senioren-Entwickler.

Nachdem bei mehreren Unternehmen tätig war, fand ich mich regelmäßig zu tun Unit-Tests empfohlen, Dokumentencode, Verwendung Version / Quellcodeverwaltung (alle guten Ratschläge, die ich genommen habe) dann festgestellt, dass die Gebenden dieser Rat nur selten den Rat selbst folgen .

Ich würde sagen, dass Sie den richtigen Eindruck haben, tun, die manchmal die Code-Qualität niedrig ist, sondern nur auf der Grundlage Ihrer Erwartungen. Sicherlich numpy und andere sind sehr nützlich, Pakete, auch wenn sie nicht auf den Standard codieren Sie wurden eingerichtet zu erwarten.

Standards sind Meinungen, und wenn Sie der Meinung sind, die Standards niedrig sind, dann können Sie versuchen, diese Standards zu machen besser durch einen Beitrag, oder zu akzeptieren, ihnen zu helfen, wie sie sind und sicher sein, Code zu schreiben, als Beispiel dient dazu, die Junioren Sie selbst verantwortlich, eines Tages finden werden.

Wie bei matplotlib gibt es Projekt zu verbessern, ist es "pythoness" - http://www.scipy.org/ PyLab

Die Sache mit wissenschaftlichen Bibliotheken, ist, dass sie von Wissenschaftlern geschrieben sind, nicht von professionellem Software-Entwickler. Moveover, sind diejenigen Wissenschaftler verwendet Fortran zu schreiben. Die Frage ist - würden Sie lieber arbeiten Code oder schönen Code haben

PEP8 ist eine Art Führer , kein Stil Anforderung. Darin heißt es auch, dass Sie sollten „wissen, wann inkonsistent zu sein“. Ich persönlich nicht einige der Richtlinien es mag. Ich ziehe camelCase snake_case da ich zu, dass mehr gewohnt bin.

Und ich sehe nicht oft auf den Quellcode der Bibliotheken ich benutze, wenn es absolut notwendig ist (wie Debugging) ist. Ich würde viel lieber das Dokumentation für die Bibliothek ausreichend genug sein, dass ich nie an der Quelle suchen.

Im Ernst, warum kümmern, was Sie wirklich die Quellcode für matplotlib aussieht, solange es das tut, was es soll tun?

ich mit Ihnen auf dem fehlenden docstrings zustimmen (vorausgesetzt, sie sind öffentliche Elemente eher als internes ist), aber das ist nicht der einzige Weg, um eine Bibliothek zu dokumentieren.

Ich glaube, dass Python leidet an zu eifrig auf den Menschen hochgezogen werden, die keine Programmierer sind (von oder Handel Schoo) als Lösung für „braucht einige Programmierung getan? Hier, versuchen Sie dieses einfach und reifes Werkzeug“.

ähnlich wie PHP wurde ein so großer Erfolg und mit so vielen Bibliotheken mit abgründiger Code-Qualität (auch wenn gewährt, ist die durchschnittliche Python Code-Qualität besser als für PHP) - die durchschnittlichen PHP Benutzer ähnlich wie den Durchschnitt Python Benutzer nicht Programmierkenntnisse oder Fähigkeiten viel und sehr wenig Anreiz, sich in dieser Hinsicht zu verbessern - setzen sie etwas zu erreichen, und vielleicht dachten sie es würdig genug ist, mit der Gemeinschaft in Form einer Bibliothek gemeinsam genutzt werden, aber meistens, wenn die Arbeit erledigt ist sie kein Interesse daran hat, den Code oder besser sich zu verbessern (in Programmierkenntnisse, ich meine).

Die Lösung könnte für Python-Bibliothek Repositories (wie PyPI) werden strengere Regeln zu haben, um beigetragen Pakete zu akzeptieren - handhaben dies mit einem Review-Prozess, dessen Zweck es ist, Qualität zu gewährleisten - die gleiche Art und Weise, dass die großen Linux-Distributionen einen Review-Prozess haben vor Hinzufügen eines Pakets auf ihre Repositories.

PEP8 ist nur, dass eine Konvention, keine Anforderung. Es wäre wirklich traurig, wenn alle Python-Programmierer Had zu einem gemeinsamen Satz von Regeln zu halten, verlieren wir die Begeisterung über die geringsten Probleme.

Was fehlt Docstrings betrifft - ja, können sie helfen, wenn interaktive Hilfe bei der Verwendung - aber ich dagegen im Allgemeinen nicht so lange, wie es einig Dokumentation. Ich versuche nicht, den Quellcode der Bibliotheken zu lesen Ich verwende, neige ich dazu, sie zu starten Modifizieren (Umschreiben).

In Bezug auf Vergleich mit anderen Sprachen, denke ich, dass Sprache Design hier eine große Rolle spielt. Zum Beispiel in einer starken typisierten Sprache wie Java, auch wenn die Bibliothek eine gute Dokumentation fehlt, können Sie noch viel von der Funktionalität von den Methodensignaturen abzuleiten. Kein *args zu kämpfen.

Wie über eine Sammlung von Beispielen guter Software doc?
Gute Beispiele hierfür könnten ein bisschen schneller als Irrfahrt auf allgemeine Verbesserung führen.
Die Sammlung kann in verschiedene Kategorien aufgeteilt werden, wie:
Inline-doc / help Seite / tutorial / Referenzhandbuch, Web-Seite / Papier, Bilder / keine.
Jeder Eintrag sollte ein paar Worte auf Warum der Rezensent findet es gut.
(Wo: eine Ecke von Stackoverflow)

nikow: Ich kann nur für mich beantworten, die meisten meinen Python (und PHP oder Ruby, alle dynamischen „Scripting“ Sprachen) Arbeit ist getan nur für mich - aber ich loslassen immer auf meinem persönliche Website, wenn jemand anderes nützlich findet, aber ich nie jede Dokumentation oder QA-Prozess durchlaufen, denn solange es funktioniert für mich ich bin glücklich.

Nun, sie sind Open Source. Als solche werden sie auch im Laufe der Zeit entwickeln, wenn sie gut genug sind.

Das ist eine der vielen Schönheiten von Open Source.

Oft gibt es wenig Sinn, viel Dokumentation in schriftlicher Form und „gut“ Code, wenn Sie nicht wissen, ob das Projekt weiterleben. Das wäre nur eine Verschwendung von Zeit.

Edit: Natürlich guten Code zu schreiben würde nie obwohl das erste Mal weh ... Aber vielleicht nur „den Job getan“ ist gut genug, um in vielen Fällen. Ich denke, dass sonst würden wir nicht die große Menge an Möglichkeiten genießen, wenn es um OSS kommt.

Ich glaube, wenn genug Leute eine bestimmte Art und Weise handeln könnte es eine Erklärung, um es sein. Sie sind nicht nur zufällig tun Sie so zu beleidigen.

Qualität von Code * Anzahl der Kommentare * Zeit = konstant

zwei Pick-!

Ich hatte nie ein Problem mit matplotlib; kann nicht sagen, dass ich auf dem Code sah viel - es ist eine schöne Bibliothek ist. Tut, was es tun soll (kostenlos!)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top