Frage

Im Moment entwickle ich hauptsächlich in C/C++, habe aber auch einige kleine Dienstprogramme in Python geschrieben, um einige Aufgaben zu automatisieren, und ich liebe die Sprache wirklich (insbesondere die Produktivität).

Abgesehen von der Leistung (ein Problem, das manchmal dank der einfachen Schnittstelle zwischen Python und C-Modulen gelöst werden könnte): Glauben Sie, dass es für den produktiven Einsatz bei der Entwicklung eigenständiger komplexer Anwendungen geeignet ist (denken Sie beispielsweise an ein Textverarbeitungsprogramm)? oder ein Grafiktool)?

Welche IDE würden Sie vorschlagen?Der mit Python bereitgestellte IDLE reicht meiner Meinung nach selbst für kleine Projekte nicht aus.

War es hilfreich?

Lösung

Wir haben IronPython verwendet, um unsere Flaggschiff-Tabellenkalkulationsanwendung (40kloc-Produktionscode – und es ist Python, was meiner Meinung nach bedeutet, dass die Loc pro Funktion niedrig ist) zu erstellen Resolversysteme, Daher würde ich definitiv sagen, dass es für den produktiven Einsatz komplexer Apps geeignet ist.

Es gibt zwei Möglichkeiten, warum dies für Sie möglicherweise keine nützliche Antwort ist :-)

  1. Wir verwenden IronPython, nicht das üblichere CPython.Dies verschafft uns den großen Vorteil, .NET-Klassenbibliotheken nutzen zu können.Vielleicht stelle ich mich hier auf Flaming ein, aber ich würde sagen, dass ich noch nie wirklich eine CPython-Anwendung gesehen habe, die „professionell“ aussah – daher war der Zugriff auf das WinForms-Widget-Set ein großer Gewinn für uns.IronPython bietet uns außerdem den Vorteil, dass wir problemlos auf C# umsteigen können, wenn wir eine Leistungssteigerung benötigen.(Obwohl wir, um ehrlich zu sein, es getan haben niemals musste das tun.Bisher waren alle unsere Leistungsprobleme darauf zurückzuführen, dass wir dumme Algorithmen gewählt hatten, und nicht darauf, dass die Sprache langsam war. Die Verwendung von C# aus IP ist viel einfacher als das Schreiben einer C-Erweiterung für CPython.
  2. Wir sind ein Extreme-Programming-Shop, also schreiben wir Tests, bevor wir Code schreiben.Ich würde keinen Produktionscode in einer dynamischen Sprache schreiben, ohne vorher die Tests zu schreiben;Das Fehlen eines Kompilierungsschritts muss durch etwas abgedeckt werden, und wie andere Leute bereits betont haben, kann ein Refactoring ohne ihn schwierig sein.(Greg Hewgills Antwort legt nahe, dass er das gleiche Problem hatte.Andererseits glaube ich nicht, dass ich Produktionscode schreiben oder insbesondere umgestalten würde beliebig Sprache heutzutage, ohne vorher die Tests zu schreiben - aber YMMV.)

Re:die IDE – wir kamen ziemlich gut damit zurecht, dass jede Person ihren bevorzugten Texteditor verwendet;Wenn Sie etwas Schwereres bevorzugen, dann WingIDE ist ziemlich angesehen.

Andere Tipps

Darauf gibt es meist zwei Antworten – die religiöse (Ja!Natürlich!Es ist die beste Sprache aller Zeiten!) und die andere religiöse (das ist wohl ein Scherz!Python?NEIN...es ist nicht ausgereift genug).Ich werde vielleicht die letzte Religion (Python?!) überspringen.Verwenden Sie Ruby!).Die Wahrheit ist wie immer alles andere als offensichtlich.

Vorteile:Es ist einfach, lesbar, Batterien im Lieferumfang enthalten und verfügt über viele gute Bibliotheken für so ziemlich alles.Das ausdrucksstarke und dynamische Tippen macht es in vielen Fällen prägnanter.

Nachteile:hat als dynamische Sprache eine weitaus schlechtere IDE-Unterstützung (richtige Syntaxvervollständigung). erfordert (Statische Typisierung, ob explizit in Java oder abgeleitet in SML), sein Objektsystem ist alles andere als perfekt (Schnittstellen, irgendjemand?) und es ist leicht, mit chaotischem Code zu enden, der Methoden hat, die entweder int oder boolean oder object oder eine Art darunter zurückgeben unbekannte Umstände.

Meine Meinung: Ich liebe Python für Skripterstellung, Automatisierung, kleine Webanwendungen und andere einfache, gut definierte Aufgaben.Meiner Meinung nach ist es das bei weitem der beste dynamische Sprache auf dem Planeten.Das heißt, ich würde es tun niemals benutze es beliebig dynamisch typisierte Sprache, um eine Anwendung von beträchtlicher Größe zu entwickeln.

Sagen wir – es wäre in Ordnung, es für Stack Overflow zu verwenden, das drei Entwickler hat und ich schätze, nicht mehr als 30.000 Codezeilen.Bei größeren Dingen: Zuerst wäre Ihre Entwicklung superschnell, und wenn dann Team und Codebasis wachsen, verlangsamen sich die Dinge mehr als mit Java oder C#.Sie müssen den Mangel an Überprüfungen der Kompilierungszeit ausgleichen, indem Sie mehr Unittests schreiben. Refactorings werden schwieriger, weil Sie nie wissen, was Ihr Refactoring kaputt gemacht hat, bis Sie alle Tests oder sogar die gesamte große App usw. ausgeführt haben.

Entscheiden Sie nun, wie groß Ihr Team sein soll und wie groß die App sein soll, wenn sie fertig ist.Wenn Sie 5 oder weniger Personen haben und die Zielgröße ungefähr Stack Overflow beträgt, schreiben Sie in Python.Sie werden in kürzester Zeit fertig sein und mit einer guten Codebasis zufrieden sein.Wenn Sie jedoch zweitens Google oder Yahoo schreiben möchten, sind Sie mit C# oder Java viel besser zurecht.

Randbemerkung zu C/C++, die Sie erwähnt haben:wenn Sie keine leistungskritische Software schreiben (z. B. einen massiven parallelen Raytracer, der drei Monate lang läuft und einen Film rendert) oder ein sehr missionskritisches System (z. B. einen Marslander, der drei Jahre hintereinander fliegt und nur eine Chance hat, richtig zu landen, oder Sie verlieren). 400 Millionen US-Dollar) verwenden Sie es nicht.Für Web-Apps, die meisten Desktop-Apps und die meisten Apps im Allgemeinen ist dies keine gute Wahl.Sie werden Debugging-Zeiger und Speicherzuweisungen in komplexer Geschäftslogik verwenden.

Meiner Meinung nach ist Python mehr als bereit für die Entwicklung komplexer Anwendungen.Ich sehe die Stärke von Python eher auf der Serverseite als beim Schreiben grafischer Clients.Aber schaut mal rein http://www.resolversystems.com/.Sie entwickeln eine ganze Tabelle in Python unter Verwendung des .net-Ironpython-Ports.

Wenn Sie mit Eclipse vertraut sind, werfen Sie einen Blick auf pydev Dies bietet automatische Vervollständigung und Debugging-Unterstützung für Python mit allen anderen Eclipse-Extras wie SVN-Unterstützung.Der Typ, der es entwickelt hat, wurde gerade gekauft aptana, also wird dies eine gute Wahl für die Zukunft sein.

@Marcin

Nachteile:Als dynamische Sprache hat eine viel schlechtere IDE -Unterstützung (ordnungsgemäße Syntaxabschluss erfordert eine statische Typisierung, sei es explizit in Java oder in SML abgeleitet).

Sie haben Recht, dass die statische Analyse möglicherweise keine vollständige Syntaxvervollständigung für dynamische Sprachen bietet, aber ich denke, dass pydev die Aufgabe sehr gut erledigt.Darüber hinaus verfolge ich beim Programmieren von Python einen anderen Entwicklungsstil.Ich habe immer eine Ipython-Sitzung geöffnet und mit einem F5 erhalte ich nicht nur die perfekte Vervollständigung von Ipython, sondern auch Objektselbstbeobachtung und -manipulation.

Wenn Sie jedoch den zweiten Google oder Yahoo schreiben möchten, werden Sie mit C# oder Java viel besser sein.

Google hat gerade Jaiku umgeschrieben um auf App Engine zu arbeiten, alles in Python.Und soweit ich weiß, verwenden sie auch in Google viel Python.

Ich mag Python wirklich, es ist heutzutage normalerweise meine bevorzugte Sprache für kleine (nicht GUI-)Sachen, die ich alleine mache.

Bei einigen größeren Python-Projekten, die ich in Angriff genommen habe, stelle ich jedoch fest, dass es nicht ganz dasselbe ist wie das Programmieren beispielsweise in C++.Ich arbeitete an einem Sprachparser und musste einen AST in Python darstellen.Dies liegt sicherlich im Rahmen dessen, was Python leisten kann, aber ich hatte ein paar Probleme mit der Umgestaltung.Ich habe die Darstellung meines AST und die Methoden und Klassen häufig geändert und festgestellt, dass mir die starke Typisierung fehlte, die mir in einer C++-Lösung zur Verfügung stehen würde.Pythons Ententippen war fast zu flexibel und ich habe festgestellt, dass ich viel hinzugefügt habe assert Code, um zu versuchen, meine Typen zu überprüfen, während das Programm ausgeführt wurde.Und dann konnte ich nicht wirklich sicher sein, dass alles richtig eingegeben wurde, es sei denn, ich hätte eine 100-prozentige Codeabdeckung getestet (was ich damals nicht getan habe).

Eigentlich ist das eine andere Sache, die ich manchmal vermisse.Es ist möglich, in Python syntaktisch korrekten Code zu schreiben, der einfach nicht ausgeführt werden kann.Der Compiler ist nicht in der Lage, Sie darüber zu informieren, bis er den Code tatsächlich ausführt. Daher können in selten verwendeten Codepfaden wie Fehlerhandlern leicht unsichtbare Fehler lauern.Sogar Code, der so einfach ist wie das Drucken einer Fehlermeldung mit einer %-Formatzeichenfolge, kann zur Laufzeit aufgrund nicht übereinstimmender Typen fehlschlagen.

Ich habe Python nicht für GUI-Sachen verwendet, daher kann ich zu diesem Aspekt keinen Kommentar abgeben.

Python gilt (unter Python-Programmierern :) als eine großartige Sprache für Rapid Prototyping.Es gibt nicht viel überflüssige Syntax, die Ihren Denkprozessen im Weg steht, daher fließt die meiste Arbeit, die Sie leisten, in den Code.(Für das Schreiben von gutem Python-Code sind weitaus weniger Redewendungen erforderlich als für das Schreiben von gutem C++.)

Vor diesem Hintergrund vertreten die meisten Python-Programmierer (CPython) die Philosophie „vorzeitige Optimierung ist die Wurzel allen Übels“.Durch das Schreiben von Python-Code auf hoher Ebene (und deutlich langsamer) können Sie die Engpässe mithilfe von C/C++-Bindungen optimieren, wenn Ihre Anwendung kurz vor der Fertigstellung steht.An diesem Punkt wird durch die richtige Profilerstellung klarer, was Ihre prozessorintensiven Algorithmen sind.Auf diese Weise schreiben Sie den Großteil des Codes auf eine sehr gut lesbare und wartbare Weise und ermöglichen gleichzeitig eine spätere Beschleunigung.Aus genau diesem Grund werden Sie mehrere in C geschriebene Python-Bibliotheksmodule sehen.

Die meisten Grafikbibliotheken in Python (d. h.wxPython) sind ohnehin nur Python-Wrapper für C++-Bibliotheken, Sie schreiben also praktisch in ein C++-Backend.

Um Ihre IDE-Frage zu beantworten, SPE (Stanis Python-Editor) ist eine gute IDE, die ich verwendet habe und Finsternis mit PyDev erledigt auch die Arbeit.Beide sind OSS und können daher kostenlos ausprobiert werden!

[Bearbeiten] @Marcin:Haben Sie Erfahrung mit dem Schreiben von > 30.000 LOC in Python?Es ist auch lustig, dass Sie die Skalierbarkeitsbedenken von Google erwähnen, da Google die größten Unterstützer von Python ist!Auch eine kleine Organisation namens NASA verwendet Python häufig ;) siehe „Ein Programmierer und 17.000 Zeilen Code später“.

Den anderen Antworten gibt es nichts hinzuzufügen, außerdem Das ist, wenn Sie sich für Python entscheiden muss Verwenden Sie so etwas wie Pylint was bisher niemand erwähnt hat.

Eine Möglichkeit zu beurteilen, wofür Python verwendet wird, besteht darin, sich anzusehen, welche Produkte derzeit Python verwenden.Das Wikipedia-Seite verfügt über eine lange Liste mit verschiedenen Web-Frameworks, Content-Management-Systemen, Versionskontrollsystemen, Desktop-Apps und IDEs.

Wie es sagt Hier - „Einige der größten Projekte, die Python verwenden, sind der Zope-Anwendungsserver, YouTube und der ursprüngliche BitTorrent-Client.Zu den großen Organisationen, die Python nutzen, gehören Google, Yahoo!, CERN und NASA.ITA verwendet Python für einige seiner Komponenten.“

Kurz gesagt: Ja, es ist „geeignet für den Produktionseinsatz bei der Entwicklung eigenständiger komplexer Anwendungen“.Das gilt auch für viele andere Sprachen, mit unterschiedlichen Vor- und Nachteilen.Welche die beste Sprache für Ihren speziellen Anwendungsfall ist, ist zu subjektiv, um sie zu beantworten, daher werde ich es nicht versuchen, aber oft lautet die Antwort „diejenige, die Ihre Entwickler am besten kennen“.

Refactoring ist bei größeren Codebasen unvermeidlich und das Fehlen statischer Typisierung macht dies in Python viel schwieriger als in statisch typisierten Sprachen.

Und soweit ich weiß, verwenden sie auch in Google viel Python.

Nun, ich hoffe es, der Python-Hersteller arbeitet immer noch bei Google, wenn ich mich nicht irre?

Was die Verwendung von Python angeht, denke ich, dass es eine großartige Sprache für eigenständige Apps ist.Es wird häufig in vielen Linux-Programmen verwendet und es gibt ein paar nette Widget-Sets, die bei der Entwicklung von GUIs helfen.

Es ist eine Freude, Python zu verwenden.Ich verwende es regelmäßig und schreibe auch viel Code für die Arbeit in C#.Das Schreiben von UI-Code in Python hat zwei Nachteile.Einer davon ist, dass es kein einziges UI-Framework gibt, das von der Mehrheit der Community akzeptiert wird.Wenn Sie in C# schreiben, sollen die .NET-Laufzeit- und Klassenbibliotheken alle zusammenarbeiten.Mit Python verfügt jede UI-Bibliothek über eine eigene Semantik, die oft im Widerspruch zur pythonischen Denkweise steht, in der Sie versuchen, Ihr Programm zu schreiben.Ich gebe nicht den Autoren der Bibliothek die Schuld.Ich habe mehrere Bibliotheken ausprobiert (wxwidgets, PythonWin[Wrapper around MFC], Tkinter). Dabei hatte ich oft das Gefühl, dass ich Code in einer anderen Sprache als Python schreibe (obwohl es Python war), weil die Bibliotheken nicht Sie sind nicht gerade pythonisch, sie sind eine Portierung aus einer anderen Sprache, sei es C, C++, tk.

Daher werde ich aufgrund der IDE und der Konsistenz der Bibliotheken UI-Code in .NET (für mich C#) schreiben.Aber wenn ich kann, werde ich Geschäftslogik in Python schreiben, weil es klarer ist und mehr Spaß macht.

Ich weiß, dass ich wahrscheinlich das Offensichtliche sage, aber vergessen Sie nicht, dass die Qualität des Entwicklungsteams und seine Vertrautheit mit der Technologie einen großen Einfluss auf Ihre Lieferfähigkeit haben werden.

Wenn Sie ein starkes Team haben, ist es wahrscheinlich kein Problem, wenn es vertraut ist.Aber wenn es Leute gibt, die eher zwischen 9 und 17 Uhr arbeiten und mit der Technologie nicht vertraut sind, brauchen sie mehr Unterstützung, und Sie müssen anrufen, ob sich die Produktivitätssteigerungen lohnen, ganz gleich, wie hoch die Kosten dieser Unterstützung sind.

Ich hatte nur eine Python-Erfahrung, mein Trash-Cli-Projekt.

Ich weiß, dass wahrscheinlich einige oder alle Probleme von meiner Unerfahrenheit mit Python abhängen.

Ich fand diese Dinge frustrierend:

  1. Es ist schwierig, eine gute kostenlose IDE zu finden
  2. die eingeschränkte Unterstützung für automatisches Refactoring

Darüber hinaus:

  1. Die Notwendigkeit, Pakete und Module auf zwei Ebenen zu gruppieren, verwirrt mich.
  2. Mir scheint, dass es keine weit verbreitete Konvention zur Benennung von Codes gibt
  3. Es scheint mir, dass es einige Dokumente zu Standardbibliotheks-APIs gibt, die unvollständig sind
  4. Die Tatsache, dass einige Standardbibliotheken nicht vollständig objektorientiert sind, ärgert mich

Obwohl mir einige Python-Programmierer sagen, dass sie diese Probleme nicht haben, oder sie sagen, dass es sich nicht um Probleme handelt.

Probieren Sie Django oder Pylons aus, schreiben Sie mit beiden eine einfache App und entscheiden Sie dann, welche am besten zu Ihnen passt.Es gibt andere (wie Turbogears oder Werkzeug), aber diese werden am häufigsten verwendet.

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